Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 1684 / 243 | Оценка: 5.00 / 5.00 | Длительность: 14:18:00
ISBN: 978-5-94774-714-0
Специальности: Программист, Математик
Лекция 4:

Конечные автоматы: преобразователи и распознаватели

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Пример 4.4. Рассмотрим язык L, состоящий из всех слов в алфавите \Sigma =\{ a, b\}, которые начинаются на aa и содержат нечетное число символов b.

Для выделения слов, начинающихся на aa, создадим начальное состояние q0, которое первый символ a будет переводить в состояние q1, а второй символ a будет переводить q1 в состояние q2. Ясно, что все слова, которые начинаются на ab, ba, bb, сами не входят в язык L и все их продолжения также ошибочны. Заведем для них "ошибочное" состояние q!. Остальные слова естественно разбиваются на два класса: те, в которых четное число символов b, и те, в которых число таких символов нечетно (они и принадлежат L ).

 Диаграмма автомата A

Рис. 4.2. Диаграмма автомата A

Так как после получения aa число b четно, то для представления слов первого класса будем использовать состояние q2, а для представления слов второго - создадим состояние q3, которое и будет заключительным. В результате получаем автомат, диаграмма которого представлена на рис. 4.2. (Мы отмечаем на рисунках диаграмм начальное состояние стрелкой \to, а заключительные состояния - двумя окружностями).

Проверим работу этого автомата, например, на входном слове w=aaababa. При его чтении порождается следующая последовательность конфигураций:

(q_0, aaababa) \vdash_A(q_1, aababa) \vdash_A (q_2, ababa) \vdash_A (q_2, baba)\\
\vdash_A (q_3, aba) \vdash_A (q_3, ba) \vdash_A (q_2, a) \vdash_A (q_2, \varepsilon)

Заключительное состояние этого вычисления q2 не является заключительным. Следовательно, w \notin  L_{A}. Если же мы рассмотрим в качестве входа слово w1= w b= aaababab, то, продолжив на один шаг приведенное выше вычисление, получим, что (q_0, w_1) \vdash_A^* (q_3, \varepsilon). Следовательно, w_{1} \in  L_{A}.

Мы проверили, что на двух входах автомат A работает верно. Как установить, что он построен корректно, т.е. верно работает на всех входных словах и распознает L? Типичная схема доказательства правильности конечного автомата такова:

  1. определить (описать) для каждого состояния q \in  Q язык L(q), который состоит из слов, переводящих начальное состояние q0 в q ;
  2. доказать, что это определение правильное, используя индукцию по длине входного слова ;
  3. показать, что L = \cup _{q \in  F L(q)}.

Применим эту схему к доказательству правильности, построенного выше автомата A. Языки, связанные с состояниями этого автомата, фактически, уже были определены при его построении. Уточним их:

\begin{array}{l}
L(q_0) = \{\varepsilon\},\\ 
L(q_1) = \{ a\},\\ 
L(q_2) = \{w\ |\ \textit{ слова, начинающиеся с } aa \textit{ с четным числом букв } b\},\\ 
L(q_3) = L,\\ 
L(q_!) = \{w\ |\ \textit{ слова, не начинающиеся с } aa \}.
\end{array}

Правильность определения языков L(q0), L(q1) и L(q!) следует непосредственно из определения A. Самое короткое слово, переводящее q0 в q2 - aa, и оно принадлежит L(q2). Аналогично, самое короткое слово, переводящее q0 в q3 - aab, и оно принадлежит L(q3). Предположим теперь, что для каждого слова w длины <= n выполнено условие (*):

w переводит начальное состояние q0 в q_{i} (i=2,3) \Leftrightarrow  w \in  L(q_{i}).

Покажем, что оно будет выполнено и для всех слов длины n +1.

Пусть |w|=n+1. Тогда w = w' \alpha, где \alpha  \in  \{ a, b \}. Так как |w'|=n, то для w' выполнено условие (*). Поэтому, если w' переводит q0 в q2, то это слово начинается с aa и содержит четное число b. При \alpha  =a слово w переводит q0 в q2 и также начинается с aa и содержит четное число b, а при \alpha  = b слово w переводит q0 в q3, начинается с aa и содержит нечетное число b, т.е. принадлежит L.

Аналогично, если w' переводит q0 в q3, то это слово начинается с aa и содержит нечетное число b. При \alpha  =a слово w также переводит q0 в q3 и также начинается с aa и содержит нечетное число b, а при \alpha  = b w переводит q0 в q2, оно начинается с aa и содержит четное число b. Обратно, если \alpha  =a, то слово w переводит q0 в q_{i} (i=2,3) \Leftrightarrow w' переводит q0 в qi\ (i=2,3) и условие (*) выполнено, так как четность числа букв b в w и в w' одинакова. Если же \alpha  = b, то из определения автомата A следует, что слово w переводит q0 в q_{2} \Leftrightarrow w' переводит q0 в q3 и w переводит q0 в q_{3} \Leftrightarrow w' переводит q0 в q2. Так как четность числа букв b в w и в w' разная, то и в этом случае условие (*) выполнено. Для завершения доказательства осталось заметить, что единственным заключительным состоянием автомата A является q3 и поэтому LA = L(q3) = L.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >