Замкнутость КС-языков относительно различных операций — различия между версиями
AMaltsev (обсуждение | вклад) (док-во для языка не тандемных повторов (вторая часть)) |
AMaltsev (обсуждение | вклад) м |
||
| Строка 97: | Строка 97: | ||
<tex>\varepsilon</tex>, а также все слова нечётной длины не являются тандемными повторами. | <tex>\varepsilon</tex>, а также все слова нечётной длины не являются тандемными повторами. | ||
| − | Рассмотрим произвольное слово чётной длины, сгенерированное при помощи правила <tex>S \to AB </tex>. Пусть его часть, соответствующая <tex>A</tex>, имеет длину <tex>2N+1</tex>, а часть, соответствующая <tex>B</tex>, - длину <tex>2M+1</tex>. | + | Рассмотрим произвольное слово чётной длины, сгенерированное при помощи правила <tex>S \to AB </tex>. Пусть его часть, соответствующая <tex>A</tex>, имеет длину <tex>2N+1</tex>, а часть, соответствующая <tex>B</tex>, {{---}} длину <tex>2M+1</tex>. |
[[Файл:TandemRepeatAB.png]] | [[Файл:TandemRepeatAB.png]] | ||
| Строка 105: | Строка 105: | ||
Для правила <tex>S \to BA </tex> доказательство аналогично. | Для правила <tex>S \to BA </tex> доказательство аналогично. | ||
| − | 2. '''Докажем, что все строки из <tex>\overline{L}</tex> | + | 2. '''Докажем, что все строки из <tex>\overline{L}</tex> порождаются <tex>G</tex>.''' |
С помощью <tex>G</tex> можно вывести <tex> \varepsilon</tex>, а также любое слово нечётной длины. | С помощью <tex>G</tex> можно вывести <tex> \varepsilon</tex>, а также любое слово нечётной длины. | ||
| − | Далее рассмотрим произвольное слово чётной длины. Докажем, что его можно разбить на два слова нечётной длины, имеющие различные центральные символы. Предположим, что это не так, то есть такого разбиения нет. | + | Далее рассмотрим произвольное слово чётной длины из <tex>\overline{L}</tex>. Докажем, что его можно разбить на два слова нечётной длины, имеющие различные центральные символы. Предположим, что это не так, то есть такого разбиения нет. |
| − | Пусть это слово имеет длину <tex>2N</tex>. Тогда рассмотрим все его префиксы нечётной длины. Их центры находятся на позициях <tex>1, 2, \ldots ,N</tex>, а центры соответствующих им суффиксов - на позициях <tex>N+1, N+2, \ldots ,2N</tex>. Поскольку искомого разбиения не существует, то получается, что символ на позиции <tex>1</tex> равен символу на позиции <tex>N+1</tex>, символ на позиции <tex>2</tex> равен символу на позиции <tex>N+2</tex>, и так далее. Следовательно, первая половина слова равна его второй половине, т.е. оно является тандемных повтором. | + | Пусть это слово имеет длину <tex>2N</tex>. Тогда рассмотрим все его префиксы нечётной длины. Их центры находятся на позициях <tex>1, 2, \ldots ,N</tex>, а центры соответствующих им суффиксов {{---}} на позициях <tex>N+1, N+2, \ldots ,2N</tex>. Поскольку искомого разбиения не существует, то получается, что символ на позиции <tex>1</tex> равен символу на позиции <tex>N+1</tex>, символ на позиции <tex>2</tex> равен символу на позиции <tex>N+2</tex>, и так далее. Следовательно, первая половина слова равна его второй половине, т.е. оно является тандемных повтором. |
Получили противоречие, следовательно любое слово чётной длины из <tex>\overline{L}</tex> можно разделить на два слова нечётной длины с различными центральными символами. В свою очередь, такие подстроки могут быть сгенерированы при помощи грамматики <tex>G</tex> и соединены при помощи правила <tex>S \to AB \mid BA</tex>. | Получили противоречие, следовательно любое слово чётной длины из <tex>\overline{L}</tex> можно разделить на два слова нечётной длины с различными центральными символами. В свою очередь, такие подстроки могут быть сгенерированы при помощи грамматики <tex>G</tex> и соединены при помощи правила <tex>S \to AB \mid BA</tex>. | ||
Версия 16:57, 6 ноября 2016
В отличие от регулярных языков, КС-языки не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.
Здесь и далее считаем, что и — КС-языки.
Содержание
Операции с КС-языками
Объединение
| Утверждение: |
также является КС-языком. |
|
Построим КС-грамматику для языка . Для этого рассмотрим соответствующие КС-грамматики для языков и . Пусть стартовые символы в них имеют имена и соответственно. Тогда стартовый символ для обозначим за и добавим правило . Покажем, что . В левую сторону: поскольку и есть правило , то, по определению получаем, что . Аналогично и для . В обратную сторону, пусть . Поскольку — единственные правила, в которых нетерминал присутствует в правой части, то это означает, что либо , либо , что и требовалось доказать. |
Конкатенация
| Утверждение: |
— КС-язык. |
|
Аналогично предыдущему случаю построим КС-грамматику для языка . Для этого добавим правило , где и — стартовые символы языков и соответственно. Остальное доказательство аналогично случаю с объединением. |
Замыкание Клини
| Утверждение: |
— КС-язык. |
| Если — стартовый символ КС-грамматики для языка , то добавим в КС-грамматику для языка новый стартовый символ и правила . |
Прямой и обратный гомоморфизм
В случае с прямым гомоморфизмом всё просто: строится КС-грамматика, в которой каждый символ заменяется на .
Для доказательства замкнутости обратного гомоморфизма будем делать аналогично доказательству для регулярных языков. Построим МП-автомат для на основе МП-автомата для языка (назовем его ). Новый автомат будет действовать следующим образом:
- Если входное слово закончилось, допускаем или не допускаем его по допускающему состоянию.
- Считываем символ .
- Сохраняем в буфере (входная лента для автомата ).
- Запускаем на слове, находящемся в буфере.
- После того, как обработал весь буфер, переходим к пункту 1.
Если рассмотреть более формально, пусть , тогда .
- , где — суффикс (не обязательно собственный) некоторой цепочки для символа . Таким образом, первый компонент состояния является состоянием , а второй — компонентом буфера.
- определяется следующими правилами:
- . Когда буфер пуст, может прочитать свой следующий входной символ и поместить в буфер.
- Если , то . Таким образом, всегда имеет возможность имитации перехода , используя голову буфера. Если , то буфер должен быть непустым, но если , то буфер может быть пустым.
- Начальным состоянием является , т.е. стартует в начальном состоянии с пустым буфером.
- Допускающими состояниями являются состояния , где .
Таким образом получаем, что , то есть автомат допускает те и только те слова, которые принадлежат языку .
Разворот
Для того, чтобы построить КС-грамматику для языка , необходимо развернуть все правые части правил грамматики для .
Покажем, что . Докажем () индукцией по длине порождения в грамматике . В обратную сторону () рассуждения аналогичны.
База. .
В грамматике существует правило и, так как мы развернули все правые части правил, то .
Предположение индукции. Пусть менее чем за шагов, тогда .
Переход. Пусть в порождении шагов, . Тогда оно имеет вид , где . Цепочку можно разбить на , где . Так как каждое из порождений содержит менее шагов, к ним можно применить предположение индукции и заключить, что . Так как , то , откуда следует, что .
Дополнение, пересечение и разность
В отличие от регулярных языков, дополнение до КС-языка, пересечение КС-языков и разность КС-языков может не быть КС-языком.
| Утверждение: |
Язык тандемных повторов не является КС-языком, однако — КС-язык. |
|
То, что — не КС-язык, доказывается с помощью леммы о разрастании. Для можно составить следующую КС-грамматику : Докажем этот факт. Сначала заметим, что нетерминал порождает слова нечётной длины с центральным символом . В свою очередь нетерминал порождает слова нечётной длины с центральным символом . Таким образом, правило порождает все слова нечётной длины. 1. Докажем, что все строки, порождённые , есть в . , а также все слова нечётной длины не являются тандемными повторами. Рассмотрим произвольное слово чётной длины, сгенерированное при помощи правила . Пусть его часть, соответствующая , имеет длину , а часть, соответствующая , — длину . Таким образом, мы получили слово длины . Если оно является тандемным повтором, то символ, стоящий на позиции , должен быть равен символу на позиции . Но по построению это не так. Для правила доказательство аналогично. 2. Докажем, что все строки из порождаются . С помощью можно вывести , а также любое слово нечётной длины. Далее рассмотрим произвольное слово чётной длины из . Докажем, что его можно разбить на два слова нечётной длины, имеющие различные центральные символы. Предположим, что это не так, то есть такого разбиения нет. Пусть это слово имеет длину . Тогда рассмотрим все его префиксы нечётной длины. Их центры находятся на позициях , а центры соответствующих им суффиксов — на позициях . Поскольку искомого разбиения не существует, то получается, что символ на позиции равен символу на позиции , символ на позиции равен символу на позиции , и так далее. Следовательно, первая половина слова равна его второй половине, т.е. оно является тандемных повтором. Получили противоречие, следовательно любое слово чётной длины из можно разделить на два слова нечётной длины с различными центральными символами. В свою очередь, такие подстроки могут быть сгенерированы при помощи грамматики и соединены при помощи правила . Утверждение доказано. |
| Утверждение: |
Если , то не является КС-языком. |
|
. По замкнутости КС-языков относительно конкатенации получаем, что и являются КС-языками. Но , что по лемме о разрастании для КС-языков не является КС-языком. |
Для разности достаточно заметить, что , поэтому разность КС-языков также необязательно является КС-языком.
Более того, задачи определения того, является ли дополнение КС-языка КС-языком и проверки непустоты пересечения КС-языков являются алгоритмически неразрешимыми.
Примеры других операций
| Определение: |
Операция также не сохраняет КС-язык таковым. Рассмотрим язык . — КС-язык. Посмотрим, что есть . Пусть . Отсюда следует, что:
А значит, , и , и по лемме о разрастании КС-языком не является.
Операции над КС-языком и регулярным языком
Пересечение
Тем не менее, хоть пересечение двух КС-языков не обязательно является КС-языком, но пересечение КС-языка и регулярного языка — всегда КС-язык. Для доказательства этого построим МП-автомат для пересечения регулярного языка и КС-языка.
Пусть регулярный язык задан своим ДКА, а КС-язык — своим МП-автоматом c допуском по допускающему состоянию. Построим прямое произведение этих автоматов так же, как строилось прямое произведение для двух ДКА.
Более формально, пусть — регулярный язык, заданный своим ДКА , и — КС-язык, заданный своим МП-автоматом: . Тогда прямым произведением назовем следующий автомат:
- . Иначе говоря, состояние в новом автомате — пара из состояния первого автомата и состояния второго автомата.
- Стековый алфавит остается неизменным.
- . Допускающие состояния нового автомата — пары состояний, где оба состояния были допускающими в своем автомате.
- . При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния ,
видя на ленте символ и символ на вершине стека.
Этот автомат использует в качестве состояний пары из двух состояний каждого автомата, а за операции со стеком отвечает только МП-автомат. Слово допускается этим автоматом слово допускается и ДКА и МП-автоматом, то есть язык данного автомата совпадает с .
Разность
Разность КС-языка и регулярного языка выражается следующим образом: , а, поскольку регулярные языки замкнуты относительно дополнения, то разность можно выразить через пересечение.
См. также
Источники информации
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — C. 302-304 : ISBN 5-8459-0261-4 (рус.)