Лемма о разрастании для КС-языков
Для КС-языков выполняется "лемма о разрастании", аналогичная лемме о разрастании для регулярных языков. Она формулирует необходимое условие того, что язык является контекстно-свободным.
Теорема 8.4 (лемма о разрастании для КС-языков). Для любого КС-языка существует натуральная константа (зависящая от ), такая, что любая цепочка , длина которой , представима в виде соединения пяти цепочек, , где , и каждая цепочка , принадлежит .
Так как — КС-язык, то существует КС-грамматика , порождающая язык , то есть .
Фиксируем произвольно нетерминал и рассмотрим множество всех выводов, начинающихся с , таких, что высота дерева вывода не превышает числа нетерминалов грамматики , увеличенного на единицу. Множество конечно, так как высота дерева вывода, а следовательно, и его длина ограничены сверху (см. замечание 8.2). Таким образом, каждое множество при есть конечное множество конечных выводов. Множество выводов определим как объединение множеств по всем . Ясно, что и это множество выводов конечно, так как конечно множество нетерминалов грамматики. Введем подмножество всех таких цепочек в объединенном алфавите, что они являются последними цепочками выводов из . Иначе говоря, — это множество всех таких цепочек в объединенном алфавите, что существует дерево вывода (из некоторого нетерминала грамматики ), высота которого не больше . В силу конечности множества конечно и множество . Тогда положим
т.е. введем константу как наибольшую длину среди всех цепочек множества .
Пусть теперь , причем . Тогда , и в силу определения константы любое дерево вывода цепочки z имеет высоту, большую . Фиксируем какое-нибудь дерево вывода цепочки .
Выделим в дереве максимальное поддерево с корнем , высота которого равна (рис. 8.25).
Тогда, согласно следствию 8.1, получим (для некоторых терминальных цепочек и )
 (8.1)
где , т.е. существует вывод цепочки , являющейся подцепочкой цепочки z, из нетерминала , такой, что высота дерева этого вывода равна .
Напомним, что высота дерева есть максимальная длина пути в этом дереве из корня в лист. Так как длина пути в дереве вывода КС-грамматики равна числу замен нетерминалов в некотором фрагменте вывода, то при выводе цепочки из число замен нетерминалов строго больше числа всех нетерминалов грамматики . Это означает, что в выводе z\ из какой-то нетерминал повторяется дважды (возможно, что ) и на некотором пути из вершины в один из листьев будут по крайней мере две разные вершины, помеченные одним и тем же нетерминалом . Тогда рассмотрим два максимальных поддерева дерева , корневые вершины которых являются указанными выше вершинами с меткой (см. рис. 8.25). Выделению этих максимальных поддеревьев соответствует выделение фрагментов вывода из , таких, что для некоторых терминальных цепочек выполняется выводимость, где 
 (8.2)
Соотношения (8.2) показывают, что имеют место выводимости
 (8.3)
 (8.4)
Это значит, что существует дерево вывода цепочки из нетерминала ("большое" дерево с корневой вершиной на рис. 8.25) и в нем — максимальное поддерево с корневой вершиной, помеченной тем же символом , являющееся деревом вывода цепочки из ("маленькое" дерево с корневой вершиной на рис. 8.25). При этом, так как "большое" дерево с корневой вершиной является поддеревом дерева с корневой вершиной высотой , то его высота будет не больше чем , откуда в силу выбора константы имеем .
Объединяя (8.1) и (8.2), получим такое представление вывода цепочки из аксиомы 
 (8.5)
Полагая и , получим , и тем самым мы доказали представление цепочки в виде соединения определенных пяти цепочек.
Из (8.5) следует, что, получив (при выводе из ) цепочку , можно с учетом (8.4) сразу из нетерминала вывести цепочку , и тогда
 (8.6) (в выводе (8.5) выбрасываем последовательность шагов над фигурной скобкой).
В то же время вывод (8.5) можно с учетом (8.3) модифицировать так, что после получения цепочки многократно (не менее одного раза) повторять вывод цепочки из 
 (8.7) (в выводе (8.5) последовательность шагов над фигурной скобкой повторяем раз).
