Нормальная форма Куроды — различия между версиями
Строка 21: | Строка 21: | ||
{{Лемма | {{Лемма | ||
|about=об удалении терминалов | |about=об удалении терминалов | ||
− | |statement = Для любой грамматики <tex>G = | + | |statement = Для любой грамматики <tex>G = \langle \Sigma, N, S, P \rangle</tex> может быть построена грамматика <tex>G' = \langle \Sigma, N', S, P' \rangle</tex> такая, что: |
− | * все правила в <tex>P'</tex> имеет вид <tex>\alpha \rightarrow \beta</tex> где <tex>\alpha \in (N')^+</tex> и <tex>\beta \in (N')^*</tex> или <tex>A \rightarrow a</tex>, где <tex>A \in N', a \in | + | * все правила в <tex>P'</tex> имеет вид <tex>\alpha \rightarrow \beta</tex> где <tex>\alpha \in (N')^+</tex> и <tex>\beta \in (N')^*</tex> или <tex>A \rightarrow a</tex>, где <tex>A \in N', a \in \Sigma</tex>, |
* <tex>L(G') = L(G)</tex> | * <tex>L(G') = L(G)</tex> | ||
Кроме того, если G контекстно-свободна или контекстно-зависима, то и <tex>G'</tex> будет соответственно контекстно-свободной или контекстно-зависимой. | Кроме того, если G контекстно-свободна или контекстно-зависима, то и <tex>G'</tex> будет соответственно контекстно-свободной или контекстно-зависимой. | ||
− | |proof = Каждому терминалу <tex>a</tex> поставим в соотвествие новый символ <tex>a'</tex>, которого нет в <tex>N \cup | + | |proof = Каждому терминалу <tex>a</tex> поставим в соотвествие новый символ <tex>a'</tex>, которого нет в <tex>N \cup \Sigma</tex>, такой что <tex>a' \neq b'</tex> для разных терминалов <tex>a</tex> и <tex>b</tex>. |
− | Пусть <tex>N' = N \cup \{a' : a \in | + | Пусть <tex>N' = N \cup \{a' : a \in \Sigma\}</tex>. |
Пусть <tex>\alpha = x_1x_2...x_n</tex> {{---}} часть правила, тогда <tex>\alpha' = y_1y_2...y_n</tex>, где | Пусть <tex>\alpha = x_1x_2...x_n</tex> {{---}} часть правила, тогда <tex>\alpha' = y_1y_2...y_n</tex>, где | ||
Строка 34: | Строка 34: | ||
y_i = \left\{\begin{array}{llcl} | y_i = \left\{\begin{array}{llcl} | ||
x_i&;\ x_i \in N\\ | x_i&;\ x_i \in N\\ | ||
− | x_i'&;\ x_i \in | + | x_i'&;\ x_i \in \Sigma\\ |
\end{array}\right. | \end{array}\right. | ||
</tex> для <tex>1 \leqslant i \leqslant n</tex>. | </tex> для <tex>1 \leqslant i \leqslant n</tex>. | ||
− | Построим грамматику <tex>G' = | + | Построим грамматику <tex>G' = \langle \Sigma, N', S, P' \rangle</tex>, где <tex>P' = \{\alpha' \rightarrow \beta' : \alpha \rightarrow \beta \in P\} \cup \{a' \rightarrow a: a \in \Sigma\}</tex>. |
Покажем, что <tex>L(G') = L(G)</tex>. | Покажем, что <tex>L(G') = L(G)</tex>. | ||
− | Пусть <tex>w \in L(G)</tex>. Тогда в G существует вывод <tex>S = w_0 \Rightarrow w_1 \Rightarrow ... \Rightarrow w_n \Rightarrow w</tex>. | + | Пусть <tex>w \in L(G)</tex>. Тогда в <tex>G</tex> существует вывод <tex>S = w_0 \Rightarrow w_1 \Rightarrow ... \Rightarrow w_n \Rightarrow w</tex>. |
Согласно конструкции <tex>P'</tex>, в <tex>G'</tex> существует вывод <tex>S = w_0' \Rightarrow w_1' \Rightarrow w_2' \Rightarrow ... \Rightarrow w_n' = v_0 \Rightarrow v_1 \Rightarrow v_2 \Rightarrow ... \Rightarrow v_m = w</tex>. | Согласно конструкции <tex>P'</tex>, в <tex>G'</tex> существует вывод <tex>S = w_0' \Rightarrow w_1' \Rightarrow w_2' \Rightarrow ... \Rightarrow w_n' = v_0 \Rightarrow v_1 \Rightarrow v_2 \Rightarrow ... \Rightarrow v_m = w</tex>. | ||
Строка 69: | Строка 69: | ||
{{Лемма | {{Лемма | ||
|about=об удалении длинных правил | |about=об удалении длинных правил | ||
− | |statement= Для любой грамматики <tex>G = | + | |statement= Для любой грамматики <tex>G = \langle \Sigma, N, S, P \rangle</tex> может быть построена грамматика <tex>G' = \langle \Sigma, N', S, P' \rangle</tex> такая, что: |
* любое правило из <tex>P'</tex> имеет вид: <tex>\alpha \rightarrow \beta</tex>, где <tex>\alpha \in (N')^+</tex> и <tex>\beta \in (N')^+</tex> и <tex>|\alpha| \leqslant |\beta|</tex>, или <tex>A \rightarrow a</tex>, или <tex>A \rightarrow \varepsilon</tex>, где <tex>A \in N'</tex> и <tex>a \in T</tex> | * любое правило из <tex>P'</tex> имеет вид: <tex>\alpha \rightarrow \beta</tex>, где <tex>\alpha \in (N')^+</tex> и <tex>\beta \in (N')^+</tex> и <tex>|\alpha| \leqslant |\beta|</tex>, или <tex>A \rightarrow a</tex>, или <tex>A \rightarrow \varepsilon</tex>, где <tex>A \in N'</tex> и <tex>a \in T</tex> | ||
* <tex>L(G') = L(G)</tex> | * <tex>L(G') = L(G)</tex> | ||
|proof= | |proof= | ||
− | Сначала по <tex>G</tex> построим грамматику <tex>G'' = | + | Сначала по <tex>G</tex> построим грамматику <tex>G'' = \langle \Sigma, N'', S, P'' \rangle</tex>, как в доказательстве леммы 1. По <tex>G''</tex> построим грамматику <tex>G'</tex>, в которой: |
* <tex>N' = N'' \cup \{D\}</tex>, где <tex>D</tex> {{---}} новый символ, | * <tex>N' = N'' \cup \{D\}</tex>, где <tex>D</tex> {{---}} новый символ, | ||
* <tex>P'</tex> получаем из <tex>P''</tex> заменой всех правил вида <tex>\alpha \rightarrow \beta \in P''</tex>, где <tex>|\alpha| > |\beta|</tex> на правила вида <tex>\alpha \rightarrow \beta D^{|\alpha| - |\beta|}</tex>, и добавлением правила <tex>D \rightarrow \varepsilon</tex>. | * <tex>P'</tex> получаем из <tex>P''</tex> заменой всех правил вида <tex>\alpha \rightarrow \beta \in P''</tex>, где <tex>|\alpha| > |\beta|</tex> на правила вида <tex>\alpha \rightarrow \beta D^{|\alpha| - |\beta|}</tex>, и добавлением правила <tex>D \rightarrow \varepsilon</tex>. | ||
Строка 94: | Строка 94: | ||
|about=об уменьшении порядка грамматики | |about=об уменьшении порядка грамматики | ||
|statement=(Уменьшение порядка грамматики) | |statement=(Уменьшение порядка грамматики) | ||
− | Для любой грамматики <tex>G = | + | Для любой грамматики <tex>G = \langle \Sigma, N, S, P \rangle</tex> порядка <tex>n \geqslant 3</tex>, такой что: любое правило из <tex>P'</tex> имеет вид <tex>\alpha \rightarrow \beta</tex>, где <tex>\alpha \in (N')^+</tex> и <tex>\beta \in (N')^+</tex> и <tex>|\alpha| \leqslant |\beta|</tex> или <tex>A \rightarrow a</tex> или <tex>A \rightarrow \varepsilon</tex>, где <tex>A \in N'</tex> и <tex>a \in T</tex> может быть построена грамматика <tex>G' = \langle \Sigma, N', S, P' \rangle</tex> порядка <tex>n - 1</tex> такая, что <tex>L(G') = L(G)</tex>. |
|proof= | |proof= | ||
Разделим <tex>P</tex> на три подмножества: | Разделим <tex>P</tex> на три подмножества: |
Версия 17:30, 4 января 2015
Определение: |
Грамматика представлена в нормальной форме Куроды (англ. Kuroda normal form), если каждое правило имеет одну из четырех форм:
|
Определение: |
Грамматика представлена в нормальной форме Пенттонена (англ. Penttonen normal form), если каждое правило имеет одну из трех форм:
|
Также грамматику Пенттонена называют односторонней нормальной формой (англ. one-sided normal form). Как можно заметить, она является частным случаем нормальной формы Куроды: когда в первом правиле определения.
Для каждой контестно-зависимой грамматики существует слабо эквивалентная ей грамматика в форме Пенттонена.
Лемма (об удалении терминалов): |
Для любой грамматики может быть построена грамматика такая, что:
|
Доказательство: |
Каждому терминалу поставим в соотвествие новый символ , которого нет в , такой что для разных терминалов и .Пусть .Пусть — часть правила, тогда , где для .Построим грамматику , где .Покажем, что .Пусть . Тогда в существует вывод .Согласно конструкции , в существует вывод .Для в переходах используем правило , так как правило было использовано при выводе .Для в переходах используем правила вида .Заменяем разрешенные в символы на новые и получаем, что . Тогда .Пусть . Тогда в существует вывод . Мы можем поменять порядок применения правил в этом выводе: сначала применяем только правила вида , а потом только правила вида .Из построения: после применения правила вида полученное не может быть использовано при применении правил из .Изменение порядка вывода не меняет язык, то есть в существует вывод: , где для и в переходе было использовано правило вывода и для было использовано правило , чтобы получить .Получаем вывод в : .Тогда .Таким образом, Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. . |
Лемма (об удалении длинных правил): |
Для любой грамматики может быть построена грамматика такая, что:
|
Доказательство: |
Сначала по построим грамматику , как в доказательстве леммы 1. По построим грамматику , в которой:
Теперь все правила в имеет требуемую форму.Покажем, что .Заметим, что замена правила Тогда получаем, что на не меняет язык грамматики, потому что дополнительная буква запрещается при добавлении перехода , а других правил для нет. , аналогично обратные изменения не меняют язык, то есть . |
Определение: |
Грамматика имеет порядок | , если и для любого ее правила .
Лемма (об уменьшении порядка грамматики): |
(Уменьшение порядка грамматики)
Для любой грамматики порядка , такой что: любое правило из имеет вид , где и и или или , где и может быть построена грамматика порядка такая, что . |
Доказательство: |
Разделим на три подмножества:, , . Очевидно, что .Построим следующим образом:
Полагаем , , где — дополнительные символы не из для разных правил и из .
Полагаем , , где — дополнительные символы.Тогда , .Из построения очевидно, что имеет порядок .Покажем, что .Сначала докажем, что . Это следует из того, что:
, с использованием правил из и вывода на основе правила в , которое может быть применено в с помощью трех шагов вывода: . Таким образом, любой вывод в может быть преобразован в вывод в . Чтобы показать обратное включение, рассмотрим вывод в , который содержит применение правил вида для какого-то правила . Заметим, что другие два правила из могут быть применены только если правило было применено в этом выводе ранее.Данный вывод имеет вид (1) : ,где — последовательность правил, примененых после и до , которая осуществляет и ,где — последовательность правил, осуществляющих и .Или вид (2) : ,где — последовательность правил, которая осуществляет и ,где — последовательность правил, осуществляющих и .Таким образом, существует вывод: , который получается из (1) заменой правил на применение . Аналогично, в случае (2) мы можем заменить применение на . Кроме того, это верно и для применения где .Таким образом, для Тогда мы можем заменить все применения на , то есть получаем вывод , который состоит только из правил из . и . |
Теорема: |
Любую грамматику можно преобразовать к грамматике в нормальной форме Куроды так, что . |
Доказательство: |
По лемме 1 построим из грамматику , затем по лемме 2 построим из грамматику , Тогда удовлетворит требованиям леммы 3.Пусть Будем повторять процесс, пока не получим грамматику порядка имеет порядок . Если , то в нормальной форме Куроды и . Если , построим порядка из по лемме 3. Понятно, что удовлетворяет условиям леммы 3. , которую и примем за . |
См. также
Источники
- Alexander Meduna Automata and Languages: Theory and Applications
- Wikipedia — Kuroda normal form