Теорема Парика — различия между версиями
Alice (обсуждение | вклад) |
Alice (обсуждение | вклад) |
||
Строка 49: | Строка 49: | ||
<br> | <br> | ||
− | Теперь | + | Теперь же сосредоточимся на языке <tex>L^{\sim}(\Gamma)</tex>. Определим три множества деревьев разбора. |
{{Определение | {{Определение | ||
|definition = | |definition = | ||
Строка 64: | Строка 64: | ||
}} | }} | ||
− | Последнее множество | + | Последнее множество соотносится с теми правилами грамматики, которые делают строку больше в процессе вывода, то есть <tex>A \Rightarrow uAv</tex>, где <tex>u, v \in \Sigma</tex>. Эти деревья могут быть использованы, чтобы увеличить дерево разбора в множестве <tex>T'</tex> замещением нетерминала <tex>A</tex> в некотором дереве <tex>t'</tex> на дерево из множества <tex>I</tex>, определение которого написано ниже. |
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | Пусть <tex>I</tex> {{---}} множество всех деревьев разбора с корнем <tex>A \in N</tex>, содержащих только один нетерминальный лист, который также помечен как <tex>A</tex>. | + | Пусть <tex>I</tex> {{---}} множество всех деревьев разбора с корнем <tex>A \in N</tex>, содержащих только один нетерминальный лист, который также помечен как <tex>A</tex>. В дополнение, деревья разбора множества <tex>I</tex> должны удовлетворять условию 2 в определении <tex>T</tex>. |
}} | }} | ||
− | В | + | В деревьях из этого множества могут содержаться другие нетерминалы, но главное, чтобы среди листов содержался только корневой. |
+ | |||
+ | Можно заметить, что деревья из <tex>T</tex> и <tex>I</tex> имеют конечную высоту. | ||
<br> | <br> | ||
Строка 80: | Строка 82: | ||
|proof= | |proof= | ||
Можем заметить, пустая строка может быть удалена из множества <tex>W</tex>, так как она не влияет на суммирование. Обозначим объединение сумм в лемме как <tex>\Phi</tex>. | Можем заметить, пустая строка может быть удалена из множества <tex>W</tex>, так как она не влияет на суммирование. Обозначим объединение сумм в лемме как <tex>\Phi</tex>. | ||
− | Также заметим, что <tex>\Psi_{\Sigma}(w_{i})</tex> является некоторым вектором размера <tex>m</tex>, <tex>W</tex> состоит из конечного набора строк (так как количество нетерминалов конечно, размер грамматики тоже конечен, | + | Также заметим, что <tex>\Psi_{\Sigma}(w_{i})</tex> является некоторым вектором размера <tex>m</tex>, <tex>W</tex> состоит из конечного набора строк (так как количество нетерминалов конечно, размер грамматики тоже конечен, высота деревьев из <tex>I</tex> конечна и ограничена, а значит и объединение таких <tex>uv</tex> для конечного числа нетерминалов конечно, и, следовательно, <tex>W</tex> конечно), <tex>\Psi_{\Sigma}(W)</tex> {{---}} конечный набор векторов размера <tex>m</tex>, и значит каждая такая сумма будет являться полулинейным множеством, а объединение полулинейных множеств полулинейно, в следствие чего можно сказать, что <tex>L^{\sim}(\Gamma)</tex> полулинейно, и далее по первой лемме полулинеен будет язык <tex>L(\Gamma)</tex>. |
Доказывать лемму будем в две стадии по индукции. | Доказывать лемму будем в две стадии по индукции. | ||
− | <tex>\Longrightarrow</tex> | + | <tex>\Longrightarrow</tex> <tex>\Phi \subset L^{\sim}(\Gamma)</tex>. |
− | <tex>\Phi \ | + | В этой части доказательства будет рассмотрен случай <tex>m = (m_{1},\ldots,m_{m}) \in \Phi \rightarrow m \in \Psi_{\Sigma}(L^{\sim}(\Gamma)</tex>. |
− | + | '''База индукции''': | |
+ | Пусть <tex>m=\Psi_{\Sigma}(w_{i})</tex> для некоторого <tex>i</tex>, <tex>w_{i} \in L^{\sim}(\Gamma)</tex>, и таким образом <tex>\Psi_{\Sigma}(w_{i}) \in \Psi_{\Sigma}(L^{\sim}(\Gamma))</tex>. | ||
+ | |||
+ | Предположим, что верно для некоторого <tex>m'</tex>, <tex>m' \in \Psi_{\Sigma}(L^{\sim}(\Gamma))</tex>. | ||
+ | |||
+ | '''Шаг индукции''': | ||
+ | Теперь пусть <tex>m = m'+\Psi_{\Sigma}(u)</tex> для некоторого <tex>u \in W</tex>. Существует дерево <tex>t \in T'</tex>, порождающее <tex>w</tex>, такое, что <tex>\Psi_{\Sigma}(w) = m'</tex>. | ||
+ | Кроме того, существует дерево <tex>t' \in I</tex>, порождающее <tex>u_{0}Av_{0}</tex>, такое, что <tex>u = u_{0}v_{0}</tex>. | ||
+ | Построим дерево разбора, заменив некоторый узел <tex>p</tex>, помеченный <tex>A</tex> в <tex>t</tex>, на дерево <tex>t'</tex>, подвесив к листу <tex>A</tex> дерева <tex>t'</tex> то, что раньше следовало за узлом <tex>p</tex> в дереве разбора. В итоге получившееся дерево принадлежит <tex>T'</tex>, и его результат, <tex>z</tex>, удовлетворяет <tex>\Psi_{\Sigma}(z) = \Psi_{\Sigma}(w)+\Psi_{\Sigma}(u) = m</tex>. Из-за того, что <tex>z</tex> является порождением дерева, принадлежащего <tex>T'</tex>, значит, что оно принадлежит языку <tex>L^{\sim}(\Gamma)</tex>. И так как получившийся результат совпадает с суммой, представленной в начале шага индукции, предположение индукции верно, и <tex>\Phi \subset L^{\sim}(\Gamma)</tex>. | ||
<tex>\Longleftarrow</tex> <tex>L^{\sim}(\Gamma) \subset \Phi</tex>. | <tex>\Longleftarrow</tex> <tex>L^{\sim}(\Gamma) \subset \Phi</tex>. | ||
+ | |||
+ | В этой части будет доказано, что если <tex>t \in T'</tex>, и результатом <tex>w</tex>, то <tex>\Psi_{\Sigma}(w) \in \Phi</tex>. | ||
+ | |||
+ | '''База индукции''': | ||
+ | Если <tex>t \in T</tex>, то <tex>w = w_{i}</tex> для некоторого <tex>i</tex>, и значит <tex>\Psi_{\Sigma}(w) \in \Phi</tex>. | ||
+ | |||
+ | Предположим, что утверждение сохраняется для всех деревьев в <tex>T'</tex>, меньших <tex>t</tex>. | ||
+ | |||
+ | '''Шаг индукции''': | ||
+ | Пусть <tex>p_{1}, \ldots, p_{k}</tex> будут узлами на некотором пути дерева, и пусть индекс каждого узла будет указывать на его относительную позицию на этом пути. Более того, пусть все узлы будут помечены одним и тем же нетерминалом <tex>A</tex>, чтобы все правильные поддеревья, у которых корнем является узел <tex>p_{1}</tex>, удовлетворяли условию 2 в определении <tex>T</tex>. | ||
}} | }} |
Версия 00:29, 28 декабря 2016
Содержание
Линейные множества
В этом разделе предполагается, что зафиксирован некоторый линейный порядок на алфавите . Пусть .
Определение: |
Через | будем обозначать функцию , определённую следующим образом: , где — число появлений символа в слове . Аналогично, каждому языку ставится в соответствие множество , определённое так: . Функция называется отображением Парика (англ. Parikh's mapping) соответственно слова и языка.
Пусть и . Тогда .
Определение: |
Пусть | при — вектора в множестве . Множество называется линейным (англ. linear) подмножеством множества .
Говоря проще, линейное подмножество может быть построено с помощью любого m-размерного вектора добавлением к нему произвольного числа m-размерных векторов из конечного множества, например, 1 раз и 0 раз остальные вектора, 1 раз , 1 раз и 0 раз остальные, и так далее.
Множество является линейным.
Определение: |
Подмножество множества | называется полулинейным (англ. semilinear), если оно является объединением конечного числа линейных множеств.
Полулинейное множество имеет следующие свойства:
- Любое конечное подмножество — полулинейно.
- Полулинейные множества замкнуты относительно операции объединения, пересечения, разности и проекции.
- Полулинейные множества по теореме Гинзбурга-Спаниера (англ. Ginsburg and Spanier theorem) — те, которые определяемы в арифметике Пресбургера (англ. Presburger arithmetic)[1].
Пусть
, , и линейные подмножества , а является полулинейным подмножеством .Теорема Парика
Теорема (Парика, англ. Parikh's theorem): | ||||||||||||||||||
Если язык контекстно-свободным, то множество является полулинейным. является | ||||||||||||||||||
Доказательство: | ||||||||||||||||||
Пусть — контекстно-свободная грамматика. Вместо того, чтобы рассматривать , рассмотрим язык , содержащий только строки, порожденные выводами, в которых встречаются все нетерминалы грамматики. Так как теорема Парика говорит о том, что для множество полулинейно, то же самое должно сохраняться и для .
Стоит заметить, что число таких языков в лемме ограничено числом нетерминалов в грамматике: . Вычитание происходит из-за того, что начальный нетерминал не должен быть удален.
Деревья из этого множества соотносятся с деревьями разбора языка , так как при выводе каждого слова из этого языка также используются все нетерминалы грамматики. В дальнейшем доказательстве используется для определения отображения Парика языка как объединение индивидуальных отображений.В отличие от предыдущего определения, для следующего множества число для любого нетерминала не ограничено.
В деревьях из этого множества могут содержаться другие нетерминалы, но главное, чтобы среди листов содержался только корневой. Можно заметить, что деревья из и имеют конечную высоту.
| ||||||||||||||||||
Теорема Парика связывает два понятия: функцию
Эта теорема, так же, как и лемма о накачке и лемма Огдена, не является достаточной: язык не является контекстно-свободным, однако его множество является полулинейным: .
Примеры
Язык
— простое число не является контекстно-свободным, так как множество простых чисел не является полулинейным (в арифметике Пресбургера нельзя определить множество простых чисел).Язык
или — простое и не является контекстно свободным, так как множество, порождаемое функцией , не является полулинейным: множество таких пар — линейно, множество таких пар — линейно, при этом множество простых чисел не является полулинейным, и, как следствие, множество — простое и не является полулинейным, так же не полулинейно.См. также
Примечания
Источники информации
- Гинзбург С. — Математическая теория контекстно-свободных языков
- Håkan Lindqvist — Parikh’s theorem
- Stack Exchange — How to prove that a language is not context-free?