**{a^i b^j c^k d^m | i+j=k+m | i<m}**
语法应该允许语言按abbccd
而不是cbbcda
。首先应该是a,然后是b,依此类推。
我知道你必须“计算”你要添加的a和b的数量,以确保有相同数量的c和d。我似乎无法弄清楚如何确保在语言中有更多的c而不是a。我感谢任何人都能给予的帮助。我现在已经工作了好几个小时了。
编辑:
语法应该是无上下文
我目前只有这两个,因为所有其他人都证明是非常错误的:
S - &gt; C A D. |乙
B - &gt; C B D. |
C - &gt;一个 | B'/ P>
D - &gt; C | d
和
S - &gt; S d |甲
A - &gt; b A c |
(接近但不满足i&lt; k部分)
答案 0 :(得分:2)
编辑:这是为了当我&lt; k,不是我&lt;米OP改变了问题,但我认为这个答案可能仍然有用。
这不是一个无上下文语法,这可以通过泵引理证明,该引理表明如果语法是无上下文的,则存在整数p> 1。 0,使得长度为> = p的语言中的所有字符串都可以分成子字符串uvwxy,其中len(vx)&gt; = 1,len(vwx)&lt; = p,和uv n wx n y是所有n&gt; = 0的语言成员。
假设存在p值。我们可以创建一个字符串:
k = i + 1
j = m + 1
j > p
k > p
v和x不能包含多种类型的字符,或者既可以在左侧,也可以包含在右侧,因为将它们提升到幂会立即破坏语法。它们不能是彼此相同的字符,因为然后乘以它们会破坏i + j = k + m的规则。 v不能是if if是d,因为那时w包含bs和cs,这使得len(vwx)&gt;页。通过相同的推理,v不能好像x是cs,如果x是ds,则v不能是bs。唯一剩下的选项是bs和cs,但是将n设置为0将使i> = k并且j> = m,从而破坏了语法。
因此,它不是一个无上下文语法。
答案 1 :(得分:1)
必须至少有一个d
因为i < m
,所以必须有一个b
来抵消它。 T
和V
保证此标准,然后转移到接受状态S
。
T ::= bd | bTd
U ::= bc | bUc
V ::= bUd | bVd
S ::= T | V | aSd