Домой /  Интернет / Работа машины тьюринга состоит в изменении ее. Машина Тьюринга. Задачи и решения. Пример машины Тьюринга

Работа машины тьюринга состоит в изменении ее. Машина Тьюринга. Задачи и решения. Пример машины Тьюринга

Машина Тьюринга - это строгое математическое построение, математический аппарат (аналогичный, например, аппарату дифференциальных уравнений), созданный для решения определенных задач. Этот математический аппарат был назван “машиной” по той причине, что по описанию его составляющих частей и функционированию он похож на вычислительную машину. Принципиальное отличие машины Тьюринга от вычислительных машин состоит в том, что ее запоминающее устройство представляет собой бесконечную ленту: у реальных вычислительных машин запоминающее устройство может быть как угодно большим, но обязательно конечным. Машину Тьюринга нельзя реализовать именно из-за бесконечности ее ленты. В этом смысле она мощнее любой вычислительной машины.

В каждой машине Тьюринга есть две части:

1) неограниченная в обе стороны лента , разделенная на ячейки;

2) автомат (головка для считывания/записи, управляемая программой).

С каждой машиной Тьюринга связаны два конечных алфавита : алфавит входных символов A = {a 0 , a 1 , ..., a m }и алфавит состояний Q = {q 0 , q 1 , ..., q p }. (С разными машинами Тьюринга могут быть связаны разные алфавиты A и Q .) Состояние q 0 называется пассивным . Считается, что если машина попала в это состояние, то она закончила свою работу. Состояние q 1 называется начальным . Находясь в этом состоянии, машина начинает свою работу.

Входное слово размещается на ленте по одной букве в расположенных подряд ячейках. Слева и справа от входного слова находятся только пустые ячейки (в алфавит А всегда входит пустая буква а 0 - признак того, что ячейка пуста).

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

Автомат каждый раз “видит” только одну ячейку. В зависимости от того, какую буквуai он видит, а также в зависимости от своего состояния qj автомат может выполнять следующие действия:

  • · записать новую букву в обозреваемую ячейку;
  • · выполнить сдвиг по ленте на одну ячейку вправо/влево или остаться неподвижным;
  • · перейти в новое состояние.

То есть у машины Тьюринга есть три вида операций. Каждый раз для очередной пары (q j , a i ) машина Тьюринга выполняет команду, состоящую из трех операций с определенными параметрами.

Программа для машины Тьюринга представляет собой таблицу, в каждой клетке которой записана команда.

Клетка (q j , a i ) определяется двумя параметрами - символом алфавита и состоянием машины. Команда представляет собой указание: куда передвинуть головку чтения/записи, какой символ записать в текущую ячейку, в какое состояние перейти машине. Для обозначения направления движения автомата используем одну из трех букв: “Л” (влево), “П” (вправо) или “Н” (неподвижен).

После выполнения автоматом очередной команды он переходит в состояние q m (которое может в частном случае совпадать с прежним состоянием q j ). Следующую команду нужно искать в m -й строке таблицы на пересечении со столбцом a l (букву a l автомат видит после сдвига).

Договоримся, что когда лента содержит входное слово, то автомат находится против какой-то ячейки в состоянии q 1. В процессе работы автомат будет перескакивать из одной клетки программы (таблицы) в другую, пока не дойдет до клетки, в которой записано, что автомат должен перейти в состояние q 0 . Эти клетки называются клетками останова . Дойдя до любой такой клетки, машина Тьюринга останавливается .

Несмотря на свое простое устройство, машина Тьюринга может выполнять все возможные преобразования слов, реализуя тем самым все возможные алгоритмы.

Машина Поста

Машина Поста (МП) - абстрактная вычислительная машина, предложенная Эмилем Леоном Постом, которая отличается от машины Тьюринга большей простотой. Обе машины «эквивалентны» и были созданы для уточнения понятия «алгоритм».

Принцип работы

Машина Поста состоит из каретки (или считывающей и записывающей головки) и разбитой на секции бесконечной в обе стороны ленты (см. пример ниже). Каждая секция ленты может быть либо пустой - 0, либо помеченной меткой 1. За один шаг каретка может сдвинуться на одну позицию влево или вправо, считать, поставить или стереть символ в том месте, где она стоит. Работа машины Поста определяется программой, состоящей из конечного числа строк. Для работы машины нужно задать программу и ее начальное состояние (т. е. состояние ленты и позицию каретки). Кареткой управляет программа, состоящая из строк команд. Каждая команда имеет следующий синтаксис:

где i - номер команды, K – действие каретки, j - номер следующей команды (отсылка).

Всего для машины Поста существует шесть типов команд:

1) V j - поставить метку, перейти к j-й строке программы.

2) X j - стереть метку, перейти к j-й строке программы.

