Теория и реализация языков программирования



Машины Тьюринга


Формально машина Тьюринга (Tm) - это

Tm = (Q, \Gamma, \Sigma, D, q_0, F)
, где

Q - конечное множество состояний;

F\subseteq Q
- множество заключительных состояний;

\Gamma
- множество допустимых ленточных символов; один из них, обычно обозначаемый B, - пустой символ

\Sigma
- множество входных символов, подмножество \Gamma, не включающее B,

D функция переходов, отображение из

(Q - F)\times \Gamma \rightarrow Q \times \Gamma\times \{L,R\};
для некоторых аргументов функция D может быть не определена.

q_0
- начальное состояние.

Машина Тьюринга

Рис. 2.2.  Машина Тьюринга

Так определенная машина Тьюринга называется детерминированной. Недетерминированная машина Тьюринга для каждой пары

(Q - F)\times \Gamma
может иметь несколько возможных переходов. В начале n ячеек ленты содержат вход
w \in (\Gamma -\{B\})^*
, остальная часть ленты содержит пустые символы. Обозначим конфигурацию машины Тьюринга как
(q, w, i)
, где
q \in Q
- текущее состояние, i - выделенный элемент строки, "положение головки" , w - текущее содержимое занятого участка ленты. Если головка сдвигается с ячейки, машина должна записать в нее символ, так что лента всегда состоит из участка, состоящего из конечного числа непустых символов и бесконечного количества пустых символов.

Шаг Tm определим следующим образом.

Пусть (q, A1, A2, ... An, i) - конфигурация Tm,

где

1 \leq i \leq n+1
.

Если

1 \leq i \leq n
и D(q, Ai) = (p, A, R)

(R от англ. Right), то

A\neq B
и)

(q, \;A_1A_2\ldots A_n,i)\vdash_{Tm} \; (p, \; A_1A_2 \ldots A_{i-1}AA_{i+1}\ldots A_n, \; i+1)

То есть Tm печатает символ A и передвигается вправо.

Если

2 \leq i \leq n
и
D(q, A_i) = (p, A, L)

(L от англ. Left), то если i = n, то допустимо A = B и

(q, \;A_1A_2\ldots A_n,i)\vdash_{Tm} \; (p, \; A_1A_2 \ldots A_{i-1}AA_{i+1}\ldots A_n, \; i-1)

Tm печатает A и передвигается влево, но не за конец ленты.

Если i = n + 1, головка просматривает пустой символ B.

Если D(q, B) = (p, A, R), то

A\neq B
и

(q, \;A_1A_2\ldots A_n,n+1)\vdash_{Tm} \; (p, \; A_1A_2 \ldots A_n A, n+2)

Если D(q, B) = (p, A, L), то допустимо A=B и

(q, \; A_1A_2 \ldots A_n,n+1)\vdash_{Tm} \; (p, \; A_1A_2 \ldots A_n A, n)

Если две конфигурации связаны отношением

\vdash_{Tm}
, то мы говорим, что вторая получается из первой за один шаг. Если вторая получается из первой за конечное, включая ноль, число шагов, то такое отношение будем обозначать
\vdash_{Tm*}
.

Язык, допускаемый Tm, это множество таких слов из T*, которые будучи расположены в левом конце ленты переводят Tm из начального состояния q0 с начальным положением головки в самом левом конце ленты в конечное состояние. Формально, язык, допускаемй Tm, это

L=\{w\! \mid \! w \in \Sigma^* \; и \; (q_0,w,1)\vdash_{Tm*}(q,u,i) \; для \; некоторых \; q \in F, u \in \Gamma^* \; и \; целого \; i\}

Если Tm распознает L, то Tm останавливается, то есть не имеет переходов после того, как слово допущено. Однако, если слово не допущено, возможно, что Tm не останавливается.

Язык, допускаемый некоторой Tm, называется рекурсивно перечислимым. Если Tm останавливается на всех входах, то говорят, что Tm задает алгоритм и язык называется рекурсивным.

Существует машина Тьюринга, которая по некоторому описанию произвольной Tm и кодированию слова x моделирует поведение Tm со входом x. Такая машина Тьюринга называется универсальной машиной Тьюринга.




Содержание  Назад  Вперед