Замкнутость КС-языков относительно различных операций — различия между версиями
Строка 44: | Строка 44: | ||
== Циклический сдвиг == | == Циклический сдвиг == | ||
− | + | Используется примерно та же конструкция, что и для построения ДКА, принимающего все циклические сдвиги всех слов из регулярного языка <tex> R </tex>. | |
== Дополнение, пересечение и разность == | == Дополнение, пересечение и разность == | ||
Строка 68: | Строка 68: | ||
Более того, даже задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения или включения КС-языков являются алгоритмически неразрешимыми. | Более того, даже задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения или включения КС-языков являются алгоритмически неразрешимыми. | ||
+ | |||
+ | == Примеры других операций == | ||
+ | |||
+ | {{ Определение | ||
+ | |definition= | ||
+ | <tex> Half(L) = \{ w \mid ww \in L \} </tex> | ||
+ | }} | ||
+ | |||
+ | Операция <tex> Half </tex> также не сохраняет КС-язык таковым. Рассмотрим язык <tex> L = \{ a^n b a^n b a^m b a^l b a^k b a^k b \} </tex>. Посмотрим, что есть <tex> Half(L) </tex>. Пусть <tex> \alpha = a^n b a^n b a^m b a^l b a^k b a^k b = ww </tex>. Отсюда следует, что: | ||
+ | * <tex> n = l </tex> | ||
+ | * <tex> n = k </tex> | ||
+ | * <tex> m = k </tex> | ||
+ | |||
+ | А значит, <tex> n = l = k = m </tex>, и <tex> Half(L) = \{ a^n b a^n b a^т b \} </tex>, и по лемме о накачке КС-языком не является. | ||
= Операции над КС-языком и регулярным языком = | = Операции над КС-языком и регулярным языком = | ||
Строка 73: | Строка 87: | ||
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка -- всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка. | Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка -- всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка. | ||
− | Пусть регулярный язык задан своим ДКА, а КС-язык -- своим МП-автоматом. Построим прямое произведение этих автоматов также, как строилось прямое произведение для двух ДКА. | + | Пусть регулярный язык задан своим ДКА, а КС-язык -- своим МП-автоматом c допуском по допускающему состоянию. Построим прямое произведение этих автоматов также, как строилось прямое произведение для двух ДКА. |
+ | |||
+ | Более формально, пусть <tex> R </tex> -- регулярный язык, заданный своим ДКА <tex> \langle \Sigma, Q_1, s_1, T_1, \delta_1 \rangle </tex>, и <tex> L </tex> -- КС-язык, заданный своим МП-автоматом: <tex> \langle \Sigma, \Gamma, Q_2, s_2, T_2, z_0, \delta_2 \rangle </tex>. Тогда прямым произведением назовем следующий автомат: | ||
− | + | * <tex> Q = \{ \langle q_1, q_2 \rangle \mid q_1 \in Q_1, q_2 \in Q_2 \} </tex>. Иначе говоря, состояние в новом автомате -- пара из состояния первого автомата и состояния второго автомата. | |
+ | * <tex> s = \langle s_1, s_2 \rangle </tex> | ||
+ | * Стековый алфавит <tex> \Gamma </tex> остается неизменным. | ||
+ | * <tex> T = \{ \langle t_1, t_2 \rangle \mid t_1 \in T_1, t_2 \in T_2 \} </tex>. Допускающие состояния нового автомата -- пары состояний, где оба состояния были допускающими в своем автомате. | ||
+ | * <tex> \delta ( \langle q_1, q_2 \rangle, c, d) = \langle \delta_1 (q_1, c), \delta_2 (q_2, c, d) \rangle </tex>. При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния <tex> q_2 </tex>, | ||
+ | видя на ленте символ <tex> c </tex> и символ <tex> d </tex> на вершине стека. |
Версия 01:11, 17 декабря 2012
В отличие от регулярных языков, КС-языки не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.
Здесь и далее считаем, что
-- КС языки.Содержание
Операции с КС-языками
Объединение
Утверждение: |
также является КС-языком. |
Построим КС-грамматику для языка . Для этого рассмотрим соответствующие КС-грамматики для языков и . Пусть стартовые символы в них имеют имена и соответственно. Тогда стартовый символ для обозначим за и добавим правило .Покажем, что В обратную сторону, пусть . В левую сторону: коли и есть правило , то, по определению получаем, что . Аналогично и для . . Поскольку -- единственные правила, в которых нетерминал присутствует в правой части, а значит, либо , либо , что и требовалось доказать. |
Конкатенация
Утверждение: |
-- КС-язык. |
КС-грамматика для Доказательство аналогично случаю с объединением. выглядит следующим образом: , и -- стартовый символ. |
Замыкание Клини
Утверждение: |
-- КС-язык. |
Если | -- стартовый символ КС-грамматики для языка , то добавим в КС-грамматику для языка новый стартовый символ и правила .
Прямой и обратный гомоморфизм
В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ
заменяется на . Для обратного гомоморфизма построим МП-автомат для по МП-автомату для языка .Разворот
Для того, чтобы построить КС-грамматику для языка
, необходимо развернуть все правые части правил грамматики для .Циклический сдвиг
Используется примерно та же конструкция, что и для построения ДКА, принимающего все циклические сдвиги всех слов из регулярного языка
.Дополнение, пересечение и разность
В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком.
Утверждение: |
не является КС-языком, однако -- КС-язык. |
То, что | -- не КС язык, доказывается с помощью леммы о накачке. Для можно составить КС-грамматику. Предоставим это читателю в качестве упражнения.
Утверждение: |
Если , то не является КС-языком. |
Но . По замкнутости КС-языков относительно конкатенации получаем, что и являются КС-языками. , что по лемме о накачке для КС-языков не является КС-языком. |
Для разности достаточно заметить, что
, поэтому разность КС-языков также необязательно является КС-языком.Более того, даже задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения или включения КС-языков являются алгоритмически неразрешимыми.
Примеры других операций
Определение: |
Операция также не сохраняет КС-язык таковым. Рассмотрим язык . Посмотрим, что есть . Пусть . Отсюда следует, что:
А значит,
, и , и по лемме о накачке КС-языком не является.Операции над КС-языком и регулярным языком
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка -- всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка.
Пусть регулярный язык задан своим ДКА, а КС-язык -- своим МП-автоматом c допуском по допускающему состоянию. Построим прямое произведение этих автоматов также, как строилось прямое произведение для двух ДКА.
Более формально, пусть
-- регулярный язык, заданный своим ДКА , и -- КС-язык, заданный своим МП-автоматом: . Тогда прямым произведением назовем следующий автомат:- . Иначе говоря, состояние в новом автомате -- пара из состояния первого автомата и состояния второго автомата.
- Стековый алфавит остается неизменным.
- . Допускающие состояния нового автомата -- пары состояний, где оба состояния были допускающими в своем автомате.
- . При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния ,
видя на ленте символ
и символ на вершине стека.