Машина Тьюринга
Содержание
Введение
Машина Тьюринга (Turing machine) — абстрактный вычислитель, предложенный британским математиком Аланом Тьюрингом в 1936 году для формализации понятия алгоритма.
Неформально машина Тьюринга определяется как устройство, состоящее из двух частей:
- бесконечной одномерной ленты, разделённой на ячейки,
- головкой, которая представляет из себя детерминированный конечный автомат.
При запуске машины Тьюринга на ленте написано входное слово, причём на первом символе этого слова находится головка, а слева и справа от него записаны пустые символы. Каждый шаг головка может перезаписать символ под лентой и сместиться на одну ячейку, если автомат приходит в допускающее или отвергающее состояние, то работа машины Тьюринга завершается.
Определение
Определение машины
Формально машина Тьюринга определяется как кортеж из восьми элементов
, где- — алфавит, из букв которого могут состоять входные слова
- — символы, которые могут быть записаны на ленту в процессе работы машины
- — пробельный символ (от слова blank)
- — множество состояний управляющего автомата
- — допускающее состояние автомата
- — отвергающее состояние автомата
- — стартовое состояние автомата
- — всюду определённая функция перехода автомата
Отметим, что существуют различные вариации данного выше определения (например, без отвергающего состояния или с множеством допускающих состояний), которые не влияют на вычислительные способности машины Тьюринга.
Определение процесса работы
Кроме формального определения самой машины требуется также формально описать процесс её работы. В определении для простоты будем предполагать, что головка в процессе работы не записывает на ленту символ
. Это не ограничивает вычислительной мощности машин Тьюринга, поскольку для каждой машины можно сопоставить аналогичную ей, но не пищущую на ленту.Назовём конфигурацией машины Тьюринга тройку
, где — текущее состояние автомата, а — строки слева и справа от головки до первого пробельного символа соответственно. В данной записи головка находится над ячейкой, на которой написана первая буква (или , если ).В дальнейшем используются следующие обозначения:
,Определим на конфигурациях отношение перехода
:- если , то
- если , то
- если , то
Особо следует рассмотреть случай переходов по пробельному символу:
- если , то
- если , то
- если , то
Очевидно, что определённое отоношение является функциональным: для каждой конфигурации
существует не более одной конфигурации , для которой .Для машины Тьюринга, которая пишет символ
на ленту также можно дать аналогичное формальное определение. Оно будет отличаться тем, что символы в строчках конфигурации могут содержать пробелы, и для того, чтобы эти строчки имекли конечную длину, нужно аккуратно учесть наличие пробелов при записи правил перехода. Это предоставляется читателю в качестве упражнения.Результат работы
Машину Тьюринга можно рассматривать как распознаватель слов языка. Пусть
— машина Тьюринга, распознаваемый ей язык определяется как .Также можно рассматривать машины Тьюринга как преобразователь входных данных в выходные. Машина
задаёт вычислимую функцию , причём . Переход автомата в состояние можно интерпретировать как аварийное завершение программы (например, при некорретном входе).Примеры машин-распознавателей и машин-преобразователей будут даны ниже.
Примеры машин Тьюринга
Прибавление единицы
Для начала приведём пример машины-преобразователя, которая прибавляет единицу к числу, записанному на ленте в двоичной записи от младшего бита к старшему. Алгоритм следующий:
- в стартовом состоянии головка идёт вправо от младшего бита к старшему, заменяя все единицы на нули,
- встретив нуль или пробельный символ головка записывает единицу, после чего переходит в состояние ,
- в состоянии головка идёт влево от старшего бита к младшему, не изменяя символы 0 и 1 на ленте,
- встретив в состоянии пробельный символ, головка перемещается на один символ вправо и переходит в состояние , завершая работу.
Следующее определение формализует данный алгоритм:
- ,
-
Проверка того, является ли слово палиндромом
В качестве примера машины-распознавателя приведём машину, распознающую палиндромы над алфавитом
. Алгоритм следующий:- если строка на ленте — пустая, то перейти в допускающее состояние
- надо запомнить первый символ слова в состоянии автомата,
- стереть его,
- перейти в конец ленты:
- если оставшаяся строка на ленте — пустая, то перейти в допускающее состояние
- если последний символ совпадает с запомненным, стереть его, перейти в начало ленты и повторить с первого шага
- в случае несовпадения перейти в отвергающее состояние