Изменения

Перейти к: навигация, поиск
Нет описания правки
Пусть <tex>G = (N, \Sigma, P, S)</tex> {{---}} однозначная КС-грамматика без непорождающих нетерминалов и <tex>a_1 \dots a_n</tex> {{---}} цепочка из <tex>\Sigma^*</tex>. Тогда алгоритм Эрли пытается включить <tex>[A \rightarrow \alpha \cdot \beta, i]</tex> в <tex>I_j</tex> не более одного раза, если <tex>\alpha \ne \varepsilon</tex>.
|proof=
Ситуацию <tex>[A \rightarrow \alpha \cdot \beta, i]</tex> можно включить в <tex>I_j</tex> только по правилам <tex>(1)</tex> (если последний символ <tex>\alpha</tex> — терминал) и <tex>(2)</tex> (если нетерминал). В первом случае результат очевиден. Во втором случае допустим, что <tex>[A \rightarrow \alpha'B \cdot \beta, i]</tex> включается в <tex>I_j</tex>, когда рассматриваются две различные ситуации <tex>[B \rightarrow \eta_1 \cdot, k_1]</tex> и <tex>[B \rightarrow \eta_2 \cdot, k_2]</tex>. Тогда ситуация <tex>[A \rightarrow \alpha' \cdot B\beta, i]</tex> должна оказаться одновременно в <tex>I_{k_1}</tex> и в <tex>I_{k_2}</tex>.Таким образом, получаем:# Пусть <tex>k_1 \ne k_2</tex>. Тогда существуют такие <tex>\gamma_1, \delta_1, \gamma_2</tex> и <tex>\delta_2</tex>, что <tex>S \Rightarrow^* \gamma_1 A \delta_1 \Rightarrow \gamma_1 \alpha' B \beta \delta_1</tex> и <tex>S \Rightarrow^* \gamma_2 A \delta_2 \Rightarrow \gamma_2 \alpha' B \beta \delta_2</tex>. Но в первом выводе <tex>\gamma_1 \alpha' \Rightarrow^* a_1 a_{i+1} \dots ldots a_{k_1}</tex>, а во втором и <tex>\gamma_2 \alpha' \Rightarrow^* a_1 a_{i+1} \dots ldots a_{k_2}</tex>. Тогда для цепочки * <tex>a_1 \dots a_n</tex> существуют два разных дерева вывода, в которых <tex>eta_1 \Rightarrow^* a_{ik_1+1} \dots ldots a_j</tex> выводится из <tex>\alpha' B</tex> двумя разными способами.# Пусть <tex>k_1 = k_2 = k</tex>. Тогда <tex>\eta_1 \ne \eta_2</tex>. Тогда, так как <tex>[B \rightarrow \eta_1 \cdot, k] \in I_j</tex> и <tex>[B \rightarrow \eta_2 \cdot, k] \in I_j</tex>, то <tex>\eta_1 \Rightarrow^* a_{k k_2+ 1} \dots ldots a_j</tex> и Следовательно* <tex>\eta_2 alpha' \eta_1 \Rightarrow^* a_{k i+ 1} \dots ldots a_j</tex>. Так как и <tex>[A \rightarrow \alpha' \cdot B eta_2 \beta, Rightarrow^* a_{i] +1} \in I_kldots a_j</tex>Заметим, то что <tex>S \Rightarrow^* \gamma A \delta \Rightarrow \gamma \alpha' B \beta \delta \Rightarrow^* a_1 \ldots a_i \alpha' B \beta A \delta \Rightarrow^* a_1 \ldots a_k a_i \alpha' B \beta \delta \Rightarrow^* a_1 \ldots a_k \eta_1 \beta \delta</tex>. Аналогично, <tex>S \Rightarrow^* a_1 \ldots a_k \eta_2 \beta \delta</tex>. Теперь, если предположитьПредположим, что <tex>\beta \delta \Rightarrow^* w'</tex>, то можно видеть, что . Тогда:* <tex>S \Rightarrow^* a_1 \ldots a_k a_i \alpha' \eta_1 w'</tex> и <tex>S \Rightarrow^* a_1 \ldots a_k a_i \alpha' \eta_2 w'</tex>Таким образом, а посколькуесли <tex>k_1 \ne k_2</tex>, как мы установили, из то подстрока <tex>a_{i+1} \eta_1ldots a_j</tex> и выводится двумя различными способами из <tex>\eta_2alpha' \eta_1</tex> выводится и <tex>a_{k + 1} \dots a_jalpha' \eta_2</tex>, то есть у строки <tex>a_1 \ldots a_j wa_jw'</tex> в данной грамматике есть два различных вывода, что противоречит однозначностиграмматики. Если же <tex>k_1 = k_2</tex>, то <tex>\eta_1 \ne \eta_2</tex>, что приводит к аналогичному противоречию.
}}
70
правок

Навигация