Пересечение контекстно-свободных языков
Исследуем вопрос о пересечении КС-языков. Введем обозначение: если дан алфавит , то через обозначим язык .
Теорема 8.10. Класс КС-языков не замкнут относительно пересечения.
Языки и , как можно легко доказать, являются КС-языками, но их пересечение есть язык , который — как это было доказано в примере 8.11 — не КС-язык.
Следствие 8.4. Дополнение КС-языка в общем случае не является КС-языком.
Действительно, если бы для любого КС-языка его дополнение было бы КС-языком, то для пересечения любых двух КС-языков и мы имели бы: — КС-язык, что противоречит теореме 8.10.
Однако оказывается, что класс КС-языков замкнут относительно операции суженного пересечения языков — операции пересечения с регулярными языками.
Теорема 8.11. Если — КС-язык, а — регулярный язык, то — КС-язык.
Пусть — КС-грамматика, порождающая язык , а — конечный автомат, допускающий язык .
Будем считать, что грамматика дана в приведенной форме, причем аксиома не содержится в правых частях правил вывода. Конечный же автомат является детерминированным.
В основе конструкции грамматики для пересечения лежит следующая неформальная идея. Мы хотим построить такую КС-грамматику , которая порождала бы все цепочки, одновременно порождаемые грамматикой и допускаемые конечным автоматом . Это значит, что любая цепочка , порождаемая грамматикой , должна удовлетворять двум требованиям: 1) и 2) в должен найтись единственный путь из начального состояния в одно из заключительных состояний, на котором читается цепочка . Если цепочка пустая, то она принадлежит пересечению тогда и только тогда, когда в есть правило , а начальное состояние автомата является и заключительным. Для непустой цепочки из пересечения тогда должна существовать единственная последовательность состояний множества , в которой

Будем тогда в качестве нетерминалов грамматики рассматривать всевозможные упорядоченные тройки вида , где — состояния конечного автомата , а — символ из объединенного алфавита грамматики (похожий прием мы применяли, строя КС-грамматику, эквивалентную заданному МП-автомату). Заставим грамматику выводить из аксиомы все непустые цепочки вида
для всех и всех последовательностей состояний из при условии, что . Нетерминал же при может быть, по определению, заменен терминалом тогда и только тогда, когда в системе команд конечного автомата есть команда , т.е. из состояния по символу можно перейти в состояние .
При таком определении грамматики она породит непустую терминальную цепочку тогда и только тогда, когда порождается грамматикой и читается на некотором пути из начального состояния в одно из заключительных, — именно тогда (и только тогда) из цепочки может быть выведена сама цепочка . Образно говоря, грамматика каждый символ непустой цепочки , порождаемой грамматикой , помещает между двумя "стражами" — состояниями конечного автомата, и символ может избавиться от этих "стражей" тогда и только тогда, когда в конечном автомате есть переход по нему из первого состояния во второе.
Дадим теперь формальное определение грамматики 
 , где ![N'=\bigl\{[qXr]\colon q,r\in Q,~ X\in V\cup N\cup \{S'\},~ S'\notin V\cup N\bigr\}](data:image/png;base64,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)
