轻松证明无上下文语言在循环移位下被关闭


11

语言L循环移位 (也称为旋转共轭)定义为\ {yx \ mid xy \ in L \}。根据维基百科(和此处),无上下文语言在此操作下是封闭的,参考了Oshiba和Maslov的论文。有一个容易证明这一事实的证据吗?大号L{ ÿ X | X ý 大号}{yxxyL}

对于常规语言,闭包以这种形式讨论为“ 证明在循环运算符下关闭了常规语言 ”。

Answers:


5

您可以尝试使用下推自动机。给定原始语言的下推自动机,我们为循环移位构造一个。新的自动机分两个阶段运行,分别对应词的和部分(其中是原始语言)。在第一阶段,每当自动机想要弹出一个非终端,它就可以推送一个非终端。这个想法是,在第一阶段的最后,堆栈将包含相反的顺序,即原始自动机读取后在堆栈中找到的符号。在第二阶段(开关是不确定的),而不是按下非端子ÿ yX xÿ X yxX ý xyA'A X xA,我们可以弹出非终端。如果原始自动机确实可以在读取时生成堆栈,那么新的自动机将能够准确弹出整个堆栈。一个A Xx

编辑:这里有一些更多的细节。假设我们给了一个PDA,其字母为,状态集,接受状态,非终端,初始状态和一组允许的过渡。每个允许的过渡都具有,这意味着当处于状态,在读取(或,在这种情况下,它是自由过渡),如果堆栈顶部是(或,这意味着堆栈为空),则PDA可以(这是一个不确定性模型)移至状态,替换为Σ Q ˚F Γ q 0q q 'α q 一个一个= ε Γ = ε q 'α Γ *ΣQFΓq0(q,a,A,q,α)qaAa=ϵAΓA=ϵqA与。αΓ

新的PDA每个具有新的非终端。对于每两个状态和,有两个状态。起始状态(实际起始状态是通过过渡非确定地选择的)是。对于每个过渡都有对应的过渡和。还有其他过渡。'Γ q q 'Q Γ q 1 q 'q 1 α AAΓq,qQ{ ε } q q '1 q q '2 ε q q 1 q 一个A q 'α q AΓ{ϵ}(q,q,1),(q,q,2,A)ϵ(q,q,1)(q,a,A,q,α)((q,q′′,1),a,A,(q,q′′,1),α)q q 2 q 'q 2 α ((q,q′′,2,B),a,A,(q,q′′,2,B),α)

对于每个过渡,都有过渡,其中和。对于每个最终状态,都有过渡,其中。q q 'α q q 1 一个'q 'q 1 ' ' α ∈ Γ { ε } ε ' = ε q ˚F q (q,a,A,q,α)((q,q′′,1),a,B,(q,q′′,1),BAα)BΓ{ϵ}ϵ=ϵqFq 1 ε q 0q 2 ε ∈ Γ { ε }((q,q′′,1),ϵ,A,(q0,q′′,2,ϵ),A)AΓ{ϵ}

对于每个过渡,都有过渡,其中。对于每个过渡,都有过渡,其中。对于每个过渡,都有“广义过渡” ; 这些被实现为通过中间新状态的两次转换的序列。过渡\ alpha) 和q 一个ε q 'α q q 2 一个'q 'q 2 ' α ∈ Γ { ε } q 一个ε q '(q,a,ϵ,q,α)((q,q′′,2,A),a,B,(q,q′′,2,A),Bα)AΓ{ϵ}q q 2 'q 'q 2 ε ∈ Γ { ε } q q 'B q q ''2(q,a,ϵ,q,A)((q,q′′,2,B),a,A,(q,q′′,2,A),ϵ)BΓ{ϵ}(q,a,A,q,B)Ç 'q q 2 Ç ε q 一个ε q 'α | α | 2 q q 'q q 2 ((q,q′′,2,C),a,BA,(q,q′′,2,C),ϵ)(q,a,ϵ,q,α)|α|2被类似地处理。对于每个过渡,都有过渡,其中。过渡的处理方式类似。最后,有一个唯一的最终状态,以及过渡。(q,a,A,q,A)一个q 'q 2 ∈ Γ '{ ε } q q 'α ˚F q q 2 A ϵ ϵ f ϵ((q,q′′,2,A),a,B,(q,q′′,2,A),B)BΓ{ϵ}(q,a,A,q,Aα)f((q,q,2,A),ϵ,ϵ,f,ϵ)

(我可能错过了一些转换,而我省略的一些细节有些混乱。)

回想一下,我们正在尝试接受单词,其中被原始PDA接受。状态表示我们处于阶段1,处于状态,而原始PDA 在读取之后处于状态。状态相似,其中对应于最后弹出的。在第一阶段,我们被允许推动,而不是弹出。我们对在处理产生的每个非终端执行此操作,但在处理时才弹出。在第二阶段,我们可以弹出ÿ X X Ý q q '1 q q ' X q q '2 ' 'X ý 'ε 'yxxy(q,q,1)qqx(q,q,2,A)AAAAxyA而不是推。如果这样做,那么我们必须记住,库存最高的实际上是;这仅在堆栈上没有“临时”内容时才适用,在模拟的PDA中,“临时”内容与或形式为的堆栈顶部相同。AAϵB

