以下语言环境是免费的吗?
L = {a^i b^k c^r d^s | i+s = k+r, i,k,r,s >= 0}
我试图想出一个无上下文语法来生成这个,但我不能,所以我假设它不是上下文。至于我通过矛盾证明:
假设L是无上下文的,
设p是泵浦引理给出的常数,
选择字符串S = a ^ p b ^ p c ^ p d ^ p其中S = uvwxy
作为| vwx | < = p,那么最多vwx可以包含两个不同的符号:
案例a)vwx只包含一种类型的符号,因此uv ^ 2wx ^ 2y将导致i + s!= k + r
案例b)vwx包含两种类型的符号:
i)vwx由b和c组成,因此uv ^ 2wx ^ 2y将导致i + s!= k + r
现在我的问题是,如果vwx由a和b组成,或者c和s组成,那么抽取它们将不会破坏语言,因为i和k或s和r可以一致地增加,导致i + s == k + r。
我做错了什么或者这是一种无背景语言?
答案 0 :(得分:1)
我无法想出一个CFG来生成我的头脑中的特定语言,但我们知道如果一些下推自动机识别它,语言是无上下文的。
设计这样的PDA不会太困难。一些让你入门的想法: 我们知道i + s = k + r。等价地,i-k-r + s = 0(我按顺序写了它,因为它是它们出现的顺序)。问题的关键在于如果(k + r)> i决定如何处理堆栈。
如果您不熟悉PDA或无法使用它们来解决问题,至少您现在知道它是无上下文的。
祝你好运!答案 1 :(得分:0)
这是一种接受这种语言的语法:
A -> aAd
A -> B
A -> C
B -> aBc
B -> D
C -> bCd
C -> D
D -> bDc
D -> ε