CFG语言,其中包含相等数量的a和b

时间:2019-03-27 09:52:14

标签: computation-theory context-free-language

我已经尝试过了

S-> e(Epsilon)

S-> SASBS

S-> SBSAS

A-> a

B-> b

有人可以验证这是否正确。

1 个答案:

答案 0 :(得分:1)

您的语法是正确的。这是证明。

首先,我们证明您的语法仅生成具有相等数量a和b的字符串。请注意,所有在LHS上带有S的产品都引入与B相同数量的A。因此,从S派生的任何终端字符串都将具有相同数量的a和b。

接下来,我们说明可以使用此语法导出a和b的所有字符串。我们继续使用数学归纳法。

基本情况:S-> e和S-> SASBS-> ASBS-> aSBS-> aBS-> abS-> ab和S-> SBSAS-> BSAS-> bSAS-> bAS-> baS-> ba,因此该语言中三个最短的字符串是由语法生成的。没有其他语言的长度小于4的字符串。

归纳假设:该语言中长度不超过2k的所有字符串都是由语法生成的。

归纳步骤:我们必须显示该语言中所有长度为2(k + 1)的字符串也是由语法生成的。如果对于某些字符串x和y,w = axb或w = bya,则x和y是该语言中长度为2k的字符串,因此是由语法生成的。在这种情况下,我们可以对S-> SASBS-> ASBS-> aSBS-> aSbS-> aSb或S-> SBSAS-> BSAS-> bSAS-> bSaS-> bSa和然后使用x或y的导数完成导数,得出w。相反,如果w = axa或w = byb,则x或y是一个字符串,b刚好比a或a比b多两个。在这种情况下,w的前缀p必须带有| p |。 <| w |这样p也是该语言中的字符串(请参阅下面的引理)。如果前缀p是该语言中的单词,并且w = pr,则r也必须是该语言中的单词,因此w必须是L中两个单词的串联。这两个单词的长度均小于| w |。因此小于2(k +1)并由语法生成。如果它们是由语法生成的,则它们的形式为SaSbS或SbSaS,并且可以通过使用语法以正确的顺序使用语法来导出它们的级联。也就是说,S-> SASBS-> SASBSBSAS-> aSbSbSa = aSbS bSa <-aSbS SbSa(我们可以自由选择S-> e作为最后一个反向步骤的证明)。

相关问题