这个问题是在一个样本考试中,我们的教授懒得输入解决方案,而且我很困难。在此先感谢您的帮助!
证明以下语言无上下文{x is an element of {a,b,c}* | the number of a's in x is greater than the number of b's or the number of c's in x}
答案 0 :(得分:1)
{x是{a,b,c} * |的元素x中的a的数量大于b的数量或x中的c的数量}
这可以通过两种方式解释:
a
的数量大于(b
的数量加上c
的数量)a
的数量大于b
的数量)或(a
的数量大于{{1}的数量) }的)。提示1:PDA可以如下工作。如果堆栈为空并且您在输入上看到c
,则向堆栈添加a
。如果堆栈为空并且您在输入上看到a
或b
,请向堆栈添加c
。如果最顶层的堆栈符号是b
,并且您在输入上看到b
,请从堆栈中删除a
。如果最顶层的堆栈符号是b
,并且您在输入上看到b
或b
,请将另一个c
添加到堆栈。如果最顶层的堆栈符号是b
,并且您在输入上看到a
,则将另一个a
添加到堆栈。如果最顶层的堆栈符号是a
,并且您在输入上看到a
或b
,请从堆栈中删除c
。现在简单地产生一个参数,如果a
的数量等于a
和b
的数量之和,那么这样的PDA将具有(1)空堆栈。的; (2)如果c
比a
或a
的{{1}}更多b
,则会在堆栈顶部显示c
; (3)如果b
比查看a
或b
'(合并)的c
更少,则会在堆栈顶部a
。
提示2:首先,构建一个PDA,接受b
,c
和a
的任何字符串,其中b
更多比c
更多,忽略任何c
(上面的Hints for 1中描述的PDA可以很容易地修改为忽略a
)。然后,构建一个PDA,接受b
,c
和a
的任意字符串,其c
比b
更多{{1}} s,忽略任何{{1}}(类似于你刚建立的那个)。最后,证明你试图证明无上下文的语言是这些自动机所接受的语言的结合;一个简单的论证就足够了。由于无上下文语言在联合下被关闭,这证明了这种说法,即你为证明无上下文而设定的语言实际上是无上下文的。
请随时要求进一步澄清。另外,请查看新网站以获取以下问题:https://cs.stackexchange.com/。您可能会在该网站上的未来问题上获得更好的答案。
答案 1 :(得分:-2)
任务是表明语言可以通过无上下文语法生成。
一些提示:
A -> aabAc | B
B -> B|epsilon