Нормальная форма Куроды — различия между версиями
Строка 56: | Строка 56: | ||
Получаем вывод в <tex>G</tex>: <tex>S = x_0 => x_1 => ... => x_n = x</tex>. | Получаем вывод в <tex>G</tex>: <tex>S = x_0 => x_1 => ... => x_n = x</tex>. | ||
+ | |||
Тогда <tex>L(G') <= L(G)</tex>. | Тогда <tex>L(G') <= L(G)</tex>. | ||
+ | |||
Таким образом, <tex>L(G') = L(G)</tex>. | Таким образом, <tex>L(G') = L(G)</tex>. | ||
Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. | Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. | ||
Строка 67: | Строка 69: | ||
* <tex>L(G') = L(G)</tex> | * <tex>L(G') = L(G)</tex> | ||
|proof= | |proof= | ||
− | Сначала по G построим грамматику G'' = (N'', T, P'', S), как в доказательстве леммы 1. По G'' построим грамматику G', в которой: | + | Сначала по <tex>G</tex> построим грамматику <tex>G'' = (N'', T, P'', S)</tex>, как в доказательстве леммы 1. По <tex>G''</tex> построим грамматику <tex>G'</tex>, в которой: |
− | N' = N'' | + | * <tex>N' = N'' \cup \{D\}</tex>, где <tex>D</tex> {{---}} новый символ, |
− | P' получаем из P'' заменой всех правил вида \alpha \rightarrow \beta \in P'', где |\alpha| > |\beta| на правила вида \alpha \rightarrow \ | + | * <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>. |
− | Теперь все правила в P' имеет требуемую форму. | + | |
+ | Теперь все правила в <tex>P'</tex> имеет требуемую форму. | ||
+ | |||
+ | Покажем, что <tex>L(G') = L(G)</tex>. | ||
+ | |||
+ | Заметим, что замена правила <tex>\alpha \rightarrow \beta</tex> на <tex>\alpha \rightarrow \beta D^{|\alpha| - |\beta|}</tex> не меняет язык грамматики, потому что дополнительная буква <tex>D</tex> запрещается при добавлении перехода <tex>D \rightarrow \varepsilon</tex>, а других правил для <tex>D</tex> нет. | ||
− | + | Тогда получаем, что <tex>L(G) <= L(G')</tex>, аналогично обратные изменения не меняют язык, то есть <tex>L(G') <= L(G)</tex>. | |
− | |||
− | Тогда получаем, что L(G) <= L(G'), аналогично обратные изменения не меняют язык, то есть L(G') <= L(G). | ||
}} | }} | ||
Версия 13:22, 4 января 2015
Определение: |
Грамматика представлена в нормальной форме Куроды (англ. Kuroda normal form), если каждое правило имеет одну из четырех форм:
|
Данная грамматика названа в честь Куроды (англ. Sige-Yuki Kuroda), который изначально назвал ее линейно ограниченной грамматикой.
Определение: |
Грамматика представлена в нормальной форме Пенттонена (англ. Penttonen normal form), если каждое правило имеет одну из трех форм:
|
Также грамматику Пенттонена называют односторонней нормальной формой (англ. one-sided normal form). Как можно заметить, она является частным случаем нормальной формы Куроды: когда в первом правиле определения.
Для каждой контестно-зависимой грамматики существует слабо эквивалентная ей грамматика в форме Пенттонена.
Лемма (об удалении терминалов): |
Для любой грамматики может быть построена грамматика такая, что:
|
Доказательство: |
Каждому терминалу поставим в соотвествие новый символ , которого нет в , такой что для разных терминалов и .Пусть .Пусть — часть правила, тогда , где , если ; , если для .Построим грамматику , где .Покажем, что .Пусть . Тогда в G существует вывод .Согласно конструкции , в существует вывод .Для в переходах используем правило , так как правило было использовано при выводе .Для в переходах используем правила вида .Заменяем разрешенные в символы на новые и получаем, что . Тогда .Пусть . Тогда в существует вывод . Мы можем поменять порядок применения правил в этом выводе: сначала применяем только правила вида , а потом только правила вида .Из построения: после применения правила вида полученное не может быть использовано при применении правил из .Изменение порядка вывода не меняет язык, то есть в существует вывод: , где для и в переходе было использовано правило вывода и для было использовано правило , чтобы получить .Получаем вывод в : .Тогда .Таким образом, Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. . |
Лемма (об удалении длинных правил): |
Для любой грамматики может быть построена грамматика такая, что:
|
Доказательство: |
Сначала по построим грамматику , как в доказательстве леммы 1. По построим грамматику , в которой:
Теперь все правила в имеет требуемую форму.Покажем, что .Заметим, что замена правила Тогда получаем, что на не меняет язык грамматики, потому что дополнительная буква запрещается при добавлении перехода , а других правил для нет. , аналогично обратные изменения не меняют язык, то есть . |
Определение: |
Грамматика имеет порядок n, если |
Лемма (об уменьшении порядка грамматики): |
(Уменьшение порядка грамматики)
Для любой грамматики G = (N, T, P, S) порядка n >= 3, такой что: любое правило из P' имеет вид \alpha \rightarrow \beta, где \alpha \in (N')^+ и \beta \in (N')^+ и |
Доказательство: |
Разделим P на три подмножества: P_1 = \{ \alpha \rightarrow \beta |
Теорема: |
Любую грамматику G можно преобразовать к грамматике G_K в нормальной форме Куроды, так что L(G) = L(G_K). |
Доказательство: |
По лемме 1 построим из G грамматику G', затем по лемме 2 построим из G' грамматику G, Тогда G удовлетворит требованиям леммы 3. Пусть G имеет порядок n. Нсли n = 2, то G в нормальной форме Куроды и G_K = G. Если n >= 3, построим G порядка n - 1 из G по лемме 3. Понятно, что G удовлетворяет условиям леммы 3, будем повторять процесс, пока не получим грамматику порядка 2, которую и примем за G_K. |