1. Модификации машин Тьюринга 1.1. Многоленточные машины Тьюринга и их преобразование в одноленточные. Для некоторых задач составление алгоритмов работы обычной машины Тьюринга представляет значительные трудности, связанные с необходимостью где-то хранить результаты промежуточных вычислений, или производить посимвольное сравнение нескольких групп элементов. В некоторых случаях наличие дополнительной (рабочей) ленты или размещение входных слов на нескольких лентах одновременно позволяет получить более лаконичное решение. Однако как это ни покажется парадоксальным, вычислительная способность таких машин совершенно не превосходит их одноленточные аналоги. Иными словами, задачи, которые можно решить на многоленточной машине с произвольным количеством лент, всегда решаются и при помощи одноленточной машины. Основные свойства многоленточных машин Многоленточная машина для каждой ленты может иметь свой алфавит. Ленты в машине движутся независимо друг от друга. Однако состояние для всех лент машины единое, по сути это состояние управляющего механизма. Собственно ранее, при рассмотрении одноленточных машин, было принято считать что лента неподвижна, а головка перемещается в заданном направлении. Но для рассмотрения многоленточным машин это не вполне удобно, потому что ленты являются независимыми, а наглядно представить перемещение единого управляющего механизма по разным направлениям весьма проблематично. Итак, считаем что управляющий механизм неподвижен, а ленты могут свободно перемещаться вправо, влево или оставаться на месте независимо друг от друга. Программа многоленточной машины Как и ранее, способ записи программ для многоленточных машин – дело вкуса и договоренностей. Далее в тексте будет использоваться следующий порядок записи Si{a,b,c}→{a',b',c'}{R,L,H}Sj Преобразование многоленточных машин в одноленточные Пусть есть К-ленточная машина М и одноленточная машина М*. Считаем что лента машины М* разбита на 2К дорожек. Нечетные полоски отображают ленты машины М, а четные – положение машины М на своих лентах, т.е. например на 2-ой ленте специальный символ Х стоит в той клетке, которая находится непосредственно под клеткой, обозреваемой управляющей головкой на первой ленте. Одна клетка машины М* равна целому столбцу в таблице. Положим что в начале процесса моделирования М* воспринимает самую левую метку положения. Затем М* будет двигаться вправо, считая метки положений путем смены внутренних состояний и запоминая соответствующие значения на нечетных дорожках. 1.2. Универсальные машины. Тьюринг показал возможность построения определённой вычислительной машины U, универсальной в том смысле, что на U можно выполнить любое вычисление. Универсальность некоторой машины Тьюринга выражается в её способности путём подходящего кодирования выполнить любое вычисление, которое могла бы выполнить любая заданная машина Тьюринга. Однако к этому, несомненно, надо присоеденить то условие, что кодирование должно быть в некотором смысле простым. В самом деле, нет особой выгоды считать универсальной машину Тьюринга, у которой кодирование, по существу, требует работы другой универсальной машины. Отсюда возникает задача явного определения универсальной машины Тьюринга. : Кодирование программы машины Тьюринга. На ленте УМТ записывается кодовый номер (программа произвольной МТ и входное слово) данной МТ, и эта машина (УМТ) должна читать этот кодовый номер и выполнять всю работу той машины, программа которой записана на её ленте. УМТ должна печатать знаки в таком же коде, как и в таблице. Соответственно для такой машины необходимы входные слова, записанные по какому-то методу (единообразный метод записи программ и входных слов). Поскольку число возможных знаков – бесконечно много, а у машины конечный алфавит, поэтому всё (и состояния, и символы) кодируется последовательностью других знаков (чисел). Пусть машина А имеет m символов Ai и n внутренних состояний Sj . Закодируем знаки, используемые при написании программы работы такой машины следующим образом. Ai = 1…1 (A1=1, A2=11, A3=111 и т.д.) Sj = 2…2 (S1=2, S2=22, S3=222 и т.д.) R=3 L = 33 H = 333 В этом случае всю программу работы машины можно записать неким числом, причем возможны два варианта записи: 1. Без разделителя команд. В этом случае команды следует писать в формате Aold Sold Anew R Snew, тогда две команды, записанные непосредственно друг за другом, будут явно различаться элементарным анализатором. 2. С разделителем команд, допустим Х, которые можно закодировать числом 4. Возьмем в качестве примера машину Тьюринга, которая на пустой ленте бесконечно много раз печатает последовательность 001. Программа такой машины выглядит следующим образом (λ-пустой знак) λA0RB λB0RC λC1RA Закодируем символы и состояния λ=1 A=2 0=11 B=22 1=111 C=222 Тогда запись программы машины будет выглядеть так: 1 2 11 3 22 1 22 11 3 222 1 222 111 3 2 - код данной машины (запись без разделителя команд) 1 2 11 3 22 4 1 22 11 3 222 4 1 222 111 3 2 - код данной машины (запись с разделителем команд) λ A 0 R B λ B 0 R C λ C 1 R A – соответствующие команды Т.о. каждая МТ представлена числом – это декриптивное (описательное) число машины. Вместе с тем оно является кодом для входного слова. Построение универсальной машины Тьюринга По сути УМТ является программируемой машиной Тьюринга, т.е. собственно программа не является внутренним элементов функциональной схемы, которая управляет считывающей головкой, а просто записана на ленте. Т.о. одна и та же машина получает способность выполнять любую задачу. Рассмотрим УМТ. Ее алфавит ограничен символами 1,2,3,4. Тогда лента выглядит следующим образом (цифру 5 используем для разделения описания машины и описания входного слова) dT dW ∂ 5 dT - описание машины; dW – описание входного слова, в котором каждый символ слова Ai записан в виде наборов по несколько 1, разделенных специальным символом 4 (разделитель). Описание машины – слово, разбитое на команды. УМТ читает описание данной машины, а затем перерабатывает входное слово так, как бы это сделала МТ. УМТ имеет такой же алфавит, как и у предъявленной ей машины. Отсюда вытекает необходимость наличия меток для указания положения исходной МТ. Такие метки удобно ставить вместо разделителя, стоящего непосредственно перед группой ячеек, содержащих код рассматриваемого символа. Поскольку первые 5 цифр алфавита заняты под кодирование программы МТ, будет заменять разделитель перед символом, на котором остановилась исходная МТ, на цифру 6. Составление таблицы для одноленточной УМТ довольно сложное дело. Поэтому для наглядности построим трехленточную машину, которую всегда можно преобразовать в одноленточную по рассмотренному в предыдущей главе принципу. Ленты трехленточной универсальной машины Тьюринга ∂ Исходная лента, на которой записан код таблицы исходной МТ ∂ Рабочая лента, на ней записываются внутренние состояния исходной МТ ∂ Выходная лента – закодированная лента исходной МТ. Вначале моделирования каждого такта работы исходной МТ, УМТ занимает на 3-ей ленте первую клетку кодовой ячейки. Эта клетка соответствует той клетке на ленте исходной МТ, которую в данный момент воспринимает считывающая головка исходной МТ. УМТ движется по входной ленте, пока не дойдёт до команды, в которой внутреннее состояние совпадает с записью на 2-ой ленте, а воспринимаемый символ – с тем, который записан на входной ленте, в кодовой ячейке которой изображено положение исходной машины. Сравнение происходит по разрядам. В итоге УМТ находит на входной ленте нужную для исполнения команду МТ. УМТ считывает инструкцию, соответствующую этой команде. Эта инструкция выполняется, а именно: изменяется положение исходной МТ. Например, если инструкция гласит «шаг вправо», то на 3-ей ленте делается необходимое количество шагов вправо до ближайшего нового разделителя команд, который заменяется меткой текущего положения (вместо 4 ставится символ 6). изменяется внутреннее состояние исходной МТ. На второй ленте вместо старого записывается ее новое состояние. изменяется символ, содержащийся в рассматриваемой ячейке. Поскольку разные символы кодируются различным количеством единичек, то в случае замены символа необходимо предусмотреть процедуру сдвига (растягивание или сжимание слова на нужное число клеток) После этого моделируется следующий такт работы исходной МТ. Для этого снова анализируется содержание второй ленты (это теперь текущее состояние МТ) и символ, записанный справа от указателя текущего положения управляющей головки (специальная метка 6). Эту УМТ можно существенно упростить с помощью 2-ой теоремы Шеннона (преобразовать в УМТ с двумя символами), следовательно, достаточно построить УМТ для МТ, имея два знака в алфавите. В результате на третьей ленте чего не нужно ничего сдвигать.