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


12

È noto che il complemento di è privo di contesto. Ma per quanto riguarda il complemento di ?{ww∣w∈Σ∗}{www∣w∈Σ∗}


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|∧(x≠y∨y≠z)}{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|≡30∧u2|u|/3≠v|v|/3}L′pup/2L=L′

  • L⊆L′ : 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=xyz∈Lpxp≠ypu3p/2wvu2|u|/3=xpv|v|/3

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

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

|u|+|v|/3=3p/2+|w|/3−p/2=|w|/3+p,
pyu2|u|/3=xp≠yp=v|v|/3

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

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

  • L′⊆L : Invertire il processo precedente. Lascia . Scrivi . Quindi: Quindi e (poiché se è del formato , esso deve contenere quel per tutti ).w=uv∈L′p=2|u|/3
    p+|w|/3=2|u|/3+|uv|/3=|u|+|v|/3.
    wp=u2|u|/3≠v|v|/3=wp+|w|/3w∈Lwxxxwp=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+(b−a)+2a+2bLr={wr}L′={xyz:|x|=|y|=|z|∧(x≠y)}
— 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 .taabt21−3ba≠btt=0Za≠b

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}iwi≠wi+1w1≠w2

L={a00...0⏟w1b00...0⏟w2...000...0⏟wk∣|wi|=n}={a0n−1b0n(k−1)−1}

Ad esempio per , abbiamo ,k=3L={ab0,a0b000,a00b00000,...}GL={S→ab0|aX00,X→0X00|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 :L′knwk

L″=Shift(L′)={u∣u≠wk∧|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}n∣nmodk≠0}={u∣u≠wk}

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.