Алгоритмы: машины Тьюринга
Стандартная заключительная конфигурация
Назовем заключительную конфигурацию стандартной, если в ней головка наблюдает первый значащий символ результата, который находится в 1-ой ячейке (т.е. в той же ячейке, где начиналось входное слово).
Лемма 9.1.Для всякой м.Т.  можно построить
эквивалентную м.Т.
  можно построить
эквивалентную м.Т.  , у которой все заключительные конфигурации  стандартны.
, у которой все заключительные конфигурации  стандартны.
Доказательство. Пусть  . Определим  по ней м.Т.
. Определим  по ней м.Т.  , которая удовлетворяет требованиям
леммы.  Положим
, которая удовлетворяет требованиям
леммы.  Положим  , где #  - новый символ.
, где #  - новый символ.  работает
следующим образом.
  работает
следующим образом.
- Отмечает символ в первой ячейке штрихом и переходит в начальное состояние  . .
- Далее работает как  но сохраняет штрих в первой ячейке и вместо пустого символа но сохраняет штрих в первой ячейке и вместо пустого символа записывает #. Для этого для каждой команды  qiaj -> qk alC  из P' записывает #. Для этого для каждой команды  qiaj -> qk alC  из P'
- в P'  добавляется ее дубликат qiaj' -> qk al'C,  в правых частях команд символ  всюду заменяется на #  и для каждой команды  вида всюду заменяется на #  и для каждой команды  вида в P'  добавляется команда  qi  # -> qk al C. После завершения этого этапа все посещенные в процессе работы головкой в P'  добавляется команда  qi  # -> qk al C. После завершения этого этапа все посещенные в процессе работы головкой ячейки составляет непрерывный отрезок, не содержащий пустых символов. ячейки составляет непрерывный отрезок, не содержащий пустых символов.
- Далее  стирает ненужные символы #  слева и справа от блока ячеек, содержащего первую ячейку и все ячейки с символами результата, и переходит в одну из трех следующих конфигураций:где w - результат работы { cal M} (с заменой символов стирает ненужные символы #  слева и справа от блока ячеек, содержащего первую ячейку и все ячейки с символами результата, и переходит в одну из трех следующих конфигураций:где w - результат работы { cal M} (с заменой символов  внутри w  на #)  и w1aw2 = w. внутри w  на #)  и w1aw2 = w.
- Сдвигает в нужном направлении результат, совмещая его начало с ячейкой, помеченной штрихом, заменяет все #    внутри w  на   , снимает штрих в 1-ой ячейке и останавливается. Например, для K1  это достигается с помощью следующих команд (мы предполагаем, что ни одно из используемых ниже состояний , снимает штрих в 1-ой ячейке и останавливается. Например, для K1  это достигается с помощью следующих команд (мы предполагаем, что ни одно из используемых ниже состояний не входит в Q ): не входит в Q ):- поиск левого  конца w:  ; ; (отметили первый символ w ), (отметили первый символ w ), (результат пуст); (результат пуст);
- поиск правого конца w:  , , (в состоянии p  наблюдает последний символ w ); (в состоянии p  наблюдает последний символ w );
- сдвиг результата  на 1 ячейку влево:  pa b' -> pb'aП;  pb' #  -> p1 b'П; pa b' -> pb'aП;  pb' #  -> p1 b'П;
- возврат к правому концу и переход к следующему сдвигу:   
- при сдвиге до 1-ой ячейки замена символов # на  и удаление
штриха: и удаление
штриха: 
  удовлетворяет требованиям леммы. удовлетворяет требованиям леммы.
- поиск левого  конца w: 
Односторонние машины Тьюринга
 Машина Тьюринга   называется односторонней,
если в процессе вычисления  ее головка  никогда не сдвигается левее
начальной ячейки (т.е. всегда находится в ячейках с положительными
номерами).
  называется односторонней,
