Какой язык описывается этим CFG? - PullRequest
1 голос

1 Ответ

0 голосов
/ 13 февраля 2020

Мы можем выписать некоторые из самых коротких строк в языке, чтобы почувствовать это:

S -> aTb -> ab
S -> aTb -> aabb
S -> SS -> … -> abab
S -> SS -> … -> abaabb
S -> SS -> … -> aabbab

Мы отмечаем, что единственные строки, генерируемые грамматикой, принимают каждый экземпляр S для либо ab, либо aabb. Кроме того, мы можем получить любое количество S в наших промежуточных формах, используя S -> SS. Следовательно, это обычный язык (ab + aabb)+.

Доказательством является индукция по длине строки n.

Базовый случай: самые короткие строки ab и aabb находятся на языке (ab + aabb)+ и генерируются грамматикой, как показано выше.

Гипотеза индукции: язык, генерируемый грамматикой, соответствует языку (ab + aabb)+ для всех строк вплоть до длины k.

Шаг индукции: мы должен показать, что строки, сгенерированные грамматикой следующей наибольшей длины, находятся на языке, а строки на языке следующей наибольшей длины сгенерированы грамматикой. Примечание: грамматика может генерировать только строки четной длины, а язык (ab + aabb)+ содержит только строки четной длины, так что на самом деле следующий самый высокий шаг - это наименьшее четное число, большее k.

  1. Мы знаем язык и соответствие грамматики для строк длиной k. Пусть X будет множеством всех строк на языке длины k, а Y будет множеством всех строк на языке длины k - 2. Затем грамматика генерирует множество строк X ', модифицируя производные строк в X использовал производство S -> SS один раз, а затем выбрал S -> aTb -> ab для этого экземпляра S, который только что появился. Грамматика также генерирует набор строк Y ', модифицируя производные строк в Y, чтобы использовать производство S -> SS один раз, а затем выбирая S -> aTb -> aabb для этого только что введенного экземпляра S. Эти же строки соответствуют регулярному выражению, поскольку строки в X и Y совпадают, а X 'и Y' - это только те строки с добавленным ab или aabb, что допускается звездой Клини.

  2. Аналогично К строкам длины k и k-2, которые соответствуют регулярному выражению, в конец можно добавить или ab, или aabb (благодаря звезде Клини), чтобы получить все совпадающие строки длины k + 2. Но они также должны быть сгенерированы грамматикой, поскольку префиксы были сгенерированы грамматикой, и у нас есть произведения (описанные выше), которые позволяют нам вводить дополнительные ab или aabb в наши производные строки.

На словах язык - это набор всех строк, которые являются конкатенациями любого числа экземпляров строк ab и aabb в любом порядке.

...