Замкнутость КС-языков относительно различных операций — различия между версиями
(Новая страница: «В отличие от [[Замкнутость регулярных языков относительно различных операций|регулярны...») |
|||
Строка 35: | Строка 35: | ||
== Прямой и обратный гомоморфизм == | == Прямой и обратный гомоморфизм == | ||
+ | |||
+ | В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ <tex> x \in \Sigma </tex> заменяется на <tex> h(x) </tex>. Для обратного гомоморфизма построим МП-автомат для <tex> h^{-1}(L) </tex> по МП-автомату для языка <tex> L </tex>. | ||
== Разворот == | == Разворот == | ||
+ | |||
+ | Для того, чтобы построить КС-грамматику для языка <tex> L^{R} = \{ w^{R} \mid w \in L \} </tex>, необходимо развернуть все правые части правил грамматики для <tex> L </tex>. | ||
== Циклический сдвиг == | == Циклический сдвиг == | ||
+ | |||
+ | ... | ||
== Дополнение, пересечение и разность == | == Дополнение, пересечение и разность == | ||
+ | |||
+ | В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком. | ||
+ | |||
+ | {{ Утверждение | ||
+ | |statement= <tex> L = \{ww \mid w \in \Sigma^{*} \} </tex> не является КС-языком, однако <tex> \overline{L} </tex> -- КС-язык. | ||
+ | |proof= | ||
+ | |||
+ | То, что <tex> L </tex> -- не КС язык, доказывается с помощью леммы о накачке. Для <tex> \overline{L} </tex> можно составить КС-грамматику. Предоставим это читателю в качестве упражнения. | ||
+ | }} | ||
+ | |||
+ | {{ Утверждение | ||
+ | |statement= Если <tex> L_1 = a^i b^i c^j , L_2 = a^i b^j c^j </tex>, то <tex> L_1 \cap L_2 </tex> не является КС-языком. | ||
+ | |proof= | ||
+ | <tex> L_1 = \{ a^i b^i \} \cdot \{ c^j \}, L_2 = \{ a^i \} \cdot \{ b^j c^j \} </tex>. По замкнутости КС-языков относительно конкатенации получаем, что <tex> L_1 </tex> и <tex> L_2 </tex> являются КС-языками. | ||
+ | |||
+ | Но <tex> L_1 \cap L_2 = \{ a^i b^i c^i \mid i \in \mathbb{N} \} </tex>, что по лемме о накачке для КС-языков не является КС-языком. | ||
+ | }} | ||
+ | |||
+ | Для разности достаточно заметить, что <tex> \overline{L} = \Sigma^{*} \setminus L </tex>, поэтому разность КС-языков также необязательно является КС-языком. | ||
+ | |||
+ | Более того, даже задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения или включения КС-языков являются алгоритмически неразрешимыми. | ||
= Операции над КС-языком и регулярным языком = | = Операции над КС-языком и регулярным языком = | ||
− | + | Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка -- всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка. | |
+ | |||
+ | Пусть регулярный язык задан своим ДКА, а КС-язык -- своим МП-автоматом. Построим прямое произведение этих автоматов также, как строилось прямое произведение для двух ДКА. | ||
+ | |||
+ | Более формально, ... |
Версия 00:17, 17 декабря 2012
В отличие от регулярных языков, КС-языки не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.
Здесь и далее считаем, что
-- КС языки.Содержание
Операции с КС-языками
Объединение
Утверждение: |
также является КС-языком. |
Построим КС-грамматику для языка . Для этого рассмотрим соответствующие КС-грамматики для языков и . Пусть стартовые символы в них имеют имена и соответственно. Тогда стартовый символ для обозначим за и добавим правило .Покажем, что В обратную сторону, пусть . В левую сторону: коли и есть правило , то, по определению получаем, что . Аналогично и для . . Поскольку -- единственные правила, в которых нетерминал присутствует в правой части, а значит, либо , либо , что и требовалось доказать. |
Конкатенация
Утверждение: |
-- КС-язык. |
КС-грамматика для Доказательство аналогично случаю с объединением. выглядит следующим образом: , и -- стартовый символ. |
Замыкание Клини
Утверждение: |
-- КС-язык. |
Если | -- стартовый символ КС-грамматики для языка , то добавим в КС-грамматику для языка новый стартовый символ и правила .
Прямой и обратный гомоморфизм
В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ
заменяется на . Для обратного гомоморфизма построим МП-автомат для по МП-автомату для языка .Разворот
Для того, чтобы построить КС-грамматику для языка
, необходимо развернуть все правые части правил грамматики для .Циклический сдвиг
...
Дополнение, пересечение и разность
В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком.
Утверждение: |
не является КС-языком, однако -- КС-язык. |
То, что | -- не КС язык, доказывается с помощью леммы о накачке. Для можно составить КС-грамматику. Предоставим это читателю в качестве упражнения.
Утверждение: |
Если , то не является КС-языком. |
Но . По замкнутости КС-языков относительно конкатенации получаем, что и являются КС-языками. , что по лемме о накачке для КС-языков не является КС-языком. |
Для разности достаточно заметить, что
, поэтому разность КС-языков также необязательно является КС-языком.Более того, даже задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения или включения КС-языков являются алгоритмически неразрешимыми.
Операции над КС-языком и регулярным языком
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка -- всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка.
Пусть регулярный язык задан своим ДКА, а КС-язык -- своим МП-автоматом. Построим прямое произведение этих автоматов также, как строилось прямое произведение для двух ДКА.
Более формально, ...