Замкнутость КС-языков относительно различных операций — различия между версиями
AMaltsev (обсуждение | вклад) м |
AMaltsev (обсуждение | вклад) |
||
Строка 73: | Строка 73: | ||
Для того, чтобы построить <tex> L^{R} </tex>, необходимо развернуть все правые части правил грамматики для <tex> L </tex>. | Для того, чтобы построить <tex> L^{R} </tex>, необходимо развернуть все правые части правил грамматики для <tex> L </tex>. | ||
− | Покажем, что <tex>w \in L \iff w^{R} \in L^{R}</tex> | + | Покажем, что <tex>w \in L \iff w^{R} \in L^{R}</tex>. |
− | '''База'''. <tex>A \underset{L}{\Rightarrow} w</tex>. | + | <tex>\Rightarrow</tex> |
+ | :Докажем с помощью метода математической индукции по длине порождения в грамматике <tex>L</tex>. | ||
+ | :'''База'''. <tex>A \underset{L}{\Rightarrow} w</tex>. | ||
− | В грамматике <tex>L</tex> существует правило <tex>A \rightarrow w</tex> и, так как мы развернули все правые части правил, то <tex>A \underset{L^{R}}{\Rightarrow} w^{R}</tex>. | + | :: В грамматике <tex>L</tex> существует правило <tex>A \rightarrow w</tex> и, так как мы развернули все правые части правил, то <tex>A \underset{L^{R}}{\Rightarrow} w^{R}</tex>. |
− | '''Предположение индукции'''. Пусть <tex>A \underset{L}{\Rightarrow}^* w</tex> менее чем за <tex>n</tex> шагов, тогда <tex>A \underset{L^{R}}{\Rightarrow}^* w^{R}</tex>. | + | :'''Предположение индукции'''. Пусть <tex>A \underset{L}{\Rightarrow}^* w</tex> менее чем за <tex>n</tex> шагов, тогда <tex>A \underset{L^{R}}{\Rightarrow}^* w^{R}</tex>. |
− | '''Переход'''. Пусть в порождении <tex>n</tex> шагов, <tex>n > 1</tex>. Тогда оно имеет вид <tex>A \underset{L}{\Rightarrow}Y_1 Y_2...Y_m \underset{L}{\Rightarrow}^*w</tex>, где <tex> Y_i \in N \cup \Sigma </tex>. Цепочку <tex> w </tex> можно разбить на <tex>w_1 w_2...w_m</tex>, где <tex> Y_i \underset{L}{\Rightarrow}^*w_i</tex>. Так как каждое из порождений <tex> Y_i \underset{L}{\Rightarrow}^*w_i </tex> содержит менее <tex> n </tex> шагов, к ним можно применить предположение индукции и заключить, что <tex> Y_i \underset{L^{R}}{\Rightarrow}^*w_i^{R} </tex>. Так как <tex>A \underset{L}{\Rightarrow}Y_1 Y_2...Y_m</tex>, то <tex>A \underset{L^{R}}{\Rightarrow}Y_m Y_{m - 1}...Y_1</tex>, откуда следует, что <tex> A \underset{L^{R}}{\Rightarrow}^* w^{R} </tex>. | + | :'''Переход'''. |
+ | :: Пусть в порождении <tex>n</tex> шагов, <tex>n > 1</tex>. Тогда оно имеет вид <tex>A \underset{L}{\Rightarrow}Y_1 Y_2...Y_m \underset{L}{\Rightarrow}^*w</tex>, где <tex> Y_i \in N \cup \Sigma </tex>. Цепочку <tex> w </tex> можно разбить на <tex>w_1 w_2...w_m</tex>, где <tex> Y_i \underset{L}{\Rightarrow}^*w_i</tex>. Так как каждое из порождений <tex> Y_i \underset{L}{\Rightarrow}^*w_i </tex> содержит менее <tex> n </tex> шагов, к ним можно применить предположение индукции и заключить, что <tex> Y_i \underset{L^{R}}{\Rightarrow}^*w_i^{R} </tex>. Так как <tex>A \underset{L}{\Rightarrow}Y_1 Y_2...Y_m</tex>, то <tex>A \underset{L^{R}}{\Rightarrow}Y_m Y_{m - 1}...Y_1</tex>, откуда следует, что <tex> A \underset{L^{R}}{\Rightarrow}^* w^{R} </tex>. | ||
+ | |||
+ | <tex>\Leftarrow</tex> | ||
+ | :Доказательство аналогично. | ||
}} | }} | ||
'''Пример разворота''': | '''Пример разворота''': |
Версия 19:48, 6 ноября 2016
В отличие от регулярных языков, КС-языки не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.
Здесь и далее считаем, что
и — КС-языки.Содержание
Операции с КС-языками
Объединение
Утверждение: |
является КС-языком. |
Построим КС-грамматику для языка . Для этого рассмотрим соответствующие КС-грамматики для языков и . Пусть стартовые символы в них имеют имена и соответственно. Тогда стартовый символ для обозначим за и добавим правило . Покажем, что .
|
Конкатенация
Утверждение: |
— КС-язык. |
Аналогично предыдущему случаю построим КС-грамматику для языка | . Для этого добавим правило , где и — стартовые символы языков и соответственно.
Замыкание Клини
Утверждение: |
— КС-язык. |
Если | — стартовый символ КС-грамматики для языка , то добавим в КС-грамматику для языка новый стартовый символ и правила .
Прямой и обратный гомоморфизмы
Утверждение: |
КС-языки замкнуты относительно прямого гомоморфизма. |
Построим КС-грамматику, в которой каждый символ | заменим на .
Утверждение: |
КС-языки замкнуты относительно обратного гомоморфизма |
Докажем аналогично соответствующему утверждению для регулярных языков. Построим МП-автомат для на основе МП-автомата для языка (назовем его ). Новый автомат будет действовать следующим образом:
Если рассмотреть более формально, пусть , тогда .
|
Разворот
Утверждение: |
контекстно-свободна. |
Для того, чтобы построить , необходимо развернуть все правые части правил грамматики для .Покажем, что .
|
Пример разворота:
Пусть задана КС-грамматика
для языка со следующими правилами:В таком случае КС-грамматика
для языка выглядит следующим образом:
Дополнение, пересечение и разность
В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком.
Утверждение: |
Язык тандемных повторов не является КС-языком. |
Это доказывается с помощью леммы о разрастании. |
Утверждение: |
Дополнение к языку тандемных повторов является КС-языком. |
Для упрощения рассмотрим этот язык на бинарном алфавите КС-грамматику : . Для можно составить следующуюДокажем этот факт. Сначала заметим, что нетерминал порождает слова нечётной длины с центральным символом . В свою очередь нетерминал порождает слова нечётной длины с центральным символом . Таким образом, правило порождает все возможные слова нечётной длины.Докажем, что все слова, порождённые , есть в ., а также все слова нечётной длины не являются тандемными повторами. Рассмотрим произвольное слово чётной длины, сгенерированное при помощи правила . Пусть его часть, соответствующая , имеет длину , а часть, соответствующая , — длину .Таким образом, мы получили слово длины . Если оно является тандемным повтором, то символ, стоящий на позиции , должен быть равен символу на позиции . Но по построению это не так.Для правила доказательство аналогично.Докажем, что все слова из порождаются .С помощью можно вывести , а также любое слово нечётной длины.Далее рассмотрим произвольное слово чётной длины из . Докажем, что его можно разбить на два слова нечётной длины, имеющие различные центральные символы. Предположим, что это не так, то есть такого разбиения нет.Пусть это слово имеет длину Получили противоречие, следовательно любое слово чётной длины из . Тогда рассмотрим все его префиксы нечётной длины. Их центры находятся на позициях , а центры соответствующих им суффиксов — на позициях . Поскольку искомого разбиения не существует, то получается, что символ на позиции равен символу на позиции , символ на позиции равен символу на позиции , и так далее. Следовательно, первая половина слова равна его второй половине, т.е. оно является тандемных повтором. можно разделить на два слова нечётной длины с различными центральными символами. В свою очередь, такие слова могут быть сгенерированы при помощи грамматики и соединены при помощи правила . |
Утверждение: |
Если , то не является КС-языком. |
По замкнутости КС-языков относительно конкатенации получаем, что Но и являются КС-языками. , что по лемме о разрастании для КС-языков не является КС-языком. |
Для разности достаточно заметить, что
, поэтому разность КС-языков также необязательно является КС-языком.Более того, задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения КС-языков являются алгоритмически неразрешимыми.
Половины тандемных повторов
Определение: |
Операция также не сохраняет КС-язык таковым. Покажем это на примере.
Рассмотрим язык
.Заметим, что он может быть сгенерирован при помощи следующей КС-грамматики:
Докажем, что
не является КС-языком.Пусть
. Отсюда следует, что:А значит, лемме о разрастании КС-языком не является.
, и , и поОперации над КС-языком и регулярным языком
Пересечение
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка — всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка.
Пусть регулярный язык задан своим ДКА, а КС-язык — своим МП-автоматом c допуском по допускающему состоянию. Построим прямое произведение этих автоматов так же, как строилось прямое произведение для двух ДКА.
Более формально, пусть
— регулярный язык, заданный своим ДКА , и — КС-язык, заданный своим МП-автоматом: . Тогда прямым произведением назовем следующий автомат:- . Иначе говоря, состояние в новом автомате — пара из состояния первого автомата и состояния второго автомата.
- Стековый алфавит остается неизменным.
- . Допускающие состояния нового автомата — пары состояний, где оба состояния были допускающими в своем автомате.
- . При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния ,
видя на ленте символ
и символ на вершине стека.Этот автомат использует в качестве состояний пары из двух состояний каждого автомата, а за операции со стеком отвечает только МП-автомат. Слово допускается этим автоматом
слово допускается и ДКА и МП-автоматом, то есть язык данного автомата совпадает с .Разность
Разность КС-языка и регулярного языка выражается следующим образом:
, а, поскольку регулярные языки замкнуты относительно дополнения, то разность можно выразить через пересечение.См. также
- Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора
- Замкнутость регулярных языков относительно различных операций
- Основные определения, связанные со строками
Источники информации
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — C. 302-304 : ISBN 5-8459-0261-4 (рус.)