3) <- j - сдвинуться влево, перейти к j-й строке программы.

a. j - сдвинуться вправо, перейти к j-й строке программы.

4) ? j1; j2 - если в ячейке нет метки, то перейти к j1-й строке программы, иначе перейти к j2-й строке программы.

5) ! – конец программы (стоп).

У команды «стоп» отсылки нет. После запуска возможны варианты:

Работа может закончиться невыполнимой командой (стирание несуществующей метки или запись в помеченное поле);

До сих пор нам было удобно ссылаться на программистский опыт , говоря об алгоритмах, программах, интерпретаторах, пошаговом выполнении и т.д. Это позволяло нам игнорировать детали построения тех или иных алгоритмов под тем предлогом, что читатель их легко восстановит (или хотя бы поверит все-таки не каждый читатель в своей жизни писал интерпретатор паскаля на паскале).

Но в некоторых случаях этого недостаточно. Пусть, например, мы хотим доказать алгоритмическую неразрешимость какой-то задачи, в определении которой ничего не говорится о программах (в этом разделе, например, мы докажем неразрешимость проблемы равенства слов в полугруппах , заданных образующими и соотношениями). Это обычно делается так. Мы показываем, что проблема остановки сводится к этой задаче. Для этого мы моделируем работу произвольного алгоритма в терминах рассматриваемой задачи (что это значит, будет видно из приводимого ниже примера). При этом нам важно, чтобы определение алгоритма было как можно проще.

Таким образом, наш план таков. Мы опишем довольно просто определяемый класс машин (его можно выбирать по-разному, мы будем использовать так называемые машины Тьюринга), затем объявим, что всякая вычислимая функция может быть вычислена на такой машине, а затем покажем, что вопрос об остановке машины Тьюринга можно свести к вопросу о равенстве слов в полугруппе.

Другая причина, по которой важны простые вычислительные модели (таких моделей много разные виды машин Тьюринга, адресные машины и т.п.), связана с теорией сложности вычислений, когда нас начинает интересовать время выполнения программ. Но этот вопрос выходит за рамки классической теории алгоритмов.

Машины Тьюринга: определение

Машина Тьюринга имеет бесконечную в обе стороны ленту , разделенную на квадратики (ячейки ). В каждой ячейке может быть записан некоторый символ из фиксированного (для данной машины) конечного множества , называемого алфавитом данной машины. Один из символов алфавита выделен и называется " пробелом" предполагается, что изначально вся лента пуста, то есть заполнена пробелами.

Машина Тьюринга может менять содержимое ленты с помощью специальной читающей и пишущей головки , которая движется вдоль ленты. В каждый момент головка находится в одной из ячеек. Машина Тьюринга получает от головки информацию о том, какой символ та видит, и в зависимости от этого (и от своего внутреннего состояния) решает, что делать, то есть какой символ записать в текущей ячейке и куда сдвинуться после этого (налево, направо или остаться на месте). При этом также меняется внутреннее состояние машины (мы предполагаем, что машина не считая ленты имеет конечную память , то есть конечное число внутренних состояний). Еще надо договориться, с чего мы начинаем и когда кончаем работу.

Таким образом, чтобы задать машину Тьюринга, надо указать следующие объекты:

Таблица переходов устроена следующим образом: для каждой пары указана тройка . Здесь сдвиг одно из чисел -1 (влево), 0 (на месте) и 1 (направо). Таким образом, таблица переходов есть функция типа S x A -> S x A x {-1,0,1} , определенная на тех парах, в которых состояние не является заключительным.

Остается описать поведение машины Тьюринга. В каждый момент имеется некоторая конфигурация , складывающаяся из содержимого ленты (формально говоря, содержимое ленты есть произвольное отображение Z -> A ), текущей позиции головки (некоторое целое число ) и текущего состояния машины (элемент S ). Преобразование конфигурации в следующую происходит по естественным правилам: мы смотрим в таблице, что надо делать для данного состояния и для данного символа, то есть выясняем новое состояние машины, меняем символ на указанный и после этого сдвигаем головку влево, вправо или оставляем на месте. При этом, если новое состояние является одним из заключительных, работа машины заканчивается. Остается договориться, как мы подаем информацию на вход машины и что считается результатом ее работы. Будем считать, что алфавит машины, помимо пробела, содержит символы 0 и 1 (а также, возможно, еще какие-то символы). Входом и выходом машины будут конечные последовательности нулей и единиц (двоичные слова). Входное слово записывается на пустой ленте, головка машины ставится в его первую клетку, машина приводится в начальное состояние и запускается. Если машина останавливается, результатом считается двоичное слово , которое можно прочесть, начиная с позиции головки и двигаясь направо (пока не появится символ, отличный от 0 и 1 ).

