Замкнутость КС-языков относительно различных операций — различия между версиями
Igorjan94 (обсуждение | вклад) м (→Прямой и обратный гомоморфизм) |
Igorjan94 (обсуждение | вклад) (→Прямой и обратный гомоморфизм) |
||
Строка 38: | Строка 38: | ||
В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ <tex> x \in \Sigma </tex> заменяется на <tex> h(x) </tex>. | В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ <tex> x \in \Sigma </tex> заменяется на <tex> h(x) </tex>. | ||
− | + | Для доказательства замкнутости обратного гомоморфизма будем делать аналогично [[Замкнутость регулярных языков относительно различных операций|доказательству]] для регулярных языков. Построим [[Автоматы с магазинной памятью|МП-автомат]] для <tex> h^{-1}(L) = \{ w \mid h(w) \in L \} </tex> на основе МП-автомата для языка <tex> L </tex> (назовем его <tex> M </tex>). Считаем, что <tex> M </tex> допускает слова [[МП-автоматы, допуск по пустому стеку и по допускающему состоянию, эквивалентность|по пустому стеку]]. Новый автомат будет действовать следующим образом: | |
− | |||
− | Построим [[Автоматы с магазинной памятью|МП-автомат]] для <tex> h^{-1}(L) </tex> на основе МП-автомата для языка <tex> L </tex> (назовем его <tex> M </tex>). Считаем, что <tex> M </tex> допускает слова [[МП-автоматы, допуск по пустому стеку и по допускающему состоянию, эквивалентность|по пустому стеку]]. Новый автомат будет действовать следующим образом: | ||
# Если входное слово закончилось, допускаем или не допускаем его по пустому стеку. | # Если входное слово закончилось, допускаем или не допускаем его по пустому стеку. | ||
Строка 48: | Строка 46: | ||
# После того, как <tex> M </tex> обработал весь буфер, переходим к пункту 2. | # После того, как <tex> M </tex> обработал весь буфер, переходим к пункту 2. | ||
− | + | Если рассмотреть более формально, пусть <tex> M =\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}, T\rangle </tex>, тогда <tex> M' =\langle Q', \Sigma, \Gamma, \delta', (s, \varepsilon), Z_{0}, T \times {\varepsilon}\rangle</tex>. | |
+ | * <tex> Q' = \{ (q, x) \mid q \in Q \} </tex>, где <tex> x </tex> — суффикс (не обязательно собственный) некоторой цепочки <tex> h(c) </tex> для символа <tex> c \in \Sigma </tex>. Таким образом, первый компонент состояния <tex> M' </tex> является состоянием <tex> M </tex>, а второй — компонентом буфера. | ||
+ | * <tex> \delta' </tex> определяется следующими правилами: | ||
+ | а) <tex> \delta'((q, \varepsilon), c, X) = \{((q, h(c)), X) \mid c \in \Sigma, q \in Q, X \in \Gamma \}</tex>. | ||
+ | Когда буфер пуст, <tex> M' </tex> может прочитать свой следующий входной символ <tex> c </tex> и поместить <tex> h(c) </tex> в буфер. | ||
+ | |||
+ | б) если δ(q, b, X) содержит (p, γ), где b ∈ T или b = ε, то δ′((q, bx), ε, X) содержит ((p, x), γ). Таким образом, P′ всегда имеет возможность имитации перехода P, | ||
+ | используя голову буфера. Если b ∈ T, то буфер должен быть непустым, но если b = ε, то буфер может быть пустым. | ||
+ | * начальным состоянием P′ является (q0, ε), т.е. P′ стартует в начальном состоянии P с пустым буфером. | ||
+ | * Аналогично, допускающими состояниями P′ являются такие состояния (q, ε), у которых q — допускающее состояние P. | ||
+ | |||
+ | Следующее утверждение характеризует взаимосвязь P′ и P. | ||
=== Разворот === | === Разворот === |
Версия 17:03, 5 ноября 2013
В отличие от регулярных языков, КС-языки не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.
Здесь и далее считаем, что
и — КС языки.Содержание
Операции с КС-языками
Объединение
Утверждение: |
также является КС-языком. |
Построим КС-грамматику для языка . Для этого рассмотрим соответствующие КС-грамматики для языков и . Пусть стартовые символы в них имеют имена и соответственно. Тогда стартовый символ для обозначим за и добавим правило . Покажем, что В обратную сторону, пусть . В левую сторону: поскольку и есть правило , то, по определению получаем, что . Аналогично и для . . Поскольку — единственные правила, в которых нетерминал присутствует в правой части, то это означает, что либо , либо , что и требовалось доказать. |
Конкатенация
Утверждение: |
— КС-язык. |
Аналогично предыдущему случаю построим КС-грамматику для языка Остальное доказательство аналогично случаю с объединением. . Для этого добавим правило , где и — стартовые символы языков и соответственно. |
Замыкание Клини
Утверждение: |
— КС-язык. |
Если | — стартовый символ КС-грамматики для языка , то добавим в КС-грамматику для языка новый стартовый символ и правила .
Прямой и обратный гомоморфизм
В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ
заменяется на .Для доказательства замкнутости обратного гомоморфизма будем делать аналогично доказательству для регулярных языков. Построим МП-автомат для на основе МП-автомата для языка (назовем его ). Считаем, что допускает слова по пустому стеку. Новый автомат будет действовать следующим образом:
- Если входное слово закончилось, допускаем или не допускаем его по пустому стеку.
- Иначе считываем символ .
- Сохраняем в буфере.
- Запускаем на слове, находящемся в буфере.
- После того, как обработал весь буфер, переходим к пункту 2.
Если рассмотреть более формально, пусть
, тогда .- , где — суффикс (не обязательно собственный) некоторой цепочки для символа . Таким образом, первый компонент состояния является состоянием , а второй — компонентом буфера.
- определяется следующими правилами:
а)
. Когда буфер пуст, может прочитать свой следующий входной символ и поместить в буфер.б) если δ(q, b, X) содержит (p, γ), где b ∈ T или b = ε, то δ′((q, bx), ε, X) содержит ((p, x), γ). Таким образом, P′ всегда имеет возможность имитации перехода P, используя голову буфера. Если b ∈ T, то буфер должен быть непустым, но если b = ε, то буфер может быть пустым.
- начальным состоянием P′ является (q0, ε), т.е. P′ стартует в начальном состоянии P с пустым буфером.
- Аналогично, допускающими состояниями P′ являются такие состояния (q, ε), у которых q — допускающее состояние P.
Следующее утверждение характеризует взаимосвязь P′ и P.
Разворот
Для того, чтобы построить КС-грамматику для языка нормальную форму Хомского. Все правила вида и оставим без изменений, а правила заменим на . Таким образом мы получим КС-грамматику для языка .
, необходимо развернуть все правые части правил грамматики для . Приведем грамматику вДополнение, пересечение и разность
В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком.
Утверждение: |
не является КС-языком, однако — КС-язык. |
То, что леммы о разрастании. Для можно составить КС-грамматику. | — не КС язык, доказывается с помощью
Утверждение: |
Если , то не является КС-языком. |
Но . По замкнутости КС-языков относительно конкатенации получаем, что и являются КС-языками. , что по лемме о разрастании для КС-языков не является КС-языком. |
Для разности достаточно заметить, что
, поэтому разность КС-языков также необязательно является КС-языком.Более того, задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения КС-языков являются алгоритмически неразрешимыми.
Примеры других операций
Определение: |
Операция также не сохраняет КС-язык таковым. Рассмотрим язык . — КС-язык. Посмотрим, что есть . Пусть . Отсюда следует, что:
А значит, лемме о разрастании КС-языком не является.
, и , и поОперации над КС-языком и регулярным языком
Пересечение
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка — всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка.
Пусть регулярный язык задан своим ДКА, а КС-язык — своим МП-автоматом c допуском по допускающему состоянию. Построим прямое произведение этих автоматов так же, как строилось прямое произведение для двух ДКА.
Более формально, пусть
— регулярный язык, заданный своим ДКА , и — КС-язык, заданный своим МП-автоматом: . Тогда прямым произведением назовем следующий автомат:- . Иначе говоря, состояние в новом автомате — пара из состояния первого автомата и состояния второго автомата.
- Стековый алфавит остается неизменным.
- . Допускающие состояния нового автомата — пары состояний, где оба состояния были допускающими в своем автомате.
- . При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния ,
видя на ленте символ
и символ на вершине стека.Этот автомат использует в качестве состояний пары из двух состояний каждого автомата, а за операции со стеком отвечает только МП-автомат. Слово допускается этим автоматом
слово допускается и ДКА и МП-автоматом, то есть язык данного автомата совпадает с .Разность
Разность КС-языка и регулярного языка выражается следующим образом:
, а, поскольку регулярные языки замкнуты относительно дополнения, то разность можно выразить через пересечение.