这个问题是在一个样本考试中,我们的教授懒得打出解决方案,而我被卡住了很糟糕。在此先感谢您的帮助!证明以下语言是上下文无关的:
证明下列语言上下文{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}
这个问题是在一个样本考试中,我们的教授懒得打出解决方案,而我被卡住了很糟糕。在此先感谢您的帮助!证明以下语言是上下文无关的:
证明下列语言上下文{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}
{x是的元素{A,B,C} * |在X A的数目大于B的数目或c的在X}
这可以解释两种方式的数目大:
a
的数量大于(的b
数量的加c
数量的)a
数的比的b
数大的)或(的a
数的比的c
数量更大的“ S)。提示1:PDA可以工作如下。如果堆栈为空,并且在输入上看到一个a
,则将一个a
添加到堆栈。如果堆栈为空,并且在输入上看到b
或c
,请将b
添加到堆栈。如果最上面的堆栈符号是b
,并且您在输入上看到了a
,请从堆栈中删除b
。如果最上面的堆栈符号是b
,并且您在输入上看到了b
或c
,请将另一个b
添加到堆栈。如果最上面的堆栈符号是a
,并且您在输入上看到了a
,请将另一个a
添加到堆栈。如果最上面的堆栈符号是a
,并且您在输入上看到b
或c
,请从堆栈中删除a
。现在简单地产生一个论点,即如果a
的数目等于b
和c
的数目之和,则这样的PDA将具有(1)空的堆栈; (2)a
如果它看到更多的a
的比它看到b
的或c
的(组合); (3)在堆栈顶部的b
,如果它看到的数量比b
或c
(组合)的数量少a
。
提示2:首先,构造一个PDA接受的a
的,b
的,而且比b
小号c
'其具有多个a
s' 的任意字符串的,忽略任何c
的(上面描述的PDA在提示1中可以很容易地修改为忽略c
's)。然后,构建一个PDA,接受a
的b
和c
的a
的c
的任意字符串,忽略任何b
的(与您刚建立的类似)。最后,证明你试图证明上下文无关的语言是这些自动机接受的语言的结合;一个简单的论证就足够了。由于上下文无关的语言在联合下关闭,这就说明了这一说法,即您设置的用于证明上下文无关的语言的确是上下文无关的。
请随时要求进一步澄清。另外,请查看新网站,以获得如下问题:https://cs.stackexchange.com/。您可能会在该网站的未来问题上得到更好的答案。
的任务是表明语言可以通过上下文无关文法产生。
一些提示:
A -> aabAc | B
B -> B|epsilon
提示:DFA不能计数。 – cHao 2012-04-05 00:29:24
您可能会在Math.SE上获得更好的响应。 – 2012-04-05 00:53:46
@KendallFrey我会建议[CSTheory](http://cstheory.stackexchange.com/):) – 2012-07-16 19:06:19