Таким образом, любая машина Тьюринга задает некоторую частичную функцию на двоичных словах. Все такие функции естественно назвать вычислимыми на машинах Тьюринга .

Машины Тьюринга: обсуждение

Разумеется, наше определение содержит много конкретных деталей, которые можно было бы изменить. Например, лента может быть бесконечной только в одну сторону. Можно придать машине две ленты. Можно считать, что машина может либо написать новый символ, либо сдвинуться, но не то и другое вместе. Можно ограничить алфавит , считая, скажем, что в нем должно быть ровно 10 символов. Можно потребовать, чтобы в конце на ленте ничего не было, кроме результата работы (остальные клетки должны быть пусты). Все перечисленные и многие другие изменения не меняют класса вычислимых на машинах Тьюринга функций. Конечно, есть и небезобидные изменения. Например, если запретить машине двигаться налево, то это радикально поменяет дело по существу лента станет бесполезной, так как к старым записям уже нельзя будет вернуться.

Как понять, какие изменения безобидны, а какие нет? Видимо, тут необходим некоторый опыт практического программирования на машинах Тьюринга, хотя бы небольшой. После этого уже можно представлять себе возможности машины, не выписывая программы полностью, а руководствуясь лишь приблизительным описанием. В качестве примера опишем машину, которая удваивает входное слово (изготавливает слово XX , если на входе было слово X ).

Если машина видит пробел ( входное слово пусто), она кончает работу. Если нет, она запоминает текущий символ и ставит пометку (в алфавите помимо символов 0 и 1 будут еще их " помеченные варианты" и ). Затем она движется направо до пустой клетки, после чего пишет там копию запомненного символа. Затем она движется налево до пометки; уткнувшись в пометку, отходит назад и запоминает следующий символ и так далее, пока не скопирует все слово .

Имея некоторый опыт , можно за всеми этими фразами видеть конкретные куски программы для машины Тьюринга. Например, слова " запоминает символ и движется направо" означают, что есть две группы состояний, одна для ситуации, когда запомнен нуль, другая когда запомнена единица , и внутри каждой группы запрограммировано движение направо до первой пустой клетки.

Имея еще чуть больше опыта, можно понять, что в этом описании есть ошибка не предусмотрен механизм остановки, когда все слово будет скопировано, поскольку копии символов ничем не отличаются от символов исходного слова. Ясно и то, как ошибку исправить надо в качестве копий писать специальные символы и , а на последнем этапе все пометки удалить.

77 . Покажите, что функция " обращение", переворачивающая слово задом наперед, вычислима на машине Тьюринга.

Другой пример неформального рассуждения: объясним, почему можно не использовать дополнительных символов, кроме 0 , 1 и пустого символа. Пусть есть машина с большим алфавитом из N символов. Построим новую машину, которая будет моделировать работу старой, но каждой клетке старой будет соответствовать блок из k клеток новой. Размер блока (число k ) будет фиксирован так, чтобы внутри блока можно было бы закодировать нулями и единицами все символы большого алфавита. Исходные символы 0 , 1 и пустой будем кодировать как 0 , за которым идут (k-1) пустых символов, 1 , за которым идут (k-1) пустых символов, и группу из k пустых символов. Для начала надо раздвинуть буквы входного слова на расстояние k , что можно сделать без дополнительных символов (дойдя до крайней буквы, отодвигаем ее, затем дойдя до следующей, отодвигаем ее и крайнюю и так далее); надо только понимать, что можно идентифицировать конец слова как позицию, за которой следует более k пустых символов. Ясно, что в этом процессе мы должны хранить в памяти некоторый конечный объем информации, так что это возможно. После этого уже можно моделировать работу исходной машины по шагам, и для этого тоже достаточно конечной памяти (е конечного числа состояний), так как нам важна только небольшая окрестность головки моделируемой машины. Наконец, надо сжать результат обратно.

В заключение обсуждения приведем обещанный выше аргумент в пользу того, что любая вычислимая функция вычислима на машине Тьюринга. Пусть есть функция , которую человек умеет вычислять. При этом, он, естественно, должен использовать карандаш и бумагу, так как количество информации , которое он может хранить " в уме", ограничено. Будем считать, что он пишет на отдельных листах бумаги. Помимо текущего листа, есть стопка бумаг справа и стопка слева; в любую из них можно положить текущий лист , завершив с ним работу, а из другой стопки взять следующий. У человека есть карандаш и ластик. Поскольку очень мелкие буквы не видны, число отчетливо различимых состояний листа конечно, и можно считать, что в каждый момент на листе записана одна буква из некоторого конечного (хотя и весьма большого) алфавита. Человек тоже имеет конечную память , так что его состояние есть элемент некоторого конечного множества . При этом можно составить некоторую таблицу, в которой записано, чем кончится его работа над листом с данным содержимым, начатая в данном состоянии (что будет на листе, в каком состоянии будет человек и из какой пачки будет взят следующий лист ). Теперь уже видно, что действия человека как раз соответствуют работе машины Тьюринга с большим (но конечным) алфавитом и большим (но конечным) числом внутренних состояний.

