7.2. Машины Тьюринга

Рассмотрим гипотетическую «машину», имеющую конечное множество Q внутренних состояний и одну бесконечную ленту, разделенную на ячейки, по которой перемещается устройство для чтения и записи, именуемое головкой. В каждый из такт времени головка читает содержимое текущей ячейки, затем пишет в эту ячейку новый символ и перемещается влево или вправо, или остается на месте. Текущей ячейкой становится новая ячейка, она будет той, на которую указывает головка. Символы принадлежат конечному алфавиту А.

Пример 1

Алфавит состоит из цифр 0,1,…,9. На ленте написано слово:

2

0

9

3

1

и головка показывает на 9. Тогда в следующий такт времени головка может записать вместо 9 цифру 8 и переместиться влево. После этого она будет показывать на 0.

Перейдем к точным определениям.

Машиной Тьюринга T = (A,Q,p) называется тройка, состояний из непустых конечных множеств A = {a0,a1,…,an}, Q = {q0,q1,…,qm} и частичной функции p: Q ´ A®Q ´ A ´ {L,S,R}.

Здесь {L,S,R} – множество, состоящее из трех элементов. Оно одинаково для всех машин Тьюринга и интерпретируется командами перемещения головки: L – влево, R – вправо, S – стоять на месте.

Множество А называется внешним алфавитом, его элементы – буквами. Буквы a0 и a1 для всех машин Тьюринга одинаковы: a0=0, a1=1. Элементы q0,…,qm называются внутренними состояниями.

Частичная функция p называется программой и записывается или с помощью прямоугольной таблицы, в которой в клетке (qi,qj) записывается тройка p(qi,qj) Î Q ´ A ´ {L, S, R}, или с помощью списка команд вида:

· qiaj®qkae означающей (qk,ae,S)=p(qi,aj),

· qiaj®qkaeR означающей (qk,ae,R)=p(qi,aj),

· qiaj®qkaeL означающей (qk,ae,L)=p(qi,aj).

Эти команды обозначим через T(i,j).

Машиным словом, или конфигурацией, называется слово вида: aqkaeb, где  0 £ k £ m,  0 £ e £ n,  a и b – слова (возможно, пустые), составленные из букв алфавита А. Для обозначения слова аа…а, в котором буква а повторяется x раз, пишем: ах.

Машинное слово: aqkaeb интерпретируется как положение, при котором головка указывает на символ ae, машина находится во внутреннем состоянии qk, слева от теку

щей ячейки находятся символы, составляющие слово a, а справа – слово b. В примере 1 машинное слово равно: 20qi931 для некоторого i.

Пусть задана машина Тьюринга Т и машинное слово M = aqiajb, где 0 £ i £m. Обозначим через MT’ слово, которое получается (за один такт) по правилам:

1) для i = 0 положим MT’ = M;

2) для i > 0 выполняем одно из следующих трех преобразований:

· если T(i,j) = qiaj®qkae, то MT’ = aqkaeb;

· в случае T(i,j) = qiaj® qkaeR,

если b не пусто, то MT’ = aqeakb, иначе MT ’= aqeaka0;

· в случае T(i,j) = qiaj®qkaeL,

если a=a1as для некоторых a1 и as, то MT’ = a1qkasaeb,

иначе (т.е. если a пусто) MT’=qka0aeb (дополнительная инструкция).

Положим: MT0 = M, MT(n+1) = (MT(n))’.

Будем говорить, что машина Т перерабатывает машинное слово М в слово М1, если MT(n) = M1 для некоторого n ³ 0. Пишем: М ÞT M1, если Т перерабатывает М в М1, и при этом не используется дополнительная инструкция (из правил образования слова MT’).

Говорим, что машина Т вычисляет частичную функцию f:Nn®N, если выполнены следующие условия:

· если (x1,…,xn)ÎDom(f), то машина Т останавливается, т.е. перерабатывает слово q101x10…1xn0 в некоторое слово aq0b, и при этом aq0b содержит f(x1,…,xn) вхождений символа  1 (здесь символы  x1, … , x обозначены через x1,  …, xn) ;

