Вас просят найти язык, сгенерированный грамматикой G с произведениями
S → aAb | bAa
A → aSa | S | λ
Сначала рассмотрим небольшие деривации, начинающиеся с начального символа S
S ⇒1 aAb ⇒1 aaSab | aSb | ab
S ⇒1 bAa ⇒1 baSaa | bSa | ba
Трудный шаг связан с рекурсией, генерируемой по правилам A → aSa , S → aAb и S → bAa . Ключ к решению этой проблемы раскрывается при рассмотрении индуктивного определения языка, генерируемого G :
1. ab ∈ L4
2. ba ∈ L4
3. w ∈ L4 → awb ∈ L4
4. w ∈ L4 → bwa ∈ L4
5. w ∈ L4 → awa ∈ L4
Правила (3) - (5) соответствуют правилам A → aAa , S → aAb и S → bAa in G . Легко видеть, что индуктивное определение и правила G определяют один и тот же язык. Индуктивное определение показывает, что язык G можно создавать поэтапно. Начиная с самых маленьких строк, генерируемых в G , мы строим все более и более крупные наборы строк, соответствующие проблемным правилам:
L(1) = {ab, ba}
L(n + 1) = {awb, bwa, awa : w ∈ L(n)}
Набор L (1) содержит наименьшие строки, генерируемые в G . Набор L (n + 1) содержит строки awb , bwa и awa для каждой строки w ∈ L * +1066 * (п). То есть строки в L (n + 1) соответствуют строкам, полученным с применением правил S → aAb , S → bAa и A → aAa один раз для строк в L (n). Осталось только создать объединение L (n), которое представляет собой набор:
L = ⋃ {L(n) : n ∈ ℕ}
Чтобы увидеть, что L эквивалентен языку, сгенерированному грамматикой G , вы можете по индукции поспорить с длиной производных в G . Начиная с наименьших строк, которые можно найти в G (т. Е. ab и ba ), работая в обратном направлении, используя соответствующие индукционные гипотезы.