La lingua di coppie di parole di uguale lunghezza la cui distanza di percussione è 2 o maggiore è senza contesto?


26

Il seguente contesto linguistico è gratuito?

L={uxvyu,v,x,y{0,1}+,|u|=|v|,uv,|x|=|y|,xy}

Come sottolineato da sdcvvc, una parola in questa lingua può anche essere descritta come la concatenazione di due parole della stessa lunghezza la cui distanza di battuta è 2 o maggiore.

Penso che non sia privo di contesto ma sto facendo fatica a dimostrarlo. Ho provato a intersecare questa lingua con una lingua normale (come per esempio), quindi uso il lemma di pompaggio e \ o gli omomorfismi, ma ho sempre una lingua troppo complicata per caratterizzare e scrivere giù. 0101


Hai provato a pompare la stringa 0u1x1u0x ?
Pål GD,

Sì, ma non sono riuscito a pompare questa stringa fuori dal linguaggio (ciò non significa che non sia possibile, solo che non sono riuscito a farlo).
Robert777,

1
@ PålGD, probabilmente avresti bisogno di un modo per "segnare" i pezzi, come 1u01x01u01x0
vonbrand

8
Questa lingua può essere scritta come dove d è la distanza di Hamming. Nota che se sostituiamo 2 per 1, è privo di contesto ( cs.stackexchange.com/questions/307 ) ma il trucco usato non funzionerà. Personalmente scommetto che non è contestuale. {uv:|u|=|v|,d(u,v)2}d
sdcvvc,

1
@sdcvvc: hai ragione, una partiziona in u x in modo che uno dei bit differenti sia in u e l'altro in x . Sono corretto. uuxux
András Salamon,

Risposte:


7

Nota [30-07-2019] La prova è sbagliata ... la domanda è più complicata di quanto sembri.

Dopo un tentativo fallito qui è un'altra idea.

Se interseciamo L con la lingua normale Lreg=0101010 otteniamo un linguaggio CF.

Forse possiamo avere più fortuna se usiamo Lreg=010101010 (una stringa con esattamente 4 1s).

Sia L1=LLreg , informalmente wL1 se può essere diviso in due metà, in modo tale che una metà contenga esattamente {0,1,3,4} 1s o entrambe le metà contengano due 1 s ma le loro posizioni non corrispondono.

Supponi che L1 sia CF e che G sia la sua grammatica nella forma normale di Chomsky, e lascia

w=uv=0a10b10c10d10eL1

Abbiamo |u|=|v|(lunghezza pari) e d(u,v)2

Se limitiamo la nostra attenzione ai modi in cui i quattro 1 di w possono essere generati, abbiamo i tre casi mostrati nella parte superiore della figura 1. La parte centrale della figura 1 mostra il primo caso (ma gli altri sono simili) .

inserisci qui la descrizione dell'immagine
Figura 1 (l'immagine completa può essere scaricata qui )

Se prendiamo a=e,c=2a e b,da vediamo che gli zeri tra le due coppie di 1s devono essere indipendentemente pompabili (nodi rossi in figura): in particolare, per abbastanza grande ba , otteniamo un nodo non terminale duplicato su una sottostruttura interna (nodo X in figura 2) o una sottosequenza ripetuta nel percorso verso il primo o il secondo 1 (nodo Y in figura 2). Si noti che la figura 2 è un po 'semplificata: ci possono essere più nodi non terminali tra i due X s, e anche tra i due Ys ( Y...Zi...Y ma conZi che produce solo 0s a destra del primo 1).

inserisci qui la descrizione dell'immagine
figura 2

Quindi possiamo correggere un arbitrario a=e=k,c=2a , quindi selezionare b abbastanza grande da ottenere un nodo pompabile in modo indipendente sulla sequenza di zeri tra il primo e il secondo 1 . Per la sequenza di zeri tra il terzo e il quarto 1, possiamo scegliere d=b!+b .
Ma 0b è pompabile in modo indipendente quindi esiste una pb sottostringa pompabile y , ovvero tale che b=xyz,|y|=p,|x|0,|z|0 exyiz=b!+b . La stringa che otteniamo è:

w=0k10b!+b102k10b!+b10k

ma wL1 . Quindi L1 non è CF e infine L non è CF.

Se la prova è corretta (???) può essere estesa a tutte le lingue Lk={uv:|u|=|v|,d(u,v)k},k2


Temo che la generosità scadrà prima che possiamo effettivamente verificare questa prova, quindi a meno che non emergano informazioni drastiche nelle prossime 4 ore, questo ottiene i punti per essere il miglior tentativo finora.
jmite,

@jmite: non preoccuparti, ci sono alte probabilità che si tratti di un tentativo sbagliato come quello precedente (che è durato circa 30 minuti prima di scoprire un errore banale) :-) :-)
Vor

