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


1. Лента, разбитая на клетки, неограниченная слева и справа.

2. Все клетки пусты (содержат символ S0), кроме конечного их числа (могут содержаться символы: S1,S2,...,Sn).

3. Машина может находиться в одном из m состояний (q1,q2,...qm).

4. Каждая инструкция предписывает, что нужно делать в состоянии j, если в считываемой клетке символ Si.

(Остановиться, сдвинуться влево, сдвинуться вправо, записать в клетку символ Si (i=0,...,n)).

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

<текущее состояние, считываемый символ, действие, новое состояние>.

Если для текущего состояния и считываемого символа не предусмотрена инструкция, то машина останавливается.

Пример:

Лента пуста. Поместить три символа S1.

q1,S0,S1,q1; q1,S1,L,q2; q2,S0,S1,q2, q2,S1,L,q3; q3,S0,S1,q3.

Более сложный пример:

Удвоение числа единиц. Обозначим: 0 - пусто, 1 - единственный символ. На ленте несколько единиц подряд. Головка чтения устройства установлена на самую левую единицу. Нужно получить удвоенную последовательность единиц и поместить головку чтения в самую левую позицию массива.

1. q1,1,L,q2 - из начального состояния влево

2. q2,0,L,q3 - видим 0 и идем еще влево

3. q3,0,1,q3 - там тоже 0, меняем его на 1

4. q3,1,L,q4 - видим 1, идем влево

5. q4,0,1,q4 - там тоже 0, меняем на 1

6. q4,1,R,q5 - итак, нарисовали две единицы и уходим вправо

7. q5,1,R,q5 - цикл - смещаемся вправо до 0

8. q5,0,R,q6 - нашли 0 (это разделитель между новым и старым множествами единиц), идем вправо

9. q6,1,R,q6 - цикл - смещаемся вправо до 0

10. q6,0,L,q7 - нашли правый край исходного множества единиц, смещаемся влево

11. q7,1,0,q7 - стираем одну единицу

12. q7,0,L,q8 - и смещаемся влево

13. q8,1,L,q9 - есть еще единицы в исходном множестве, смещаемся влево. Следующая инструкция 15.

14. q8,0,L,q11 - исходное множество единиц исчерпано, переходим на новое множество. Следующая инструкция 20.

15. q9,1,L,q9 - пробегаем все оставшиеся единицы старого множества

16. q9,0,L,q10 - нашли конец, перешли на новое множество

17. q10,1,L,q10 - пробежали все единицы нового множества

18. q10,0,R,q2 - нашли конец, вернулись на последнюю 1

19. q2,1,L,q3 - возникло состояние дописывания двух единиц слева ...Идем к инструкции 3.

20. q11,1,L,q11 - шагаем по новому множеству до конца

21. q11,0,R,q12 - наехали на первый 0 после множества, вернулись. Для состояния 12 нет инструкции. Останов.

 

Множество машин Тьюринга счетно!

Каждая машина Тьюринга на {0,1} задает некоторую функцию, аргументом которой является число единиц начального состояния, значением - число единиц конечного состояния, если оно достигнуто, в противном случае значение не определено.