Замкнутость КС-языков относительно различных операций
В отличие от регулярных языков, КС-языки не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.
Здесь и далее считаем, что -- КС языки.
Содержание
Операции с КС-языками
Объединение
| Утверждение: |
также является КС-языком. |
|
Построим КС-грамматику для языка . Для этого рассмотрим соответствующие КС-грамматики для языков и . Пусть стартовые символы в них имеют имена и соответственно. Тогда стартовый символ для обозначим за и добавим правило . Покажем, что . В левую сторону: коли и есть правило , то, по определению получаем, что . Аналогично и для . В обратную сторону, пусть . Поскольку -- единственные правила, в которых нетерминал присутствует в правой части, а значит, либо , либо , что и требовалось доказать. |
Конкатенация
| Утверждение: |
-- КС-язык. |
|
КС-грамматика для выглядит следующим образом: , и -- стартовый символ. Доказательство аналогично случаю с объединением. |
Замыкание Клини
| Утверждение: |
-- КС-язык. |
| Если -- стартовый символ КС-грамматики для языка , то добавим в КС-грамматику для языка новый стартовый символ и правила . |
Прямой и обратный гомоморфизм
В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ заменяется на . Для обратного гомоморфизма построим МП-автомат для по МП-автомату для языка .
Разворот
Для того, чтобы построить КС-грамматику для языка , необходимо развернуть все правые части правил грамматики для .
Циклический сдвиг
Используется примерно та же конструкция, что и для построения ДКА, принимающего все циклические сдвиги всех слов из регулярного языка .
Дополнение, пересечение и разность
В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком.
| Утверждение: |
не является КС-языком, однако -- КС-язык. |
| То, что -- не КС язык, доказывается с помощью леммы о накачке. Для можно составить КС-грамматику. Предоставим это читателю в качестве упражнения. |
| Утверждение: |
Если , то не является КС-языком. |
|
. По замкнутости КС-языков относительно конкатенации получаем, что и являются КС-языками. Но , что по лемме о накачке для КС-языков не является КС-языком. |
Для разности достаточно заметить, что , поэтому разность КС-языков также необязательно является КС-языком.
Более того, даже задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения или включения КС-языков являются алгоритмически неразрешимыми.
Примеры других операций
| Определение: |
Операция также не сохраняет КС-язык таковым. Рассмотрим язык . Посмотрим, что есть . Пусть . Отсюда следует, что:
А значит, , и , и по лемме о накачке КС-языком не является.
Операции над КС-языком и регулярным языком
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка -- всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка.
Пусть регулярный язык задан своим ДКА, а КС-язык -- своим МП-автоматом c допуском по допускающему состоянию. Построим прямое произведение этих автоматов также, как строилось прямое произведение для двух ДКА.
Более формально, пусть -- регулярный язык, заданный своим ДКА , и -- КС-язык, заданный своим МП-автоматом: . Тогда прямым произведением назовем следующий автомат:
- . Иначе говоря, состояние в новом автомате -- пара из состояния первого автомата и состояния второго автомата.
- Стековый алфавит остается неизменным.
- . Допускающие состояния нового автомата -- пары состояний, где оба состояния были допускающими в своем автомате.
- . При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния ,
видя на ленте символ и символ на вершине стека.