![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
· бесконечной ленты, разделенной на ячейки, которая используется для ввода и вывода данных, а также для записи промежуточных результатов. На ленте могут записываться буквы некоторого алфавита А={a0,a1,…am} (внешний алфавит машины Тьюринга). Удобно считать, что пустые ячейки на самом деле содержат некоторую букву алфавита А (будем считать для определенности, что это буква a0.)
· управляющей головки, способной читать символы, содержащиеся в ячейках ленты, писать символы в эти ячейки и оставаться на месте или передвигаться на одну ячейку вправо или влево.
· выделенной ячейки памяти, содержащей символ внутреннего алфавита, задающий состояние машины Тьюринга. Головка может находиться в одном из состояний Q={q0,q1…qn} (внутренний алфавит машины Тьюринга). Состояние q0 – заключительное, q1 – начальное.
· механического устройства управления, обеспечивающего перемещение головки относительно ленты
· функциональной схемы — области памяти, содержащей команды (программу) машины Тьюринга, доступной только по чтению
Обычно машина Тьюринга схематично изображается так
![]() |
aj1 | aj2 | ajk | ajr |
Поскольку бесконечную ленту физически представить затруднительно, обычно предполагается, что она конечная и разбита на конечное число ячеек. В процессе работы к существующим ячейкам машина может пристраивать новые ячейки, так что лента может считаться потенциально неограниченной в обе стороны. Все вновь пристраиваемые ячейки пристраиваются пустыми. Без ограничения общности ленту можно считать бесконечной лишь с одной стороны. Тогда ленту можно считать направленной и ее ячейки удобно просматривать слева направо.
Управляющая головка – это некоторое устройство, которое может перемещаться вдоль ленты так, что в каждый рассматриваемый момент времени оно находится в определенной ячейке ленты. Если какая-нибудь ячейка находится в управляющей головке, то говорят также, что машина в данный момент «воспринимает» или «обозревает» эту ячейку.
Внутренняя память машины – это некоторое устройство, которое в каждый рассматриваемый момент находится в некотором «состоянии». Предполагается, что число возможных состояний внутренней памяти конечное и для каждой машины фиксированное. Состояние внутренней памяти мы будем обозначать символами алфавита Q={q0,q1…qn} или любыми другими символами, не входящими во внешний алфавит машины. Совокупность символов, обозначающих состояния внутренней памяти, называется внутренним алфавитом машины. Состояния внутренней памяти часто называют внутренними состояниями машины. Одно из этих состояний называется начальным, с него начинает работу любая машина, пусть это будет состояние q1. Еще одно специальное состояние q0 - заключительное. Символ, обозначающий заключительное состояние, будет называться стоп-символом. Наконец, если в какой-то момент времени внутренняя память машины приходит в заключительное состояние q0, то дальнейших изменений в машине не происходит и машина называется остановившейся. Может случиться, что в машине не будет происходить никаких изменений и при каком-то другом внутреннем состоянии qi. Однако в этом случае мы будем говорить, что машина продолжает работать «вечно».
Предполагается, что машина снабжена особым механизмом, который в зависимости от состояния воспринимаемой ячейки и состояния внутренней памяти может изменить состояние внутренней памяти и одновременно изменить состояние воспринимаемой ячейки и сдвинуть управляющую головку в соседнюю ячейку. В частном случае состояние воспринимаемой ячейки и/или состояние внутренней памяти могут оставаться неизменными, а управляющая головка – неподвижной. Если управляющая головка находится в самой правой ячейке и по ходу работы машина должна сдвинуть управляющую головку в соседнюю справа (отсутствующую) ячейку, то предполагается, что, сдвигая головку, машина одновременно пристроит недостающую ячейку в пустом состоянии. Аналогично работает машина и в случае, когда головка воспринимает самую левую ячейку и по ходу дела машине надо сдвинуть головку еще левее.
Работа машины состоит в том, что она из данного «состояния» по истечении одного такта работы механического устройства переходит в следующее «состояние», затем от нового состояния по истечении такта работы переходит к новому состоянию и так далее. Таким образом, если машина, имея внутреннее состояние qi и воспринимая ячейку ленты с символом ai переводит внутреннюю память в состояние qb и одновременно содержимое воспринимаемой ячейки заменяет символом as, а управляющая головка остается на месте (H), сдвинется на одну ячейку вправо (R) или влево (L), то говорят, что машина выполняет команду соответственно
qi ai→as H qb,
qi ai→as R qb,
qi ai→as L qb.
Совокупность всех команд, которые может выполнять машина, называется ее программой. Так как работа машины по условию целиком определяется состоянием в данный момент ее внутренней памяти qi и состоянием воспринимаемой ячейки aj, то для каждых qi aj (i=1, …, n; j=0, 1, …, m), программа машины должна содержать одну и только одну команду, начинающуюся словом qi aj. Таким образом, программа машина с символами{ a0, a1, …, am } и состояниями { q0,q1…qn } содержит максимум (n+1)(m + 1) команд. При этом некоторые команды являются «мертвыми», в том случае, если ни при каких входных словах в данном алфавите невозможно наступление этой конфигурации. В грамотной с точки зрения реализации программе таких строк быть не должно, хотя формально их наличие ошибкой не является.
Текущее состояние машины Тьюринга или конфигурация – это полная информация о внутреннем состоянии машины, о содержимом ячеек ленты и о ячейке, которую обозревает головка машины. Конфигурация машины может быть записана в виде слова xqiy, где х и у – слова записанные на ленте, причем
· левее слова х и правееслова у все ячейки содержат пустой символ,
· головка машины обозревает ячейку, которая находится сразу после слова х,
· первая буква слова у записана в ячейке ленты, обозреваемой головкой машины,
· qi – состояние машины на данном шаге.
На рисунке определение конфигурации можно продемонстрировать следующим образом.
![]() |
a0 | a0 | a0 | a0 | a0 | a0 | a0 |
Конфигурация с начальным состоянием головки называется начальной, с заключительным состоянием – заключительной. Переход за один такт работы МТ из конфигурации x1 qi y1 в конфигурацию x2 qj y2 будем обозначать так
x1 qi y1 ᅣ x2 qj y2
Если переход из одной конфигурации в другую осуществляется более, чем за один шаг, то это будем обозначать таким образом
x1 qi y1 ᅡ x2 qj y2
Действия МТ весьма разнообразны и зависят не только от программы, но и от начальной записи на ленте и начального положения головки. Любые действия машины можно назвать вычислениями.
Вычисления, производимые МТ в алфавите А – правильные, если выполняются следующие условия
· В начальный момент машина находится в состоянии q1.. а ленте записано некоторое слово W в алфавите А и все ячейки ленты, не содержащие слово W, содержат пустой символ. Головка машины обозревает ячейку с первой буквой слова W.
![]() |
a0 | a0 | a0 | a0 | a0 | a0 | a0 |
· При переходе МТ в заключительное состояние q0 все ячейки левее головки содержат пустой символ. Головка находится над самой левой среди ячеек, не содержащей пустой символ (если такие имеются).
Результатом правильных вычислений МТ считается:
· Пустое слово, если ячейки ленты не содержат непустых символов.
· Слово, первая буква, которого находится в ячейке, обозреваемого головкой, а последняя отлична от пустого символа и такая, что все буквы на ленте являются пустыми символами.
Пример 1. Построить МТ, которая осуществляет переход 0 q1 1 n ᅡ01 n q0 0.
Нетрудно понять, что внешний алфавит для такой МТ достаточно взять двухсимвольный А={0,1}, причем пустым символом будет 0.
Действия МТ в данном случае сводятся к переходу к первому нулю после последовательности единиц и остановке.
Программа МТ для перехода
q10®0Hq0
q11®1Rq2
q21®1Rq2
q20®0Hq0
Удобно представлять программу МТ в виде таблицы, строки которой помечены символами внешнего алфавита МТ, а столбцы – символами внутреннего алфавита МТ. Если МТ имеет команду qi ai→as H qb, то в ячейке на пересечении строки ai и столбца qi находится выражение as H qb . Заполним таблицу, которая соответствует данной МТ.
q1 | q2 | |
0 | 0Hq0 | 0Hq0 |
1 | 1Rq2 | 1Rq2 |
Приведем пошаговое исполнение программы для начальной конфигурации при n =3.
0 q1 1 1 1 0ᅣ 0 1 q2 1 1 ᅣ 0 1 1 q2 1 0 ᅣ 0 1 1 1 q2 0 ᅣ0 1 1 1 q0 0
Пример 2. Построим МТ, которая работает следующим образом (x,у ³1)
q11x01yÞ | 0q0 10, если x³у |
0q0 0, если x<y |
Внешний алфавит для такой МТ достаточно взять двухсимвольный А={0,1}, причем пустым символом будет 0. Будем удалять из каждой группы единиц по одной единице до тех пор, пока одна из групп не станет пустой, причем из первой группы будем удалять из начала, а из второй из конца. Тогда если пустой стала первая группа единиц, то x<y и необходимо обнулить все оставшиеся единицы и остановиться в заключительном состоянии. Если пустой стала вторая группа единиц, то x³у и необходимо обнулить все оставшиеся единицы, поставить одну единицу и остановиться в заключительном состоянии. Программа такой МТ имеет следующий вид
q11®0Rq2 | Удаляем 1 из начала первой группы |
q21®1q2R | Проходим через первую группу единиц вправо |
q20®0q3R | Проходим через разделяющий 0 вправо |
q31®1q3R | Проходим через вторую группу единиц вправо |
q30®0q4L | Устанавливаем головку на конец второй группы единиц |
q41®0q5L | Удаляем 1 из конца второй группы |
q51®1q5L | Проходим через вторую группу единиц влево |
q50®0q6L | Проходим через разделяющий 0 влево |
q61®1q6L | Проходим через первую группу единиц влево |
q60®0q1R | Устанавливаем головку на начало первой группы единиц и повторяем все действия |
q10®0q8R | Если первая группа закончилась, удаляем оставшиеся единицы |
q81®0q8R | Проходим через вторую группу единиц вправо, заменяя 1 на 0 |
q80®0q8H | Остановка |
q40®0q7L | Если вторая группа закончилась, удаляем оставшиеся единицы |
q71®0q7L | Проходим через первую группу единиц влево, заменяя 1 на 0 |
q70®1q0H | Остановка на ячейке с единицей |
Приведем пошаговое исполнение программы для начальной конфигурации при х =3, у =2.
0 q1 1 1 1 0 1 1 0ᅣ00 q2 1 1 0 1 1 0 ᅣ 0 1 q2 1 0 1 1 0ᅣ 0 1 1 q2 0 1 1 0ᅣ
0 1 1 0 q3 1 1 0ᅣ 0 1 1 0 1 q3 1 0 ᅣ 0 1 1 0 1 1 q3 0 ᅣ 0 1 1 0 1 q4 10 ᅣ
0 1 1 0 q5 10 ᅣ 0 1 1 q5 0 1 0 ᅣ 0 1 q6 1 0 1 0 ᅣ 0 q6 1 1 0 1 0 ᅣ q6 0 1 1 0 1 0 ᅣ
0 q1 1 1 0 1 0 ᅣ 0 q2 1 0 1 0 ᅣ 0 1 q2 0 1 0 ᅣ 0 1 0 q3 1 0 ᅣ0 1 0 1 q3 0 ᅣ0 1 0 q4 1 0 ᅣ
0 1 q5 0 0 0 ᅣ0 q6 1 0 0 0 ᅣ0 q6 1 0 0 0 ᅣ q6 0 1 0 0 0 ᅣ0 q1 1 0 0 0 ᅣ0 q2 0 0 0 ᅣ
0 q3 0 0 0 ᅣ0 q4 0 0 0 ᅣ0 q7 0 0 0 ᅣ0 q0 1 0 0
2.3 Вычисление функций на машине Тьюринга
Далее будем применять МТ для правильного вычисления арифметических функций f: N ® N. Для вычисления f(х), х=0,1,…, будем представлять х в виде последовательности х+1 единиц. Если функция зависит от нескольких переменных, то, введя дополнительный символ (разделитель *) во внешний алфавит, будем последовательно записывать последовательности единиц, соответствующие аргументам функции, разделенные символом разделителем.
Правильным вычислением арифметической функции f(х), х=0,1,…, на МТ будем называть правильные вычисления, производимые МТ в алфавите А ={0,1} при переходе от конфигурации 0 q1 1 x+1 0к конфигурации 0 q0 1 f(x)+1 0.
Пример. Вычислим функцию O(x)= 0.
Очевидно, что действия МТ сводятся к последовательной замене всех единиц на ленте нулями.
Программа вычислений
q1 | q2 | |
0 | 1Hq0 | |
1 | 0Rq2 | 0Rq2 |
Пример. Вычислим функцию S(x)=x+1
Для вычисления этой функции достаточно приписать слева одну единицу к последовательности единиц на ленте.
Программа вычислений
q1 | q2 | |
0 | 1Hq0 | |
1 | 1Lq2 |
Пример. Построить машину Тьюринга для вычисления функции C(x)=S(O(x)).
Искомую машину будем строить как суперпозицию машин, вычисляющих функции O(x)= 0 и S(x)=x+1 Возьмем МТ, вычисляющие эти функции. Объединим состояния и программы этих машин. Пусть имеются две машины Т1 и Т2, которые вычисляют функции f1(x) и f2(x) соответственно в одном и том же алфавите. Построим новую машину Тьюринга Т следующим образом. Состояния машины Т2 переобозначим так, чтобы они отличались от состояний Т1. Начальное состояние q11 машины Т1 объявляем начальным состоянием q1 машины Т. Заключительное состояние q02 машины Т2 объявляем заключительным состоянием q0 для машины Т. Заключительное состояние q01 машины Т1 и начальное состояние q12 машины Т2 отождествляем. Полученные команды для обеих машин объединяем в одну программу новой машины. Построенная машина Т вычисляет суперпозицию функций f(x)=f2(f1(x)) и называется суперпозицией машин Т1 и Т2.
В результате из двух таблиц
q1 | q2 | q1 | q2 | |||
0 | 1Hq0 | 0 | 1Hq0 | |||
1 | 0Rq2 | 0Rq2 | 1 | 1Lq2 |
получим одну
q1 | q2 1 | q0 1 | q22 | |
0 | 1H q01 | 1Hq0 | ||
1 | 0R q2 1 | 0R q2 1 | 1L q22 |
Пример. Построить МТ для вычисления функции
Ранее были построены МТ для вычисления функций O(x)= 0 и S(x)=x+1. Легко видеть, что исходная функция – это функция O(x), если x> 1 и функция S(x) в противном случае. Таким образом, перед вычислением нужно определить сколько единиц находится на ленте, и в зависимости от этого переходить к вычислению функций. Для определения количества единиц на ленте будем сдвигаться по ленте вправо и на каждом сдвиге менять состояние МТ. Если обнаружили больше двух единиц, необходимо вернуться назад на начало последовательности единиц и применить МТ для вычисления функции O(x). Если обнаружили две или одну единицу, то устанавливаем головку на начале последовательности единиц и применяем МТ для вычисления функции S(x). Внутренние состояния машин для вычисления функций O(x) и S(x) пометим буквами O и S соответственно. Заключительные состояния этих машин отождествим.
q11®1Rq2
q21®1Rq3 На ленте больше одной единицы
q31®1Lq4 На ленте больше двух единиц
q41®1Lq4
Сдвигаемся обратно на начало последовательности
q40®0RqО0 Начинаем вычисление функции O(x)
q20®0LqS0 На ленте одна единица, начинаем вычисление S(x)
q30®0Lq5
На ленте две единицы, переходим на начало последовательности
q51®1Lq5
q50®0RqS0 начинаем вычисление S(x)
Пример. Построить МТ для вычисления функции
Чтобы правильно вычислить данную функцию, необходимо построить МТ, которая переводит конфигурацию 0 q1 1 x+1 01 y+1 в конфигурацию 0 q0 1 x+y+1 0
Порядок действий для МТ можно выбрать такой. Сначала происходит движение головки вправо до появления на ленте нуля. Этот нуль разделяет аргументы на ленте. Поставим в эту ячейку вместо нуля единицу и вернемся к началу последовательности единиц. Заменим первые две единицы нулями. Тогда на ленте останется единиц.
Набор команд для такой МТ
q11®1Rq2
q21®1Rq2
q20®1Lq3
q31®1Lq3
q30®0Rq4
q41®0Rq5
q51®0Rq0
Программу МТ можно изобразить в виде ориентированного графа, вершинами которого являются внутренние состояния МТ, а дуги помечены тройками из символов внешнего алфавита и символов из множества .
Проверим работу МТ для конкретных значений переменных
Последовательно применим команды МТ для данной конфигурации
0 q1 11110111ᅣ01 q2 1110111ᅣ011 q2 110111ᅣ0111 q2 10111ᅣ01111 q2 0111
ᅣ0111 q3 11111ᅣ011 q3 111111ᅣ01 q3 1111111ᅣ0 q3 11111111ᅣ q3 011111111
ᅣ0 q4 11111111ᅣ00 q5 1111111ᅣ000 q0 111111
Таким образом, головка МТ остановилась в заключительном состоянии на самой левой единицы последовательности из 6 (3+2+1) единиц Функция вычислена правильно.
2.4 Алгоритмически неразрешимые задачи
Согласно Тьюрингу алгоритм решения задачи – это машина Тьюринга для вычисления подходящей арифметической функции. Если машина Тьюринга существует для решения задачи, то такая задача называется алгоритмически разрешимой, в противном случае задача алгоритмически неразрешима. В этом разделе будет показано существование алгоритмически неразрешимых задач, т.е. таких задач для которых не существует машины Тьюринга.
Предварительно пронумеруем все машины Тьюринга следующим образом. Зафиксируем счетные множества символов и
. Будем считать, что внешние алфавиты всех МТ берутся из множества
, при этом символ
принадлежит всем внешним алфавитам МТ и интерпретируется как пустой символ. Символы внутренних алфавитов всех МТ берутся из множества
, а символы
и
принадлежат внутренним алфавитам всех МТ и интерпретируются как начальное и заключительное состояния соответственно.
Каждому символу из множества
поставим в соответствие двоичную последовательность
по следующему правилу
![]() | ![]() |
R | |
L | |
H | |
![]() | |
![]() | |
![]() | ![]() |
![]() | 102i+4 |
![]() | ![]() |
![]() | |
![]() | |
![]() | ![]() |
![]() | 102i+5 |
![]() | ![]() |
Очевидно, что последовательности и
могут совпадать только тогда, когда
.
Команде МТ ,
,
,
сопоставим последовательность такого вида (числа здесь не перемножаются, а последовательно записаны)
Дата публикования: 2015-03-26; Прочитано: 443 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!