É o complemento de {www | …} Sem contexto?

12

É sabido que o complemento de é livre de contexto. Mas e o complemento de ?{wwwΣ}{wwwwΣ}

domotorp
fonte
11
Descobri que esse é o Teorema 4 em P. Dömösi, S. Horváth, M. Ito, L. Kászonyi, M. Katsura: Linguagens formais que consistem em palavras primitivas. link.springer.com/chapter/10.1007/3-540-57163-9_15 #
domotorp

Respostas:

11

Ainda CFL eu acredito, com uma adaptação da prova clássica. Aqui está um esboço.

Considere L={xyz:|x|=|y|=|z|(xyyz)} , que é o complemento de {www} , com as palavras de comprimento não 0 mod 3 removidas.

Seja L={uv:|u|3|v|30u2|u|/3v|v|/3} . Claramente, L é CFL, já que você pode adivinhar uma posição p considerar que u termina p/2 depois disso. Mostramos que L=L .

  • LL : Letw=xyzL . Suponha que exista ump tal quexpyp . Em seguida, escrevau para os3p/2 primeiros caracteres dew , ev para o resto. Naturalmente,u2|u|/3=xp . Agora o que év|v|/3 ? Primeiro:

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

Portanto, em w , esta é a posição:

|u|+|v|/3=3p/2+|w|/3p/2=|w|/3+p,
ou, em outras palavras, posição p em y . Isso mostra que u2|u|/3=xpyp=v|v|/3 .

Se ypzp , então u seja o primeiro 32(|w|/3+p)caracteres dew, de modo queu2|u|/3éyp; vé o resto dew. Então:

|u|+|v|/3=2|w|/3+p
portanto, da mesma forma,v|v|/3=zp.

  • LL : Invertemos o processo anterior. Sejaw=uvL . Escrevap=2|u|/3 . Então:
    p+|w|/3=2|u|/3+|uv|/3=|u|+|v|/3.
    Assim,wp=u2|u|/3v|v|/3=wp+|w|/3 ewL (desde quew tenha a formaxxx , ele deve sustentar quewp=wp+|w|/3 para todos osp ).
Michaël Cadilhac
fonte
2
Uau, incrível! Não afirmo que segui todos os detalhes do seu argumento, como se não entendesse o que você quer dizer com a última linha ('For the last bit'), ou por que você não separa o caso quando , mas sua solução funciona eventualmente. Eu resumiria o truque principal como 3 a + 3 b = 2 a + ( b - a ) + 2 a + 2 b . O truque semelhante também funciona para o complemento de qualquer L r = { w r|w|/3<p/23a+3b=2a+(ba)+2a+2b . Gostaria de saber se L = { x y z : | x | = | y | = | z | ( x y ) } é livre de contexto ou não. Lr={wr}L={xyz:|x|=|y|=|z|(xy)}
Domotorp 13/01/19
11
@domotorp: Saúde! Tudo bem, "o último pedaço" foi desnecessário, obrigado! Quanto ao "caso em que ", não sei ao certo onde você quer dizer isso. Perdi algo? Quanto ao seu L ' , eu me perguntava o mesmo fazendo essa "prova"! Ainda não tenho certeza :)|w|/3<p/2L
Michaël Cadilhac
2
Oh, meu mal, sempre vale! p/2|w|/3
domotorp
Provavelmente não é um problema, mas pode ser estranho, então você deve lidar com os casos | u | = 3 p / 2 ( ? ) Quando p é ímpar. p|u|=3p/2(?)p
Marzio De Biasi
@MarzioDeBiasi: Sim, isso é precisamente por isso que este é um esboço :-)
Michaël Cadilhac
10

Aqui está a maneira como penso em resolver esse problema, com um PDA. Na minha opinião, é intuitivamente mais claro.

Uma palavra x não tem a forma www se (i) |x|0 (mod 3), que é fácil de verificar, ou (ii) existe algum símbolo de entrada a que difere do símbolo correspondente b que ocorre |w|posições mais tarde.

Usamos o truque usual de usar a pilha para manter um número inteiro t , tendo um novo símbolo "parte inferior da pilha" Z , armazenando o valor absoluto |t|como o número de contadores na pilha e sgn ( t ) pelo estado do PDA. Assim, podemos incrementar ou diminuir t fazendo a operação apropriada.

O objetivo é usar o não determinismo para adivinhar as posições dos dois símbolos que você está comparando e usar a pilha para registrar t:=|x|3d , onde d é a distância entre esses dois símbolos.

Realizamos isso da seguinte maneira: incremente t para cada símbolo visto até que o primeiro símbolo adivinhado a seja escolhido e registre a no estado. Para cada símbolo de entrada subsequente, até você decidir que viu b , diminua t em 2 ( 1 para o comprimento da entrada e 3 para a distância). Adivinhe a posição do segundo símbolo b registre se ab . Continue incrementando t para os símbolos de entrada subsequentes. Aceite se t=0 (detectável por Z na parte superior) eab .

O bom disso é que deve ficar completamente claro como estender isso a poderes arbitrários.

Jeffrey Shallit
fonte
2
De fato, muito arrumado!
domotorp 21/01/19
11
Ah, muito melhor :-)
Michaël Cadilhac:
4

Apenas uma perspectiva diferente ("orientada para a gramática") para provar que o complemento de {wk} é CF para qualquer k fixo usando propriedades de fechamento.

Primeira nota que no complemento de {wk} sempre existe i tal que wiwi+1 . Focamos em w1w2 e começamos com uma gramática simples de CF que gera:

L={a00...0w1b00...0w2...000...0wk|wi|=n}={a0n1b0n(k1)1}

Por exemplo, para k=3 , temos L={ab0,a0b000,a00b00000,...} ,GL={Sab0|aX00,X0X00|0b0}

Em seguida, aplique o fechamento sob homomorfismo inverso e união :

Primeiro homomorfismo: φ(1)a,φ(0)b,φ(1)0,φ(0)0

Segundo homomorphism: φ(0)a,φ(1)b,φ(1)0,φ(0)0

L=φ1(L)φ1(L) ainda está livre de contexto

Aplique o fechamento sob turnos cíclicos em L para obter o conjunto de cadeias de comprimento kn não da forma wk :

L=Shift(L)={uuwk|u|=kn} .

Por fim, adicione o conjunto regular de strings cujo comprimento não é divisível por k para obter exatamente o complemento de {wk} :

L{{0,1}nnmodk0}={uuwk}

Marzio De Biasi
fonte