Возможность порождения формальной грамматикой произвольного перечислимого языка — различия между версиями
KK (обсуждение | вклад) м (→Источники информации)  | 
				м (rollbackEdits.php mass rollback)  | 
				||
| (не показано 18 промежуточных версий 4 участников) | |||
| Строка 1: | Строка 1: | ||
| − | + | __NOTOC__  | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
{{Лемма  | {{Лемма  | ||
|statement=  | |statement=  | ||
| Строка 15: | Строка 10: | ||
Теперь <tex>Tm</tex> недетерминированно симулирует вывод <tex>G</tex>, начиная с <tex>S</tex>. Каждая [[Формальные грамматики#sform|сентенциальная форма вывода]] появляется по порядку между последними двумя <tex>\#</tex>. Если некоторый выбор переходов ведет к терминальной строке, она сравнивается с <tex>w</tex>. Если они совпадают, <tex>Tm</tex> допускает.  | Теперь <tex>Tm</tex> недетерминированно симулирует вывод <tex>G</tex>, начиная с <tex>S</tex>. Каждая [[Формальные грамматики#sform|сентенциальная форма вывода]] появляется по порядку между последними двумя <tex>\#</tex>. Если некоторый выбор переходов ведет к терминальной строке, она сравнивается с <tex>w</tex>. Если они совпадают, <tex>Tm</tex> допускает.  | ||
| − | Формально, пусть <tex>Tm</tex> имеет на ленте <tex>\#w\#A_1A_2  | + | Формально, пусть <tex>Tm</tex> имеет на ленте <tex>\#w\#A_1A_2 \ldots A_k\#</tex>. <tex>Tm</tex> передвигает недетерминированно головку по <tex>A_1A_2    | 
| + | \ldots A_k</tex>, выбирая позицию <tex>i</tex> и константу <tex>r</tex> между <tex>1</tex> и максимальной длиной левой части любого правила вывода в <tex>P</tex>. Затем <tex>Tm</tex> проверяет подстроки <tex>A_iA_{i+1} \ldots A_{i+r-1}</tex>. Если <tex>A_iA_{i+1} \ldots A_{i+r-1}</tex> — левая часть некоторого правила вывода из <tex>P</tex>, она может быть заменена на правую часть. <tex>Tm</tex> может сдвинуть <tex>A_{i+r}A_{i+r+1} \ldots A_k\#</tex> либо влево, либо вправо, освобождая или заполняя место, если правая часть имеет длину, отличную от <tex>r</tex>.  | ||
Из этой простой симуляции выводов в <tex>G</tex> видно, что <tex>Tm</tex> печатает на ленте строку вида <tex>\#w\#y\#</tex>, <tex>y \in V*</tex> в точности, если <tex>S \Rightarrow^* y</tex>. Если <tex>y = w</tex>, <tex>Tm</tex> допускает <tex>L</tex>.  | Из этой простой симуляции выводов в <tex>G</tex> видно, что <tex>Tm</tex> печатает на ленте строку вида <tex>\#w\#y\#</tex>, <tex>y \in V*</tex> в точности, если <tex>S \Rightarrow^* y</tex>. Если <tex>y = w</tex>, <tex>Tm</tex> допускает <tex>L</tex>.  | ||
| Строка 42: | Строка 38: | ||
# <tex>q \rightarrow e</tex> для каждого <tex>q \in F</tex>  | # <tex>q \rightarrow e</tex> для каждого <tex>q \in F</tex>  | ||
| − | Используя правила 1 и 2, <Br>  | + | Используя правила <tex>1</tex> и <tex>2</tex>, <Br>  | 
| − | <tex>A_1 \Rightarrow^* q_o[a_1,a_1][a_2,a_2]  | + | <tex>A_1 \Rightarrow^* q_o[a_1,a_1][a_2,a_2] \ldots [a_n,a_n]A_2</tex>, где <tex>a_i \in \Sigma</tex> для некоторого <tex>i</tex>.  | 
| − | Предположим, что <tex>Tm</tex> допускает строку <tex>a_1a_2  | + | Предположим, что <tex>Tm</tex> допускает строку <tex>a_1a_2 \ldots a_n</tex>. Тогда для некоторого <tex>m</tex> <tex>Tm</tex> использует не более, чем <tex>m</tex> ячеек справа от входа. Используя правило <tex>3</tex>, а затем  <tex>m</tex> раз правило <tex>4</tex>, и, наконец, правило <tex>5</tex>, имеем:<br>  | 
| − | <tex>A_1 \Rightarrow^* q_0[a_1,a_1][a_2,a_2]  | + | <tex>A_1 \Rightarrow^* q_0[a_1,a_1][a_2,a_2] \ldots [a_n,a_n][e,B]^m</tex>.<br>  | 
| − | Начиная с этого момента могут быть использованы только правила 6 и 7, пока не сгенерируется допускающее состояние. Отметим, что первые компоненты ленточных символов в <tex>(\Sigma \cup {e}) \times \Gamma</tex> никогда не меняются. Индукцией по числу шагов <tex>Tm</tex> можно показать, что если <tex>(q_0,a_1a_2  | + | Начиная с этого момента могут быть использованы только правила <tex>6</tex> и <tex>7</tex>, пока не сгенерируется допускающее состояние. Отметим, что первые компоненты ленточных символов в <tex>(\Sigma \cup {e}) \times \Gamma</tex> никогда не меняются. Индукцией по числу шагов <tex>Tm</tex> можно показать, что если <tex>(q_0,a_1a_2 \ldots a_n,1)\vdash(q, X_1X_2 \ldots X_S,r)</tex>, то <tex>q_0[a_1,a_1][a_2,a_2] \ldots [a_n,a_n][e,B]^m \Rightarrow [a_1,X_1][a_2,X_2] \ldots [a_{r-1},X_{r-1}]q[a_r,X_r] \ldots [a_{n+m},X_{n+m}]</tex>, где <tex> a_1,a_2,\ldots,a_n \in \Sigma</tex>, <tex>a_{n+1}=a_{n+2}= \ldots =a_{n+m}=e</tex>, <tex>X_1, X_2, \ldots ,X_{n+m} \in \Gamma</tex> и <tex>X_{S+1}=X_{S+2}= \ldots =X_{n+m}=B</tex>.  | 
| − | Предположение индукции тривиально для нуля шагов. Предположим, что оно справедливо для <tex>k - 1</tex> шагов. Пусть <br><tex>(q_0,a_1a_2  | + | Предположение индукции тривиально для нуля шагов. Предположим, что оно справедливо для <tex>k - 1</tex> шагов. Пусть <br><tex>(q_0,a_1a_2 \ldots a_n,1) \vdash (q_1,X_1X_2 \ldots X_r,j_1) \vdash (q_2,Y_1Y_2 \ldots Y_S,j_2)</tex><br> за <tex>k</tex> шагов. По предположению индукции<br>  | 
| − | <tex>q_0[a_1,a_1][a_2,a_2]  | + | <tex>q_0[a_1,a_1][a_2,a_2] \ldots [a_n,a_n][e,B]^m \Rightarrow [a_1,X_1][a_2][X_2] \ldots [a_{r-1},X_{r-1}]q_1[a_{j_1},X_{j_1}] \ldots [a_{n+m},X_{n+m}</tex>.<br>  | 
Пусть <tex>E=L</tex>, если <tex>j_2 = j_1 - 1</tex> и <tex>E = R</tex>, если <tex>j_2 = j_1 + 1</tex>. В этом случае <tex>D(q_1, X_{j_1}) = (q_1, Y_{j_1}, E)</tex>.  | Пусть <tex>E=L</tex>, если <tex>j_2 = j_1 - 1</tex> и <tex>E = R</tex>, если <tex>j_2 = j_1 + 1</tex>. В этом случае <tex>D(q_1, X_{j_1}) = (q_1, Y_{j_1}, E)</tex>.  | ||
| − | По правилам 6 или 7:<Br>  | + | По правилам <tex>6</tex> или <tex>7</tex>:<Br>  | 
<tex>q_1[a_{j_1}] \rightarrow [a_{j_1},Y_{j_1}]q_1</tex> или <Br>  | <tex>q_1[a_{j_1}] \rightarrow [a_{j_1},Y_{j_1}]q_1</tex> или <Br>  | ||
<tex>[a_{j_1-1},X_{j_1-1}]q_1[a_{j_1},X_{j_1}] \rightarrow q_2[a_{j_1-1}, X_{j_1-1}][a_{j_1}, Y_{j_1}]</tex><Br>  | <tex>[a_{j_1-1},X_{j_1-1}]q_1[a_{j_1},X_{j_1}] \rightarrow q_2[a_{j_1-1}, X_{j_1-1}][a_{j_1}, Y_{j_1}]</tex><Br>  | ||
| Строка 60: | Строка 56: | ||
Теперь <tex>X_i=Y_i \forall i \neq j_1</tex>.  | Теперь <tex>X_i=Y_i \forall i \neq j_1</tex>.  | ||
| − | Таким образом, <Tex>q_0[a_1,a_1][a_2,a_2]  | + | Таким образом, <Tex>q_0[a_1,a_1][a_2,a_2] \ldots [a_n,a_n][e,B]^m \Rightarrow [a_1,Y_1]q_2[a_{j_2},Y_{j_2}] \ldots [a_{n+m},Y_{n+m}]</tex>, что доказывает предположение индукции.  | 
| − | По правилам 8  | + | По правилам <tex>8, 9, 10</tex>:<Br>  | 
| + | Eсли <Tex>q \in F</tex>, легко показать что <tex>[a_1,X_1] \ldots q[a_j,X_j] \ldots [a_{n+m},X_{n+m}] \Rightarrow^* a_1a_2 \ldots a_n</tex>.  | ||
| − | Таким образом, <tex>G</tex> может генерировать <tex>a_1a_2  | + | Таким образом, <tex>G</tex> может генерировать <tex>a_1a_2 \ldots a_n</tex>, если <tex>a_1a_2 \ldots a_n</tex> допускается <tex>Tm</tex>. Таким образом, <tex>L(G)</tex> включает все слова, допускаемые <tex>Tm</tex>. Для завершения доказательства необходимо показать, что все слова из <tex>L(G)</tex> допускаются <Tex>Tm</tex>. Индукцией доказывается, что <tex>A_1 \Rightarrow w</tex> только если <Tex>w</tex> допускается <tex>Tm</tex>.  | 
}}  | }}  | ||
| + | {{Теорема  | ||
| + | |statement=  | ||
| + | [[Перечислимые языки | Язык]] распознается [[Машина Тьюринга | машиной Тьюринга]] тогда и только тогда, когда он генерируется [[Формальные грамматики | формальной грамматикой]].  | ||
}}  | }}  | ||
| − | = Примеры =  | + | == Примеры ==  | 
| − | == Построение МТ по грамматике ==  | + | === Построение МТ по грамматике ===  | 
{{Задача  | {{Задача  | ||
| − | |definition = построить МТ для   | + | |definition = построить МТ для следующей грамматики:  | 
#<tex>S \rightarrow 1S1</tex>  | #<tex>S \rightarrow 1S1</tex>  | ||
#<tex>S \rightarrow 0S0</tex>  | #<tex>S \rightarrow 0S0</tex>  | ||
| Строка 89: | Строка 89: | ||
Причем она перебирает все возможные последовательности применения таких преобразований недетерминированно (если ни одно применить нельзя, МТ возвращает ленту в исходное состояние)  | Причем она перебирает все возможные последовательности применения таких преобразований недетерминированно (если ни одно применить нельзя, МТ возвращает ленту в исходное состояние)  | ||
| − | == Построение грамматики по МТ ==  | + | === Построение грамматики по МТ ===  | 
{{Задача  | {{Задача  | ||
|definition = написать грамматику, генерирующую язык заданной МТ:<br>  | |definition = написать грамматику, генерирующую язык заданной МТ:<br>  | ||
| − | * Четыре состояния <tex>\{A,B,Y,N\}</tex>, где <tex>Y</tex> — доупускающее, <tex>N</tex> — недоупускающее<br>  | + | * Четыре состояния <tex>\{A,B,Y,N\}</tex>, где <tex>Y</tex> — доупускающее, <tex>N</tex> — недоупускающее<br>  | 
* <tex>A \rightarrow A</tex> по единице, головка сдвигается вправо;  | * <tex>A \rightarrow A</tex> по единице, головка сдвигается вправо;  | ||
* <tex>A \rightarrow B</tex> по нулю, головка сдвигается вправо;  | * <tex>A \rightarrow B</tex> по нулю, головка сдвигается вправо;  | ||
Текущая версия на 19:13, 4 сентября 2022
| Лемма: | 
Для любой формальной грамматики существует машина Тьюринга, распознающая язык этой грамматики.  | 
| Доказательство: | 
| 
 Пусть  — грамматика и . Опишем неформально недетерминированную машину Тьюринга , допускающую . Теперь недетерминированно симулирует вывод , начиная с . Каждая сентенциальная форма вывода появляется по порядку между последними двумя . Если некоторый выбор переходов ведет к терминальной строке, она сравнивается с . Если они совпадают, допускает. Формально, пусть имеет на ленте . передвигает недетерминированно головку по , выбирая позицию и константу между и максимальной длиной левой части любого правила вывода в . Затем проверяет подстроки . Если — левая часть некоторого правила вывода из , она может быть заменена на правую часть. может сдвинуть либо влево, либо вправо, освобождая или заполняя место, если правая часть имеет длину, отличную от . Из этой простой симуляции выводов в видно, что печатает на ленте строку вида , в точности, если . Если , допускает . | 
| Лемма: | 
Если язык распознается некоторой машиной Тьюринга, то существует формальная грамматика, которая его генерирует.  | 
| Доказательство: | 
| 
 Пусть допускает . Построим грамматику , которая недерминированно генерирует две копии представления некоторого слова из и затем симулирует поведение на одной из копий. Если допускает слово, то G трансформирует вторую копию в терминальную строку. Если не допускает , то вывод никогда не приводит к терминальной строке. Формально, пусть 
 Используя правила  и ,  Предположим, что  допускает строку . Тогда для некоторого   использует не более, чем  ячеек справа от входа. Используя правило , а затем   раз правило , и, наконец, правило , имеем: Предположение индукции тривиально для нуля шагов. Предположим, что оно справедливо для  шагов. Пусть  По правилам  или : Теперь . Таким образом, , что доказывает предположение индукции. По правилам :  | 
| Теорема: | 
 Язык распознается  машиной Тьюринга тогда и только тогда, когда он генерируется  формальной грамматикой.  | 
Примеры
Построение МТ по грамматике
| Задача: | 
| построить МТ для следующей грамматики:
 | 
Решением будет МТ, которая изменяет содержимое ленты следующим образом ():
- это первое правило грамматики
 - это второе правило грамматики
 - это третье правило грамматики
 - это четвертое правило грамматики
 - , где — допускающее состояние
 
Причем она перебирает все возможные последовательности применения таких преобразований недетерминированно (если ни одно применить нельзя, МТ возвращает ленту в исходное состояние)
Построение грамматики по МТ
| Задача: | 
написать грамматику, генерирующую язык заданной МТ:
  | 
Грамматика будет следующей:
- ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - ;
 - .
 
См. также
Источники информации
- Math Help Planet — Порождающие грамматики
 - И.А. Волкова, А.А. Вылиток, Т.В. Руденко — Формальные грамматики и языки. Элементы теории трансляции, 3-е изд. — Москва, Издательский отдел факультета ВМиК МГУ им. М.В.Ломоносова, 2009 — 115 с. : ISBN 978-5-89407-395-8
 - Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2008. — 528 с. : ISBN 978-5-8459-1347-0 (рус.)