Лемма Огдена — различия между версиями
(→Источники) |
|||
Строка 34: | Строка 34: | ||
Для <tex>B_{p}</tex> будет выполняться лемма Огдена для <tex>n = 4</tex>. Выбрав <tex>A_{p}</tex> таким образом, чтобы он был рекурсивно-перечислимым, мы создадим такой язык. (Такие языки существуют)<ref><A.V. Aho & J.D. Ullman, The Theory of Parsing, Translation and Compilimg, Vol. I, 1972</ref> | Для <tex>B_{p}</tex> будет выполняться лемма Огдена для <tex>n = 4</tex>. Выбрав <tex>A_{p}</tex> таким образом, чтобы он был рекурсивно-перечислимым, мы создадим такой язык. (Такие языки существуют)<ref><A.V. Aho & J.D. Ullman, The Theory of Parsing, Translation and Compilimg, Vol. I, 1972</ref> | ||
+ | |||
+ | == Пример не КС-языка, для которого выполняется лемма == | ||
+ | |||
+ | Докажем, что язык <tex>L = {a^mb^nc^l}</tex>, где <tex> m, n, l </tex> - попарно различны не является кс-языком. | ||
+ | |||
+ | Предположим, что данный язык контекстно-свободный. Возьмем цепочку <tex>z=a^kb^{k+(k-1)!} c^{k+k!}</tex>, где <tex>k</tex> - константа из леммы Огдена, выделив в ней все вхождения символа <tex>a</tex>. Тогда при представлении цепочки <tex>z</tex> в виде <tex>uvxyz</tex> цепочка <tex>\omega</tex> обязательно «зацепит» хотя бы один | ||
+ | символ <tex>a</tex>. Cледовательно, цепочка <tex>x</tex> состоит только из символов <tex>a</tex> (как и цепочка <tex>u</tex>). А именно, | ||
+ | <tex>x = \alpha^p, 1 <= p <= k+1</tex>. | ||
+ | |||
+ | Тогда, если цепочка <tex>\omega</tex> содержит и другие символы, кроме <tex>a</tex>, цепочка <tex>y</tex> может входить либо в «зону» символов <tex>b</tex> (целиком), либо в «зону» символов <tex>c</tex> (целиком), так как расположение накачиваемых цепочек на стыках зон, очевидно, невозможно. В первом случае «кратность» <tex>a</tex> накачки цепочки <tex>x</tex>, которая уравняет числа символов <tex>a</tex> и <tex>c</tex>, определяется из соотношения: | ||
+ | <tex>k + al * p = k + k!, то есть al = k!/p </tex> | ||
+ | |||
+ | Во втором случае <tex>(k-1)!/p</tex> - кратная накачка цепочки x уравняет числа вхождений | ||
+ | символов <tex>a</tex> и <tex>b</tex>. | ||
+ | Не исключено, наконец, что обе накачиваемые цепочки расположены в «зоне» символов <tex>a</tex>. Но тогда одним из указанных выше способов накачки можно уравнять числа либо символов <tex>a</tex> и <tex>b</tex>, либо <tex>a</tex> и <tex>c</tex>. | ||
+ | //картинка | ||
+ | Рис. Цепочки контекстно-свободного языка | ||
+ | Заметим, что возможность выделения символов существенно упрощает анализ данного языка, так как позволяет считать, что цепочка <tex>x</tex> может расположиться единственным способом. Иначе, т.е. при использовании леммы о разрастании для кс-языков, решение | ||
+ | задачи было бы, по меньшей мере, сильно затруднено. | ||
+ | |||
== См. также == | == См. также == |
Версия 20:31, 18 января 2017
Содержание
Лемма
Лемма: |
Для каждой контекстно-свободной грамматики существует такое , что для любого слова длины не менее и для любых выделенных в не менее позиций, может быть представлено в виде , причем:
|
Доказательство: |
Введем следующие обозначения: и — длина самой длинной правой части правила из . Тогда в качестве возьмем . Рассмотрим дерево разбора для произвольного слова , у которого . В силу выбора в будет по крайне мере один путь от корня до листа длины не менее . Произвольным образом выделим в не менее позиций. Соответствующие этим позициям листья дерева будем называть выделенными.Пусть — корень , а — сын , который имеет среди своих потомков наибольшее число выделенных листьев (если таких несколько, то самый правый из них). Рассмотрим — путь от корня до листа.Будем называть ветвящейся ту вершину, у которой по крайне мере два сына имеют выделенных потомков. Докажем по индукции, что если среди Поскольку имеет хотя бы выделенных потомков, то содержит по крайне мере ветвящиеся вершин. Заметим, что — лист, поэтому . Будем называть левой ветвящейся вершиной, если ее сын, не принадлежащий пути , имеет выделенного потомка, лежащего слева от . В противном случае назовем правой ветвящейся вершиной. Рассмотрим последние вершины, принадлежащие пути . Предположим, что хотя бы вершины — левые ветвящиеся (случай, когда хотя бы вершины — правые ветвящиеся, разбирается аналогично). Пусть — последние левые ветвящиеся вершины. Поскольку , то среди них можно найти как минимум две вершины, соответствующие одному нетерминалу. Обозначим эти вершины и , причем — потомок . Тогда на рисунке показано, как представить в требуемом виде.
|
Пример не КС-языка, для которого выполняется лемма
Докажем, что можно построить такой язык, для которого будет выполняться лемма Огдена, однако он не будет контекстно-свободным. Выберем
— подмножество и
Языки над
.Очевидно, что
— КС, если контекстно-свободен. является рекурсивно-перечислимым, если и им является.Для [1]
будет выполняться лемма Огдена для . Выбрав таким образом, чтобы он был рекурсивно-перечислимым, мы создадим такой язык. (Такие языки существуют)Пример не КС-языка, для которого выполняется лемма
Докажем, что язык
, где - попарно различны не является кс-языком.Предположим, что данный язык контекстно-свободный. Возьмем цепочку
, где - константа из леммы Огдена, выделив в ней все вхождения символа . Тогда при представлении цепочки в виде цепочка обязательно «зацепит» хотя бы один символ . Cледовательно, цепочка состоит только из символов (как и цепочка ). А именно, .Тогда, если цепочка
содержит и другие символы, кроме , цепочка может входить либо в «зону» символов (целиком), либо в «зону» символов (целиком), так как расположение накачиваемых цепочек на стыках зон, очевидно, невозможно. В первом случае «кратность» накачки цепочки , которая уравняет числа символов и , определяется из соотношения:Во втором случае
- кратная накачка цепочки x уравняет числа вхождений символов и . Не исключено, наконец, что обе накачиваемые цепочки расположены в «зоне» символов . Но тогда одним из указанных выше способов накачки можно уравнять числа либо символов и , либо и . //картинка Рис. Цепочки контекстно-свободного языка Заметим, что возможность выделения символов существенно упрощает анализ данного языка, так как позволяет считать, что цепочка может расположиться единственным способом. Иначе, т.е. при использовании леммы о разрастании для кс-языков, решение задачи было бы, по меньшей мере, сильно затруднено.
См. также
Лемма о разрастании для КС-грамматик
Примечания
- ↑ <A.V. Aho & J.D. Ullman, The Theory of Parsing, Translation and Compilimg, Vol. I, 1972
Источники информации
- Hopcroft, Motwani and Ullman — Automata Theory, Languages, and Computation — Addison-Wesley, 1979. ISBN 81-7808-347-7.
- Ogden, W. (1968). "A helpful result for proving inherent ambiguity". Mathematical Systems Theory. 2 (3): 191–194.
- On languages satisfying Ogden's lemma