我正在从第2章第6章中的语言与机器:计算机科学理论导论(第3版)中解决问题。
我需要帮助找到答案:
在{a,b}上设置字符串的递归定义,包含在第一个b之前的一个b和偶数个?
答案 0 :(得分:0)
在查找递归定义时,首先要确定基本情况,然后查找递归步骤 - 就像您正在进行归纳一样。这种语言中最小的字符串是什么?好吧,任何字符串都必须有b
。 b
单独使用该语言中的字符串吗?为什么是,因为它前面有零a
个,零是偶数。
规则1:
b
位于L
。
现在,给定语言中的任何字符串,我们如何获得更多字符串?好吧,我们显然可以在字符串的末尾添加任意数量的a
并获取该语言中的另一个字符串。实际上,如果我们只是允许您在语言的字符串末尾添加一个b
,我们就可以从a
获取所有这些字符串。从x
L
开始,我们会恢复xa
,xaa
,...,xa^n
,... = xa*
。
规则2:如果
x
位于L
,则xa
位于L
。
最后,我们可以对我们语言中的字符串开头做些什么? a
的数量必须是偶数。到目前为止,规则1和规则2只允许我们在a
之前构造零b
s的字符串。我们应该能够获得a
s的所有偶数的两个,四个,六个等。允许我们将两个a
添加到我们语言中的任何字符串的规则将允许我们在开始时添加更多a
s,同时保持我们需要的均匀性属性。从x
中的L
开始,我们会恢复aax
,aaaax
,...,(aa)^(2n)x
,... = (aa)*x
。
规则3:如果
x
在L中,则aax
在L中。
或者,您可以添加有时隐含理解的规则,即只允许上述规则允许的内容。否则,技术上任何东西都是允许的,因为我们还没有明确禁止任何东西。
规则4:
L
中没有任何内容,除非上述规则1,2和/或3的某些组合。