Теория вычислений и машины Тьюринга
Теперь понятие алгоритма можно отождествить с машиной Тьюринга, работа которой удовлетворяет требованиям 1-8.
Согласно требованию 7 длина слов конечна, но неограниченна, а для этого требуется разделенная на отдельные ячейки счетная лента неограниченной длины, на которую можно записать как входные, так и выходные слова. Удовлетворить данное требование можно с помощью ограниченной справа, но неограниченной слева разделенной на ячейки ленты. При этом будем считать, что в одну ячейку можно записать не более одного символа, что не принципиально и создает только однозначность восприятия и исполнения предписания алгоритма (требование 4).
Согласно требованию 1 записи должны иметься только в конечном числе ячеек, то есть в подавляющем числе ячеек содержится символ "пусто" ( ).
Согласно требованию 3 выполнение алгоритма носит последовательный, поэтапный характер и, если оно не обрывается, всегда ведет от одного состояния к другому. Предписание для алгоритма содержит как общие правила, определяющие сами действия над символами, способы выделения результата вычислений и т. д., так и указания, регламентирующие правила перехода от одного состояния к другому, следующему непосредственно за ним. Согласно требованиям 4 и 5 такой переход должен быть определен однозначно. При этом каждое указание требует от вычислителя определенного образа действий типа "изменить содержимое отдельной ячейки ленты", "найти другую ячейку ленты", "прекратить вычисления" и т. п. Действие "найти другую ячейку ленты" можно ограничить действием "найти соседнюю ячейку ленты", то есть машина Тьюринга может работать без перескоков и после выполнения предписания всегда смещаться на соседнюю ячейку, если не выработано условие останова вычислений.
Ячейку, с которой оперирует вычислитель, обычно называют текущей рабочей ячейкой, и предписание можно составить таким образом, чтобы изменение записи всегда происходило только в рабочей ячейке.
Отсюда, в любом состоянии предписание может состоять в следующем: "изменить содержимое рабочей ячейки", "сдвинуть рабочую ячейку вправо, а если возможно, то и влево", "остановиться".
Согласно требованиям 4-6 порядок этих действий должен быть однозначным и полностью ясным, а если процесс вычислений не остановлен, указание должно точно и однозначно предписывать, к какому непосредственно следующему указанию следует перейти после выполнения предыдущего.
Согласно требованию 6 для оценки текущего состояния, которое предваряет выполнение некоторого указания, можно привлечь только текущую запись на тенте, текущую рабочую ячейку и историю проведения вычислений.
Согласно требованию 8 у вычислителя может быть только ограниченная память. Поэтому в оценке его состояния может принять участие только ограниченная (содержательная) часть записей на ленте. Но просмотр записи из не более ячеек можно осуществить в виде
-кратного просмотра содержимого только одной ячейки и за один раз. Поэтому для оценки текущего состояния вычислителя достаточно содержимого единственной ячейки, которую можно считать текущей информационной ячейкой. В свою очередь, рабочую и информационные ячейки можно совместить в одной, так как предписание всегда можно составить таким образом, чтобы сначала рабочая ячейка сменялась информационной, а затем на основе анализа содержимого последней разыскивалась исходная рабочая ячейка и определялся требуемый порядок действий (в современной терминологии "косвенная адресация").
Таким образом, для получения исполняемого указания оценку состояния вычислителя можно осуществить, используя только рабочую ячейку, ее содержимое и (пред)историю хода вычислительного процесса, от которой также можно избавиться, изменив предписание.
Для наглядности введенных соглашений рассмотрим пример. Пусть рабочий алфавит содержит два символа: и
, предписание
содержит
указаний вида:
- Если рабочая ячейка содержит символ
, остановись. Если рабочая ячейка содержит
, замени его символом
и далее действуй согласно второму указанию.
- Если рабочая ячейка содержит символ
, замени его символом
в том случае, когда предыдущее действие выполнялось согласно первому указанию, и действуй далее согласно третьему указанию; в противном случае остановись. Если рабочая ячейка содержит символ
, остановись.
Выделенную курсивом ссылку на предыдущее указание можно устранить следующим образом:
- Если рабочая ячейка содержит символ
, замени его символом
и действуй согласно третьему указанию.
- Если рабочая ячейка содержит символ
, остановись.
Введем состояние. (Здесь
вновь не арифметическое действие, а следующий за
символ). Тогда:
- Если рабочая ячейка содержит символ *, остановись. Если рабочая ячейка содержит
, замени его символом
и далее действуй согласно
указанию.
- Если рабочая ячейка содержит символ
, остановись. Если рабочая ячейка содержит символ
, остановись. Модифицированное предписание по своему действию совпадает с исходным, но не содержит ссылок на (пред)историю.
В результате отпадает необходимость в явном виде выражать влияние прошлого в вычислительного процесса на его будущее. Для этого достаточно воспользоваться указанием на положение исполняемого в данный момент предписания во всем списке предписаний, реализуемых данным вычислителем.
Таким образом, имеются достаточные основания утверждать, что каждому алгоритму можно поставить в соответствие экстенсионально эквивалентный ему алгоритм, работающий с символами на "бесконечной" ленте по следующим общим правилам.
Рабочее состояние алгоритма в каждый момент его работы определяется текущей рабочей ячейкой и ее содержимым в тот же момент времени. Состояние вычислительного процесса вплоть до данного момента времени полностью определяется текущей рабочей ячейкой, текущим содержимым всей ленты и тем указанием или его номером в заранее оговоренном списке указаний, согласно которому выполняется текущее вычисление. Выбор текущего действия полностью и однозначно определяется содержимым текущей рабочей ячейки. Для реализации любого алгоритма требуется всего три типа действий: изменение содержимого рабочей ячейки; сдвиг рабочей ячейки на одну ячейку вправо или, если возможно, то и влево; останов. Первые два действия содержат также указание, определяющее, к какому следующему указанию надо перейти.
Алгоритмы, указания которых отвечают требованиям такой стандартной формы представления, можно промоделировать на машинах Тьюринга, так как в каждом конкретном случае введение в них предписаний общего характера фактически приводит к адекватному уточнению понятия "алгоритм".
"Базовый комплект" машины Тьюринга содержит (рис. 3.1):
- операционное устройство, которое может находиться в одном из дискретных состояний, принадлежащих некоторой конечной совокупности
;
- комбинированную читающую и пишущую головку;
- счетную ленту, обладающую описанными выше свойствами;
- лентопротяжный механизм, который способен сдвигать находящуюся под головкой текущую рабочую ячейку на одну ячейку вправо или, если это возможно, то и влево (на рис. 3.1 механизм не показан).
Начальным состоянием является
, а ячейки ленты считаются пронумерованными начиная с левого края числами
Читающая и пишущая головка способна выполнять действия (считывать, стирать и записывать) над рабочим алфавитом
и буквой
, которая символизирует "пусто". Каждая ячейка ленты в каждый момент времени содержит букву из множества
, причем почти все ячейки заняты буквой
Лампочка МО зажигается при выполнении указания "машинный останов", а лампочка ПЛ - в случае когда начальная ячейка ленты находится под считывающей головкой, а затребованное действие состоит в сдвиге рабочей ячейки влево (сигнал "переход за край ленты").
Рассмотрим конкретный пример работы простейшей , оперирующей с рабочим алфавитом
, символом "пусто" вида
и тремя рабочими состояниями
,
и
Пусть работает следующим образом [45]:
- В состоянии
вне зависимости от содержимого рабочей ячейки (
или
)
сдвигает рабочую ячейку вправо и переходит в состояние
- В состоянии
заменяет стоящий в ячейке символ на
, то есть выполняет подстановку вида
или
, и переходит в состояние
- В состоянии
останавливается вне зависимости от содержимого рабочей ячейки.
, работающая согласно приведенному предписанию, фактически делает следующее. После установки головки над некоторой ячейкой ленты (состояние
)
сдвигает рабочую ячейку вправо, стирает содержимое этой ячейки, заносит в нее символ
и останавливается.
Для наглядности проиллюстрируем работу такой с помощью рис. 3.2 -3.7 .
В исходном положении лента содержит только символы "пусто", го ловка размещается над ячейкой, помеченной стрелкой, а находится в состоянии
, обнаруживает символ "пусто", сдвигается вправо на одну ячейку (см. рис. 3.3) и переходит в состояние
(см. рис. 3.4). Затем
заменяет символ "пусто" в текущей рабочей ячейке на символ
(см. рис. 3.5) и переходит в состояние
(см. рис. 3.6). В этом положении согласно предписанию
останавливается, о чем сигнализирует лампочка МО (см. рис. 3.7).
В данном случае не требуется уточнять, что речь идет о вычислимых только по Тьюрингу функций, так как если функция вычислима по Тьюрингу, она вычислима и по Клини, и по Черчу, и по Маркову, и т. д.
Несмотря на кажущийся примитивизм выполняемых МТ "элементарных" действий, с их помощью можно представить алгоритм вычисления практически любой вычислимой функции. В частности, чтобы машина Тьюринга смогла реализовать приведенный ранее алгоритм,а суммирования достаточно, чтобы она имела три состояния: начальное , чтобы выполнить шаг 1, и два рабочих:
если
, и
, если