Perché la distinzione caso? I rami nella grammatica non hanno alcuna relazione con le metà della parola. Ma penso che non abbia importanza; se la dimostrazione funziona, non è necessario distinguere questo caso. Guardare una grammatica presunta e usare la prova del lemma di pompaggio invece del lemma stesso è un bel trucco (uno dovrebbe farlo più spesso). Ho una (vera) preoccupazione: se pompi una sottostringa di , ottieni 0 b + p ( i - 1 ) ; Non vedo come arrivi a b + b ! . Non pensare che ciò possa danneggiare la prova, ma controlla meglio. Inoltre, potresti voler raddrizzare qualche notazione (e errori di battitura).0b0b+p(i1)b+b!
Raffaello

1
@Raphael: grazie per i commenti. Forse mi sbaglio, ma se scegli come lunghezza target quindi per ogni lunghezza di pompaggio p , la stringa 0 b può essere scomposta in 0 x y z , ( | x y z | = b , | y | = p b ) e può essere pompata a x y i z = b + b ! , anzi nel tuo esempio p sicuramente divide b !b+b!p0b0xyz,(|xyz|=b,|y|=pb)xyiz=b+b!b!, quindi c'è un per cui p ( i - 1 ) = b ! , ma la lunghezza della stringa originale è b , quindi la lunghezza totale pompata è | x y ( i - 1 ) z | = b + b ! . Lo ricordo da un paio di esercizi che usano il lemma di Ogden ... ora li ricontrollerò. (i1)p(i1)=b!b|xy(i1)z|=b+b!
Vor,

@Raphael: ... non ha trovato l'ovunque la prova, ma solo un articolo di Zach Tomaszewski che dimostra che il complemento di è CF (vedi domanda ), quindi forse si tratta di un nuovo risultato (anche se semplice); e un teorema di tipo lemma di pompaggio può essere derivato per le lingue con stringhe che contengono un numero finito di un particolare simbolo e sottostringhe di lunghezza arbitraria tra di loro. Ldup={ww}
Vor,

2

Dopo 2 tentativi falliti, che sono stati confutati da @Hendrik Jan (grazie), eccone un altro, che non ha più successo. @Vor ha trovato un esempio di un linguaggio CF deterministico in cui si applica la stessa costruzione, se corretta. Ciò ha permesso di identificare un errore nell'ancoraggio della stringa nell'applicazione del lemma. Il lemma stesso non sembra essere in colpa. Questa è chiaramente una costruzione troppo semplicistica. Vedi maggiori dettagli nei commenti.y


La lingua non è privo di contesto.L={uxvyu,v,x,y{0,1}{ϵ} , u∣=∣v , uv , x∣=∣y , xy }

È utile tenere presente la caratterizzazione dove d è la distanza di Hamming, proposta da @sdcvvc. Ciò a cui bisogna pensare sono 2 posizioni selezionate in ciascuna mezza stringa in modo tale che i simboli corrispondenti differiscano.L={uv:|u|=|v|,d(u,v)2}

Quindi consideri una stringa tale che i < j e i + j siano pari. È chiaramente nella lingua L, tagliando u e x ovunque tra i due 1. Vogliamo pompare quella stringa nella prima parte tra le 1, in modo che diventi 10 j 10 j che non dovrebbe essere nella lingua.10i10ji<ji+jux10j10j

Per prima cosa proviamo a usare il lemma di Ogden , che è come il lemma di pompaggio, ma si applica a o più simboli distinti che sono segnati sulla stringa, p essendo la lunghezza di pompaggio per i simboli contrassegnati (ma il lemma può pompare di più perché può anche pompare simboli non contrassegnati). La lunghezza marcata di pompaggio p dipende solo dalla lingua. Questo tentativo fallirà, ma il fallimento sarà un suggerimento.ppp

