是{www | ……}是否与上下文无关?


12

众所周知,的补语是与上下文无关的。但是的补码呢?{ w ^ w ^ | w ^ ∈ Σ * } {ww∣w∈Σ∗}{ w ^ w ^ w ^ | w ^ ∈ Σ * }{www∣w∈Σ∗}


1
我发现这是P.Dömösi,S。Horváth,M。Ito,L。Kászonyi,M。Katsura中的定理4:由原始单词组成的形式语言。link.springer.com/chapter/10.1007/3-540-57163-9_15
— domotorp '19

Answers:


11

我相信仍然是CFL,并采用了经典证明。这是草图。

考虑L = { x y z :| x | = | y | = | z | ∧ (x ≠ ý ∨ ý ≠ Ž )}L={xyz:|x|=|y|=|z|∧(x≠y∨y≠z)},这是补体 { 瓦特瓦特瓦特}{www},具有长度的话不 00 MOD 33除去。

令L ' = { u v :| ü | ≡ 3 | v | ≡ 3 0 ∧ ü 2 | ü | / 3 ≠ v | v | / 3 }L′={uv:|u|≡3|v|≡30∧u2|u|/3≠v|v|/3}。显然,L 'L′是CFL,因为您可以猜测位置pp并认为uu在此之后以p / 2p/2结尾。我们证明L = L ′L=L′。

  • 大号⊆ 大号'L⊆L′:让 w ^ = X Ÿ ž ∈ 大号w=xyz∈L。假设有一个 pp使得 x p ≠ y pxp≠yp。然后写 üu为 3 p / 23p/2的第一字符瓦特w,和 vv为其余部分。自然, u 2 | ü | / 3 = X pu2|u|/3=xp。现在是 v | v | / 3v|v|/3?第一:

| v | / 3 = (| w | − 3 p / 2 )/ 3 = | w | / 3 - p / 2。

|v|/3=(|w|−3p/2)/3=|w|/3−p/2.

因此,在w中w,这是位置: | ü | + | v | / 3 = 3 p / 2 + | w | / 3 − p / 2 = | w | / 3 + p ,

|u|+|v|/3=3p/2+|w|/3−p/2=|w|/3+p,
换句话说,将pp放置在y中y。这表明 u 2 | ü | / 3 = x p ≠ y p =v | v | / 3u2|u|/3=xp≠yp=v|v|/3。

如果y p ≠ z pyp≠zp,则让uu为前3个2(|瓦特|/3+p)32(|w|/3+p)的字符瓦特w,使得ù2| ü| /3u2|u|/3是ypyp; vv是ww的其余部分。然后: | ü| +| v| /3=2| w| /3+p

|u|+|v|/3=2|w|/3+p
因此,v| v| /3=zpv|v|/3=zp。

  • 大号' ⊆ 大号L′⊆L:我们扭转先前的过程。让 w ^ = ü v ∈ 大号“w=uv∈L′。写 p = 2 | ü | / 3p=2|u|/3。然后: p + | w | / 3 = 2 | ü | / 3 + | u v | / 3 = | ü | + | v | / 3.
    p+|w|/3=2|u|/3+|uv|/3=|u|+|v|/3.
    因此, w p =u 2 | ü | / 3 ≠ v | v | / 3 = w p + | w | / 3wp=u2|u|/3≠v|v|/3=wp+|w|/3,和瓦特∈ 大号w∈L(因为如果瓦特w的形式为 X X Xxxx,必须认为瓦特p = 瓦特p + |瓦特| / 3wp=wp+|w|/3对于所有 pp)。

2
哇,真不可思议!我并不认为我已经按照你的说法的每一个细节,就像我没有看到你的最后一行(“对于最后一位”)的意思,或者你为什么不的情况下分开| w | / 3 < p / 2,但您的解决方案最终会起作用。我将主要技巧总结为3 a + 3 b = 2 a + (b − a )+ 2 a|w|/3<p/2 + 2 b。类似的技巧也适用于任何 L r = { w r3a+3b=2a+(b−a)+2a+2b}。我想知道是否 L ' = { x y z :| x | = | y | = | z | ∧ (x ≠ y )}是否与上下文无关。Lr={wr}L′={xyz:|x|=|y|=|z|∧(x≠y)}
— domotorp