Маши́на Тью́ринга (МТ) - абстрактный исполнитель (абстрактная вычислительная машина). Была предложена Аланом Тьюрингом в 1936 году для формализации понятия алгоритма .

Машина Тьюринга является расширением конечного автомата и, согласно тезису Чёрча - Тьюринга , способна имитировать все другие исполнители (с помощью задания правил перехода), каким-либо образом реализующие процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен.

Устройство машины Тьюринга

В состав машины Тьюринга входит бесконечная в обе стороны лента (возможны машины Тьюринга, которые имеют несколько бесконечных лент), разделённая на ячейки, и управляющее устройство , способное находиться в одном из множества состояний . Число возможных состояний управляющего устройства конечно и точно задано.

Управляющее устройство может перемещаться влево и вправо по ленте, читать и записывать в ячейки ленты символы некоторого конечного алфавита. Выделяется особый пустой символ, заполняющий все клетки ленты, кроме тех из них (конечного числа), на которых записаны входные данные.

Управляющее устройство работает согласно правилам перехода , которые представляют алгоритм, реализуемый данной машиной Тьюринга. Каждое правило перехода предписывает машине, в зависимости от текущего состояния и наблюдаемого в текущей клетке символа, записать в эту клетку новый символ, перейти в новое состояние и переместиться на одну клетку влево или вправо. Некоторые состояния машины Тьюринга могут быть помечены как терминальные , и переход в любое из них означает конец работы, остановку алгоритма.

Машина Тьюринга называется детерминированной , если каждой комбинации состояния и ленточного символа в таблице соответствует не более одного правила. Если существует пара «ленточный символ - состояние», для которой существует 2 и более команд, такая машина Тьюринга называется недетерминированной .

Описание машины Тьюринга

Конкретная машина Тьюринга задаётся перечислением элементов множества букв алфавита A, множества состояний Q и набором правил, по которым работает машина. Они имеют вид: q i a j →q i1 a j1 d k (если головка находится в состоянии q i , а в обозреваемой ячейке записана буква a j , то головка переходит в состояние q i1 , в ячейку вместо a j записывается a j1 , головка делает движение d k , которое имеет три варианта: на ячейку влево (L), на ячейку вправо (R), остаться на месте (N)). Для каждой возможной конфигурации имеется ровно одно правило. Правил нет только для заключительного состояния, попав в которое машина останавливается. Кроме того, необходимо указать конечное и начальное состояния, начальную конфигурацию на ленте и расположение головки машины.

Пример машины Тьюринга

Приведём пример МТ для умножения чисел в унарной системе счисления . Машина работает по следующему набору правил:

Набор правил

Набор правил

q 0 ×→q 1 ×R

q 6 ×→q 7 ×R

q 2 ×→q 3 ×L

q 3 1 → q 4 aR

q 4 ×→q 4 ×R

Умножим с помощью МТ 3 на 2 в единичной системе:

В протоколе указаны начальное и конечное состояния МТ, начальная конфигурация на ленте и расположение головки машины (подчёркнутый символ).

Полнота по Тьюрингу

Основная статья : Полнота по Тьюрингу

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

Элементарность действий заключается в том, что действие меняет лишь небольшой кусочек данных в памяти (в случае машины Тьюринга - лишь одну ячейку), и число возможных действий конечно. Несмотря на простоту машины Тьюринга на ней можно вычислить всё, что можно вычислить на любой другой машине, осуществляющей вычисления с помощью последовательности элементарных действий. Это свойство называется полнотой .

Один из естественных способов доказательства того, что алгоритмы вычисления, которые можно реализовать на одной машине, можно реализовать и на другой, - это имитация первой машины на второй.

Имитация заключается в следующем. На вход второй машине подаётся описание программы (правил работы) первой машины D и входные данные X , которые должны были поступить на вход первой машины. Нужно описать такую программу (правила работы второй машины), чтобы в результате вычислений на выходе оказалось то же самое, что вернула бы первая машина, если бы получила на вход данные X .

Как было сказано, на машине Тьюринга можно имитировать (с помощью задания правил перехода) все другие исполнители, каким-либо образом реализующие процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен.

На машине Тьюринга можно имитировать машину Поста , нормальные алгоритмы Маркова и любую программу для обычных компьютеров, преобразующую входные данные в выходные по какому-либо алгоритму. В свою очередь, на различных абстрактных исполнителях можно имитировать Машину Тьюринга. Исполнители, для которых это возможно, называются полными по Тьюрингу (Turing complete).

