Конечные автоматы, регулярные выражения, нерегулярные языки
←
→
Транскрипция содержимого страницы
Если ваш браузер не отображает страницу правильно, пожалуйста, читайте содержимое страницы ниже
Конечные автоматы, регулярные выражения, нерегулярные языки 6.02.2013 1 Конечные автоматы и регулярные языки Языком будем называть множество строк над некоторым алфавитом. Определение 1. Конечный автомат — это пятерка (Q, Σ, δ, q0 , F ), где Q — конечное множество состояний, Σ — конечное множество, называемое алфавитом, δ : Q × Σ → Q — функция переходов, q0 ∈ Q — начальное состояние, F ⊆ Q — множество заключительных состояний. Автомат M = (Q, Σ, δ, q0 , F ) допускает строку w = w1 w2 . . . wn , где wi ∈ Σ, если существует последовательность состояний r0 , r1 , . . . , rn , та- кая что 1. r0 = q0 , 2. δ(ri , wi+1 ) = ri+1 для i = 0, . . . , n − 1, 3. rn ∈ F . Автомат M распознает язык A = {w | M допускает w}. Определение 2. Язык называется регулярным, если его распознает некоторый конечный автомат. 1
Недетерминированный конечный автомат отличается от детерми- нированного функцией перехода, которая имеет следующий вид: δ : Q × (Σ ∪ {}) → P(Q), где P(Q) — множество всех подмножеств Q, а — пустая строка. Переход по wi ∈ Σ∪{} из состояния ri в состояние rj разрешен, если rj ∈ δ(wi , ri ). Для любого недетерминированного автомата можно построить детер- минированный автомат, распознающий тот же язык. Регулярные языки замкнуты относительно следующих операций: Объединение: A ∪ B = {w | w ∈ A или w ∈ B} Пересечение: A ∩ B = {w | w ∈ A и w ∈ B} Дополнение: A = {w ∈ Σ? | w 6∈ A} Обращение: AR = {a1 . . . ak | ak . . . a1 ∈ A} Конкатенация: A ◦ B = {vw | v ∈ A и w ∈ B} Замыкание Клини: A∗ = {w1 . . . wk | k ≥ 0 и wi ∈ A для всех i} 2 Регулярные выражения Определение 3. R называется регулярным выражением над алфави- том Σ, если R — это 1. a, где a ∈ Σ, или 2. , где — пустая строка, или 3. ∅, или 4. (R1 ∪ R2 ), где R1 и R2 — регулярные выражения, или 5. (R1 R2 ), где R1 и R2 — регулярные выражения, или 6. (R1∗ ), где R1 — регулярное выражение. a ∈ Σ соответствует языку {a}; 2
соответствует языку {}; ∅ соответствует языку ∅. Если R1 и R2 — регулярные выражения, соответствующие языкам L1 и L2 , то (R1 ∪ R2 ) соответствует языку L1 ∪ L2 ; (R1 R2 ) соответствует языку L1 ◦ L2 ; (R1∗ ) соответствует языку L?1 . L(R) — язык, которому соответствует регулярное выражение R. Регулярное выражение R допускает строку w (w соответствует R), если w ∈ L(R). Пример 1. Строка 01010 соответствует выражению (01)∗ 0. Если, как в предыдущем примере, скобки опускают, то подразумева- ется следующий приоритет операций: R? , R1 R2 , R1 ∪ R2 . Пример 2. R1∗ R2 ∪ R3 = ((R1? )R2 ) ∪ R3 Пример 3. Пусть Σ = {0, 1}. Язык {w | w содержит ровно одно вхождение 1} соответствует выражению 0∗ 10∗ . Выражение ∅? описывает язык {}. Язык {w | w содержит не менее трех символов, причем третий символ — 0} соответствует выражению (0 ∪ 1)(0 ∪ 1)0(0 ∪ 1)∗ . Язык {w | на нечетных позициях в w находится 1} соответствует выражению (1(0 ∪ 1))∗ (1 ∪ ). 3
Теорема 1. По регулярному выражению R можно построить недетер- минированный конечный автомат N , распознающий язык L(R). Доказательство. Докажем по индукции. Базис: R содержит один сим- вол. В этом случае R имеет вид: , или ∅, или a, где a ∈ Σ. Несложно построить автомат, распознающий L(R). Шаг индукции: допустим, что каждое регулярное выражение длины меньше k > 1 соответствует некоторому регулярному языку и рассмот- рим выражение R длины k. Три варианта: R = R1 ∪ R2 : По предположению индукции L1 = L(R1 ) и L2 = L(R2 ) — регулярные языки. Тогда L(R) = L(R1 ∪ R2 ) = L1 ∪ L2 явля- ется регулярным языком, так как множество регулярных языков замкнуто относительно объединения. R = R1 R2 : По предположению индукции L1 = L(R1 ) и L2 = L(R2 ) — регулярные языки. Тогда L(R) = L(R1 R2 ) = L1 ◦ L2 является регу- лярным языком, так как множество регулярных языков замкнуто относительно конкатенации. R = (R1 )∗ : Аналогично. Теорема 2. Любому регулярному языку соответствует некоторое ре- гулярное выражение. Доказательство. Доказательство состоит в преобразовании детермини- рованного автомата, распознающего язык L: будем постепенно удалять состояния и заменять метки на дугах регулярными выражениями. То, что получается в результате таких преобразований, называют обобщен- ным недетерминированным автоматом. Добавим к конечному автомату уникальные и не совпадающие на- чальное и заключительное состояния. Свяжем новое начальное состоя- ние с начальным состоянием исходного автомата и все заключительные состояния исходного автомата — с новым заключительным состоянием, пометив соответствующие дуги регулярным выражением . Каждую ду- гу исходного автомата, помеченную символами c1 , . . . , ck пометим регу- лярным выражением (c1 | . . . |ck ). Если между двумя состояниями исход- ного автомата отсутствует дуга, соединим их в новом автомате дугой, помеченной регулярным выражением ∅. 4
Пока у автомата более двух состояний, выбираем какое-либо внутрен- нее состояние, удаляем его и помечаем дуги регулярными выражениями, соответствующими путям, проходившим через удаленное состояние. Обо- значим за R(s, t) регулярное выражение на дуге из s в t. При удалении состояния q дуга из состояния i в состояние j помечается следующим регулярным выражением: (R(i, q)R(q, q)∗ R(q, j) ∪ R(i, j)). Таким образом, регулярные языки ⇐ по определению ⇒ детерми- нированные конечные автоматы ⇐⇒ недетерминированные конечные автоматы ⇐⇒ регулярные выражения. 3 Нерегулярные языки Язык {w | w содержит одинаковое количество 1 и 0} не является регулярным, но язык {w | w содержит одинаковое число вхождений 01 и 10} является регулярным. Лемма 1 (о разрастании). Если язык A является регулярным, то для некоторого числа p верно, что любая строка s ∈ A, содержащая не менее p символов, может быть разделена на три части: s = xyz таким образом, что 1. xy i z ∈ A для всех i ≥ 0; 2. |y| > 0; 3. |xy| ≤ p. Воспользуемся леммой о разрастании для доказательства нерегуляр- ности языка B = {0n 1n | n ≥ 0}. Допустим, что B — регулярный язык. Пусть w = 0p 1p . Так как B — регулярный язык, w можно представить в виде w = xyz, где |y| > 0 и xy i z ∈ B для любого i ≥ 0. Если y целиком 5
состоит из нулей, то xyyz содержит больше нулей, чем единиц. Если y целиком состоит из единиц, то xyyz содержит больше единиц, чем нулей. Если y содержит как единицы так и нули, то xyyz не соответствует 0∗ 1∗ и, следовательно, не соответствует 0n 1n . Получили противоречие. 2 Докажем, что язык B = {1n | n ≥ 0} не является регулярным. До- 2 пустим, что B — регулярный язык. Пусть w = 1p . Так как B — регу- лярный язык, w можно представить в виде w = xyz, где |y| > 0, |xy| ≤ p 2 и xy i z ∈ B для любого i ≥ 0. Тогда xyyz = 1p +|y| ∈ B. Поскольку 0 < |y| ≤ p, получаем p2 + |y| ≤ p2 + p < p2 + 2p + 1 = (p + 1)2 и p2 < p2 + |y| < (p + 1)2 . Следовательно, p2 + y не является квадратом никакого числа и xyyz = 2 1p +|y| 6∈ B. Значит, вопреки нашему предположению, B не является ре- гулярным. 6
Вы также можете почитать