232 5. Автоматы Уотсона–Крика
прочитанным верхней головкой символом a, и состояние авто-
мата Уотсона–Крика проверяет корректность связи состояний
автомата M, запоминая их. Как только на верхней дорожке
прочитан первый символ c (по крайней мере один такой есть),
автомат M должен перейти в заключительное состояние для
корректного завершения разбора. Подробности конструкции
мы оставляем читателю (см. конструкцию, описанную ниже).
Рассмотрим теперь более простую «прогр амму» для M, в
которой последовательность из |x| копий кода M отделена от
«начальных данных» (строки x). В такой ситуации есть две
проблемы: довольно велика длина этой «программы» и распо-
знаваемая универсальной машиной последовательность в верх-
ней строке оканчивается очень длинным хво стом из бук в c. Обе
этих проблемы исчезнут, если позволить нижней головке авто-
мата Уотсон а–Крика двигаться в обоих направлениях. Тогда
будет достаточно всего одной копии code(M), и лента сможет
принять вид
h
xc
m
code(M )c
p
i
, где m и p — такие целые числа, что
m > 1 и |xc
m
| = | code(M )c
p
| (на верхней нити есть по крайней
мере один символ c отмечающий конец ленты, и, кроме того,
более короткая цепочка дополнена симво лами c до выравн и-
вания длин). И снова конструкция оказалась по существу по-
добной тому, что уже использовалось в конце раздела 3.3, но
теперь мы представим ее более подробно, поскольку интересно
увидеть конкретный автомат Уотсона–Крика, универсальный
в рассмотренном выше смысле.
Сперва договоримся об одном обозначении. Переход в ав-
томате Уотсона–Крика с перемещающейся в обоих направле-
ниях н ижн ей головкой задается в виде пары переписывающих
правил: одно для верхней, а другое для нижней головки; для
наглядности мы пишем их одно над д ругим. Кроме того, состо-
яния, участвующие в этих переходах, должны быть одинаковы
(состояние является характеристикой автомата, а не каждой
из головок).
Для множества конечных автоматов, которые необходимо
моделировать, найдем максимальные множества состояний K