Есть программы для обычных компьютеров, имитирующие работу машины Тьюринга. Но следует отметить, что данная имитация неполная, так как в машине Тьюринга присутствует абстрактная бесконечная лента. Бесконечную ленту с данными невозможно в полной мере имитировать на компьютере с конечной памятью (суммарная память компьютера - оперативная память, жёсткие диски, различные внешние носители данных, регистры и кэш процессора и др. - может быть очень большой, но, тем не менее, всегда конечна).

Варианты машины Тьюринга

Модель машины Тьюринга допускает расширения. Можно рассматривать машины Тьюринга с произвольным числом лент и многомерными лентами с различными ограничениями. Однако все эти машины являются полными по Тьюрингу и моделируются обычной машиной Тьюринга.

Машина Тьюринга, работающая на полубесконечной ленте

В качестве примера такого сведения рассмотрим следующую теорему: Для любой машины Тьюринга существует эквивалентная машина Тьюринга, работающая на полубесконечной ленте.

Рассмотрим доказательство, приведённое Ю. Г. Карповым в книге «Теория автоматов». Доказательство этой теоремы конструктивное, то есть мы дадим алгоритм, по которому для любой машины Тьюринга может быть построена эквивалентная машина Тьюринга с объявленным свойством. Во-первых произвольно занумеруем ячейки рабочей ленты МТ, то есть определим новое расположение информации на ленте:

Затем перенумеруем ячейки, причём будем считать, что символ «*» не содержится в словаре МТ:

Наконец, изменим машину Тьюринга, удвоив число её состояний, и изменим сдвиг головки считывания-записи так, чтобы в одной группе состояний работа машины была бы эквивалентна её работе в заштрихованной зоне, а в другой группе состояний машина работала бы так, как исходная машина работает в незаштрихованной зоне. Если при работе МТ встретится символ ‘*’, значит головка считывания-записи достигла границы зоны:

Начальное состояние новой машины Тьюринга устанавливается в одной или другой зоне в зависимости от того, в какой части исходной ленты располагалась головка считывания-записи в исходной конфигурации. Очевидно, что слева от ограничивающих маркеров «*» лента в эквивалентной машине Тьюринга не используется.

И, согласно тезису Чёрча - Тьюринга , способна имитировать всех исполнителей (с помощью задания правил перехода), каким-либо образом реализующих процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен.

То есть всякий интуитивный алгоритм может быть реализован с помощью некоторой машины Тьюринга .

Устройство

В состав машины Тьюринга входит неограниченная в обе стороны лента (возможны машины Тьюринга, которые имеют несколько бесконечных лент), разделённая на ячейки , и управляющее устройство (также называется головкой записи-чтения (ГЗЧ )), способное находиться в одном из множества состояний . Число возможных состояний управляющего устройства конечно и точно задано.

Управляющее устройство может перемещаться влево и вправо по ленте, читать и записывать в ячейки символы некоторого конечного алфавита. Выделяется особый пустой символ, заполняющий все клетки ленты, кроме тех из них (конечного числа), на которых записаны входные данные.

Управляющее устройство работает согласно правилам перехода , которые представляют алгоритм, реализуемый данной машиной Тьюринга. Каждое правило перехода предписывает машине, в зависимости от текущего состояния и наблюдаемого в текущей клетке символа, записать в эту клетку новый символ, перейти в новое состояние и переместиться на одну клетку влево или вправо. Некоторые состояния машины Тьюринга могут быть помечены как терминальные , и переход в любое из них означает конец работы, остановку алгоритма.

Машина Тьюринга называется детерминированной , если каждой комбинации состояния и ленточного символа в таблице соответствует не более одного правила. Если существует пара «ленточный символ - состояние», для которой существует 2 и более команд, такая машина Тьюринга называется недетерминированной .

Описание машины Тьюринга

Конкретная машина Тьюринга задаётся перечислением элементов множества букв алфавита A, множества состояний Q и набором правил, по которым работает машина. Они имеют вид: q i a j →q i1 a j1 d k (если головка находится в состоянии q i , а в обозреваемой ячейке записана буква a j , то головка переходит в состояние q i1 , в ячейку вместо a j записывается a j1 , головка делает движение d k , которое имеет три варианта: на ячейку влево (L), на ячейку вправо (R), остаться на месте (N)). Для каждой возможной конфигурации имеется ровно одно правило (для недетерминированной машины Тьюринга может быть большее количество правил). Правил нет только для заключительного состояния, попав в которое, машина останавливается. Кроме того, необходимо указать конечное и начальное состояния, начальную конфигурацию на ленте и расположение головки машины.

Пример

Пример машины Тьюринга для умножения чисел в унарной системе счисления . Запись правила «q i a j →q i1 a j1 R/L/N» следует понимать так: q i - состояние при котором выполняется это правило, a j - данные в ячейке, в которой находится головка, q i1 - состояние в которое нужно перейти, a j1 - что нужно записать в ячейку, R/L/N - команда на перемещение.

