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