Possiamo quindi scegliere e contrassegnare i simboli sulla prima sequenza di i 0. Sappiamo che nessuno dei due 1 sarà nella pompa, perché può pompare una volta (esponente 0) invece di pompare. E pompare i 1 ci farebbe uscire dalla lingua.i=pi

Tuttavia, potremmo pompare su entrambi i lati del secondo 1 più velocemente o addirittura più velocemente sul lato destro, in modo che il secondo 1 non attraversi mai la metà della stringa. Anche il lemma di Ogden non fissa un limite superiore alla dimensione di ciò che viene pompato, quindi non è possibile organizzare il pompaggio per ottenere l'1 più a destra esattamente attraverso il centro della stringa.

Usiamo una versione modificata del lemma, qui chiamata Lemma di Nash, che può gestire queste difficoltà.

Abbiamo prima bisogno di una definizione (probabilmente ha un altro nome in letteratura, ma non so quale - l'aiuto è il benvenuto). Si dice che una stringa sia una cancellazione di una stringa v se viene ottenuta da v cancellando i simboli in v . Noteremo u v .uvvvuv

Lemma di Nash: se è un linguaggio privo di contesto, allora esistono due numeri p > 0 e q > 0 tali che per qualsiasi stringa w di lunghezza almeno p in L , e ogni modo di "segnare" p o più del le posizioni in w , w possono essere scritte come w = u x y z v con stringa u , x , y , z , v , tale cheLp>0q>0wpLpwww=uxyzvuxyzv

  1. ha almeno una posizione contrassegnata,xz
  2. xyz has at most p marked positions, and
  3. there are 3 strings x^, y^, z^ such that
    1. x^x, y^y, z^z,
    2. 1≤∣x^z^∣≤q, 1≤∣y^∣≤q, and
    3. uxjx^iy^z^izjv is in L for every i0 and for every j0.

Proof: Similar to the proof of Ogden's lemma, but the subtrees corresponding to the strings y and xz are pruned so that they do not contain any path with twice the same non-terminal (except for the roots of these two subtrees). This necessarily limits the size of the generated strings x^z^ and y^ by a constant q. The strings xj and zj, for j0, corresponding to an unpruned version of the tree, are used mainly with j=1 to simplify the accounting when the lemma is applied.

We modify the above proof attempt by marking the p leftmost symbols 0, but they are followed by 2q symbols 0 to make sure that we pump in the left part of the string, between the two 1's. That make a total of i=p+2q 0's between the 1's (actually i=p+q would be sufficient, since the rightmost 1 cannot be in z^, which would allow to simply remove it).

What is left is to have chosen j so that we can pump exactly the right number of 0's so that the two sequences are equal. But so far, the only constraint on j is to be greater than i. And we also know that the number of 0's that are pumped at each pumping is between 1 and q. So let h be product of the first q integers. We choose j=i+h.

Hence, since the pumping increment d - whatever it is - is in [1,q], it divides h. Let k be the quotient. If we pump exactly k times, we get a string 10j10j which is not in the language. Hence L is not context-free.

.

I think that I shall never see
A string lovely as a tree.
For if it does not have a parse,
The string is naught but a farce


Note however that the pass over the second half reads the stack in reverse. That seems to mean that the two positions are in the same position in both halves, but in reverse?
Hendrik Jan

you are correct ... I goofed ... now I know what was nagging me at the back of my head.
babou

I recognized the argument (because I could not make it work when I tried myself).
Hendrik Jan

Should I leave this wrong answer ? It is somehow helping, I think, as it make the problem suspiciously similar to aibjckaibjck. The problem is that rules of the site are not intended to encourage wrong results for discussion ( I mean I do not enjoy downvotes more than anyone else).
babou

@HendrikJan Did I goof again ? (BTW, thanks for making it a discussion)
babou

-1

by this question I think L is context-free and generated by the following grammar SAXBYBYAXA00A00A11A01A1B10B00B11B01B1X00X00X11X01X1Y10Y00Y11Y01Y1


4
This is incorrect; you cannot guard that length of AX is the same as BY. For example, your grammar generates S -> AXBY -> A011 -> 0A1011 -> 001011 which is not in the original language. Also, your symbols A and X generate the same language, same for B and Y; they can be merged.
sdcvvc
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.