Машина работает по следующему набору правил:

q 0 q 1 q 2 q 3 q 4 q 5 q 6 q 7 q 8
1 q 0 1→q 0 1R q 1 1→q 2 aR q 2 1→q 2 1L q 3 1 → q 4 aR q 4 1→q 4 1R q 7 1→q 2 aR
× q 0 ×→q 1 ×R q 2 ×→q 3 ×L q 4 ×→q 4 ×R q 6 ×→q 7 ×R q 8 ×→q 9 ×N
= q 2 =→q 2 =L q 4 =→q 4 =R q 7 =→q 8 =L
a q 2 a→q 2 aL q 3 a→q 3 aL q 4 a→q 4 aR q 6 a→q 6 1R q 7 a→q 7 aR q 8 a→q 8 1L
* q 0 *→q 0 *R q 3 *→q 6 *R q 4 *→q 5 1R
q 5 →q 2 *L

Описание состояний:

Начало
q 0 начальное состояние. Ищем «x» справа. При нахождении переходим в состояние q1
q 1 заменяем «1» на «а» и переходим в состояние q2
Переносим все «1» из первого числа в результат
q 2 ищем «х» слева. При нахождении переходим в состояние q3
q 3 ищем «1» слева, заменяем её на «а» и переходим в состояние q4.

В случае если «1» закончились, находим «*» и переходим в состояние q6

q 4 переходим в конец (ищем «*» справа), заменяем «*» на «1» и переходим в состояние q5
q 5 добавляем «*» в конец и переходим в состояние q2
Обрабатываем каждый разряд второго числа
q 6 ищем «х» справа и переходим в состояние q7. Пока ищем заменяем «а» на «1»
q 7 ищем «1» или «=» справа

при нахождении «1» заменяем его на «а» и переходим в состояние q2

при нахождении «=» переходим в состояние q8

Конец
q 8 ищем «х» слева. При нахождении переходим в состояние q9. Пока ищем заменяем «а» на «1»
q 9 терминальное состояние (остановка алгоритма)

Умножим с помощью МТ 3 на 2 в единичной системе. В протоколе указаны начальное и конечное состояния МТ, начальная конфигурация на ленте и расположение головки машины (подчёркнутый символ).

Начало. Находимся в состоянии q 0 , ввели в машину данные: *111x11=*, головка машины располагается на первом символе *.

1-й шаг. Смотрим по таблице правил что будет делать машина, находясь в состоянии q 0 и над символом «*». Это правило из 1-го столбца 5-й строки - q 0 *→q 0 *R. Это значит, что мы переходим в состояние q 0 (то есть не меняем его), символ станет «*» (то есть не изменится) и смещаемся по введённому нами тексту «*111x11=*» вправо на одну позицию (R), то есть на 1-й символ 1. В свою очередь, состояние q 0 1 (1-й столбец 1-я строка) обрабатывается правилом q 0 1→q 0 1R. То есть снова происходит просто переход вправо на 1 позицию. Так происходит, пока мы не станем на символ «х». И так далее: берём состояние (индекс при q), берём символ, на котором стоим (подчёркнутый символ), соединяем их и смотрим обработку полученной комбинации по таблице правил.

Простыми словами, алгоритм умножения следующий: помечаем 1-ю единицу 2-го множителя, заменяя её на букву «а», и переносим весь 1-й множитель за знак равенства. Перенос производится путём поочерёдной замены единиц 1-го множителя на «а» и дописывания такого же количества единиц в конце строки (слева от крайнего правого «*»). Затем меняем все «а» до знака умножения «х» обратно на единицы. И цикл повторяется. Действительно, ведь A умножить на В можно представить как А+А+А В раз. Помечаем теперь 2-ю единицу 2-го множителя буквой «а» и снова переносим единицы. Когда до знака «=» не окажется единиц - значит умножение завершено.

Полнота по Тьюрингу

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

Элементарность действий заключается в том, что действие меняет лишь небольшой фрагмент данных в памяти (в случае машины Тьюринга - лишь одну ячейку), и число возможных действий не бесконечно. Несмотря на простоту машины Тьюринга, на ней можно вычислить всё, что можно вычислить на любой другой машине, осуществляющей вычисления с помощью последовательности элементарных действий. Это свойство называется полнотой .

Один из естественных способов доказательства того, что алгоритмы вычисления, которые можно реализовать на одной машине, можно реализовать и на другой, - это имитация первой машины на второй.

Имитация заключается в следующем. На вход второй машине подаётся описание программы (правил работы) первой машины D {\displaystyle D} и входные данные X {\displaystyle X} , которые должны были поступить на вход первой машины. Нужно описать такую программу (правила работы второй машины), чтобы в результате вычислений на выходе оказалось то же самое, что вернула бы первая машина, если бы получила на вход данные X {\displaystyle X} .

