你被要求找到由语法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) 对应于G中的规则A → aAa、S → aAb和S → bAa。不难看出,归纳定义和G的规则定义了同一种语言。归纳定义表明G的语言可以逐步构建。从G中可生成的最小字符串开始,我们构建了与有问题的规则相对应的越来越大的字符串集:
L(1) = {ab, ba}
L(n + 1) = {awb, bwa, awa : w ∈ L(n)}
集合L (1) 包含G中可生成的最小字符串。对于每个字符串w ∈ L (n) ,集合L (n + 1) 包含字符串awb、bwa和awa 。即,L (n+1)中的字符串对应于通过将规则S → aAb、S → bAa和A → aAa一次应用于L (n)中的字符串而获得的字符串。剩下的就是构造L (n) 的并集,它是一个集合:
L = ⋃ {L(n) : n ∈ ℕ}
要看到L等价于语法G生成的语言,您可以通过归纳来争论G中的推导长度。从G中可流派的最小字符串(即ab和ba)开始,使用适当的归纳假设向后工作。