если в процессе вычисления  ее головка  никогда не сдвигается левее
начальной ячейки (т.е. всегда находится в ячейках с положительными
номерами).
Лемма 9.2. Для всякой м.Т.  можно построить
эквивалентную одностороннюю м.Т.
  можно построить
эквивалентную одностороннюю м.Т.  .
.
Доказательство. Пусть  . Будем считать (используя лемму 1 ), что
. Будем считать (используя лемму 1 ), что  завершает работу в стандартных конфигурациях. Требуемая м.Т.
  завершает работу в стандартных конфигурациях. Требуемая м.Т.  будет моделировать работу
  будет моделировать работу  , используя "многоэтажную" ленту.  Содержимое ячеек
на 1-ом (нижнем) этаже будет на каждом такте совпадать с содержимым
тех же ячеек
, используя "многоэтажную" ленту.  Содержимое ячеек
на 1-ом (нижнем) этаже будет на каждом такте совпадать с содержимым
тех же ячеек  , на 2-ом этаже будет копироваться
содержимое левой полуленты: на нем в i -ой ячейке
, на 2-ом этаже будет копироваться
содержимое левой полуленты: на нем в i -ой ячейке  будет тот же символ, что и в -i -ой ячейке
 
будет тот же символ, что и в -i -ой ячейке  . Кроме того,
на 3-ем этаже в 1-ой ячейке будет стоять отмечающий ее символ #.
Таким образом,
. Кроме того,
на 3-ем этаже в 1-ой ячейке будет стоять отмечающий ее символ #.
Таким образом,  . Работа
. Работа  будет происходить следующим образом.
  будет происходить следующим образом.
- 1) На первом этапе отмечается 1-я ячейка и содержимое входа переписывается на 1-ый этаж трехэтажной ленты: 
- 
Затем  моделирует работу моделирует работу ,
используя для работы на 2-ом этаже дубликаты состояний (со штрихами)
 и команды  со сдвигами в обратном направлении. Для команды  q ,a ->  r , b ,C  из P  и для всех ,
используя для работы на 2-ом этаже дубликаты состояний (со штрихами)
 и команды  со сдвигами в обратном направлении. Для команды  q ,a ->  r , b ,C  из P  и для всех в P' 
поместим команды: в P' 
поместим команды: Кроме того, для  сохраним и старые команды  для работы на впервые посещаемых ячейках: сохраним и старые команды  для работы на впервые посещаемых ячейках: Сдвиги  из 1-ой ячейки налево в -1-ю и обратно моделируются переходом с одного этажа на другой в 1-ой ячейке из 1-ой ячейки налево в -1-ю и обратно моделируются переходом с одного этажа на другой в 1-ой ячейке : : 
- 
После завершения моделирования  результат записан
в начальных ячейках на 1-ом этаже. результат записан
в начальных ячейках на 1-ом этаже. переводит его
в первоначальный алфавит переводит его
в первоначальный алфавит  Проверка правильности работы м.Т.  предоставляется
читателю (см. задачу 9.4). предоставляется
читателю (см. задачу 9.4).
Последовательная и параллельная композиции машин Тьюринга
Используя возможность моделирования произвольной м.Т. на м.Т. со стандартными заключительными конфигурациями, легко установить справедливость следующей леммы о последовательной композиции машин Тьюринга.
Лемма 9.3.( Последовательная композиция ) Пусть м.Т.  вычисляет функцию f(x),
 а м.Т.
  вычисляет функцию f(x),
 а м.Т.  - функцию g(x). Тогда существует м.Т.
  - функцию g(x). Тогда существует м.Т.  вычисляющая функцию h(x) = f(g(x)).
  вычисляющая функцию h(x) = f(g(x)).
Доказательство  Действительно, пусть  а
  а  .
Используя лемму 9.1,  будем считать, что у
.
Используя лемму 9.1,  будем считать, что у  заключительные конфигурации  стандартны. Тогда легко проверить, что функция h 
вычисляется следующей м.Т.
  заключительные конфигурации  стандартны. Тогда легко проверить, что функция h 