Как было сказано, на машине Тьюринга можно имитировать (с помощью задания правил перехода) все другие исполнители, каким-либо образом реализующие процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен.

На машине Тьюринга можно имитировать машину Поста , нормальные алгоритмы Маркова и любую программу для обычных компьютеров, преобразующую входные данные в выходные по какому-либо алгоритму. В свою очередь, на различных абстрактных исполнителях можно имитировать Машину Тьюринга. Исполнители, для которых это возможно, называются полными по Тьюрингу (Turing complete).

Есть программы для обычных компьютеров, имитирующие работу машины Тьюринга. Но следует отметить, что данная имитация неполная, так как в машине Тьюринга присутствует абстрактная бесконечная лента. Бесконечную ленту с данными невозможно в полной мере имитировать на компьютере с конечной памятью: суммарная память компьютера - оперативная память, жёсткие диски, различные внешние носители данных, регистры и кэш процессора и др. - может быть очень большой, но, тем не менее, всегда конечна. Теоретический предел количества информации, которая может находиться внутри заданной поверхности, с точностью до множителя 1 / ln ⁡ 2 {\displaystyle 1/\ln {2}} равен энтропии чёрной дыры с той же площадью поверхности.

Варианты машины Тьюринга

Модель машины Тьюринга допускает расширения. Можно рассматривать машины Тьюринга с произвольным числом лент и многомерными лентами с различными ограничениями. Однако все эти машины являются полными по Тьюрингу и моделируются обычной машиной Тьюринга.

Машина Тьюринга, работающая на полубесконечной ленте

В качестве примера такого сведения рассмотрим следующую теорему: Для любой машины Тьюринга существует эквивалентная машина Тьюринга, работающая на полубесконечной ленте (то есть на ленте, бесконечной в одну сторону).

В гл. XII были разъяснены основные интуитивно очевидные требования, которые предъявляются к алгоритмам. Это требования детерминированности, массовости и применимости («целенаправленности») алгоритмов. Важно, что результат применения алгоритма совершенно не зависит от того, кто его использует. Человек, выполняющий алгоритм, должен действовать, «как машина», заботясь лишь о том, чтобы правильно выполнить предписания. Поэтому, естественно, возникает мысль: нельзя ли действительно поручить выполнение алгоритма машине?

Из упомянутых свойств алгоритмов вытекают общие требования к машине, выполняющей алгоритм. Во-первых, машина должна быть полностью детерминированной и действовать в соответствии с заданной системой правил! Во-вторых, она должна допускать ввод различных «начальных данных» (соответствующих различным задачам из данного класса задач). В-третьих, заданная система правил работы машины и класс решаемых задач должны быть согласованы так, чтобы всегда было можно «прочитать» результат работы машины.

Можно предложить различные «конструкции» машин, способных выполнять алгоритмы. Наиболее наглядна схема, предложенная в 1936 г. английским математиком Тьюрингом. Ниже приводится описание одного из возможных вариантов функционирования таких машин

Рассмотрим бесконечную одномерную ленту, которая разделена на ячейки. Мы будем считать, что лента бесконечна лишь в одном направлении - направо, так что существует самая левая ячейка.

В каждой ячейке может быть записан лишь один символ из конечного алфавита . Символ мы выделим специально и будем говорить, что если в некоторой ячейке записан , то эта ячейка «пустая». В дальнейшем всегда будем считать, что непустых символов на ленте каждый раз имеется лишь конечное (но сколь угодно большое) число, остальные же ячейки пустые.

Представим себе также специальное устройство - считывающую и записывающую головку, которая может располагаться напротив каждой из ячеек ленты и по команде извне «стереть» записанный в этой ячейке символ и записать новый. Считывающая и записывающая головка может также по команде перемещаться на одну ячейку вправо или влево (если она не находится в самой левой ячейке). Команды на считывающую и записывающую головку подаются от управляющего устройства, которое в свою очередь получает от головки сигнал о наличии того или иного символа в ячейке ленты, расположенной против головки.

Управляющее устройство имеет конечное число внутренних состояний и работает в дискретном времени . Входом управляющего устройства являются символы , выдаваемые считывающей и записывающей головкой, выходом - команды на действия головки: какой символ головка должна записать в соответствующей ячейке и куда передвинуться. Пусть в момент времени t считывающая и записывающая головка находилась напротив (считая слева) ячейки, в которой был записан символ , а управляющее устройство находилось в состоянии . Управляющее устройство в зависимости от состояния и входа выдает символ (в соответствии с которым головка стирает старый символ и печатает новый ), а затем один из символов П, Л или С («право»? «лево», "стоп"), в соответствии с которым головка передвигается на одну клетку вправо или влево, или остается на месте. После этого управляющее устройство переходит в новое состояние (также определяемое однозначно символами ).

