Алгебраические свойства КС-языков
В этой лекции мы рассмотрим некоторые операции над КС-языками, относительно которых множество всех КС-языков замкнуто. Напомним, что множество всех регулярных языков (в произвольно фиксированном алфавите) замкнуто относительно операций (конечного) объединения, соединения, пересечения, дополнения (до универсального языка) и итерации. В этом разделе мы докажем прежде всего что множество КС-языков замкнуто относительно операций объединения, соединения и итерации. Потом мы увидим, что пересечение двух КС-языков, вообще говоря, не является КС-языком, но можно доказать более слабое утверждение: пересечение КС-языка с регулярным языком есть КС-язык.
Суперпозиция языков
Начнем с определения новой операции над языками — операции суперпозиции.
Пусть — произвольный алфавит, каждой букве которого сопоставлен однозначно некоторый алфавит (не исключено, что все алфавиты совпадают); в алфавите фиксируем произвольно язык , а в каждом из алфавитов — язык .
Рассмотрим множество всех таких цепочек в объединении алфавитов , которые могут быть получены из цепочек языка следующим образом: берем произвольную цепочку и каждую букву в ней заменяем произвольной цепочкой 
в результате чего получаем цепочку .
Множество всех цепочек вида , получаемых описанным выше способом, называют суперпозицией (или подстановкой) языков в язык и обозначают . При этом полагают, что если пустая цепочка принадлежит языку , то она принадлежит суперпозиции .
При определении суперпозиции на алфавиты не накладывается никаких ограничений. Они могут и попарно не пересекаться, а могут и все совпадать. В любом случае суперпозиция есть язык в алфавите . Точно так же среди языков , "подставляемых" в язык , может оказаться и сам язык , т.е. язык можно подставлять сам в себя, причем многократно.
Заметим, что если язык не содержит пустую цепочку, суперпозиция может ее содержать. Это возможно, если каждый язык содержит пустую цепочку. Тогда, беря произвольно и заменяя каждый ее символ пустой цепочкой, получаем пустую цепочку как элемент суперпозиции. Если же пустая цепочка принадлежит , то, по определению, суперпозиция обязана ее содержать.
Еще заметим, что для разных вхождений одной и той же буквы цепочки совершенно не обязательно заменять эту букву одной и той же цепочкой языка : каждому вхождению может быть сопоставлена своя цепочка этого языка.
Пример 8.18. Зададим язык в алфавите как множество . Букве алфавита сопоставим алфавит , выбрав в качестве языка множество . Букве сопоставим алфавит и в этом алфавите — язык . Наконец, букве алфавита сопоставим алфавит и в качестве языка возьмем язык , пополненный пустой цепочкой, т.е. .
Возьмем цепочку и первый символ а заменим цепочкой , второй символ — цепочкой , первый символ — цепочкой (при ), второй символ — пустой цепочкой, первый символ — пустой цепочкой, второй символ — цепочкой . В результате получим следующую цепочку, принадлежащую суперпозиции 
Проделывая аналогичные действия с любой другой цепочкой языка или же производя другие замены символов той же самой цепочки, будем получать все новые цепочки определенной выше суперпозиции. В данном случае будем иметь , так как каждый из языков и содержит пустую цепочку.
Пример 8.19. Пусть алфавит есть русский алфавит {A,Б,..,Э,Ю,Я}, а язык — множество всех слов русского языка. Каждой букве русского алфавита сопоставим язык, состоящий из единственной однобуквенной цепочки , которая стоит рядом с указанной русской буквой на клавиатуре компьютера. Так, и т.д. Все эти языки можно считать языками в латинском алфавите, дополненном определенными специальными символами, такими, как и т.п. Тогда, если мы в качестве исходной цепочки языка возьмем слово УЧЕБНИК, то получим такую цепочку в суперпозиции .
Разобранные примеры показывают, что суперпозицию можно рассматривать как своего рода "кодирование" цепочек языка с заменой в них каждой буквы цепочкой другого языка. Действительно, такая замена является одним из простейших способов "шифровки" текстов.
Замечание 8.11. Суперпозицию можно определить через соответствие. Введем соответствие так, что для каждого упорядоченная пара принадлежит а тогда и только тогда, когда . В этом случае
 , где  .
В терминах суперпозиции могут быть представлены такие операции над языками как объединение, соединение и итерация.
Объединение языков
Пусть и — два произвольных языка в каком-то алфавите . Возьмем произвольный двухбуквенный алфавит и язык зададим как (т.е. язык состоит из двух однобуквенных цепочек и ). Рассмотрим суперпозицию , где . Докажем, что эта суперпозиция совпадает с объединением . Действительно, если мы возьмем цепочку , то ее единственную букву мы можем, согласно определению суперпозиции, заменить любой цепочкой языка . Точно так же, строя суперпозицию, вместо цепочки получим все цепочки языка . Итак,
Соединение языков
Снова фиксируем произвольно в произвольном алфавите языки и . Опять-таки произвольно выберем двухбуквенныи алфавит , определив язык . Положим, как и выше, . Тогда суперпозиция совпадет с соединением . В самом деле, символ единственной цепочки языка можно при построении суперпозиции заменять любой цепочкой языка , а символ — любой цепочкой языка . В результате записанная выше суперпозиция совпадет с множеством всех цепочек, представимых как соединение , где . Но это и есть соединение . Итак,
Итерация языков
Рассуждая аналогично, можно показать, что итерация языка равна
 , а позитивная итерация 
(для любых алфавита , языка и однобуквенного алфавита ).
Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.
|