Россия, Москва, МГУПИ |
Конечные автоматы: преобразователи и распознаватели
Пример 4.4. Рассмотрим язык L, состоящий из всех слов в алфавите ,
которые начинаются на aa и содержат нечетное число символов b.
Для выделения слов, начинающихся на aa, создадим начальное состояние q0, которое первый символ a будет переводить в состояние q1, а второй символ a будет переводить q1 в состояние q2. Ясно, что все слова, которые начинаются на ab, ba, bb, сами не входят в язык L и все их продолжения также ошибочны. Заведем для них "ошибочное" состояние q!. Остальные слова естественно разбиваются на два класса: те, в которых четное число символов b, и те, в которых число таких символов нечетно (они и принадлежат L ).
Так как после получения aa число b четно, то для представления слов первого
класса будем использовать состояние q2, а для представления слов второго - создадим состояние q3, которое и будет заключительным. В результате получаем автомат, диаграмма которого
представлена на рис. 4.2. (Мы отмечаем на рисунках диаграмм начальное состояние стрелкой
а заключительные состояния - двумя окружностями).
Проверим работу этого автомата, например, на входном слове w=aaababa. При его чтении порождается следующая последовательность конфигураций:

Заключительное состояние этого вычисления q2 не является заключительным.
Следовательно, . Если же мы рассмотрим в качестве входа слово w1= w b= aaababab, то, продолжив на один шаг приведенное выше вычисление,
получим, что
. Следовательно,
.
Мы проверили, что на двух входах автомат A работает верно. Как установить, что он построен корректно, т.е. верно работает на всех входных словах и распознает L? Типичная схема доказательства правильности конечного автомата такова:
- определить (описать) для каждого состояния
язык L(q), который состоит из слов, переводящих начальное состояние q0 в q ;
- доказать, что это определение правильное, используя индукцию по длине входного слова ;
- показать, что
.
Применим эту схему к доказательству правильности, построенного выше автомата A. Языки, связанные с состояниями этого автомата, фактически, уже были определены при его построении. Уточним их:

Правильность определения языков L(q0), L(q1) и L(q!) следует непосредственно из определения A. Самое короткое слово, переводящее q0 в q2 - aa, и оно принадлежит L(q2). Аналогично, самое короткое слово, переводящее q0 в q3 - aab, и оно принадлежит L(q3). Предположим теперь, что для каждого слова w длины <= n выполнено условие (*):
w переводит начальное состояние q0 в .
Покажем, что оно будет выполнено и для всех слов длины n +1.
Пусть |w|=n+1. Тогда , где
.
Так как |w'|=n, то для w' выполнено условие (*).
Поэтому, если w' переводит q0 в q2, то это слово
начинается с aa и содержит четное число b. При
слово w переводит q0 в q2 и также начинается с aa и содержит четное число b,
а при
слово w переводит q0 в q3,
начинается с aa и содержит нечетное число b, т.е. принадлежит L.
Аналогично, если w' переводит q0 в q3, то это слово
начинается с aa и содержит нечетное число b. При слово w также переводит q0 в q3 и также начинается с aa и содержит нечетное число b,
а при
w переводит q0 в q2, оно
начинается с aa и содержит четное число b.
Обратно, если
, то слово w переводит q0 в
w' переводит q0 в qi\ (i=2,3) и условие (*) выполнено, так как четность числа
букв b в w и в w' одинакова. Если же
, то из определения автомата A
следует, что слово w переводит q0 в
w' переводит q0 в q3 и w переводит q0 в
w' переводит q0 в q2.
Так как четность числа букв b в w и в w' разная, то и в этом случае условие (*) выполнено. Для завершения доказательства осталось заметить,
что единственным заключительным состоянием автомата A является q3 и поэтому LA = L(q3) = L.