Машины Тьюринга
[16/94%]Построить машину Тьюринга, выполняющую следующую задачу: по входу, состоящему из одного или нескольких слов в алфавите (возможно, что ), построить выход, удвоив последнее из слов: .
Построить машину Тьюринга, сравнивающую два входных слова в алфавите лексикографически. Она должна вычислять словарную функцию:
Построить программы машин Тьюринга, вычисляющих следующие словарные функции в алфавите :
циклическая перестановка букв: ;
циклическая перестановка слов: ;
«переворачивание» последовательности слов: ;
удвоение каждой буквы: ;
нахождение образа при гомоморфизме ;
удаление всех одиночных букв , стоящих на чётных позициях;
проверка, содержат ли два слова одно и то же количество букв (результат равен 1, если ответ «да», 0, если «нет»);
проверка, является ли слово палиндромом (то есть симметричным);
проверка, есть ли в слове две последовательности букв одной и той же длины;
проверка, образуют ли в слове количества букв и возрастающую арифметическую прогрессию.
Построить машину Тьюринга для перевода записи числа из двоичной системы в унарную, входной алфавит .
Построить программы односторонних машин Тьюринга, вычисляющих следующие арифметические функции в унарной системе:
;
сравнение ;
возведение в степень: ;
квадратный корень: ;
логарифм:
деление нацело: ;
остаток: ;
функция выбора -го аргумента: — заранее заданная константа.
Даны машины Тьюринга со стандартной заключительной конфигурацией , каждая из которых вычисляет словарную функцию за время , . Указать, как построить, и оценить время работы
машины , вычисляющей функцию ;
машины , вычисляющей функцию
машины , вычисляющей функцию
машины , вычисляющей функцию , где — наименьшее натуральное число, для которого пусто, при этом и . Считать, что и .
Используя машины Тьюринга из предыдущих задач, построить программы машин Тьюринга, вычисляющих следующие функции:
Показать, как на обычной машине Тьюринга можно организовать выполнение следующих команд:
, return — возврат головки в ту из соседних ячеек, из которой она пришла в текущую;
, zero — возврат головки в нулевую ячейку;
, mirror — сдвиг головку в ячейку , если она была в ячейке с номером ;
, double — сдвиг головку в ячейку , если она была в ячейке с номером ;
, next — сдвиг головки в ближайшую справа к текущей ячейку, содержащую (если она есть, иначе головка остаётся на месте);
— сдвиг текущей и всех ячеек справа от неё на одну позицию вправо и запись символа в освободившуюся ячейку, головка оказывается в новой ячейке;
, restore, — замена символа на тот, который находился в ячейке в начальной конфигурации.
Реализовать машину Тьюринга из примеров 111 на стр. 409 и 112 на стр. 410 без расширения алфавита.
Завершить построение машины Тьюринга из теоремы 156 на стр. 413.
Другой, по сравнению с конструкцией теоремы 157 на стр. 417, подход к моделированию двухсторонней ленты на односторонней заключается в том, чтобы содержимое неотрицательной половины ленты хранить в ячейках с нечётными номерами, а содержимое левой половины — с чётными. То есть новая лента будет иметь вид и при . Построить программу односторонней машины , реализующую этот подход.
Доказать, что односторонняя машина Тьюринга , построенная в теореме 157 на стр. 417, корректно моделирует исходную машину .
Показать, как извлечь из кода ленты выходные слова (теорема 159 на стр. 426).
Показать, как на машине Тьюринга построить унарную запись входа и по унарной записи восстановить выход (теорема 160 на стр. 429) без расширения алфавита.
Показать, как промоделировать на машине Тьюринга работу программы с метками в двоичной системе (теорема 158 на стр. 422).
Построить универсальную машину Тьюринга, реализовав пункты 1)-21) из теоремы 161 на стр. 430.