· если (x1,…,xn) не принадлежит Dom(f), то машина, начиная со слова M = q101x10…1xn0, работает бесконечно, т.е. q0 не входит в MT(n) ни для каких n ³ 0.

Говорим, что машина Т правильно вычисляет частичную функцию f:Nn®N, если выполнены условия:

· если (x1,…,xn)ÎDom(f), то q101x10…1xnTq001f(x1,…,xn)0…0;

· в противном случае машина, начиная со слова q101x10…1xn0, работает бесконечно.

Частичная функция f называется (правильно) вычислимой, если существует машина Тьюринга, которая (правильно) вычисляет f.

Пример 2

Пусть машина Тьюринга T = {A, Q, p},  A = {0,1},  Q = {q0,q1,q2} задана с помощью таблицы:

q0

q1

q2

0

q20R

q01S

1

q21R

Рассмотрим слово: M = q1011…10. На первом шаге выполняется команда q10®q20R. Получаем: MT = 0q211…10. Затем, до тех пор, пока слово не превратится в слово  011…1q20, будет выполняться команда q21®q21R. После этого будет выполнена команда q20®q01, и машина остановится, ибо q0 соответствует состоянию остановки. Входное слово, состоящее из x единиц, означает, что аргументом вычисляемой функции является число x. Поскольку на выходе получается x + 1 подряд идущих единиц, то машина вычисляет функцию: s(x) = x + 1.

Пример 3

Вычисление функции: s(x) = x+1 в примере 2 не является правильным. Построим машину Тьюринга для правильного вычисления:

q0

q1

q2

q3

q4

0

q20R

q31R

q40L

q00L

1

q21R

q41L

q41L

Упражнение

Построить машину Тьюринга, правильно вычисляющую функцию: o(x) = 0.

Можно построить машины Тьюринга для правильного вычисления функций:

Imn(x1,…,xn), 1 £ m  £ n.

С помощью построения различных машин Тьюринга доказывается, что операторы композиции, примитивной рекурсии и минимизации переводят правильно вычислимые функции в правильно вычислимые. Отсюда вытекает правильная вычислимость всех частично рекурсивных функций. Более того, справедливо и обратное утверждение.

Теорема 1. Частичная функция правильно вычислима тогда и только тогда, когда она частично рекурсивна.

Тезис Чёрча и алгоритмически неразрешимые проблемы

Поскольку класс частично рекурсивных функций совпадает с классом правильно вычислимых, то тезис Чёрча равносилен предположению о том, что для любой алгоритмически вычислимой функции существует правильно вычисляющая её машина Тьюринга.

Применим это для доказательства алгоритмической неразрешимости проблемы остановки машины Тьюринга, которая заключается в нахождении алгоритма, определяющего по машине Тьюринга и начальным данным, остановится ли машина через конечное число шагов. Так как машина Тьюринга задается с помощью конечного набора символов и слов, то число машин Тьюринга счетно и может быть выписано в последовательность: T0, T1, … .

Теорема (о проблеме остановки). Пусть T0,T1, T2,… последовательность, перечисляющая все машины Тьюринга, h(n,k) – функция, принимающая значение 1, если машина Tn останавливается, начиная работу с машинного слова q101k0,  и принимающая значения  h(n,k) = 0 в других случаях. Тогда функция h:N2®N не является частично рекурсивной. Иными словами, нет алгоритма, определяющего, остановится ли машина Тьюринга, если на вход ей подать число k.

Доказательство. От противного. Пусть функция h(n,k) частично рекурсивна. Тогда частичная функция:

f(n) = My[h(n,n) + y = 0]

тоже частично рекурсивна. Существует номер m такой, что f правильно вычисляется с помощью машины Tm. Тогда f(m) = 0, если и только если h(m,m) = 0. Согласно определению функции h  равенство h(m,m) = 0 имеет место тогда и только тогда, когда машина Tm не останавливается, начиная со слова q101m0. Но f правильно вычисляется с момощью Tm , значит, Tm  не остановится, начиная с m, если и только если f(m) не определено. Получаем противоречие: f(m) = 0, если и только если f(m) не определено, Следовательно, h – не частично рекурсивна.