вычисляется следующей м.Т.  где
  где  .
.
Покажем, что работу двух м.Т. можно комбинировать так, чтобы в заключительной конфигурации содержались результаты работы каждой из них над независимыми входами.
Лемма 9.4. ( Параллельная композиция ) Пусть м.Т.  вычисляет функцию f(x), а м.Т.
  вычисляет функцию f(x), а м.Т.  - функцию g(x)  и символ *  не входит
в алфавит м.Т.
  - функцию g(x)  и символ *  не входит
в алфавит м.Т.  . Тогда существует м.Т.
. Тогда существует м.Т.  которая по любому входу вида x*y   
выдает результат f(x)*g(y), т.е.
 вычисляет функцию H(x*y) = f(x)*g(y).
  которая по любому входу вида x*y   
выдает результат f(x)*g(y), т.е.
 вычисляет функцию H(x*y) = f(x)*g(y).
Доказательство. Пусть  и
  и  - м.Т.  Не ограничивая общности,  будем считать, что эти машины односторонние  (по Лемме 2). Определим теперь м.Т.
   - м.Т.  Не ограничивая общности,  будем считать, что эти машины односторонние  (по Лемме 2). Определим теперь м.Т.  , которая работает следующим образом.
, которая работает следующим образом.
- Начав в конфигурации (p0x*y), находит 1-ый символ y
- и переходит в конфигурацию (x*q02y).
- Работая как  вычисляет g(y)    и переходит при этом в конфигурацию  (x*qf2g(y)). вычисляет g(y)    и переходит при этом в конфигурацию  (x*qf2g(y)).
- Переписывает *x после g(y) и переходит в конфигурацию g(y)*q01x).
- Работая как  вычисляет f(x)  и переходит при этом в конфигурацию  (g(y)*qf1f(x). вычисляет f(x)  и переходит при этом в конфигурацию  (g(y)*qf1f(x).
- Меняет  и и местами и останавливается. местами и останавливается.
Корректность этапов 2 и 4 следует из односторонности  и
  и  а реализация этапов 1, 3 и 5 достаточно очевидна (см. задачу  9.6).
  а реализация этапов 1, 3 и 5 достаточно очевидна (см. задачу  9.6).
Построенную в этой лемме м.Т.  , полученную в результате параллельной композиции
, полученную в результате параллельной композиции   и
  и  , будем обозначать
как
, будем обозначать
как  . Здесь индекс *  указывает
символ, которым отделяются аргументы
. Здесь индекс *  указывает
символ, которым отделяются аргументы  и
  и  на ленте
 
на ленте   . Этот символ может быть любым символом, не входящим в алфавит
машины
. Этот символ может быть любым символом, не входящим в алфавит
машины  . Например,
. Например,  будет обозначать параллельную композицию 
машин
  будет обозначать параллельную композицию 
машин  и
  и  , в которой их аргументы отделены
символом #.
, в которой их аргументы отделены
символом #.
Конструкцию параллельной композиции можно обобщить на произвольное конечное число машин Тьюринга.
Следствие. Пусть  - машины Тьюринга,
вычисляющие функции f1, ... , fm, соответственно. Пусть символ *  не входит в алфавиты этих машин. Тогда существует м.Т.
  - машины Тьюринга,
вычисляющие функции f1, ... , fm, соответственно. Пусть символ *  не входит в алфавиты этих машин. Тогда существует м.Т.  , перерабатывающая любой
вход вида x1*x2* ... *xm
, перерабатывающая любой
вход вида x1*x2* ... *xm   в выход f1(x1)*f2(x2)* ... *fm(xm).
 
 в выход f1(x1)*f2(x2)* ... *fm(xm).
Действительно, в качестве  можно взять м.Т., определяемую
выражением
  можно взять м.Т., определяемую
выражением  .\\
Будем обозначать эту машину Тьюринга  как
.\\
Будем обозначать эту машину Тьюринга  как  .
.