(аксиома грамматики ), а множество правил вывода строится следующим образом:
1) правило вывода принадлежит тогда и только тогда, когда в множестве правил грамматики есть правило , а для конечного автомата имеет место ;
2) для любого правила в в вводится множество всех правил вида
для произвольной последовательности состояний из множества ( — длина цепочки );
3) для любого заключительного состояния конечного автомата в вводится правило вывода , где — аксиома грамматики ;
4) правило вывода для принадлежит тогда и только тогда, когда команда принадлежит системе команд конечного автомата ;
5) никаких других правил вывода, кроме указанных в пунктах 1-4, множество не содержит.
Непосредственно из построения грамматики видно, что пустая цепочка порождается грамматикой тогда и только тогда, когда правило вывода содержится в множестве , то есть , и конечный автомат допускает пустую цепочку, т.е. . Итак, тогда и только тогда, когда .
Для непустой цепочки можно доказать (подробное доказательство мы опускаем*), что , то есть , тогда и только тогда, когда
![S'\vdash [q_0Sq_f]\vdash^{\ast} [q_0x(1)s_1] [q_1x(2)s_2]\ldots [q_{m-1}x(m)s_f]](data:image/png;base64,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) для любых  .
*Это доказательство без особого труда может быть восстановлено с помощью метода индукции по длине вывода.
Тогда из цепочки цепочка может быть выведена в грамматике применением правила, приведенного выше в пункте 4, в том и только в том случае, когда для конечного автомата имеет место
для некоторых состояний , то есть читается на пути из в , проходящем через состояния и тем самым , то есть .
Итак, окончательно имеем .
Пример 8.21. Построим грамматику, порождающую пересечение языка всех палиндромов в алфавите с языком .
Грамматику для языка палиндромов задаем в виде
где — аксиома. Граф конечного автомата, допускающего язык , приведен на рис. 8.36.
Согласно правилам построения грамматики , изложенным в доказательстве теоремы 8.11, имеем следующую грамматику для пересечения заданных языков:
![S'\to [q_0Sq_2],\quad [r_1Sr_4]\to [r_1ar_2] [r_2Tr_3] [r_3ar_4] [r_1br_2] [r_2Tr_3] [r_3br_4]](data:image/png;base64,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) (8.20)
(для любых последовательностей состояний конечного автомата);
(для любых последовательностей состояний конечного автомата);
(для любых последовательностей состояний конечного автомата);
(для любых последовательностей состояний конечного автомата);
![[r_1Tr_3]\to [r_1ar_2][r_1ar_2] [r_1br_2][r_2br_3]](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT8AAAAWBAMAAABEXIbSAAAAMFBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlTPQ5AAAAD3RSTlMAQYHACFrpEDChcbAgkdBdtc99AAAEqUlEQVRIx82XzWsbRxTA365Y7epjpbVLHVoXtDYkh5TUsoNsckj8L2xycNqmVNuIkjRx421LUod+eI0PweBiBZOkzaE2KUkPhUrpwSb0IBVjKO3BBmMfE7UmMUpb8DrIqdWk25nRrHbW+qCHGDLgFW/emze/efPmzRjguW+xzYaq/o3/b40Vdeyrjjhbra+z48Db9VW8raBvq9sR7sRtr9sRrxnT2nA1rfXMXUccw9d+mFFxCFBxxW8SLOEOQHm7s7/nQGrXAX/Zbgz4wt9NAP0KTGtwYNcBhVJjwJDeBHAcYCgP++sCfvwMAeUnjQH98SaAKxDeAuioC/jFMwT06Y0BJ9VaQKHnfCVrTRBQdlyqyuyMEQdD6BGolpt6SxF/nJgyXcCL3Z/RJA8eWjCEw+fvGC7g2LUT14gU/eGQISeoZQVw+fiyRsTMiQQybJ9jAedHzrTNVNwGcHbML55p03YCCirFmF98SLUDytV44KXUuO4CdqyeXiWSWBweUj4ZOUkdY0CxsHX5JJGS7wTi+7t+y7iAwo1HL1dqVG7ugtZ37ssiC3hzMjutAImDH2fHXixzr+w4JFcoxkosnTOxNVeCmBrxPVnMho86gIXcxL8AyG3oFPQb2LFGHXGqcPwfvgQSCuk9U7AK95Qt+EChgBHeiuriUaRLgS+xtMWXYdSsAmoZcxheJQtYLKAPka/gMBHAG6Q6du67DV5rvw4Z5Sd/VjLefDtOAbUUXOLuIik5A+dgT1JBjm5pFUBuoSSaQg7N+QB4S3sAE9LlWYNG0KdL+fH2QZA2wW/9XAYl2FF0D8ks+hklgMkl/EVyuBwq1AesWsfSMI2SGu3hfbFMAcPoPgl/iIblTPEpYD33J6/THJQfI2UUzbkNIQurQ6o/TXMwmgb4Cs5C0IKRQhDVQn+2ywXEpZkjgNMku86iv28j2fpbTLTYOqPhgRm0E39BkQIKFs4cNGyIFDuk5wY5iwJG8PYgQK6Moo/VgbgvTgFjaOK7cBDkDRQkXAsFc7UKKG1WAVEZBJDK+HPLqH9IiJYAKuFNH4kniCUKGNiggGsoXjfD5OKuRnBkqQIoWZBUeVIL/SoF7CJHoIiNZ/N+FBtYOO2WGcsBxGUQVQh820jfmd4yY1BAosXWk9rn1jEST5CzFJCUWQz4NcT0deIYLtAchKRWAYR3xSL4cDjhe5qD0EsmXgfhMTp7OG1g4X4VUNadKW3bRjoi04XXFuqAYx18//YffTj7AN5wTnF0hgJ+dGflqcoTR91OHdxnUMCB11SI4h2R1p06+B62HEMGU1cVSObJeTAdQNGobnGlhiGZm+MtD+CnDqBrHcY1g+REOkgBJaCAqH8YRKyUzdcpIHGBAXEdkiqrnqGAxE2fgJya2DHAr2ZM9Vx1nPctxw/yp5o8FrzWYy3H2KuO9wy73pJlr7ooc62J3S+mmavuYks7877U3AiSduTREutWvD6gNQH0Wg/ZJQZQ6k1pzOGybZ0BlPvXmJeLbasMYM5mXsPyysPaxwLbuD2799zyTuR9LFTbaJ4CtiUaul3Wa7oaWo/9DnAw3tgRx4aVbUcQ4Fp9ldCrPP//Mv0HS/pmtAmLD6gAAAAASUVORK5CYII=) (8.21)
(для любых последовательностей состояний конечного автомата);
(для любых последовательностей состояний конечного автомата);
Рассмотрим пример порождения какой-нибудь цепочки из определенного выше пересечения двух языков. Возьмем цепочку . Выведем сначала "двойника" этой цепочки, в котором каждый символ "окружен" состояниями конечного автомата. В процессе вывода мы стараемся "положить" нашу цепочку на некоторый путь из начальной вершины автомата в заключительную:
На втором шаге написанного выше вывода мы применили первое из правил (8.20) при , а на третьем шаге — второе правило (8.21) при .
Теперь мы видим, что все "скобки" состояний можно "отряхнуть": последовательно применяя правила (8.22)-(8.25), получаем цепочку .
Рассмотрим теперь "неправильную" цепочку . Вывод ее "двойника" может быть таким:
При выводе мы старались помещать каждый входной символ конечного автомата между такими состояниями, чтобы он входил в метку дуги из первого во второе состояние, но мы видим, что нетерминал не может быть заменен ни одним терминалом, и вывод зашел в тупик. Разбор других вариантов вывода "двойника" цепочки мы опускаем. В данном случае оказывается, что любой вывод закончится тупиковой цепочкой.
Заметим, что в рассмотренном примере конструкцию теоремы нельзя применять к грамматике языка палиндромов, если она задана в виде
поскольку в этом случае нельзя обойтись без применения правила при порождении цепочки четной длины.
Так как при построении грамматики правила с пустой правой частью (из множества правил грамматики ) никак не преобразуются, грамматика в таком случае не породит "двойника" ни одной цепочки четной длины языка палиндромов.
Следовательно, требование, чтобы грамматика КС-языка была задана в приведенной форме и ее единственное разрешенное λ-правило применялось только при выводе пустой цепочки, является существенным при построении КС-грамматики для пересечения языка с регулярным языком .
Доказанное утверждение о "контекстной свободности" пересечения КС-языка с любым регулярным языком в совокупности с леммой о разрастании для КС-языков полезно при доказательстве утверждений о том, что какой-либо язык не является контекстно-свободным.
Пример 8.22. Докажем, что язык — так называемый язык двойных слов в алфавите — не является контекстно-свободным.
Применить к решению этой задачи сразу лемму о разрастании довольно трудно. Поступим так. Рассмотрим пересечение языка с регулярным языком . Легко понять, что это пересечение состоит из всех цепочек вида . Предполагая, что язык контекстно-свободный, получим в силу теоремы 8.11, что контекстно-свободным является и язык . Однако этот язык не есть КС-язык (см. пример 8.12). Следовательно, не является КС-языком и исходный язык .
Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.
|