Опубликован: 21.08.2007 | Уровень: специалист | Доступ: свободно | ВУЗ: Тверской государственный университет
Лекция 9:

Алгоритмы: машины Тьюринга

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Стандартная заключительная конфигурация

Назовем заключительную конфигурацию стандартной, если в ней головка наблюдает первый значащий символ результата, который находится в 1-ой ячейке (т.е. в той же ячейке, где начиналось входное слово).

Лемма 9.1.Для всякой м.Т. {\cal M}\ можно построить эквивалентную м.Т. {\cal M}^\prime, у которой все заключительные конфигурации стандартны.

Доказательство. Пусть {\cal M} = <Q, \Sigma, P,q_0, q_f>. Определим по ней м.Т. \ {\cal M}^\prime = <Q^\prime, \Sigma^\prime, P^\prime,q_0^\prime, q_f^\prime>, которая удовлетворяет требованиям леммы. Положим \Sigma ' = \Sigma  \cup  \{  a' | a \in  \Sigma \}  \cup  \{  #\}, где # - новый символ. {\cal M}^\prime\ работает следующим образом.

  1. Отмечает символ в первой ячейке штрихом и переходит в начальное состояние {\cal M}:\ \ q_0^\prime a  \rightarrow q_0 a^\prime \textit{Н}.
  2. Далее работает как {\cal M},\ но сохраняет штрих в первой ячейке и вместо пустого символа \wedge записывает #. Для этого для каждой команды qiaj -> qk alC из P'
  3. в P' добавляется ее дубликат qiaj' -> qk al'C, в правых частях команд символ \wedge всюду заменяется на # и для каждой команды вида q_{i} \wedge  \to  q_{k} a_{l} C в P' добавляется команда qi # -> qk al C. После завершения этого этапа все посещенные в процессе работы головкой {\cal M}\ ячейки составляет непрерывный отрезок, не содержащий пустых символов.
  4. Далее {\cal M}^\prime\ стирает ненужные символы # слева и справа от блока ячеек, содержащего первую ячейку и все ячейки с символами результата, и переходит в одну из трех следующих конфигураций:
    K_1= q_\textit{л} \#^\prime \#\ldots \# w\wedge,\ \ K_2=\wedge q_\textit{п} w \# \ldots \#\#^\prime, \ \  K_3 =\wedge q_\textit{н} w_1 a^\prime w_2\wedge,
    где w - результат работы { cal M} (с заменой символов \wedge внутри w на #) и w1aw2 = w.
  5. Сдвигает в нужном направлении результат, совмещая его начало с ячейкой, помеченной штрихом, заменяет все # внутри w на \wedge , снимает штрих в 1-ой ячейке и останавливается. Например, для K1 это достигается с помощью следующих команд (мы предполагаем, что ни одно из используемых ниже состояний q_{л}, q_{1}, p, p_{1}, p_{2}, p_{3}, p^{a}, p^{a'} (a \in  \Sigma  \cup  \{  #\} ) не входит в Q ):
    • поиск левого конца w: q_{л} a  \to  q_{л}aП  (a \in  \{ \#',  \#\} ) ; q_{л}a  \to  q_{1}a'П    (a \in  \Sigma ) (отметили первый символ w ), q_{л} \wedge  \to  p_{3} \wedge   Л; (результат пуст);
    • поиск правого конца w: q_{1} a \to  q_{1}aП    (a \in  \Sigma  \cup  \{  #\}  ), q_{1} \wedge  \to  p \wedge  Л (в состоянии p наблюдает последний символ w );
    • сдвиг результата на 1 ячейку влево: pa \to  p^{a} \wedge   Л;    p^{a} b \to  p^{b} aЛ; pa b' -> pb'aП; pb' # -> p1 b'П;
    • возврат к правому концу и переход к следующему сдвигу: p_{1} a \to  p_{1}aП  (a \ne  \wedge ); p_{1}\wedge  \to  p \wedge   Л;
    • при сдвиге до 1-ой ячейки замена символов # на \wedge и удаление штриха:
      p^{a\prime} \#^\prime \rightarrow p_2 a^\prime \textit{Н}; p_2 b \rightarrow p_2 b \textit{П};\\ p_2 \wedge \rightarrow p_3 \wedge \textit{Л};\\ 
p_3 \# \rightarrow p_3 \wedge \textit{Л}; \ \ p_3 b \rightarrow p_3 b \textit{П}\ (b \neq \#, b \neq a^\prime) ;
\ \ p_3 a^\prime \rightarrow q_f^\prime a \textit{Н}.
    Из построения непосредственно следует, что м.Т. {\cal M}^\prime\ удовлетворяет требованиям леммы.

Односторонние машины Тьюринга

Машина Тьюринга {\cal M}\ называется односторонней, если в процессе вычисления ее головка никогда не сдвигается левее начальной ячейки (т.е. всегда находится в ячейках с положительными номерами).

Лемма 9.2. Для всякой м.Т. \cal M можно построить эквивалентную одностороннюю м.Т. {\cal M}^\prime\ .

Доказательство. Пусть \ {\cal M} = <Q, \Sigma, P,q_0, q_f>. Будем считать (используя лемму 1 ), что \cal M\ завершает работу в стандартных конфигурациях. Требуемая м.Т. \ {\cal M}^\prime = <Q^\prime, \Sigma^\prime,
P^\prime,q_0^\prime, q_f^\prime>\ будет моделировать работу \cal M, используя "многоэтажную" ленту. Содержимое ячеек на 1-ом (нижнем) этаже будет на каждом такте совпадать с содержимым тех же ячеек \cal M, на 2-ом этаже будет копироваться содержимое левой полуленты: на нем в i -ой ячейке {\cal M}^\prime\ будет тот же символ, что и в -i -ой ячейке \cal M. Кроме того, на 3-ем этаже в 1-ой ячейке будет стоять отмечающий ее символ #. Таким образом, \Sigma ' = \Sigma  x \Sigma  x \{ \wedge ,  # \} \cup  \Sigma. Работа {\cal M}^\prime\ будет происходить следующим образом.

  1. 1) На первом этапе отмечается 1-я ячейка и содержимое входа переписывается на 1-ый этаж трехэтажной ленты:
    q_0^\prime a \rightarrow p_1 \left(\frac{\frac {\#}{\wedge}}{a}\right)\textit{П}\ \ (a \in
\Sigma);\qquad p_1 a \rightarrow p_1 \left(\frac{\frac {\wedge}{\wedge}}{a}\right)\textit{П}\ (
a \in \Sigma \backslash \{\wedge \};\\\qquad p_1 \wedge \rightarrow p_2\,\wedge\, \textit{Л};\\
\ p_2 \left( \frac{\frac {\wedge}{\wedge}}{a} \right) \rightarrow
p_2 \left(\frac{\frac {\wedge}{\wedge}}{a} \right)\,\textit{Л}\ \ (a \in \Sigma);\ \ p_2
\left(\frac{\frac {\#}{\wedge}}{a}\right) \rightarrow
q_0 \left(\frac{\frac {\#}{\wedge}}{a}\right)\textit{Л}\ \ (a \in \Sigma).
  2. Затем {\cal M}^\prime\ моделирует работу \cal M\ , используя для работы на 2-ом этаже дубликаты состояний (со штрихами) и команды со сдвигами в обратном направлении. Для команды q ,a -> r , b ,C из P и для всех c\in  \Sigma в P' поместим команды:

    \ q\,\left(\frac{\frac{\wedge}{c}}{a}\right) \rightarrow\ r
 \left(\frac{\frac {\wedge}{c}}{b}\right)\,C\ \ \mbox{   и   }
 q^\prime\,\left(\frac{\frac {\wedge}{a}}{c}\right) \rightarrow\ r^\prime
 \left(\frac{\frac {\wedge}{b}}{c}\right)\,C^\prime,\, \\ 
\mbox{где }C^\prime =
\left\{ \begin{array}{lcl}
  \textit{ П }& \mbox { при  } &  C=\textit{Л}\\
   \textit{Л }& \mbox { при  } &  C=\textit{П}\\
   \textit{Н} & \mbox { при  } & C=\textit{Н}
\end{array} \right.

    Кроме того, для a =\wedge сохраним и старые команды для работы на впервые посещаемых ячейках:

    \ q\,\wedge \rightarrow\ r
 \left(\frac{\frac {\wedge}{\wedge}}{b}\right)\,C\ \mbox{   и    }
 q^\prime\,\wedge \rightarrow\ r^\prime
 \left(\frac{\frac {\wedge}{b}}{\wedge}\right)\,C^\prime.

    Сдвиги \cal M\ из 1-ой ячейки налево в -1-ю и обратно моделируются переходом с одного этажа на другой в 1-ой ячейке \cal M^\prime:

    \ q\,\left(\frac{\frac{\#}{c}}{a}\right) \rightarrow\ \overline{r}
 \left(\frac{\frac {\#}{c}}{b}\right)\,\overline{C}, \mbox{ где при } C=\textit{Л} \overline{r}=r^\prime, \overline{C}= \textit{Н},\\
 \mbox {  а при } C\neq \textit{Л}\ \ \overline{r}=r, \overline{C}= C \\
\ q^\prime\,\left(\frac{\frac{\#}{a}}{c}\right) \rightarrow\ \overline{r}
 \left(\frac{\frac {\#}{b}}{c}\right)\,\overline{C},
 \mbox{ где при }C=\textit{П}\ \ \overline{r}=r,\ \overline{C}= \textit{Н},\\ 
  \mbox{ а при } C\neq \textit{П}\ \ \overline{r}=r^\prime, \overline{C}= C.
  3. После завершения моделирования \cal M\ результат записан в начальных ячейках на 1-ом этаже. \cal M^\prime\ переводит его в первоначальный алфавит \Sigma.

    \ q_f\,\left(\frac{\frac{c}{\wedge}}{a}\right) \rightarrow\ q_f\,a\,\textit{П}
\quad (a \in \Sigma \backslash \{\wedge\},\ c \in \{\wedge, \#\}\ ),\\
\qquad q_f\, \wedge \rightarrow\ q_f^\prime\,\wedge\, \textit{Н}.

    Проверка правильности работы м.Т. \cal M^\prime\ предоставляется читателю (см. задачу 9.4).

Последовательная и параллельная композиции машин Тьюринга

Используя возможность моделирования произвольной м.Т. на м.Т. со стандартными заключительными конфигурациями, легко установить справедливость следующей леммы о последовательной композиции машин Тьюринга.

Лемма 9.3.( Последовательная композиция ) Пусть м.Т. {\cal M}_1 вычисляет функцию f(x), а м.Т. {\cal M}_2 - функцию g(x). Тогда существует м.Т. \cal M,\ вычисляющая функцию h(x) = f(g(x)).

Доказательство Действительно, пусть \ {\cal M}_1 = <Q_1, {\Sigma}_1, P_1,q_0^1, q_f^1>,\ а \ {\cal M}_2 = <Q_2, {\Sigma}_2, P_2,q_0^2, q_f^2>. Используя лемму 9.1, будем считать, что у \ {\cal M}_2 заключительные конфигурации стандартны. Тогда легко проверить, что функция h вычисляется следующей м.Т. \ {\cal M} = <Q_1 \cup Q_2, {\Sigma}_1 \cup {\Sigma}_2,
P, q_0^2, q_f^1>,\ где P= P_{1} \cup  P_{2} \cup  \{ q_{f}^{2} a \to  q_{0}^{1} aН  |  a \in  \Sigma _{2}\}.

Покажем, что работу двух м.Т. можно комбинировать так, чтобы в заключительной конфигурации содержались результаты работы каждой из них над независимыми входами.

Лемма 9.4. ( Параллельная композиция ) Пусть м.Т. {\cal M}_1 вычисляет функцию f(x), а м.Т. {\cal M}_2 - функцию g(x) и символ * не входит в алфавит м.Т. {\cal M}_1. Тогда существует м.Т. \cal M,\ которая по любому входу вида x*y выдает результат f(x)*g(y), т.е. вычисляет функцию H(x*y) = f(x)*g(y).

Доказательство. Пусть \ {\cal M}_1 = <Q_1, {\Sigma}_1, P_1,q_0^1, q_f^1> и \ {\cal M}_2 = <Q_2, {\Sigma}_2, P_2,q_0^2, q_f^2> - м.Т. Не ограничивая общности, будем считать, что эти машины односторонние (по Лемме 2). Определим теперь м.Т. \ {\cal M} = <Q_1 \cup Q_2 \cup Q^\prime,
{\Sigma}_1 \cup {\Sigma}_2 \cup \{*\},P_1 \cup P_2 \cup P^\prime,
p_0, p_f>, которая работает следующим образом.

  1. Начав в конфигурации (p0x*y), находит 1-ый символ y
  2. и переходит в конфигурацию (x*q02y).
  3. Работая как \ {\cal M}_2,\ вычисляет g(y) и переходит при этом в конфигурацию (x*qf2g(y)).
  4. Переписывает *x после g(y) и переходит в конфигурацию g(y)*q01x).
  5. Работая как \ {\cal M}_1,\ вычисляет f(x) и переходит при этом в конфигурацию (g(y)*qf1f(x).
  6. Меняет g(y) и f(x) местами и останавливается.

Корректность этапов 2 и 4 следует из односторонности \ {\cal M}_2 и {\cal M}_1,\ а реализация этапов 1, 3 и 5 достаточно очевидна (см. задачу 9.6).

Построенную в этой лемме м.Т. \ {\cal M}, полученную в результате параллельной композиции \ {\cal M}_1 и \ {\cal M}_2, будем обозначать как \mathbf{par}_*(\mathcal{M}_1,\mathcal{M}_2). Здесь индекс * указывает символ, которым отделяются аргументы \ {\cal M}_1 и \ {\cal M}_2 на ленте \ {\cal M}. Этот символ может быть любым символом, не входящим в алфавит машины \ {\cal M}_1. Например, \mathbf{par}_\#(\mathcal{M}_1,\mathcal{M}_2) будет обозначать параллельную композицию машин \ {\cal M}_1 и \ {\cal M}_2, в которой их аргументы отделены символом #.

Конструкцию параллельной композиции можно обобщить на произвольное конечное число машин Тьюринга.

Следствие. Пусть {\cal M}_1, \ldots , \ {\cal M}_m - машины Тьюринга, вычисляющие функции f1, ... , fm, соответственно. Пусть символ * не входит в алфавиты этих машин. Тогда существует м.Т. \ {\cal M}, перерабатывающая любой вход вида x1*x2* ... *xm (x_{i} \in  \Sigma _{i}^{*}, i=1,\dots , m) в выход f1(x1)*f2(x2)* ... *fm(xm).

Действительно, в качестве \ {\cal M} можно взять м.Т., определяемую выражением \ \mathbf{par}_*(\mathcal{M}_1,\mathbf{par}_*(\mathcal{M}_2, \mathbf{par}_*(\mathcal{M}_3,\ldots
\mathbf{par}_*(\mathcal{M}_{m-1},\mathcal{M}_m)\ldots ))).\\ Будем обозначать эту машину Тьюринга как \mathbf{par}_*(\mathcal{M}_1,\mathcal{M}_2, \ldots , \mathcal{M}_m).

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Алексей Семенов
Алексей Семенов
Россия, Москва, МГУПИ