这是一个简单的例子。考虑自动机是推动对于每个,并弹出每个。新的自动机接受两种形式的单词:和。对于第一种形式的话,第1阶段由推倍阶段2包括弹出的倍,推次,和弹出次。对于第二种形式的单词,我们首先按次X Ñ ÿ ÑX ý ý ķ X Ñ ý ñ - ķ X ķ ý ñ X ñ - ķ ķ ' ķ ' ñ - ķ ñ - ķ ķ ķ ñ - ķ ' ñ - ķ A 'xnynAxAyykxnynkxkynxnkkAkAnkAnkAkA,然后弹出次,按次,过渡到阶段2,然后弹出次。kAnkAnkA

对于各种类型的括号(“()”,“ []”,“ <>”)来说,这是一个更复杂的示例,因此每种类型的括号的直接后代必须属于不同的类型。例如,“([] <>)”可以,但是“()”是错误的。对于每一个“(”我们推,如果顶级的堆栈是不是,每个“)”,我们弹出。类似地,,与“ []”和“ <>”相关联。这就是我们如何接受单词“>)([((]] <”。我们消耗“>)”,推动,然后过渡到阶段2。我们消耗“(”,弹出和记住顶级的堆栈中的。我们使用“ [()]”,推并弹出 ; 推时Ç Ç ' ' 'A ,我们知道“真正的”栈顶是,因此允许使用方括号(我们不会被“>)(()<”所迷惑);按下,由于堆栈的顶部是(不是或的形式),那么我们知道也是“真实的”堆栈顶部,因此可以使用圆括号(即使阴影栈顶是)。最后,我们使用“ <”并弹出。AABϵXBAC


抱歉,我无法理解-您能进一步解释吗?自动机从哪里开始,它的过渡是什么?并且每个堆栈符号都会发生切换吗?谢谢!AA
usul 2013年

非常有趣的建议。谢谢。我将对此进行一点咀嚼,以使其沉入
。– Hendrik

@usul,您必须自己填写详细信息。开关(在第一阶段)应该在自动机“想要”弹出但不能弹出时发生,而是按下。您可以将其视为不确定的举动。一个'一个一个'
Yuval Filmus

@Yuval:对不起,但我无法做到这一点。据我了解您的想法,新的自动机首先模拟部分,更改弹出按钮和推动按钮。然后在堆栈上生成,当读取时,原始自动机以开头。最初是从推动开始的吗?然后,nwe自动机需要从空堆栈中弹出。我仍然认为您的直觉是值得的,但是似乎需要额外的照顾。ÿ α α ÿ
Hendrik 2013年1

@Hendrik,对不起,但我不能效法您的反例。您认为什么时候新的自动机需要从空堆栈中弹出?
Yuval Filmus 2013年

4

考虑Greibach范式。要构造一种转换的语言,您只需要将更改即可将并添加一个新的非终端,其行为类似于以前的习惯,以防某些情况生产引用。小号α 1 ... Ñ小号1 ... Ñ α 小号小号小号


谢谢,但是这只差一个字母。我对通用旋转感兴趣,可以使用任意数量的字母。
Hendrik

3
@HendrikJan,好吧,如果是上下文无关的,那么也肯定没有上下文。您可以通过应用我建议的方法次来为其构建语法,也可以通过“拼合”给定的语法直接构建语法例如,如果,并且语法具有和,则可以将生产并旋转它。您的语法可能会非常迅速地增长移位1大号Ñ大号= 11... 大号... ñ Ñ大号ñ = 2 小号→交通α →交通β Ç 小号→交通α β Ç
KarolisJuodelė2013年

1
对于固定您是正确的。但是这里是固定的也不是有界的。例如,如果则我们获得。Ñ Ñ 大号= { 一个Ñ b Ñ | Ñ 0 } { 一个ķ b Ñ 一个 | ķ + = Ñ } { b ķ 一个Ñ b | ķ + = Ñ }
Hendrik 2013年1

@HendrikJan,我知道了。我错误地认为问题在于有限的转变。我会重新考虑我的答案……
KarolisJuodelė2013年

4

检验旧的霍普克罗夫特和乌尔曼经典著作《自动机理论导论》(1979年),是一个好主意。循环中的关闭为练习6.4c,并标记为S **。双星意味着这是最困难的问题之一(在书中)。幸运的是,S表示这是选择的解决方案之一。

解决方法如下。以Chomsky正常形式获取CFG。考虑任何派生树,并将其基本倒置。考虑 原始树中的路径。树的左侧是贡献到右侧 ,这意味着派生的字符串等于。(实际上,当路径继续向左移动时,语法是CNF,贡献将在右边,而相应的为空,等等。)S = X 1X 2X n x 1x 2x n y 1y 2y n x 1 x 2x n y ny 2 y 1 x i

倒置的树的路径为,左侧为,右侧为 ,因此结果为是的派生词。按要求。S,ˆXn,ˆX2,ˆX1yn,,y2y1xn,,x2x1yny2y1x1x2xn

书中给出了结构的完整细节。

请注意,这如何使Yuval想到(已接受)解决方案。推送而不是弹出的非终端在堆栈上的顺序相反。非常类似于倒挂在树上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.