1
@domotorp:干杯!好了,“最后一点”是不必要的,谢谢!至于“ | w | / 3 < p / 2的情况 ”,我不确定你的意思。我错过了什么?至于您的L ′,我想知道是否也这样做“证明”!目前还不能确定:)|w|/3<p/2L′
— 迈克尔Cadilhac

2
哦,我的坏,p / 2 ≤ | w | / 3总是成立!p/2≤|w|/3
— domotorp

可能不是问题,但是p可能是奇数,因此您应该处理这种情况。ü | 当p为奇数时= 3 p / 2 (?)。p|u|=3p/2(?)p
— Marzio De Biasi

@MarzioDeBiasi:是的,这正是为什么这是一个草图:-)
— 迈克尔Cadilhac

10

这就是我考虑使用PDA解决此问题的方法。我认为,它在直观上更加清晰。

一个字Xx不是形式的瓦特瓦特瓦特www当且仅当或者(i)| x | ≢ 0|x|≢0(MOD 3),这是很容易检查,或(ii)有一些输入符号一个a从相应的符号不同bb发生| w | |w|职位以后。

我们使用通常的技巧,即通过使用一个新的“栈底”符号Z来存储整数值|来维护整数t t。t | 作为堆栈上计数器的数量,sgn(t)由PDA的状态决定。因此,我们可以通过执行适当的操作来增加或减少t。Z|t|tt

目的是使用不确定性来猜测您正在比较的两个符号的位置,并使用堆栈来记录t := | x | − 3 dt:=|x|−3d,其中dd是这两个符号之间的距离。

我们按以下步骤完成此操作:为看到的每个符号递增t,直到选择了第一个猜出的符号a,然后在状态中记录a。对于每个随后的输入符号,直到你决定你看到b,减量吨由2(1用于输入长度和- 3为的距离)。猜测第二个符号b的位置,并记录a ≠ b。继续增加t为后续输入符号。接受如果t = 0(顶部Z可以检测到)并且a ≠ b。

这样做的好处是,应该完全清楚如何将其扩展到任意能力。


2
确实,很整洁!
— domotorp

1
嗯,好多了的确:-)
— 迈克尔Cadilhac

4

只是从一个不同的角度(“面向语法”)的角度证明了{ w k }的补码对于使用闭包属性的任何固定k都是CF。

首先要注意在补{ w ^ ķ }总有我这样W¯¯ 我 ≠ w ^ 我+ 1。我们关注w 1 ≠ w 2并从生成以下内容的简单CF语法开始:

大号= { 一个00 ... 0 ⏟瓦特1b 00 ... 0 ⏟ w ^ 2。。。000 ... 0 ⏟ W¯¯ ķ || w ^我| =n}={a0n−1b 0 n (k − 1 )− 1 }

例如,对于k = 3,我们有L = { ab0 ,一个0b 000 ,一个00b 00000 ,。。。}, G ^ 大号 = { 小号→ 一个b 0 | a X 00 ,X → 0 X 00 | 0 b 0 }

Then apply closure under inverse homomorphism, and union:

First homomorphism: φ(1)→a,φ(0)→b,φ(1)→0,φ(0)→0

Second homomorphism: φ′(0)→a,φ′(1)→b,φ′(1)→0,φ′(0)→0

L′=φ−1(L)∪φ′−1(L) is still context free

Apply closure under cyclic shifts to L′ to get the set of strings of length kn not of the form wk:

L″=Shift(L′)={u∣u≠wk∧|u|=kn}.

Finally add the regular set of strings whose length is not divisible by k in order to get exactly the complement of {wk}:

L″∪{{0,1}n∣nmodk≠0}={u∣u≠wk}

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.