Опубликован: 06.08.2007 | Доступ: свободный | Студентов: 1180 / 406 | Оценка: 4.45 / 4.29 | Длительность: 18:50:00
Специальности: Программист
Лекция 3:

Языки и их представление

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Итак, если сокращать нельзя, достраиваем слово до ближайшего подходящего квадрата. В данном случае удобнее достроить слово до a^{(n+2)^2}, т.к. для достройки до a^{(n+1)^2} нам бы потребовалось перевести BE \rightarrow! a, т.е. опять что-то сократить. Напомним, что в КЗ-грамматиках допускается переход аксиомы в пустую цепочку ( \varepsilon ), если аксиома нигде более не встречается в правых частях правил (т.е. когда из начального ничего получают другое ничего).

Мы получили несокращающую грамматику. Но широко используемые при ее построении правила вида AB \rightarrow! BA ( ABC \rightarrow! CBA и т.п.), очевидно, не подходят под определение НС-грамматики (убедитесь!). Такие "рокировки" , однако, легко раскрыть через цепочку правил вида

AB \rightarrow A'B \rightarrow A'B' \rightarrow BB' \rightarrow BA

где A' и B' - нигде более в грамматике не используемые вспомогательные знаки. Отметим, что замену на промежуточные знаки и обратно на исходные нужно осуществлять в одном и том же порядке (слева-направо или, наоборот, только справа-налево), иначе в общем случае (когда назначение A и B в грамматике различно) возникают лишние цепочки.

Так, применение замены

AB \rightarrow A'B \rightarrow A'B' \rightarrow A'A \rightarrow BA

(нарушен порядок замен) при наличии соответствующего прово- кационного окружения допускает подмену B на A:

x=A\underline{AB}B \xrightarrow[]{*} AA'\underline{AB} \xrightarrow[]{*} A\underline{A'B}A \xrightarrow[]{*} ABAA=y
(\mid \! x \! \mid _A = \mid \! x \! \mid _B = 2, \quad a\mid \! y \! \mid _A = 3 \;  и \mid \! y \! \mid _B=1 )!

Замена AB на BA в рамках НС-грамматики коротко обозначается, как и обычный вывод: AB \xrightarrow[]{*} BA.

Таким образом, один из возможных наборов правил искомой НС-грамматики имеет следующий вид:

Правила Вид получаемой цепочки
S'\rightarrow \varepsilon   \mid    \alpha   \mid  \alpha^4   \mid   BSE BSE
S\rightarrow CSD \mid CD BCnDn E
CD \xrightarrow[]{*} DCA BCn-1DCADn-1E
CA \xrightarrow[]{*} AC BCn-1(DA)nCE
B(DAn)nCnE
BD \xrightarrow[]{*} aaB a2BAn(DAn)n-1CnE
BA \xrightarrow[]{*} AB (a2An)nBCnE
CE \xrightarrow[]{*} Eaa (a2An)nBEa2n
A \xrightarrow[]{*} a an*n+2nBEa2n
BE \xrightarrow[]{*} a^4 a^{n^2 +4n+4}= a^{(n+2)^2}

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

Формально машина Тьюринга ( 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. Такая машина Тьюринга называется универсальной машиной Тьюринга.

Неразрешимость проблемы останова

Проблема останова для машины Тьюринга формулируется следующим образом: можно ли определить по данной машине Тьюринга в произвольной конфигурации со строкой конечной длины непустых символов на ленте остановится ли она? Говорят, что эта проблема рекурсивно неразрешима, что означает, что не существует алгоритма, который для любой Tm в произвольной конфигурации определял бы остановится ли в конце концов Tm.

Перенумеруем все машины Тьюринга и все возможные входы над алфавитом \Sigma. Рассмотрим язык

L1={xi|xi не допускается Ti}

Ясно, что L_1 не допускается никакой Tm. Допустим, что это не так. Пусть L_1 допускается Tj. Тогда x_j \in L_1 тогда и только тогда, когда x_j не допускается T_j. Но поскольку T_j допускает L_1, x_j \in L_1 тогда и только тогда, когда допускается T_j, - противоречие. Так что L_1 - не является рекурсивно перечислимым множеством.

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
Артур Гибадуллин
Артур Гибадуллин
Россия, г. Нижневартовск