Нормальная форма Куроды — различия между версиями
| KK (обсуждение | вклад) м | м (rollbackEdits.php mass rollback) | ||
| (не показаны 3 промежуточные версии 2 участников) | |||
| Строка 30: | Строка 30: | ||
| Пусть <tex>N' = N \cup \{a' \mid a \in \Sigma\}</tex>. | Пусть <tex>N' = N \cup \{a' \mid a \in \Sigma\}</tex>. | ||
| − | Пусть <tex>\alpha = x_1x_2 | + | Пусть <tex>\alpha = x_1x_2 \ldots x_n</tex> {{---}} часть правила, тогда <tex>\alpha' = y_1y_2 \ldots y_n</tex>, где   | 
| <tex> | <tex> | ||
| y_i = \left\{\begin{array}{llcl} | y_i = \left\{\begin{array}{llcl} | ||
| Строка 42: | Строка 42: | ||
| Покажем, что <tex>L(\Gamma') = L(\Gamma)</tex>. | Покажем, что <tex>L(\Gamma') = L(\Gamma)</tex>. | ||
| − | Пусть <tex>w \in L(\Gamma)</tex>. Тогда в <tex>\Gamma</tex> существует вывод <tex>S = w_0 \Rightarrow w_1 \Rightarrow  | + | Пусть <tex>w \in L(\Gamma)</tex>. Тогда в <tex>\Gamma</tex> существует вывод <tex>S = w_0 \Rightarrow w_1 \Rightarrow \ldots \Rightarrow w_n \Rightarrow w</tex>.   | 
| − | Согласно конструкции <tex>P'</tex>, в <tex>\Gamma'</tex> существует вывод <tex>S = w_0' \Rightarrow w_1' \Rightarrow w_2' \Rightarrow  | + | Согласно конструкции <tex>P'</tex>, в <tex>\Gamma'</tex> существует вывод <tex>S = w_0' \Rightarrow w_1' \Rightarrow w_2' \Rightarrow \ldots \Rightarrow w_n' = v_0 \Rightarrow v_1 \Rightarrow v_2 \Rightarrow \ldots \Rightarrow v_m = w</tex>. | 
| Для <tex>0 \leqslant i \leqslant n - 1</tex> в переходах <tex>w_i' \Rightarrow w_{i + 1}'</tex> используем правило <tex>\alpha' \rightarrow \beta'</tex>, так как правило <tex>\alpha \rightarrow \beta</tex> было использовано при выводе <tex>w_i \Rightarrow w_{i + 1}</tex>. | Для <tex>0 \leqslant i \leqslant n - 1</tex> в переходах <tex>w_i' \Rightarrow w_{i + 1}'</tex> используем правило <tex>\alpha' \rightarrow \beta'</tex>, так как правило <tex>\alpha \rightarrow \beta</tex> было использовано при выводе <tex>w_i \Rightarrow w_{i + 1}</tex>. | ||
| Строка 57: | Строка 57: | ||
| Из построения: после применения правила вида <tex>a' \rightarrow a</tex> полученное <tex>a</tex> не может быть использовано при применении правил из <tex>P'</tex>.   | Из построения: после применения правила вида <tex>a' \rightarrow a</tex> полученное <tex>a</tex> не может быть использовано при применении правил из <tex>P'</tex>.   | ||
| − | Изменение порядка вывода не меняет язык, то есть в <tex>\Gamma'</tex> существует вывод: <tex>S = x_0' \Rightarrow x_1' \Rightarrow  | + | Изменение порядка вывода не меняет язык, то есть в <tex>\Gamma'</tex> существует вывод: <tex>S = x_0' \Rightarrow x_1' \Rightarrow \ldots \Rightarrow x_r' \Rightarrow x' \Rightarrow y_1 \Rightarrow y_2 \Rightarrow \ldots \Rightarrow y_s = x</tex>, где для <tex>0 \leqslant i \leqslant r - 1 \ x_{i + 1}' \in (N')^*</tex> и в переходе <tex>x_i' \rightarrow x_{i + 1}'</tex> было использовано правило вывода <tex>\alpha' \rightarrow \beta'</tex> и для <tex>1 \leqslant j \leqslant s</tex> было использовано правило <tex>a' \rightarrow a</tex>, чтобы получить <tex>y_j \rightarrow y_{j + 1}</tex>. | 
| − | Получаем вывод в <tex>\Gamma</tex>: <tex>S = x_0 \Rightarrow x_1 \Rightarrow  | + | Получаем вывод в <tex>\Gamma</tex>: <tex>S = x_0 \Rightarrow x_1 \Rightarrow \ldots \Rightarrow x_n = x</tex>. | 
| Тогда <tex>L(\Gamma') \subseteq L(\Gamma)</tex>. | Тогда <tex>L(\Gamma') \subseteq L(\Gamma)</tex>. | ||
Текущая версия на 19:29, 4 сентября 2022
| Определение: | 
| Грамматика представлена в нормальной форме Куроды (англ.  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
