是语言 0^n 1^n 0^k | k != n 上下文无关?
Posted
技术标签:
【中文标题】是语言 0^n 1^n 0^k | k != n 上下文无关?【英文标题】:Is the language 0^n 1^n 0^k | k != n context free?是语言 0^n 1^n 0^k | k != n 上下文无关? 【发布时间】:2012-12-10 07:03:12 【问题描述】:我相信这种语言不是上下文无关的,因为 PDA 不可能比较 2 个相同长度的 0 和 1 块并记住它的长度以供以后使用。
很遗憾,我不知道如何证明。
我尝试使用抽引引理无济于事......
我还试图通过矛盾假设语言是上下文无关的,并使用上下文无关语言与常规语言的交集也是上下文无关的事实(通过找到一些神秘的常规语言 L),令人惊讶的是(或不)——我所有的努力都是徒劳的......
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:语言是 0n1n0k | k != n 上下文无关?
否,语言 L = 0n1n0k | k!=n 不是上下文无关语言。另外,Class of Regular Languages is subset of class Context free languages。
You Idea 使用PDA
是正确且明显的方式来表明语言不是上下文无关的。
我们不能为语言 0n1n0k 绘制PDA
,因为在匹配前缀 0n 到 1n 堆栈为空,则我们没有存储信息来检查天气后缀 0K 是否等于n
。
提示:用于正式证明
第一L = 0n1n0k | k!=n 现在 L 的补码是 L'。
L' = 0n1n0n 这是众所周知的上下文相关语言(可以作为证据)。
并且上下文相关语言的补语本身也是上下文相关的。
第二对于抽引引理:
L = 0n1n0k | k!=n 是 L1 和 L2 的并集,其中 L1 = 0n1n0k | k > n 和 L2 = 0n1n0k | k
L = L1 U L2
L1 和 L2 都是非上下文无关语言。而两种非上下文无关语言的联合是非上下文无关的。(可以很容易地通过语法证明)
另外,两种上下文相关语言的联合、连接是上下文相关的。
【讨论】:
感谢您的回答格里杰什。但我需要一个更正式的证明(这是一个家庭作业问题)。你们(和女孩)知道如何证明吗? @Robert777 是的,正式证明是可能的。 是的,我很想看看如何用泵引理解决它! @Robert777 我用有用的提示更新了我的答案。现在尝试让我知道它是否仍然困难。 @Robert777 欢迎罗伯特! :)以上是关于是语言 0^n 1^n 0^k | k != n 上下文无关?的主要内容,如果未能解决你的问题,请参考以下文章
C语言编写一个num函数,找出1到N被7或者11整除的所有整数放在数组a中,通过K反馈个数。
C语言 对于给定的N各元素的数组[0;N-1],要求从中找出第K小的元素
求C语言程序,从1~2012中取k个数,取出的数中任意两个数之差不能为5或8,求k的最大值
F(0)=0 F(1)=1 F(2)=2 F(N)=F(N-1)+F(N-2)+F(N-3) N>3 语言用c或者c++,采用栈来实现这个函数。高分悬赏~~