Изменения

Перейти к: навигация, поиск

Нормальная форма Куроды

573 байта добавлено, 14:15, 4 января 2015
Нет описания правки
|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 \leqslant i \leqslant n</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>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>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 j \leqslant m - 1</tex> в переходах <tex>v_j => \Rightarrow 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 =>\Rightarrow^* 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' => \Rightarrow x_1' => \Rightarrow ... => \Rightarrow x_r' => \Rightarrow x' => \Rightarrow y_1 => \Rightarrow y_2 => \Rightarrow ... => \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>G</tex>: <tex>S = x_0 => \Rightarrow x_1 => \Rightarrow ... => \Rightarrow x_n = x</tex>.
Тогда <tex>L(G') <= L(G)</tex>.
Сначала докажем, что <tex>L(G) <= L(G')</tex>. Это следует из того, что:
* все правила из <tex>P_1</tex> применимы к обеим грамматикам,
* шаг вывода <tex>\gamma_1AB\alpha'\gamma_2 => \Rightarrow \gamma_1CDE\beta'\gamma_2</tex>, благодаря правилу <tex>p = AB\alpha \rightarrow CDE\beta' \in P_2</tex> в <tex>G</tex>может быть использавано в <tex>G'</tex> с помощью трех шагов:<tex>\gamma_1AB\alpha'\gamma_2 => \Rightarrow \gamma_1A_pB_p\alpha'\gamma_2 => \Rightarrow \gamma_1CB_p\alpha'\gamma_2 => \Rightarrow \gamma_1CDE\beta\gamma_2</tex>, с использованием правил из <tex>P_p</tex> и вывода <tex>\gamma_1A\gamma_2 => \Rightarrow \gamma_1CDE\beta'\gamma_2</tex> на основе правила <tex>p = A\alpha \rightarrow CDE\beta' \in P_3</tex> в <tex>G</tex>, которое может быть применено в <tex>G'</tex> с помощью трех шагов вывода:<tex>\gamma_1A\alpha1'\gamma_2 => \Rightarrow \gamma_1A_pB_p\alpha'\gamma_2 => \Rightarrow \gamma_1CB_p\alpha'\gamma_2 => \Rightarrow \gamma_1CDE\beta\gamma_2</tex>.
Таким образом, любой вывод в <tex>G</tex> может быть преобразован в вывод в <tex>G'</tex>.
Чтобы показать обратное включение, рассмотрим вывод <tex>w \in L(G')</tex> в <tex>G'</tex>, который содержит применение правил вида <tex>AB \rightarrow A_pB_p</tex> для какого-то правила <tex>p = AB\alpha' \rightarrow CDE\beta' \in P_2</tex>. Заметим, что другие два правила из <tex>P_p</tex> могут быть применены только если правило <tex>AB \rightarrow A_pB_p</tex> было применено в этом выводе ранее.
Данный вывод имеет вид (1) : <tex>S =>\Rightarrow^* \gamma_1AB\alpha'\gamma_2 => \Rightarrow \gamma_1A_pB_p\alpha'\gamma_2 =>(\Rightarrow^q_1) \gamma_1'A_pB_p\alpha'\gamma_2' => \Rightarrow \gamma_1'CB_p\alpha'\gamma_2' =>(\Rightarrow^q_2) \gamma_1''B_p\alpha'\gamma_2'' => \Rightarrow \gamma_1''DE\beta'\gamma_2'' =>\Rightarrow^* w \in T^*</tex>,
где <tex>q_1</tex> {{---}} последовательность правил, примененых после <tex>AB \rightarrow A_pB_p</tex> и до <tex>A_p \rightarrow C</tex>, которая осуществляет <tex>\gamma_1 =>\Rightarrow^* \gamma_1'</tex> и <tex>\gamma_2 =>\Rightarrow^* \gamma_2'</tex>,
где <tex>q_2</tex> {{---}} последовательность правил, осуществляющих <tex>\gamma_1'C =>\Rightarrow^* \gamma_1''</tex> и <tex>\gamma_2' =>\Rightarrow^* \gamma_2''</tex>.
Или вид (2) : <tex>S =>\Rightarrow^* \gamma_1AB\alpha'\gamma_2 => \Rightarrow \gamma_1A_pB_p\alpha'\gamma_2 =>(\Rightarrow^{q_1}') \gamma_1'A_pB_p\alpha'\gamma_2' => \Rightarrow \gamma_1'A_pDE\beta'\alpha'\gamma_2' =>(\Rightarrow^{q_2') } \gamma_1''A_p\gamma_2'' => \Rightarrow \gamma_1''C\gamma_2'' =>\Rightarrow^* w \in T^*</tex>,
где <tex>q_1'</tex> {{---}} последовательность правил, которая осуществляет <tex>\gamma_1 =>\Rightarrow^* \gamma_1'</tex> и <tex>\gamma_2 =>\Rightarrow^* \gamma_2'</tex>,
где <tex>q_2'</tex> {{---}} последовательность правил, осуществляющих <tex>\gamma_1' =>\Rightarrow^* \gamma_1''</tex> и <tex>DE\beta'\gamma_2' =>\Rightarrow^* \gamma_2''</tex>.
Таким образом, существует вывод:<tex>S =>\Rightarrow^* \gamma_1AB\alpha'\gamma_2 => \Rightarrow \gamma_1CDE\beta'\gamma_2 => (\Rightarrow^{q_1) } \gamma_1'CDE\beta'\gamma_2' => (\Rightarrow^{q_2) } \gamma_1''DE\beta'\gamma_2'' =>\Rightarrow^* w \in T^*</tex>, который получается из (1) заменой правил <tex>P_p</tex> на применение <tex>p = AB\alpha' \rightarrow CDE\beta \in P</tex>. Аналогично, в случае (2) мы можем заменить применение <tex>P_p</tex> на <tex>p</tex>. Кроме того, это верно и для применения <tex>P_q,</tex> где <tex>q \in P_3</tex>.
Таким образом, для <tex>r \in P_2 \cup P_3</tex> мы можем заменить все применения <tex>P_r</tex> на <tex>r</tex>, то есть получаем вывод <tex>w</tex>, который состоит только из правил из <tex>P</tex>.
Анонимный участник

Навигация