Машины Тьюринга
Решение задачМашиной Тьюринга называется пятёрка объектов
T = (A,S,δ,v,μ), где А = {a1 , a2 ,..., an} —алфавит;
S = {s0, s1 ,..., sm} —множество внутренних состояний, причём s0 —заключительное, a. s1 —начальное состояния.
δ: А х S → S — функция перехода;
v : A х S → А — функция выхода;
μ: А х S → {П, Л, Н} — функция управления.
Командой машины Тьюринга называется запись вида akzi, где аp , D, sj- значения на наборе (akzi) функций δ,v,μ соответственно.
Программой машины Тьюринга называется набор всех её команд.
Работа машины Тьюринга связана с бесконечной лентой, разбитой на ячейки, причём в каждой ячейке может быть записан один символ некоторого алфавита, причём λ является символом пустой ячейки.
Работа машины Тьюринга над словом α, записанным на ленте, проходит следующим образом:
машина Тьюринга начинает свою работу всегда в состоянии s1, а её считывающее устройство расположено над первым слева символом слова, записанного на ленте;
считав символ в ячейке, обозреваемой считывающим устройством машины Тьюринга, она печатает в эту ячейку символ, найденный с помощью функции выхода v, двигается вдоль ленты вправо, влево или остаётся на месте, в случае, если функция μ принимает значения П, Л или Н соответственно и переходит в состояние, определяемое с помощью функции перехода δ; при переходе машины Тьюринга в состояние s0 считают, что она закончила работу над словом а и говорят, что машина Тьюринга применима к слову α.
Если машина Тьюринга при работе над словом а не переходит в состояние s0, то говорят, что она не применима к слову α.
Конфигурацией машины Тьюринга называется запись α1bsk α2, где b — символ ячейки, обозреваемой считывающим устройством машины Тьюринга, находящейся в состоянии sk, a α1 и α2 - слова, записанные на ленте соответственно левее и правее символа b.
Кодом машины Тьюринга называется запись набора её команд в алфавите {*,1}, позволяющая однозначно восстанавливать каждую команду.
Машина Тьюринга называется самоприменимой (несамоприменимой), в случае, ели она применима (не применима) к своему коду.
Числовой функцией называется функция вида f: Nk0 → N0, k∈N.
Изображением набора аргументов (x1 , x2 ,..., xλ) называется запись вида
Числовая функция f(x1 , x2 ,..., xk) называется вычислимой по Тьюрингу, если существует машина Тьюринга, применимая к любому слову вида (*), переводящая его в слово 1y+1 , где y = f(x1 , x2 ,..., xk).
Задание 3.1.1
1. Построить машину Тьюринга, применимую ко всем словам x1, x2,..., xn в алфавите {а,b} и переводящую их в слово α.
2. Проверить работу машины Тьюринга над некоторыми словами.
Таблица 3.1.1
№ | α |
1 | x1, x2,..., xn-1xnλxn-1 |
2 | x1λx3...xn-1, если x2 = a, x3, x4,..., xn, если x2 = b |
3 | x1, x2,..., xn, если в данном словаре количество букв а нечетно, bb, если четно |
4 | x1λx3λ...λxn, если n нечетно, x1, x2,..., xn, если n - четно |
5 | x2 a x1 |
6 | x1, x2,..., xn-1xnxn-1...x1 |
7 | baba, если слово начинается на ba, x1, x2,..., xna в других случаях |
8 | bx1xn, если xn = a, bb, если xn = b |
9 | ab, если n - четно, xn, если n - нечетно |
10 | an, если xn-1 = a, x1, x2,..., xn-2ab, если xn-1 = b |
11 | x1x3x2x4x5...xn |
12 | a x1, x2,..., xn-2b |
13 | a, если n < 4, x1, xn, если n > 3 |
14 | a a, если в данном слове число букв нечетно, x1, x2,..., xn-1если четно |
15 | x1, x2,..., xn-1xnxn, если x2 = b |
16 | bab, если слово начинается на ab, x1x2в других случаях |
17 | x1, x2,..., xnb, если n - четно, bx1, x2,..., xn, если - нечетно |
18 | a b, если x2 = a, x1...xn-1, если x2 = b |
19 | aλa, если n - енчетно, x1, x2,..., xn-1xnxn, если n - четно |
20 | an, если x1 = a, x2, если x1 = b |
21 | x1, x2,..., xn-1 |
22 | ax2λx3x4...xn |
23 | x1xnx2x3...xn-1 |
24 | bnx1...xn |
25 | (ab)n |
26 | x1x2...xn-2.xn-1.xn-1xn |
27 | x1, если n - енчетно, xn, если n - четно |
28 | xxn-1...x1 |
29 | x1x2...xn-2λxn-1xn |
30 | ab, если слово начинается на ba, x1...xn-1 в других случаях |
Пример решения задания 3.1.1
Решить задание 3.1.1 для
α = {хт, если xn-1 = а, bn-1, если xn-1 = b, (n>1).
1. Опишем работу алгоритма, решающего эту задачу.
Будем обозначать состояния машины Тьюринга числами 0,1,2..., причём 1 — начальное, а 0 — заключительное состояния.
Вначале с помощью команд (a,1)→aП1; (b,1)→bП1 проходим до конца слова, не изменяя его символов.
Признаком окончания слова будет считывание λ в первом состоянии.
С помощью команд (λ,1)→λЛ2; (a,2)→aЛЗ; (b,2)→bЛЗ движемся влево, не изменяя последнего символа слова.
Если в состоянии 3 считываем символ а, значит, хn-1 = а, нужно стирать все символы слова а, кроме последнего. Это можно сделать с помощью команд (а,3)→ λЛ4; (a,4)→ λЛ4; (Ь,4)→ λЛ4. Если в состоянии 4 считывается λ, значит, вся работа проделана, и пора останавливаться с помощью команды (λ,4)→λH0
Если в состоянии 3 считываем символ b, значит, хn-1 = b, нужно все символы, кроме хn, заменять буквами b. Это делаем с помощью команд (b,3)→b Л5; (a,5)→ b Л5; (b,5)→ b Л5. Если в состоянии 5 считывается λ, значит, все символы исходного слова пройдены, можно переходить в состояние 0 с помощью команды (λ,5) → λH0.
Запишем программу найденной машины Тьюринга в виде таблицы:
Таблица 3.1.1 а
2. Проверим работу построенной машины Тьюринга над сло- вом abba:
Итак, в слове abba предпоследний символ — b, и все буквы исходного слова, кроме последней, заменены буквой b.
Проверим работу построенной машины Тьюринга над словом bbaaa:
В слове bbaaa предпоследний символ — а, и все буквы исходного слова, кроме последней, заменены пустыми символами λ.
Итак, проверка сделана, результат работы машины Тьюринга удовлетворяет требованиям, которые ставились в условии задачи.
Задание 3.1.2
1. Построить машину Тьюринга, вычисляющую числовую функцию f(x1 , x2 ,..., xn).
2. Проверить работу построенной машины над некоторыми наборами значений переменных.
Таблица 3.1.2
№ | f(x1 , x2 ,..., xn) |
1 | f(x,y,z) = x+y |
2 | f(x,y,z) = y+3 |
3 | f(x,y) = {x-y, если x≥y, 0, если x < y} |
4 | f(x,y,z,w) = 4 |
5 | f(x,y) = (0, если x≥y, 1, если x < y |
6 | f(x,y,z) =(z - 3, если z≥3, 0, если z < 3 |
7 | f(x,y,z,w) = y+z+1 |
8 | f(x,y,z) = {0, если x = 0, y, если x≠0 |
9 | f(x,y) = {y-x, если x≤y, 0, если x > y} |
10 | f(x,y) = {2, если y > 1, x, если y≤1} |
11 | f(x,y,z) =y + 3 + z |
12 | f(x,y) = {0, если x≠0, y+1, если x=0} |
13 | f(x,y) = {x, если x - четно , y, если x - нечетно} |
14 | f(x,y) = {x+y, если x≥0, 0, если x< y} |
15 | f(x,y,z) = {z+1, если z≠0, 0, если z=0} |
16 | f(x,y) = {0, если x - четно , 1, если x - нечетно} |
17 | f(x,y,z) =2y |
18 | f(x,y,z) = {w, если x=0, 2, если x≠0} |
19 | f(x,y) = {x-2, если x≥2, 0, если x < 2} |
20 | f(x,y) =2x+1 |
21 | f(x,y) = {x, если x - четно , 0, если x - нечетно} |
22 | f(x,y) = {0, если xy=0, x+y, если xy ≠ 0} |
23 | f(x,y,z) = x+y |
24 | f(x,y) = {1, если x=0, 0, если x ≠ 0} |
25 | f(x,y,z,w) = z+w |
26 | f(x,y) = {y, если x=1, x+2, если x ≠ 1} |
27 | f(x,y,z) = {x+y, если z≠0, y, если z = 0} |
28 | f(x,y,z,w) = {z, если x > 1, w, если x≤1} |
29 | f(x,y,z) = 2z |
30 | f(x,y) = {5, если x + y >2, 0, если x + y ≤ 2} |
Пример решения задания 3.1.2
Решить задание 3.1.2 для f(x,y) = x + 2у.
1. Внутренние состояния машины Тьюринга, которую требуется построить, будем обозначать числами 0,1,2..., причём 1 — начальное, а 0 — заключительное состояния.
Набор значений аргументов (х,у) изображается словом 1x+1λ1y+1.
Аргумент х должен остаться без изменения, этого можно добиться с помощью команды (1,1)→1П1. Когда в первом состоянии встретится символ λ, значит, мы попали на символ, разделяющий изображения аргументов, переходим в состояние 2, а сам символ λ пока оставляем без изменений с помощью команды (λ,1)→λП2.
Далее, набор единиц, изображающий аргументу, проходим до конца. Для этого добавим команды (1,2)→1П2; (λ,2)→λЛЗ.
Теперь с помощью "челночного" алгоритма удвоим количество единиц в блоке, изображающем вторую переменную.
Расширим алфавит, введя метку #. Считая, что k единиц блока продублированы, рассмотрим, как будет дублироваться к +1-я единица. . Заменим очередную единицу из блока, изображающего вторую переменную, меткой # и будем двигаться вправо ((1,3)→#П4; (1,4)→1П4), пока не встретим пустую ячейку, заполним её единицей и пойдём влево ((λ,4)→1Л5; (1,5)→1Л5), пока не встретим метку, заменим её единицей, перейдём к следующему символу слева, вернувшись в состояние 3 ((#,5)→1ЛЗ).
Когда в третьем состоянии считается λ, значит, блок, изображающий вторую переменную, продублирован. Заменим разделяющий символ единицей ((λ,3)→1Л5) и пойдём на начало полученного блока из x + 1 + 1 + 2(y+1) = x + 2y + 4 единиц. Когда в состоянии 5 встретится λ, значит, пора идти вправо, стирать три лишние единицы, ведь для изображения числа х + 2у требуется х + 2у + 1 единиц. Для этого добавим команды (λ,5)→λП6; (1,6)→λП7; (1,7)→λП8; (1,8)→λН0 .
Запишем все команды полученной машины Тьюринга в виде таблицы.
В клетках таблицы, помеченных неопределённым символом — можно вписать любые команды, т. к. до их исполнения дело всё равно не дойдёт.
2. Проверим работу алгоритма над изображением набора пе- ременных (0,1), т. е. над словом 1λ11:
Итак, в результате осталось три единицы, которые являются изображением числа 2.
Заметим, что f(0,1) = 0 + 2⋅1 = 2, так что на ленте получено то, что и нужно было получить.