提供生成语言的无上下文语法
M = {a^m b^n | 2m > n > m}. ‘
提示:m不能为0,因为在那种情况下2m = m。 m不能为1,因为在那种情况下2> n> 1,这么自然 数字n不存在。所以语言M中最短的字符串是aabbb。对于更长的字符串,您需要确保 bs的数量n和满足2m的数量m> n>米。
答案 0 :(得分:1)
我们知道aabbb
是该语言,因此S -> aabbb
不是一个糟糕的开始。我们如何在语言中获得更长的字符串?好吧,我们需要保留2m > n > m
。这种语言中最短的字符串(对于给定数量的a
s)比b
多一个a
,所以我们可能会猜测S -> aSb
并不坏猜测;它肯定会在我们的语言中生成字符串,即最短的字符串(对于给定数量的a
s)。同样,我们语言中最长的字符串比b
少a
个S -> aSbb
,所以a
也是安全的,因为它生成最长的字符串(对于给定的数字) S -> aabbb
S -> aSb
S -> aSbb
s)。到目前为止我们的语法是这样的:
a
第一次制作后的每次制作都会添加一个b
和一个或两个a
。可以单独使用第二个生成来生成最短的字符串(对于给定数量的a
s),第三个生成可以单独使用,生成最长的生成(对于给定数量的n
s) 。最短和最长的串之间怎么样?这些作品可以用来获得所有这些字符串吗?
他们可以。你可以通过归纳证明它。您必须证明语言中的所有字符串长度aabbb
(1)都是由语法生成的,而(2)语法生成的字符串是语言。
基本情况:语言中最短的字符串是k
,它是由语法生成的。
归纳假设:假设语法为语言中的所有字符串生成所有字符串,包括长度为k + 1
的字符串。
归纳步骤:我们必须显示语法为语言中的所有字符串生成长度为n = m + 1
的任何字符串。我们已经认为语法不能产生不在语言中的字符串;通过仅使用第二个作品,您获得n = 2m - 1
,并且只使用第三个作品获得a
。要查看它是否生成了该语言中的所有字符串,请回想一下,该语言中的任何字符串都以至少两个b
开头,并以至少三个aaxbbb
结束。因此,它可以写成axbb
。可以证明,如果此字符串使用该语言,则axb
和/或axbb
中的一个或两个也必须使用该语言。
L
或2(m - 1) > n - 1 > m - 1
,则2m - 1 > n > m
位于axb
L
位于2(m - 1) > n - 2 > m - 1
2m > n > m + 1
或2m - 1 > n
。由于在每种情况下从基本情况开始,我们至少有n > m + 1
和/或L
中的一个,其中一个也在k + 1
中。通过归纳假设,语法产生它;并且其中一个语法的作品将从中产生长度为L
的原始字符串。所以语法在{{1}}中生成所有字符串。