Нормальная форма Куроды — различия между версиями
Строка 1: | Строка 1: | ||
{{Определение | {{Определение | ||
|definition=Грамматика представлена в '''нормальной форме Куроды''' (англ. ''Kuroda normal form''), если каждое правило имеет одну из четырех форм: | |definition=Грамматика представлена в '''нормальной форме Куроды''' (англ. ''Kuroda normal form''), если каждое правило имеет одну из четырех форм: | ||
− | # AB | + | # <tex>AB \rightarrow CD</tex> |
− | # A | + | # <tex>A \rightarrow BC</tex> |
− | # A | + | # <tex>A \rightarrow B</tex> |
− | # A | + | # <tex>A \rightarrow a</tex> или <tex>A \rightarrow \varepsilon</tex> |
− | Где A, B, C, D {{---}} нетерминалы, a {{---}} терминал. | + | Где <tex>A, B, C, D</tex> {{---}} нетерминалы, <tex>a</tex> {{---}} терминал. |
}} | }} | ||
Строка 12: | Строка 12: | ||
{{Определение | {{Определение | ||
|definition=Грамматика представлена в '''нормальной форме Пенттонена''' (англ. ''Penttonen normal form''), если каждое правило имеет одну из трех форм: | |definition=Грамматика представлена в '''нормальной форме Пенттонена''' (англ. ''Penttonen normal form''), если каждое правило имеет одну из трех форм: | ||
− | # AB | + | # <tex>AB \rightarrow CD</tex> |
− | # A | + | # <tex>A \rightarrow BC</tex> |
− | # A | + | # <tex>A \rightarrow a</tex> или <tex>A \rightarrow \varepsilon</tex> |
− | Где A, B, C, D {{---}} нетерминалы, a {{---}} терминал. | + | Где <tex>A, B, C, D </tex> {{---}} нетерминалы, <tex>a</tex> {{---}} терминал. |
}} | }} | ||
− | Также грамматику Пенттонена называют односторонней нормальной формой (англ. one-sided normal form). Как можно заметить, она является частным случаем нормальной формы Куроды: когда A = C в первом правиле определения. | + | Также грамматику Пенттонена называют односторонней нормальной формой (англ. ''one-sided normal form''). Как можно заметить, она является частным случаем нормальной формы Куроды: когда <tex>A = C</tex> в первом правиле определения. |
Для каждой контестно-зависимой грамматики существует слабо эквивалентная ей грамматика в форме Пенттонена. | Для каждой контестно-зависимой грамматики существует слабо эквивалентная ей грамматика в форме Пенттонена. | ||
{{Лемма | {{Лемма | ||
|about=об удалении терминалов | |about=об удалении терминалов | ||
− | |statement = Для любой грамматики G = (N, T, P, S) может быть построена грамматика G' = (N', T, P', S) такая, что: | + | |statement = Для любой грамматики <tex>G = (N, T, P, S)</tex> может быть построена грамматика <tex>G' = (N', T, P', S)</tex> такая, что: |
− | * все правила в P' имеет вид \alpha \rightarrow \beta где \alpha \in (N')^+ и \beta \in (N')^* или A \rightarrow a, где A \in N', a \in T, | + | * все правила в <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 T</tex>, |
− | * L(G') = L(G) | + | * <tex>L(G') = L(G)</tex> |
− | Кроме того, если G контекстно-свободна или контекстно-зависима, то и G' будет соответственно контекстно-свободной или контекстно-зависимой. | + | Кроме того, если G контекстно-свободна или контекстно-зависима, то и <tex>G'</tex> будет соответственно контекстно-свободной или контекстно-зависимой. |
− | |proof = Каждому терминалу a поставим в соотвествие новый символ a', которого нет в N | + | |proof = Каждому терминалу <tex>a</tex> поставим в соотвествие новый символ <tex>a'</tex>, которого нет в <tex>N \cup T</tex>, такой что <tex>a' \neq b'</tex> для разных терминалов <tex>a</tex> и <tex>b</tex>. |
− | |||
− | |||
− | |||
− | + | Пусть <tex>N' = N \cup \{a' | a \in T\}</tex>. | |
− | Пусть | + | Пусть <tex>\alpha = x_1x_2...x_n</tex> {{---}} часть правила, тогда <tex>\alpha' = y_1y_2...y_n</tex>, где <tex>y_i = \{x_i</tex>, если <tex>x_i \in N</tex>; <tex>x_i'</tex>, если <tex>x_i \in T\}</tex> для <tex>1 <= i <= n</tex>. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | Пусть x \in L(G'). Тогда в G' существует вывод S =>* x. Мы можем поменять порядок применения правил в этом выводе: | + | Построим грамматику <tex>G' = (N', T, P', S)</tex>, где <tex>P' = \{\alpha' \rightarrow \beta' : \alpha \rightarrow \beta \in P\} \cup \{a' \rightarrow a: a \in T\}</tex>. |
− | сначала только правила вида \alpha' \rightarrow \beta', а потом только правила вида a' \rightarrow a. Из построения: после применения правила вида a' \rightarrow a полученное a не может быть использовано при применении правил из P'. | + | |
− | Изменение порядка вывода не меняет язык, то есть в G' существует вывод: S = x_0' => x_1' => ... => x_r' => x' => y_1 => y_2 => ... => y_s = x, | + | Покажем, что <tex>L(G') = L(G)</tex>. |
− | где для 0 <= i <= r - 1 x_{i + 1}' \in (N')^* и в переходе x_i' \rightarrow x_{i + 1}' было использовано правило вывода \alpha' \rightarrow \beta' | + | |
− | и для 1 <= j <= s было использовано правило a' \rightarrow a, чтобы получить y_j \rightarrow y_{j + 1}. | + | Пусть <tex>w \in L(G)</tex>. Тогда в G существует вывод <tex>S = w_0 => w_1 => ... => w_n => w</tex>. |
− | Получаем вывод в G: S = x_0 => x_1 => ... => x_n = x. | + | |
− | Тогда L(G') <= L(G). | + | Согласно конструкции <tex>P'</tex>, в <tex>G'</tex> существует вывод <tex>S = w_0' => w_1' => w_2' => ... => w_n' = v_0 => v_1 => v_2 => ... => v_m = w</tex>. |
− | Таким образом, L(G') = L(G). | + | |
+ | Для <tex>0 <= i <= n - 1</tex> в переходах <tex>w_i' => w_{i + 1}'</tex> используем правило <tex>\alpha' \rightarrow \beta'</tex>, так как правило <tex>\alpha \rightarrow \beta</tex> было использовано при выводе <tex>w_i => w_{i + 1}</tex>. | ||
+ | |||
+ | Для <tex>0 <= j <= m - 1</tex> в переходах <tex>v_j => v_{j + 1}</tex> используем правила вида <tex>a' \rightarrow a</tex>. | ||
+ | |||
+ | Заменяем разрешенные в <tex>w'</tex> символы на новые и получаем, что <tex>w \in L(G')</tex>. | ||
+ | Тогда <tex>L(G) <= L(G')</tex>. | ||
+ | |||
+ | Пусть <tex>x \in L(G')</tex>. Тогда в <tex>G'</tex> существует вывод <tex>S =>* x</tex>. Мы можем поменять порядок применения правил в этом выводе: сначала применяем только правила вида <tex>\alpha' \rightarrow \beta'</tex>, а потом только правила вида <tex>a' \rightarrow a</tex>. | ||
+ | |||
+ | Из построения: после применения правила вида <tex>a' \rightarrow a</tex> полученное <tex>a</tex> не может быть использовано при применении правил из <tex>P'</tex>. | ||
+ | |||
+ | Изменение порядка вывода не меняет язык, то есть в <tex>G'</tex> существует вывод: <tex>S = x_0' => x_1' => ... => x_r' => x' => y_1 => y_2 => ... => y_s = x</tex>, где для <tex>0 <= i <= r - 1 x_{i + 1}' \in (N')^*</tex> и в переходе <tex>x_i' \rightarrow x_{i + 1}'</tex> было использовано правило вывода <tex>\alpha' \rightarrow \beta'</tex> и для <tex>1 <= j <= s</tex> было использовано правило <tex>a' \rightarrow a</tex>, чтобы получить <tex>y_j \rightarrow y_{j + 1}</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>. | ||
Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. | Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. | ||
}} | }} | ||
Строка 55: | Строка 63: | ||
{{Лемма | {{Лемма | ||
|about=об удалении длинных правил | |about=об удалении длинных правил | ||
− | |statement= Для любой грамматики G = (N, T, P, S) может быть построена грамматика G' = (N', T, P', S) такая, что: | + | |statement= Для любой грамматики <tex>G = (N, T, P, S)</tex> может быть построена грамматика <tex>G' = (N', T, P', S)</tex> такая, что: |
− | * любое правило из P' имеет вид: | + | * любое правило из <tex>P'</tex> имеет вид: <tex>\alpha \rightarrow \beta</tex>, где <tex>\alpha \in (N')^+</tex> и <tex>\beta \in (N')^+</tex> и <tex>|\alpha| <= |\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> | |
− | |||
− | |||
− | * L(G') = L(G) | ||
|proof= | |proof= | ||
Сначала по G построим грамматику G'' = (N'', T, P'', S), как в доказательстве леммы 1. По G'' построим грамматику G', в которой: | Сначала по G построим грамматику G'' = (N'', T, P'', S), как в доказательстве леммы 1. По G'' построим грамматику G', в которой: |
Версия 13:14, 4 января 2015
Определение: |
Грамматика представлена в нормальной форме Куроды (англ. Kuroda normal form), если каждое правило имеет одну из четырех форм:
|
Данная грамматика названа в честь Куроды (англ. Sige-Yuki Kuroda), который изначально назвал ее линейно ограниченной грамматикой.
Определение: |
Грамматика представлена в нормальной форме Пенттонена (англ. Penttonen normal form), если каждое правило имеет одну из трех форм:
|
Также грамматику Пенттонена называют односторонней нормальной формой (англ. one-sided normal form). Как можно заметить, она является частным случаем нормальной формы Куроды: когда в первом правиле определения.
Для каждой контестно-зависимой грамматики существует слабо эквивалентная ей грамматика в форме Пенттонена.
Лемма (об удалении терминалов): |
Для любой грамматики может быть построена грамматика такая, что:
|
Доказательство: |
Каждому терминалу поставим в соотвествие новый символ , которого нет в , такой что для разных терминалов и .Пусть .Пусть — часть правила, тогда , где , если ; , если для .Построим грамматику , где .Покажем, что .Пусть . Тогда в G существует вывод .Согласно конструкции , в существует вывод .Для в переходах используем правило , так как правило было использовано при выводе .Для в переходах используем правила вида .Заменяем разрешенные в символы на новые и получаем, что . Тогда .Пусть . Тогда в существует вывод . Мы можем поменять порядок применения правил в этом выводе: сначала применяем только правила вида , а потом только правила вида .Из построения: после применения правила вида полученное не может быть использовано при применении правил из .Изменение порядка вывода не меняет язык, то есть в существует вывод: , где для и в переходе было использовано правило вывода и для было использовано правило , чтобы получить .Получаем вывод в Очевидно, что если грамматика была неукорочивающейся, то она такой и останется. : . Тогда . Таким образом, . |
Лемма (об удалении длинных правил): |
Для любой грамматики может быть построена грамматика такая, что:
|
Доказательство: |
Сначала по G построим грамматику G = (N, T, P, S), как в доказательстве леммы 1. По G построим грамматику G', в которой: N' = N U {D}, где D — новый символ, P' получаем из P заменой всех правил вида \alpha \rightarrow \beta \in P, где |
Определение: |
Грамматика имеет порядок 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. |