Итак, в силу (8.6) цепочка , а в силу (8.7) и цепочка для любого принадлежит языку . Тем самым мы доказали, что .
Осталось доказать, что длина цепочки не меньше 1 (или, что равносильно, цепочки и не являются одновременно пустыми).
Согласно теореме 8.2, можно считать без ограничения общности, что в множестве правил вывода грамматики нет ни λ-правил (кроме, быть может, правила ), ни цепных правил. Кроме того, в силу замечания 8.6 можно считать, что правило применяется только при выводе пустой цепочки, а поскольку высота дерева цепочки строго больше 1, то и правило не применяется при выводе из аксиомы .
Тогда, предполагая, что , получим , а это возможно лишь при условии применения в соответствующем выводе цепных правил или правил с пустой правой частый, что ввиду сказанного выше не может иметь места. Итак, цепочка не пуста, т.е. , что и завершает доказательство теоремы.
Следствие 8.2. В любом бесконечном КС-языке существует последовательность слов, длины которых образуют возрастающую арифметическую прогрессию.
Пусть КС-язык бесконечен. Тогда в нем нет цепочки наибольшей длины. Следовательно, найдется цепочка , длина которой больше константы , определяемой леммой о разрастании. Согласно этой лемме, цепочка может быть представлена в виде для некоторых цепочек , таких, что . Тогда последовательность является искомой, так как длины ее цепочек образуют возрастающую арифметическую прогрессию со знаменателем .
Замечание 8.7. Любой конечный язык (в каком-то алфавите ) порождается КС-грамматикой с множеством правил . Дерево вывода любой цепочки в этой грамматике имеет высоту, не большую 1 (высоту 0 имеет дерево вывода нулевой длины аксиомы из себя самой, а каждая терминальная цепочка, т.е. цепочка , имеет дерево вывода высоты 1). Следовательно, в данном случае константа равна наибольшей длине цепочки и цепочки, длина которой была бы больше , не существует.
Таким образом, для конечного языка утверждение леммы о разрастании тривиально выполняется, а именно, не существует цепочек, длины которых превосходят константу .
Пример 8.11. а. Язык не является контекстно-свободным, поскольку из длин принадлежащих ему слов нельзя образовать арифметическую прогрессию: .
б. Язык { — простое число} не является КС-языком по той же причине.
в. Рассмотрим язык . Длины его слов образуют арифметическую прогрессию, но тем не менее этот язык не является контекстно-свободным. Действительно, предположим противное. Тогда для любого достаточно большого слово можно представить в виде . Проанализируем, как могут располагаться в слове цепочки и . Поскольку условие леммы о разрастании должно выполняться для всех достаточно длинных слов языка, т.е. слов, длина которых строго больше константы из леммы, то в целях проверки невыполнения условия можно брать слова/длина которых заведомо превышает указанную константу*. Для анализируемого в этой задаче языка примем, что . Тогда возможны следующие случаи:
1) , где , а обозначает одну из букв (т.е. цепочка целиком расположена или в "зоне" символов , или в "зоне" символов , или в "зоне" символов );
2) или , где и (т.е. цепочка расположена "на стыках зон" различных символов и содержит ненулевое число символов каждой из "зон"). В силу выбора числа никакие другие способы расположения подцепочки в цепочке невозможны (отсюда следует, что подходящий выбор числа позволил нам уменьшить число вариантов расположения подцепочки в цепочке языка).
*Предполагая, что язык является контекстно-свободным, мы тем самым в силу леммы о разрастании предполагаем, что оказывается фиксированной какая-то константа , о которой идет речь в условии леммы. Мы не можем знать значения этой константы, но это нам и не нужно: достаточно знать, что вследствие нашего предположения константа как-то фиксирована, и мы можем быть уверены в том, что в бесконечном КС-языке найдутся цепочки, длины которых превысят .
Теперь если мы станем повторять ("накачивать") цепочки и в первом случае, то начнет расти число одного из символов или , тогда кале число остальных двух символов будет оставаться прежним, и получаемые при этом цепочки уже не будут принадлежать заданному языку. Во втором же случае при "наг качке" возникнут цепочки, содержащие вхождение цепочки или , что также недопустимо (символы начнут "перемешиваться"). Получается, что мы не можем представить любую достаточно длинную цепочку в виде так, чтобы при этом выполнялось условие леммы о разрастании. Следовательно, исходный язык не является контекстно-свободным.
В целом техника доказательства с помощью леммы о разрастании для КС-языков "отрицательных" утверждений типа "данный язык не является контекстно-свободным" аналогична технике доказательства утверждений о нерегулярности языков с использованием леммы о разрастании для регулярных языков.
Обратим внимание на различие структур "накачиваемых" цепочек в регулярных и контекстно-свободных языках.
Лемма о разрастании для регулярных языков утверждает, что любая достаточно длинная цепочка регулярного языка представима как соединение трех подцепочек, из которых средняя подцепочка ограничена сверху по длине и не пуста, ее можно "накачивать", повторяя любое число раз, в том числе и ни разу, т.е. можно выбросить вообще, и такая "накачка" не выводит за пределы данного языка (рис. 8.26).
Лемма о разрастании для КС-языков утверждает в аналогичной ситуации, что цепочка языка представима как соединение пяти подцепочек, причем если рассмотреть три средние подцепочки, то "накачиваются" края — первая и третья из них, а самая середина не меняется (рис. 8.27).
Обратим внимание на то, что ограничение сверху длины подцепочки константой , вытекающее из леммы о разрастании, очень важно и, не используя его, вообще говоря, нельзя доказать, что данный язык не является контекстно-свободным. Рассмотрим в этой связи такой пример.
Пример 8.12. Пусть язык определен как множество всех цепочек в алфавите вида . Докажем, что он не является контекстно-свободным.
Предполагая, что — КС-язык, получим, что для достаточно больших и цепочка допускает представление в виде . Выберем числа и так, что они больше, чем определенная леммой о разрастании константа для языка . Анализируем варианты "размещения" подцепочки в цепочке : очевидно, что "накачка" невозможна, если цепочки и обе целиком находятся в "зоне" какого-то одного символа, или ; если же, скажем, при , т.е. цепочка находится "на стыке зон" символов и , то при "накачке" возникнет более чем одно вхождение подцепочки в цепочку языка , что противоречит определению этого языка; если же при , то при "накачке" возникнет более двух вхождений подцепочки , что также невозможно. Аналогично анализируется размещение цепочки "на стыках зон". В силу того что , a , никакие другие варианты расположения подцепочки невозможны.
Если ограничение на длину этой подцепочки опустить, то окажется возможным такое ее вхождение в цепочку , что и для некоторых положительных . Тогда при (чего априори нельзя отвергать, так как условия леммы о разрастании не требуют, чтобы длины цепочек и были обязательно различными) "накачка" цепочек и дала бы "синхронное" увеличение числа символов при неизменном числе символов , что не вывело бы нас за пределы языка . Таким образом, нам тогда не удалось бы доказать, что определяемое леммой о разрастании представление цепочки не может иметь места.
Рассмотрим еще один пример, важный для понимания леммы о разрастании и ее применений.
Пример 8.13. Зададим язык . Здесь при размещении "накачиваемых" цепочек в "зоне" символов "накачка" не выводит за пределы языка (так как в его цепочках число символов может на сколько угодно превышать число символов и ). Тем не менее и в этом случае условие леммы о разрастании не выполняется.
Действительно, для достаточно большого возьмем цепочку (т.е. цепочку языка при ). Если в представлении такой цепочки в виде (согласно лемме о разрастании) цепочка при (т.е. "накачиваемые" цепочки располагаются целиком в "зоне" символов ), то цепочка , так как и , т.е. число символов с окажется меньше, чем число символов и . Таким образом, несмотря на то что "накачка" цепочек в данном случае возможна, нельзя их выбросить, оставаясь в пределах языка. Невозможность других вариантов расположения подцепочки в цепочке языка доказывается точно так же, как и в предыдущих примерах.
Итак, нужно помнить, что выполнение условий леммы о разрастании предполагает и возможность выбрасывания "накачиваемых" цепочек — все цепочки из условия леммы при должны оставаться в языке , и если условие леммы выполняется при всех положительных , но не выполняется при , то этого достаточно для признания того, что цепочка не удовлетворяет условию леммы о разрастании.
Аналогичная ситуация имеет место, конечно, и при использовании леммы о разрастании для регулярных языков.
Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.
|