È il complemento di {www | ...} senza contesto?


12

È noto che il complemento di è privo di contesto. Ma per quanto riguarda il complemento di ?{wwwΣ}{wwwwΣ}


1
Ho scoperto che questo è il Teorema 4 in P. Dömösi, S. Horváth, M. Ito, L. Kászonyi, M. Katsura: linguaggi formali costituiti da parole primitive. link.springer.com/chapter/10.1007/3-540-57163-9_15
domotorp

Risposte:


11

Ancora CFL, credo, con un adattamento della dimostrazione classica. Ecco uno schizzo.

Considera , che è il complemento di , con le parole di lunghezza non mod rimosse.L={xyz:|x|=|y|=|z|(xyyz)}{www}03

Lascia . Chiaramente, è CFL, dal momento che si può intuire una posizione e considerare che finisce dopo. Mostriamo che .L={uv:|u|3|v|30u2|u|/3v|v|/3}Lpup/2L=L

  • LL : Sia . Supponiamo che ci sia una tale che . Quindi scrivi per i primi primi caratteri di , e per il resto. Naturalmente, . Che cos'è ? Primo: w=xyzLpxpypu3p/2wvu2|u|/3=xpv|v|/3

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

Quindi, in , questa è la posizione: o, in altre parole, posizione in . Questo dimostra che .w

|u|+|v|/3=3p/2+|w|/3p/2=|w|/3+p,
pyu2|u|/3=xpyp=v|v|/3

Se , allora lascia che sia i primi caratteri di , in modo che sia ; è il resto di . Quindi: quindi allo stesso modo, .ypzpu32(|w|/3+p)wu2|u|/3ypvw

|u|+|v|/3=2|w|/3+p
v|v|/3=zp

  • LL : Invertire il processo precedente. Lascia . Scrivi . Quindi: Quindi e (poiché se è del formato , esso deve contenere quel per tutti ).w=uvLp=2|u|/3
    p+|w|/3=2|u|/3+|uv|/3=|u|+|v|/3.
    wp=u2|u|/3v|v|/3=wp+|w|/3wLwxxxwp=wp+|w|/3p

2
Wow, incredibile! Non pretendo di aver seguito ogni dettaglio del tuo argomento, come se non vedessi cosa intendi per l'ultima riga ('Per l'ultimo bit'), o perché non separi il caso quando , ma la soluzione alla fine funziona. Riassumo il trucco principale come . Il trucco simile funziona anche per il complemento di qualsiasi . Mi chiedo se è privo di contesto o meno. 3 a + 3 b = 2 a + ( b - a ) + 2 a + 2 b L r = { w r } L = { x y z : | x | = | y | = | z | ( x y )|w|/3<p/23a+3b=2a+(ba)+2a+2bLr={wr}L={xyz:|x|=|y|=|z|(xy)}
domotorp,

1
@domotorp: Saluti! Va bene, "l'ultimo pezzo" non era necessario, grazie! Per quanto riguarda "il caso in cui ", non sono sicuro di dove lo intendi. Ho dimenticato qualcosa? Per quanto riguarda la tua , mi chiedevo lo stesso facendo questa "prova"! Non sono ancora sicuro :)L |w|/3<p/2L
Michaël Cadilhac,

2
Oh, mio ​​cattivo, regge sempre! p/2|w|/3
domotorp,

Probabilmente non è un problema, ma può essere strano, quindi dovresti gestire i casi Quando è dispari. | u | = 3 p / 2 ( ? ) Pp|u|=3p/2(?)p
Marzio De Biasi,

@MarzioDeBiasi: Sì, è proprio per questo che è uno schizzo :-)
Michaël Cadilhac

10

Ecco il modo in cui penso a risolvere questo problema, con un PDA. Secondo me, è intuitivamente più chiaro.

xwww|x|0ab|w|

Usiamo il solito trucco di usare lo stack per mantenere un intero avendo un nuovo simbolo "bottom-of-stack" , memorizzando il valore assolutocome numero di contatori nello stack e sgn ( ) in base allo stato del PDA. In questo modo possiamo aumentare o diminuire eseguendo l'operazione appropriata.tZ|t|tt

L'obiettivo è utilizzare il non determinismo per indovinare le posizioni dei due simboli che si stanno confrontando e utilizzare lo stack per registrare , dove è la distanza tra questi due simboli. t:=|x|3dd

Realizziamo ciò come segue: incrementa per ogni simbolo visto fino a quando non viene scelto il primo simbolo indovinato e registra nello stato. Per ogni successivo simbolo di input, fino a quando decidi di aver visto , diminuisci di ( per la lunghezza di input e per la distanza). Indovina la posizione del secondo simbolo e registra se . Continuare a incrementare per i simboli di input successivi. Accetta se (rilevabile da in alto) e .taabt213babtt=0Zab

La cosa bella di questo è che dovrebbe essere completamente chiaro come estenderlo a poteri arbitrari.


2
Anzi, molto pulito!
domotorp,

1
Ah, davvero molto più bello :-)
Michaël Cadilhac

4

Solo una prospettiva diversa ("orientata alla grammatica") per dimostrare che il complemento di è CF per qualsiasi fisso che usa le proprietà di chiusura.{wk}k

Prima nota che nel complemento di c'è sempre tale che . Ci concentriamo su e iniziamo con una semplice grammatica CF che genera:{wk}iwiwi+1w1w2

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

Ad esempio per , abbiamo ,k=3L={ab0,a0b000,a00b00000,...}GL={Sab0|aX00,X0X00|0b0}

Quindi applicare la chiusura sotto omomorfismo inverso e unione :

Primo omomorfismo:φ(1)a,φ(0)b,φ(1)0,φ(0)0

Secondo omomorfismo:φ(0)a,φ(1)b,φ(1)0,φ(0)0

L=φ1(L)φ1(L) è ancora libero dal contesto

Applicare la chiusura con turni ciclici su per ottenere l'insieme di stringhe di lunghezza non della forma :Lknwk

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

Infine aggiungi l'insieme regolare di stringhe la cui lunghezza non è divisibile per per ottenere esattamente il complemento di :k{wk}

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.