Машина Тьюринга
- В 1936 году Алан Тьюринг ввёл понятие машины Тьюринга для формализации понятия алгоритма
- Она представляет собой простейшую вычислительную машину с линейной памятью
Машина Тьюринга
Машина состоит из:
- Бесконечной в обе стороны ленты, разделённой на ячейки, в каждой из которых может быть записан один символ некотрого алфавита
- Головки, которая может последовательно передвигаться по ячейкам ленты, читая и записывая символы
- Набора правил перехода, согласно которым действует головка
Графическое представление
Принцип работы
- Изначально на ленту помещены символы, представляющие входные данные
- Остальные ячейки при этом заполнены пустыми символами $\#$
- Головка располагается в ячейке, предшествующей первому символу входных данных
- По окончании работы на ленте остаются выходные данные и головка так же располагается перед ними
Принцип работы
- Преобразование входных данных в выходные происходит по правилам перехода, которые, по сути, представляют программу для Машины
- Правила организуются следующим образом
$$q_ia_j \rightarrow q_{i'}a_{j'}d_k,$$
-
где:
- $q_i$ – текщуее состояние машины
- $a_j$ – символ, на котором стоит головка
Принцип работы
- продолжение:
- $q_{i'}$ – новое состояние машины
- $a_{j'}$ – символ, на который заменяется текущий
-
$d_k$ – направление перемещения головки:
- $L$ – шаг влево
- $R$ – шаг вправо
- $N$ – остаться на месте
Принцип работы
Таким образом, правило $q_ia_j \rightarrow q_{i'}a_{j'}d_k$ можно интерпретировать, как:
«Если машина находится в состоянии $q_i$ и головка в данный момент установлена на ячейке, содержащей символ $a_j$, нужно перейти в состояние $q_{i'}$, записать в текущую ячейку символ $a_{j'}$ и переместиться в направлении $d_k$»
Принцип работы
- Машина может иметь любое конечное число состояний
- При этом выделяются, как минимум, два состояния, которые должны быть у каждой машины: $q_0$ и $q_Z$
- $q_0$ – начальное состояние машины, в котором она находится при запуске
- $q_Z$ – конечное состояние машины, при переходе в которое её работа прекращается
Пример $1$
- Пусть есть задача: дано число в унарной системе счисления, необходимо увеличить значение этого числа на 1
-
Представим правило перехода для машины Тьюринга, решающей эту задачу:
$$q_0\# \rightarrow q_Z1L$$
- Правило гласит, что нужно записать $1$ в начальную позицию, сдвинуться на ячейку влево и завершить работу
Пример $2$
- Представим набор правил перехода для решения аналогичной задачи, но с увеличением на $2$:
$$
q_0\# \rightarrow q_11L\\
q_1\# \rightarrow q_Z1L\\
$$
Пример $3$
- Представим набор правил перехода для решения аналогичной задачи, но с записью новой единицы справа:
$$
q_0\# \rightarrow q_1\#R\\
q_11 \rightarrow q_11R\\
q_1\# \rightarrow q_21L\\
q_21 \rightarrow q_21L\\
q_2\# \rightarrow q_Z\#N
$$
Табличная запись
- Можно представить эти правила в виде таблицы
| $\#$ | $1$ |
$q_0$ | $q_1\#R$ | $-$ |
$q_1$ | $q_21L$ | $q_11R$ |
$q_2$ | $q_Z\#N$ | $q_21L$ |
Табличная запись
- Прочерк в таблице означает, что данная комбинация символа и состояния никогда не достигается
- Из того факта, что правила переходов удобно представлять в виде таблицы, можно понять, что количество правил переходов ограничено сверху количеством состояний, умноженным на количество символов ленточного алфавита
Граф переходов
Формальное определение
Машину Тьюринга $T$ можно определить как следующий кортеж:
$$T = (\Gamma, \Sigma, Q, Q_0, Q_Z, \delta),$$
где:
- $\Gamma$ – ленточный алфавит
- $\Sigma$ – входной алфавит ($\Sigma \subseteq \Gamma$)
- $Q$ – множество состояний машины
Формальное определение
- $Q_0$ и $Q_Z$ – множества начальных и конечных состояний машины соответственно
-
$\delta$ – множество правил переходов, при этом:
$$\delta: (Q \setminus Q_Z) \times \Gamma \rightarrow Q \times \Gamma \times \{L, N, R\}$$
- Стоит также отметить, что все множества, входящие в состав МТ, конечны
Свойства
Основное свойство машины Тьюринга выражено Тезисом Тьюринга:
Если для вычисления некоторой функции существует алгоритм, значения этой функции могут быть вычислены с помощью машины Тьюринга
Свойства
- Таким образом, Тезис Тьюринга гласит, что любой алгоритм может быть запрограммирован на машине Тьюринга, это называется полнота по Тьюрингу
- В частности, алгоритм работы самой машины Тьюринга также может быть запрограммирован на машине Тьюринга, т.е. машина может моделировать сама себя
Применения
- Чтобы доказать, что некоторая система (например, язык программирования) может выполнить любой существующий алгоритм, достаточно показать, что с помощью этой системы можно моделировать работу машины Тьюринга
- Такая система называется Тьюринг-полной
- Чтобы доказать, что не существует алгоритма, решающего какую-либо проблему, достаточно показать, что решение проблемы нельзя получить на машине Тьюринга
Примеры Тьюринг-полных систем
- Все современные ЯП (SQL не входит в это понятие)
- Машина Поста
- Нормальные алгоритмы Маркова
- Игра «Жизнь»