在{a,b}上递归定义集合字符串,其中包含在第一个b之前的一个b和偶数个a

时间:2014-11-20 18:55:51

标签: math discrete-mathematics formal-languages

我正在从第2章第6章中的语言与机器:计算机科学理论导论(第3版)中解决问题。

我需要帮助找到答案:

在{a,b}上设置字符串的递归定义,包含在第一个b之前的一个b和偶数个?

1 个答案:

答案 0 :(得分:0)

在查找递归定义时,首先要确定基本情况,然后查找递归步骤 - 就像您正在进行归纳一样。这种语言中最小的字符串是什么?好吧,任何字符串都必须有bb单独使用该语言中的字符串吗?为什么是,因为它前面有零a个,零是偶数。

  

规则1:b位于L

现在,给定语言中的任何字符串,我们如何获得更多字符串?好吧,我们显然可以在字符串的末尾添加任意数量的a并获取该语言中的另一个字符串。实际上,如果我们只是允许您在语言的字符串末尾添加一个b,我们就可以从a获取所有这些字符串。从x L开始,我们会恢复xaxaa,...,xa^n,... = xa*

  

规则2:如果x位于L,则xa位于L

最后,我们可以对我们语言中的字符串开头做些什么? a的数量必须是偶数。到目前为止,规则1和规则2只允许我们在a之前构造零b s的字符串。我们应该能够获得a s的所有偶数的两个,四个,六个等。允许我们将两个a添加到我们语言中的任何字符串的规则将允许我们在开始时添加更多a s,同时保持我们需要的均匀性属性。从x中的L开始,我们会恢复aaxaaaax,...,(aa)^(2n)x,... = (aa)*x

  

规则3:如果x在L中,则aax在L中。

或者,您可以添加有时隐含理解的规则,即只允许上述规则允许的内容。否则,技术上任何东西都是允许的,因为我们还没有明确禁止任何东西。

  

规则4:L中没有任何内容,除非上述规则1,2和/或3的某些组合。