Счетчик на машине тьюринга
Машина Тьюринга
Содержание
Машина Тьюринга (англ. Turing machine) — модель абстрактного вычислителя, предложенная британским математиком Аланом Тьюрингом в 1936 году. Эта модель позволила Тьюрингу доказать два утверждения. Первое — проблема останова неразрешима, т.е. не существует такой машины Тьюринга, которая способна определить, что другая произвольная машина Тьюринга на её ленте зациклится или прекратит работу. Второе — не существует такой машины Тьюринга, которая способна определить, что другая произвольная машина Тьюринга на её ленте когда-нибудь напечатает заданный символ. В этом же году был высказан тезис Чёрча-Тьюринга, который терминах теории рекурсии формулируется как точное описание интуитивного понятия вычислимости классом общерекурсивных функций. В этой формулировке часто упоминается как просто тезис Чёрча. В терминах вычислимости по Тьюрингу тезис гласит, что для любой алгоритмически вычислимой функции существует вычисляющая её значения машина Тьюринга. В виду того, что классы частично вычислимых по Тьюрингу и частично рекурсивных функций совпадают, утверждение объединяют в единый тезис Чёрча — Тьюринга.
Неформально машина Тьюринга определяется как устройство, состоящее из двух частей:
При запуске машины Тьюринга на ленте написано входное слово, причём на первом символе этого слова находится головка, а слева и справа от него записаны пустые символы. Каждый шаг головка может перезаписать символ под лентой и сместиться на одну ячейку, если автомат приходит в допускающее или отвергающее состояние, то работа машины Тьюринга завершается.
Определение [ править ]
Определение машины [ править ]
Отметим, что существуют различные вариации данного выше определения (например, без отвергающего состояния или с множеством допускающих состояний), которые не влияют на вычислительные способности машины Тьюринга.
Определение процесса работы [ править ]
Особо следует рассмотреть случай переходов по пробельному символу:
Для машины Тьюринга, которая пишет символ [math]B[/math] на ленту также можно дать аналогичное формальное определение. Оно будет отличаться тем, что символы в строчках конфигурации могут содержать пробелы, и для того, чтобы эти строчки имекли конечную длину, нужно аккуратно учесть наличие пробелов при записи правил перехода.
Результат работы [ править ]
Примеры машин-распознавателей и машин-преобразователей будут даны ниже.
Примеры машин Тьюринга [ править ]
Прибавление единицы [ править ]
Для начала приведём пример машины-преобразователя, которая прибавляет единицу к числу, записанному на ленте в двоичной записи от младшего бита к старшему. Алгоритм следующий:
[math]0[/math] | [math]1[/math] | [math]B[/math] | |
[math]S[/math] | [math]\langle R, 1, \downarrow \rangle[/math] | [math]\langle S, 0, \rightarrow \rangle[/math] | [math]\langle R, B, \leftarrow \rangle[/math] |
[math]R[/math] | [math]\langle R, 0, \leftarrow \rangle[/math] | [math]\langle R, 1, \leftarrow \rangle[/math] | [math]\langle Y, B, \rightarrow \rangle[/math] |
Проверка того, является ли слово палиндромом [ править ]
[math]0[/math] | [math]1[/math] | [math]B[/math] | |
[math]S[/math] | [math]\langle F_0, B, \rightarrow \rangle[/math] | [math]\langle F_1, B, \rightarrow \rangle[/math] | [math]\langle Y, B, \downarrow \rangle[/math] |
[math]F_0[/math] | [math]\langle F_0, 0, \rightarrow \rangle[/math] | [math]\langle F_0, 1, \rightarrow \rangle[/math] | [math]\langle B_0, B, \leftarrow \rangle[/math] |
[math]F_1[/math] | [math]\langle F_1, 0, \rightarrow \rangle[/math] | [math]\langle F_1, 1, \rightarrow \rangle[/math] | [math]\langle B_1, B, \leftarrow \rangle[/math] |
[math]B_0[/math] | [math]\langle R, B, \leftarrow \rangle[/math] | [math]\langle N, 1, \downarrow \rangle[/math] | [math]\langle Y, B, \downarrow \rangle[/math] |
[math]B_1[/math] | [math]\langle N, 0, \downarrow \rangle[/math] | [math]\langle R, B, \leftarrow \rangle[/math] | [math]\langle Y, B, \downarrow \rangle[/math] |
[math]R[/math] | [math]\langle R, 0, \leftarrow \rangle[/math] | [math]\langle R, 1, \leftarrow \rangle[/math] | [math]\langle S, B, \rightarrow \rangle[/math] |
Варианты машины Тьюринга [ править ]
В этом разделе приведены различные варианты машин Тьюринга, которые не отличаются от обычных машин Тьюринга по вычислительной мощности.
Многодорожечная машина Тьюринга [ править ]
Машина Тьюринга с полубесконечной лентой [ править ]
Заменив у машины Тьюринга бесконечную в обе стороны ленту на бесконечную в одну сторону, мы не теряем в вычислительной мощности. По произвольной машине Тьюринга строится двухдорожечная машина с полубесконечной лентой.
Существует алгоритм, по которому для любой машины Тьюринга может быть построена эквивалентная машина Тьюринга с объявленным свойством. Сначала занумеруем ячейки рабочей ленты машины Тьюринга с бесконечной лентой следующим образом:
Затем перенумеруем ячейки, и запишем символ [math]c \in \Pi \setminus \Sigma, B[/math] в начало ленты, который будет означать границу рабочей зоны:
Начальное состояние новой машины Тьюринга устанавливается в одной или другой зоне в зависимости от того, в какой части исходной ленты располагалась головка считывания-записи в исходной конфигурации.
Многоленточная машина Тьюринга [ править ]
Многоленточная машина с [math]n[/math] дорожками эмулируется многодорожечной машиной с [math]2n[/math] дорожками следующим образом: каждая нечётная дорожка соответствует ленте исходной машины, а на каждой чётной дорожке отмечены специальным символом [math]*[/math] позиция головки на ленте выше (считаем, что ленты нумеруются сверху вниз).
Каждый шаг исходной машины эмулируется конечной последовательностью шагов построенной машины следующим образом: исходно головка находится в позиции самой левой отметки и идёт вправо до самой правой отметки, запоминая прочитанные около символов [math]*[/math] символы в состоянии. Пройдя до самой правой отметки, головка возвращается влево, совершая необходимые действия (переписывая символы около отметок и передвигая сами отметки). После такого прохода головка переходит в следующее состояние, завершая эмуляцию шага.
Аланом Тьюрингом было сформулировано следующее утверждение:
Утверждение (Тезис Чёрча-Тьюринга): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ← Номер инструкции (адрес) | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
JZ | DEC | INC | INC | JZ | JZ | DEC | INC | JZ | ЧАС | ← Инструкция | ||
2 | 2 | 3 | 1 | 0 | 1 | 1 | 2 | 0 | ← Регистрационный номер | |||
6 | 1 | 10 | 6 | ← Перейти к номеру инструкции | ||||||||
шаг | IC | Inst # | рег # | J-адрес | reg0 | reg1 | reg2 | reg3 | reg4 | IC | ||
Начало | 0 | 0 | 2 | 0 | 0 | 1 | переместите [# 2] в # 1 и # 3: | |||||
1 | 1 | JZ | 2 | 6 | 0 | 0 | 2 | 0 | 0 | 1 → 2 | JZ | Ошибка перехода: регистр 2 содержит 2 |
2 | 2 | DEC | 2 | 0 | 0 | 0 | 2 → 1 | 0 | 0 | 2 → 3 | DEC | Уменьшить регистр # 2 с 2 до 1 |
3 | 3 | INC | 3 | 0 | 0 | 0 | 1 | 0 → 1 | 0 | 3 → 4 | INC | Регистр увеличения # 3 от 0 до 1 |
4 | 4 | INC | 1 | 0 | 0 | 0 → 1 | 1 | 1 | 0 | 4 → 5 | INC | Регистр увеличения # 1 от 0 до 1 |
5 | 5 | JZ | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 5 → 1 | JZ | U-Jump: регистр 0 пуст |
6 | 1 | JZ | 2 | 6 | 0 | 1 | 1 | 1 | 0 | 1 → 2 | JZ | Ошибка перехода: регистр 2 содержит 1 |
7 | 2 | DEC | 2 | 0 | 0 | 1 | 1 → 0 | 1 | 0 | 2 → 3 | DEC | Уменьшить регистр # 2 с 1 до 0 |
8 | 3 | INC | 3 | 0 | 0 | 1 | 0 | 1 → 2 | 0 | 3 → 4 | INC | Регистр увеличения # 3 от 1 до 2 |
9 | 4 | INC | 1 | 0 | 0 | 1 → 2 | 0 | 2 | 0 | 4 → 5 | INC | Регистр увеличения # 1 от 1 до 2 |
10 | 5 | JZ | 0 | 1 | 0 | 2 | 0 | 2 | 0 | 5 → 1 | JZ | U-Jump: регистр 0 пуст |
11 | 1 | JZ | 2 | 6 | 0 | 2 | 0 | 2 | 0 | 1 → 6 | JZ | Прыгай!: Регистр 2 пуст |
переместите [1] на 2: | ||||||||||||
12 | 6 | JZ | 1 | 10 | 0 | 2 | 0 | 2 | 0 | 6 → 7 | JZ | Ошибка перехода: регистр №1 содержит 2 |
13 | 7 | DEC | 1 | 0 | 0 | 2 → 1 | 0 | 2 | 0 | 7 → 8 | DEC | Уменьшить регистр # 1 с 2 до 1 |
14 | 8 | INC | 2 | 0 | 0 | 1 | 0 → 1 | 2 | 0 | 8 → 9 | INC | Регистр увеличения # 2 от 0 до 1 |
15 | 9 | JZ | 0 | 6 | 0 | 1 | 1 | 2 | 0 | 9 → 6 | JZ | U-Jump: регистр 0 пуст |
16 | 6 | JZ | 1 | 10 | 0 | 1 | 1 | 2 | 0 | 6 → 7 | JZ | Ошибка перехода: регистр №1 содержит 1 |
17 | 7 | DEC | 1 | 0 | 0 | 1 → 0 | 1 | 2 | 0 | 7 → 8 | DEC | Уменьшить регистр # 1 с 1 до 0 |
18 | 8 | INC | 2 | 0 | 0 | 0 | 1 → 2 | 2 | 0 | 8 → 9 | INC | Регистр увеличения # 2 от 1 до 2 |
19 | 9 | JZ | 0 | 6 | 0 | 0 | 2 | 2 | 0 | 9 → 6 | JZ | U-Jump: регистр 0 пуст |
20 | 6 | JZ | 1 | 10 | 0 | 0 | 2 | 2 | 0 | 6 → 10 | JZ | Прыгай!: Регистр 1 пуст |
21 год | 10 | ЧАС | 0 | 0 | 0 | 0 | 2 | 2 | 0 | 10 → 10 | ЧАС | HALT |
Частично рекурсивные функции: построение «удобных инструкций» с использованием рекурсии
Тем не менее, мы видим, что СДВ можно было бы легко осуществить. И на самом деле ниже приводится краткое изложение того, как могут возникать примитивные рекурсивные функции, такие как ADD, MULtiply и EXPonent (см. Boolos-Burgess-Jeffrey (2002) p. 45-51).
Проблемы с моделью счетчика машины
(1) Неограниченная емкость регистров в сравнении с ограниченной емкостью инструкций конечного автомата : как машина будет создавать константы, превышающие емкость ее конечного автомата?
(2) Неограниченное количество регистров по сравнению с ограниченным количеством инструкций конечного автомата : как машина будет обращаться к регистрам с адресными номерами, выходящими за пределы досягаемости / возможностей конечного автомата?
(3) Полностью уменьшенные модели громоздки:
Инструкции Шепердсона и Стерджиса ([r] означает «содержимое регистра r»):
Минский (1967) расширил свой набор из двух инструкций
Машины с двумя счетчиками эквивалентны Тьюрингу (с оговоркой)
Шаг 1. Машину Тьюринга можно смоделировать двумя стеками.
Шаг 2: Стек можно смоделировать двумя счетчиками.
Шаг 3: Четыре счетчика можно смоделировать двумя счетчиками.
В результате автомат с двумя счетчиками может моделировать четыре счетчика, которые, в свою очередь, моделируют два стека, моделирующих машину Тьюринга. Следовательно, автомат плюс два счетчика по крайней мере не менее мощен, чем машина Тьюринга. Машина Тьюринга может легко моделировать конечный автомат с двумя счетчиками, поэтому две машины имеют эквивалентную мощность.
Предостережение: * Если * его счетчики инициализированы на N и 0, то 2CM не может рассчитать 2 N
Доказательству предшествуют несколько интересных теорем:
Что касается второй теоремы о том, что «3CM может вычислить любую частично рекурсивную функцию», автор ставит перед читателем «сложную задачу: умножить два числа, используя только три счетчика» (стр. 2). Основное доказательство включает представление о том, что машины с двумя счетчиками не могут вычислять арифметические последовательности с нелинейными темпами роста (стр. 15), то есть «функция 2 X растет быстрее, чем любая арифметическая прогрессия». (стр.11).
Практический пример расчета счетом
Схема временных интервалов определяла шесть регистров по 13 десятичных цифр, каждый со знаковым битом. Умножение и деление производились в основном путем повторного сложения и вычитания. Версия с квадратным корнем, EC-132, эффективно вычитала последовательные нечетные целые числа, причем каждое уменьшение требовало двух последовательных вычитаний. После первого, уменьшаемое увеличивалось на единицу перед вторым вычитанием.
- Счетчик моточасов на машину
- Счетчик на налог на машину