Тем самым в момент времени ячейке будет записан символ , управляющее устройство будет находиться в состоянии , а считывающая и записывающая головка расположится напротив ячейки (в зависимости от того, появился ли символ П, Л или С). Таким образом, управляющее устройство является последовательностной машиной с двумя выходными преобразователями: вход машины - воспринимаемый символ с головки (алфавит входа ); состояния - символы из алфавита первый выход - сигнал на запись из алфавита второй выход - сигнал на перемещение головки из алфавита . Работу этой последовательностной машины можно задать тремя таблицами: таблицей автомата и двумя таблицами преобразователей. При описании работы машины Тьюринга принято совмещать эти таблицы в одну основную таблицу.

Таблица 13.1

Таблица 13.2

Таблица 13.3

Таблица 13.3

Например, если таблица автомата есть табл. 13.1, таблица первого преобразователя - табл. 13.2, второго - табл. 13.3, то совмещенная таблица, целиком описывающая работу машины Тьюринга, имеет вид табл. 13.4.

В клетках этой таблицы первым записан символ из , вторым - из , третьим из . Если основная таблица машины Тьюринга задана, то при каждом заполнении ленты работа машины однозначно определена.

Далее будем считать, что символ состояния управляющего устройства означает состояние покоя машины Тьюринга, т. е. строка основной таблицы имеет следующие свойства: 1) первым символом в каждой клетке этой строки всегда является (и никогда при

2) вторым символом в клетке столбца этой строки является тот же символ (и никогда при );

3) третьим символом в каждой клетке этой строки является символ С (и никогда П или Л) (см. пример табл. 13.5).

Таблица 13.5

Поэтому, если управляющее устройство в какой-то момент времени имеет состояние , то где бы ни находилась считывающая и записывающая головка и каким бы ни было заполнение ленты, в последующие моменты времени управляющее устройство будет оставаться в том же состоянии, головка также не двинется, и заполнение ленты останется прежним. Для упрощения записи основной таблицы мы будем опускать в ней строку (см. табл. 13.6).

Таблица 13.6

Таблица 13.7

В дальнейшем для простоты будем предполагать, что алфавит символов состоит всего лишь из двух символов: «пустого» 0 и «непустого» 1.

Приведем несколько простых примеров машин Тьюринга. Начальное состояние машины мы будем называть состоянием .

1) Машина А (табл. 13.7). Если в начальный момент машина А находится в состоянии и воспринимает заполненную клетку, то она «отыскивает» на ленте первую пустую (т. е. заполненную символом 0) клетку справа от той, на которой находится головка, «печатает» там символ 1 и останавливается. Если же вначале головка находилась напротив пустой клетки, то машина ее «заполняет» и останавливается, не передвигая головку.

В табл. 13.8 и 13.9 приведены два варианта работы машины.

Таблица 13.8

Черта над соответствующей ячейкой ленты означает, что считывающая и записывающая головка находится в данный момент как раз напротив этой ячейки. Символ над чертой - состояние управляющего устройства в этот момент.

Таблица 13.9

Многоточия означают те ячейки ленты, заполнение которых заведомо не меняется в рассматриваемые такты работы машины (поскольку головка не достигает этих ячеек).

2) Машина В (табл. 13.10). Эта машина имеет также лишь одно состояние (не считая состояния покоя). Она «стирает» единицу в той ячейке, где находится головка (если эта ячейка непуста), или в первой слева непустой ячейке, передвигает головку еще левее на ячейку и останавливается. Один вариант работы машины В приведен в табл. 13.11.

Таблица 13.10

Таблица 13.11

3) Машина С (табл. 13.12). Эта машина отыскивает первую после группы нулей группу единиц справа от начальной ячейки и останавливается около последней из этих единиц. Вариант работы машины С приведен в табл. 13.13.

Таблица 13.12,

Таблица 13.13

В некоторых случаях машина Тьюринга может быть недоопределенной в том смысле, что не все клетки ее основной таблицы заполнены. Это допускается в тех случаях, когда по тем или иным причинам можно заранее сказать, что соответствующие сочетания состояний машины и символов на ленте никогда не встретятся. Рассмотрим пример.

Таблица 13.14

4) Машина D (табл. 13.14). Эта машина заполняет первый промежуток справа между двумя группами единиц, оставляя всего одну незаполненную ячейку. Если головку машины в нулевой такт не помещать напротив пустой ячейки в состоянии , то сочетания и никогда не встретятся и в дальнейшем: состояние вообще никогда не повторится, а в машина может прийти лишь тогда, когда единица уже напечатана. Вариант работы машины приведен в табл. 13.15.