Теорема Парика — различия между версиями
Alice (обсуждение | вклад) |
Alice (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | Через <tex>\Psi_{\Sigma}</tex> будем обозначать функцию <tex>\Psi_{\Sigma} : \Sigma^{*} \rightarrow \mathbb {N}^{m}</tex>, определённую следующим образом: <tex>\Psi_{\Sigma}(w) = \langle |w|_{a_{1}} ,\ldots, |w|_{a_{m}} \rangle</tex>, где <tex>|w|_{a_{i}}</tex> {{---}} число появлений символа <tex>a_{i}</tex> в слове <tex>w</tex>. Аналогично, каждому языку <tex>L \subset \Sigma^{*}</tex> ставится в соответствие множество <tex>\Psi_{\Sigma}(L) \subset \mathbb {N}^{m}</tex>, определённое так: <tex>\Psi_{\Sigma}(L) = \{\Psi_{\Sigma}(w) \mid w \in L\}</tex>. | + | Через <tex>\Psi_{\Sigma}</tex> будем обозначать функцию <tex>\Psi_{\Sigma} : \Sigma^{*} \rightarrow \mathbb {N}^{m}</tex>, определённую следующим образом: <tex>\Psi_{\Sigma}(w) = \langle |w|_{a_{1}} ,\ldots, |w|_{a_{m}} \rangle</tex>, где <tex>|w|_{a_{i}}</tex> {{---}} число появлений символа <tex>a_{i}</tex> в слове <tex>w</tex>. Аналогично, каждому языку <tex>L \subset \Sigma^{*}</tex> ставится в соответствие множество <tex>\Psi_{\Sigma}(L) \subset \mathbb {N}^{m}</tex>, определённое так: <tex>\Psi_{\Sigma}(L) = \{\Psi_{\Sigma}(w) \mid w \in L\}</tex>. Функция называется '''отображением Парика''' (англ. ''Parikh's mapping'') соответственно слова и языка. |
}} | }} | ||
Строка 54: | Строка 54: | ||
Пусть <tex>T</tex> {{---}} множество всех терминальных деревьев разбора с корнем <tex>S</tex>, которые удовлетворяют двум условиям: | Пусть <tex>T</tex> {{---}} множество всех терминальных деревьев разбора с корнем <tex>S</tex>, которые удовлетворяют двум условиям: | ||
1. Каждый нетерминал <tex>N</tex> встречается в в дереве. | 1. Каждый нетерминал <tex>N</tex> встречается в в дереве. | ||
− | 2. Каждый нетерминал <tex>N</tex> встречается не более чем <tex>k = |N|</tex> раз в | + | 2. Каждый нетерминал <tex>N</tex> встречается не более чем <tex>k = |N|</tex> раз в любом пути. |
}} | }} | ||
− | Деревья из этого множества соотносятся с деревьями разбора языка <tex>L^{\sim}(\Gamma)</tex>, так как при выводе каждого слова из этого языка также используются все нетерминалы грамматики. | + | Деревья из этого множества соотносятся с деревьями разбора языка <tex>L^{\sim}(\Gamma)</tex>, так как при выводе каждого слова из этого языка также используются все нетерминалы грамматики. В дальнейшем доказательстве <tex>T</tex> используется для определения отображения Парика языка <tex>L^{\sim}(\Gamma)</tex> как объединение индивидуальных отображений. |
В отличие от предыдущего определения, для следующего множества число <tex>k</tex> для любого нетерминала не ограничено. | В отличие от предыдущего определения, для следующего множества число <tex>k</tex> для любого нетерминала не ограничено. | ||
Строка 80: | Строка 80: | ||
|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>uv: A \rightarrow uAv</tex> для любого нетерминала A не может быть бесконечным, а значит и объединение таких <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>m = (m_{1},\ldots,m_{m}) \in \Phi \rightarrow m \in \Psi_{\Sigma}(L^{\sim}(\Gamma)</tex>. | ||
<tex>\Longleftarrow</tex> <tex>L^{\sim}(\Gamma) \subset \Phi</tex>. | <tex>\Longleftarrow</tex> <tex>L^{\sim}(\Gamma) \subset \Phi</tex>. |
Версия 02:43, 21 декабря 2016
Содержание
Линейные множества
В этом разделе предполагается, что зафиксирован некоторый линейный порядок на алфавите . Пусть .
Определение: |
Через | будем обозначать функцию , определённую следующим образом: , где — число появлений символа в слове . Аналогично, каждому языку ставится в соответствие множество , определённое так: . Функция называется отображением Парика (англ. Parikh's mapping) соответственно слова и языка.
Пусть и . Тогда .
Определение: |
Пусть | при — вектора в множестве . Множество называется линейным (англ. linear) подмножеством множества .
Говоря проще, линейное подмножество может быть построено с помощью любого m-размерного вектора добавлением к нему произвольного числа m-размерных векторов из конечного множества, например, 1 раз и 0 раз остальные вектора, 1 раз , 1 раз и 0 раз остальные, и так далее.
Множество является линейным.
Определение: |
Подмножество множества | называется полулинейным (англ. semilinear), если оно является объединением конечного числа линейных множеств.
Полулинейное множество имеет следующие свойства:
- Любое конечное подмножество — полулинейно.
- Полулинейные множества замкнуты относительно операции объединения, пересечения, разности и проекции.
- Полулинейные множества по теореме Гинзбурга-Спаниера (англ. Ginsburg and Spanier theorem) — те, которые определяемы в арифметике Пресбургера (англ. Presburger arithmetic)[1].
Пусть
, , и линейные подмножества , а является полулинейным подмножеством .Теорема Парика
Теорема (Парика, англ. Parikh's theorem): | ||||||||||||||||||
Если язык контекстно-свободным, то множество является полулинейным. является | ||||||||||||||||||
Доказательство: | ||||||||||||||||||
Пусть — контекстно-свободная грамматика. Вместо того, чтобы рассматривать , рассмотрим язык , содержащий только строки, порожденные выводами, в которых встречаются все нетерминалы грамматики. Так как теорема Парика говорит о том, что для множество полулинейно, то же самое должно сохраняться и для .
Стоит заметить, что число таких языков в лемме ограничено числом нетерминалов в грамматике: . Вычитание происходит из-за того, что начальный нетерминал не должен быть удален.
Деревья из этого множества соотносятся с деревьями разбора языка , так как при выводе каждого слова из этого языка также используются все нетерминалы грамматики. В дальнейшем доказательстве используется для определения отображения Парика языка как объединение индивидуальных отображений.В отличие от предыдущего определения, для следующего множества число для любого нетерминала не ограничено.
В дополнение, деревья разбора множества должны удовлетворять условию 2 в определении . Еще можно заметить, что деревья из и имеют конечную высоту.
| ||||||||||||||||||
Теорема Парика связывает два понятия: функцию
Эта теорема, так же, как и лемма о накачке и лемма Огдена, не является достаточной: язык не является контекстно-свободным, однако его множество является полулинейным: .
Примеры
Язык
— простое число не является контекстно-свободным, так как множество простых чисел не является полулинейным (в арифметике Пресбургера нельзя определить множество простых чисел).Язык
или — простое и не является контекстно свободным, так как множество, порождаемое функцией , не является полулинейным: множество таких пар — линейно, множество таких пар — линейно, при этом множество простых чисел не является полулинейным, и, как следствие, множество — простое и не является полулинейным, так же не полулинейно.См. также
Примечания
Источники информации
- Гинзбург С. — Математическая теория контекстно-свободных языков
- Håkan Lindqvist — Parikh’s theorem
- Stack Exchange — How to prove that a language is not context-free?