Глава 20

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

[16/94%]
Показать
LaTeX
Задача 302

Построить машину Тьюринга, выполняющую следующую задачу: по входу, состоящему из одного или нескольких слов w1Λ…Λwnw_{1} \Lambda \ldots \Lambda w_{n} в алфавите Σ\Sigma (возможно, что n=1n=1), построить выход, удвоив последнее из слов: w1Λ…ΛwnΛwnw_{1} \Lambda \ldots \Lambda w_{n} \Lambda w_{n}.

?
Задача 303

Построить машину Тьюринга, сравнивающую два входных слова в алфавите {a,b,c}\left\{ a, b, c\right\} лексикографически. Она должна вычислять словарную функцию:

f(x,y)={a, если x<yb, если x=yc, если y<x f(x, y)= \begin{cases} a, & \text{ если } x<y \\ b, & \text{ если } x=y \\ c, & \text{ если } y<x\end{cases}
?
Задача 304

Построить программы машин Тьюринга, вычисляющих следующие словарные функции в алфавите Σ={a,b,c}\Sigma =\left\{ a, b, c\right\} :

?
(а)

циклическая перестановка букв: f(xw)=wx,x∈Σf(x w)=w x, x \in \Sigma;

(б)

циклическая перестановка слов: f(w1,…,wn)=(w2,…,wn,w1)f\left(w_{1}, \ldots , w_{n}\right)=\left(w_{2}, \ldots , w_{n}, w_{1}\right);

(в)

«переворачивание» последовательности слов: f(w1,…,wn)=(wn,…,w1)f\left(w_{1}, \ldots , w_{n}\right)=\left(w_{n}, \ldots , w_{1}\right);

(г)

удвоение каждой буквы: f(x1…xn)=x1x1…xnxnf\left(x_{1} \ldots x_{n}\right)=x_{1} x_{1} \ldots x_{n} x_{n};

(д)

нахождение образа при гомоморфизме φ:φ(a)=a,φ(b)=cb,φ(c)=ε\varphi : \varphi (a)=a, \varphi (b)=c b, \varphi (c)=\varepsilon;

(е)

удаление всех одиночных букв aa, стоящих на чётных позициях;

(ж)

проверка, содержат ли два слова одно и то же количество букв aa (результат равен 1, если ответ «да», 0, если «нет»);

(з)

проверка, является ли слово палиндромом (то есть симметричным);

(и)

проверка, есть ли в слове две последовательности букв aa одной и той же длины;

(к)

проверка, образуют ли в слове количества букв a,ba, b и cc возрастающую арифметическую прогрессию.

Задача 305

Построить машину Тьюринга для перевода записи числа из двоичной системы в унарную, входной алфавит {0,1}\left\{ 0,1\right\}.

?
Задача 306

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

?
(а)

x+yx+y;

(б)

⌊x−y⌋\lfloor x-y\rfloor

(в)

xyx y

(г)

сравнение x<yx<y;

(д)

возведение в степень: xyx^{y};

(е)

квадратный корень: ⌊x⌋\lfloor \sqrt{x}\rfloor;

(ж)

логарифм: ⌊log⁡2x⌋;\left\lfloor \log_{2} x\right\rfloor ;

(з)

деление нацело: ⌊x/y⌋\lfloor x / y\rfloor;

(и)

остаток: x mod yx \bmod y;

(к)

функция выбора mm-го аргумента: idm,m\mathrm{id}_{m}, m — заранее заданная константа.

Задача 307

Даны машины Тьюринга со стандартной заключительной конфигурацией Mi\mathfrak {M}_{i}, каждая из которых вычисляет словарную функцию fi(x)f_{i}(x) за время ti(x)t_{i}(x), i=1,…,ni=1, \ldots , n. Указать, как построить, и оценить время работы

?
(а)

машины M1;…;Mn\mathfrak {M}_{1} ; \ldots ; \mathfrak {M}_{n}, вычисляющей функцию g1(x)=fn(…f1(x)…)g_{1}(x)=f_{n}\left(\ldots f_{1}(x) \ldots \right);

(б)

машины par⁡(a,M1,…,Mn)\operatorname {par}\left(a, \mathfrak {M}_{1}, \ldots , \mathfrak {M}_{n}\right), вычисляющей функцию

g2(x1ax2a…axn)=f1(x1)af2(x2)a…afn(xn); g_{2}\left(x_{1} a x_{2} a \ldots a x_{n}\right)=f_{1}\left(x_{1}\right) a f_{2}\left(x_{2}\right) a \ldots a f_{n}\left(x_{n}\right) ;
(в)

машины if⁡(M1,M2,M3)\operatorname {if}\left(\mathfrak {M}_{1}, \mathfrak {M}_{2}, \mathfrak {M}_{3}\right), вычисляющей функцию

g3(x)={M2(x), если M1(x) непусто, M3(x), если M1(x) пусто;  g_{3}(x)= \begin{cases} \mathfrak {M}_{2}(x), & \text{ если } \mathfrak {M}_{1}(x) \text{ непусто, } \\ \mathfrak {M}_{3}(x), & \text{ если } \mathfrak {M}_{1}(x) \text{ пусто; }\end{cases}
(г)

машины while⁡(M1,M2)\operatorname {while}\left(\mathfrak {M}_{1}, \mathfrak {M}_{2}\right), вычисляющей функцию g4(x)=xqg_{4}(x)=x_{q}, где qq — наименьшее натуральное число, для которого M1(xq)\mathfrak {M}_{1}\left(x_{q}\right) пусто, при этом x0=xx_{0}=x и xj+1=M2(xj)x_{j+1}=\mathfrak {M}_{2}\left(x_{j}\right). Считать, что ∣xj∣⩽L(x)\left|x_{j}\right| \leqslant L(x) и ti(xj)⩽Ti(x)t_{i}\left(x_{j}\right) \leqslant T_{i}(x).

Задача 308

Используя машины Тьюринга из предыдущих задач, построить программы машин Тьюринга, вычисляющих следующие функции:

?
(а)

f1(x,y)={x2y3, если x<y,⌊(x+y)/2⌋, в противном случае; f_{1}(x, y)= \begin{cases} x^{2} y^{3}, & \text{ если } x<y, \\ \lfloor (x+y) / 2\rfloor , & \text{ в противном случае; }\end{cases}

(б)

f2(x,y)={⌊x⌋, если x+1⩾y,2(x+y), в противном случае; f_{2}(x, y)= \begin{cases} \lfloor \sqrt{x}\rfloor , & \text{ если } x+1 \geqslant y, \\ 2(x+y), & \text{ в противном случае; }\end{cases}

(в)

f3(x,y)={⌊log⁡2(1+⌊x/y⌋)⌋, если x>2y,xy, в противном случае; f_{3}(x, y)= \begin{cases} \left\lfloor \log_{2}(1+\lfloor x / y\rfloor )\right\rfloor , & \text{ если } x>2 y, \\ x y, & \text{ в противном случае; }\end{cases}

(г)

f4(x,y)={⌊x⌋, если 2x⩾y,x mod y, в противном случае. f_{4}(x, y)= \begin{cases} \lfloor \sqrt{x}\rfloor , & \text{ если } 2 x \geqslant y, \\ x \bmod y, & \text{ в противном случае. }\end{cases}

Задача 309

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

?
(а)

q,a→p,bq, a \rightarrow p, b, return — возврат головки в ту из соседних ячеек, из которой она пришла в текущую;

(б)

q,a→p,bq, a \rightarrow p, b, zero — возврат головки в нулевую ячейку;

(в)

q,a→p,bq, a \rightarrow p, b, mirror — сдвиг головку в ячейку −i-i, если она была в ячейке с номером ii;

(г)

q,a→p,bq, a \rightarrow p, b, double — сдвиг головку в ячейку 2i2 i, если она была в ячейке с номером ii;

(д)

q,a→p,bq, a \rightarrow p, b, next — сдвиг головки в ближайшую справа к текущей ячейку, содержащую aa (если она есть, иначе головка остаётся на месте);

(е)

q,a→p,insert⁡bq, a \rightarrow p, \operatorname {insert} b — сдвиг текущей и всех ячеек справа от неё на одну позицию вправо и запись символа bb в освободившуюся ячейку, головка оказывается в новой ячейке;

(ж)

q,a→pq, a \rightarrow p, restore, ss — замена символа aa на тот, который находился в ячейке в начальной конфигурации.

Задача 310

Реализовать машину Тьюринга из примеров 111 на стр. 409 и 112 на стр. 410 без расширения алфавита.

?
Задача 311

Завершить построение машины Тьюринга из теоремы 156 на стр. 413.

?
Задача 312

Другой, по сравнению с конструкцией теоремы 157 на стр. 417, подход к моделированию двухсторонней ленты на односторонней заключается в том, чтобы содержимое неотрицательной половины ленты M\mathfrak {M} хранить в ячейках с нечётными номерами, а содержимое левой половины — с чётными. То есть новая лента будет иметь вид β(0)=#,β(2x+1)=α(x)\beta (0)=\# , \beta (2 x+1)=\alpha (x) и β(2x)=α(−x)\beta (2 x)=\alpha (-x) при x>0x>0. Построить программу односторонней машины N\mathfrak {N}, реализующую этот подход.

?
Задача 313

Доказать, что односторонняя машина Тьюринга N\mathfrak {N}, построенная в теореме 157 на стр. 417, корректно моделирует исходную машину M\mathfrak {M}.

?
Задача 314

Показать, как извлечь из кода ленты ρ(α)\rho (\alpha ) выходные слова (теорема 159 на стр. 426).

?
Задача 315

Показать, как на машине Тьюринга построить унарную запись входа и по унарной записи восстановить выход (теорема 160 на стр. 429) без расширения алфавита.

?
Задача 316

Показать, как промоделировать на машине Тьюринга работу программы с метками в двоичной системе (теорема 158 на стр. 422).

?
Задача 317

Построить универсальную машину Тьюринга, реализовав пункты 1)-21) из теоремы 161 на стр. 430.

?