Теорема Парика — различия между версиями
Alice (обсуждение | вклад) |
Alice (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | == | + | ==Линейные множества== |
− | В этом разделе предполагается, что зафиксирован некоторый линейный порядок на алфавите <tex>\Sigma</tex>. Пусть <tex>\Sigma = \{a_{1}, | + | В этом разделе предполагается, что зафиксирован некоторый [[Отношение_порядка|линейный порядок]] на алфавите <tex>\Sigma</tex>. Пусть <tex>\Sigma = \{a_{1},\ldots,a_{m}\}</tex>. |
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | Через <tex>\Psi_{\Sigma}</tex> будем обозначать функцию <tex>\Psi_{\Sigma} : \Sigma^{*} \rightarrow \mathbb {N}^{m}</tex>, определённую следующим образом: <tex>\Psi_{\Sigma}(w) = \langle |w|_{a_{1}} , | + | Через <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>. |
}} | }} | ||
Строка 12: | Строка 12: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | Пусть <tex>x_{0}, x_{1}, | + | Пусть <tex>x_{0}, x_{1},\ldots, x_{p}</tex> при <tex>0 \leqslant p < \infty</tex> {{---}} вектора в множестве <tex>\mathbb {N}^{m}</tex>. Множество <tex>L = \{b + \sum_{i=1}^{p}k_{i} x_{i} \mid b \in B, k \geq 0, k_{1},\ldots,k_{p} \in \mathbb {N}\} = x_{0} + \{x_{1},\ldots, x_{p}\}^{*}</tex> называется '''линейным''' (англ. ''linear'') подмножеством множества <tex>\mathbb {N}^{m}</tex>. |
}} | }} | ||
Строка 22: | Строка 22: | ||
Подмножество множества <tex>\mathbb {N}</tex> называется '''полулинейным''' (англ. ''semilinear''), если оно является объединением конечного числа линейных множеств. | Подмножество множества <tex>\mathbb {N}</tex> называется '''полулинейным''' (англ. ''semilinear''), если оно является объединением конечного числа линейных множеств. | ||
}} | }} | ||
+ | Полулинейное множество имеет следующие свойства: | ||
*Любое конечное подмножество <tex>\mathbb {N}^{m}</tex> {{---}} полулинейно. | *Любое конечное подмножество <tex>\mathbb {N}^{m}</tex> {{---}} полулинейно. | ||
*Полулинейные множества замкнуты относительно операции объединения, пересечения, разности и проекции. | *Полулинейные множества замкнуты относительно операции объединения, пересечения, разности и проекции. | ||
− | *Полулинейные множества по теореме Гинзбурга-Спаниера (англ. ''Ginsburg and Spanier theorem'') {{---}} те, которые определяемы в | + | *Полулинейные множества по теореме Гинзбурга-Спаниера (англ. ''Ginsburg and Spanier theorem'') {{---}} те, которые определяемы в арифметике Пресбургера (англ. ''Presburger arithmetic'')<ref>[https://en.wikipedia.org/wiki/Presburger_arithmetic Wikipedia {{---}} Presburger arithmetic]</ref>. |
Пусть <tex>L_{1} = (1, 2) + \{(3, 5), (7, 11)\}^{*}</tex>, <tex>L_{2} = (1, 1) + \{(2, 3), (5, 7), (4, 0)\}^{*}</tex>, <tex>L_{1}</tex> и <tex>L_{2}</tex> линейные подмножества <tex>\mathbb {N}^{2}</tex>, а <tex>L = L_{1} \cup L_{2}</tex> является полулинейным подмножеством <tex>\mathbb {N}^{2}</tex>. | Пусть <tex>L_{1} = (1, 2) + \{(3, 5), (7, 11)\}^{*}</tex>, <tex>L_{2} = (1, 1) + \{(2, 3), (5, 7), (4, 0)\}^{*}</tex>, <tex>L_{1}</tex> и <tex>L_{2}</tex> линейные подмножества <tex>\mathbb {N}^{2}</tex>, а <tex>L = L_{1} \cup L_{2}</tex> является полулинейным подмножеством <tex>\mathbb {N}^{2}</tex>. | ||
Строка 42: | Строка 43: | ||
Если множество <tex>\Psi_{\Sigma}(L^{\sim}(\Gamma))</tex> полулинейно для всех контекстно-свободных языков, тогда множество <tex>\Psi_{\Sigma}(L(\Gamma))</tex> также полулинейно. | Если множество <tex>\Psi_{\Sigma}(L^{\sim}(\Gamma))</tex> полулинейно для всех контекстно-свободных языков, тогда множество <tex>\Psi_{\Sigma}(L(\Gamma))</tex> также полулинейно. | ||
|proof= | |proof= | ||
− | Построим грамматики <tex>\Gamma_{1},...\Gamma_{k}</tex> для какого-то <tex>k \in \mathbb {N}^{+}</tex> путем удаления из грамматики <tex>\Gamma</tex> нетерминалов. Тогда <tex>L(\Gamma) = L^{\sim}(\Gamma_{1}) \cup | + | Построим грамматики <tex>\Gamma_{1},...\Gamma_{k}</tex> для какого-то <tex>k \in \mathbb {N}^{+}</tex> путем удаления из грамматики <tex>\Gamma</tex> нетерминалов. Тогда <tex>L(\Gamma) = L^{\sim}(\Gamma_{1}) \cup \ldots \cup L^{\sim}(\Gamma_{k})</tex>. Так как для каждого из языков <tex>L^{\sim}(\Gamma_{p})</tex> множество <tex>\Psi_{\Sigma}</tex> полулинейно, то, по свойствам полулинейных множеств, для <tex>L(\Gamma)</tex> <tex>\Psi_{\Sigma}</tex> также полулинейно. |
}} | }} | ||
Строка 73: | Строка 74: | ||
Теперь перейдем к доказательству теоремы. | Теперь перейдем к доказательству теоремы. | ||
<br> | <br> | ||
− | Пусть <tex>w_{1}, | + | Пусть <tex>w_{1},\ldots,w_{q}</tex> при <tex>q \in \mathbb {N}^{+}</tex> будут множеством строк, порожденных деревьями из <tex>T</tex>, и множество <tex>W</tex> {{---}} набором всех строк <tex>uv</tex>, для которых <tex>uAv</tex> будет результатом, полученным с помощью дерева разбора из <tex>I</tex> с вершиной <tex>A \in N</tex>. Элементы множества <tex>W</tex> представляют возможные поддеревья, которые могут быть использованы для того, чтобы увеличить длину пути в некотором дереве. |
{{Лемма | {{Лемма | ||
|statement= | |statement= | ||
− | Для языка <tex>L^{\sim}(\Gamma)</tex> выполняется равенство <tex>\Psi_{\Sigma}(L^{\sim}(\Gamma)) = (\Psi_{\Sigma}(w_{1})+\Psi_{\Sigma}(W)^{*}) \cup | + | Для языка <tex>L^{\sim}(\Gamma)</tex> выполняется равенство <tex>\Psi_{\Sigma}(L^{\sim}(\Gamma)) = (\Psi_{\Sigma}(w_{1})+\Psi_{\Sigma}(W)^{*}) \cup \ldots \cup (\Psi_{\Sigma}(w_{q})+\Psi_{\Sigma}(W)^{*}) </tex> |
|proof= | |proof= | ||
Можем заметить, пустая строка может быть удалена из множества <tex>W</tex>, так как она не влияет на суммирование. Обозначим объединение сумм в лемме как <tex>\Phi</tex>. | Можем заметить, пустая строка может быть удалена из множества <tex>W</tex>, так как она не влияет на суммирование. Обозначим объединение сумм в лемме как <tex>\Phi</tex>. | ||
Строка 102: | Строка 103: | ||
== См. также == | == См. также == | ||
*[[Лемма о разрастании для КС-грамматик|Лемма о разрастании для КС-грамматик]] | *[[Лемма о разрастании для КС-грамматик|Лемма о разрастании для КС-грамматик]] | ||
+ | *[[Доказательство нерегулярности языков: лемма о разрастании|Доказательство нерегулярности языков: лемма о разрастании]] | ||
+ | ==Примечания== | ||
+ | <references/> | ||
− | == Источники == | + | == Источники информации== |
*Гинзбург С. {{---}} Математическая теория контекстно-свободных языков | *Гинзбург С. {{---}} Математическая теория контекстно-свободных языков | ||
*[https://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf Håkan Lindqvist {{---}} Parikh’s theorem] | *[https://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf Håkan Lindqvist {{---}} Parikh’s theorem] | ||
+ | *[http://cs.stackexchange.com/questions/265/how-to-prove-that-a-language-is-not-context-free Stack Exchange {{---}} How to prove that a language is not context-free?] | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Контекстно-свободные грамматики]] | [[Категория: Контекстно-свободные грамматики]] | ||
[[Категория: Опровержение контекстно-свободности языка]] | [[Категория: Опровержение контекстно-свободности языка]] |
Версия 01:28, 21 декабря 2016
Содержание
Линейные множества
В этом разделе предполагается, что зафиксирован некоторый линейный порядок на алфавите . Пусть .
Определение: |
Через | будем обозначать функцию , определённую следующим образом: , где — число появлений символа в слове . Аналогично, каждому языку ставится в соответствие множество , определённое так: .
Пусть и . Тогда .
Определение: |
Пусть | при — вектора в множестве . Множество называется линейным (англ. 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?