Come posso dimostrare che questa lingua non è senza contesto?


11

Ho la seguente lingua

{0i1j2k0ijk}

Sto cercando di determinare in quale classe di lingua Chomsky si adatta. Posso vedere come potrebbe essere realizzato usando una grammatica sensibile al contesto, quindi so che è almeno sensibile al contesto. Sembra che non sarebbe possibile fare con una grammatica senza contesto, ma sto avendo problemi a dimostrarlo.

Sembra passare il lemma del fork-pumping perché se è tutto inserito nella terza parte di una parola (la sezione con tutti i s). Potrebbe pompare e tutte le volte che vuoi e rimarrebbe nella lingua. Se sbaglio potresti dirmi perché, se ho ragione, penso ancora che questa lingua non sia senza contesto, quindi come potrei provarlo?uvwxy2vx


Non sono sicuro di come renderlo una prova formale, ma garantire i <= j <= k richiede contesto (il valore della variabile precedente).
Kevin,


@Raphael, ho letto quel post prima di questo e non sapevo come applicarlo al mio esempio a causa della sua astrattezza. Dato che la relazione di ciascun personaggio è> = il numero di caratteri precedenti, non riuscivo a vedere come dividere l'uxyzv nella parola per usare il lemma di Ogden. BlueMagister e jmad si sono espansi sull'altro post per chiarire il mio esempio.
justausr,

@Raphael Non sono d'accordo sul fatto che si tratti di una banale applicazione del caso generale. Scegliere quale metodo utilizzare e a quale esempio applicarlo non è così semplice.
Gilles 'SO-smetti di essere malvagio' il

Risposte:


7

Puoi forzare il pompaggio in alcuni punti, usando il lemma di Ogden , ad esempio segnando tutti gli 0.

Supponiamo che sia privo di contesto, quindi il lemma di Ogden ti dà un , lo dai che è nella lingua e "contrassegni" tutti gli 0. Allora qualsiasi fattorizzazione deve essere tale che esiste un in o . Puoi anche assumere e poiché e devono essere sottostringhe della tua lingua.w = 0 p 1 p 2 p w = u x y z v 0 x z x = a k z = b m x x z zp>0w=0p1p2pw=uxyzv0xzx=akz=bmxxzz

  1. Se allora ha più 0 di 1w = u x 2 y z 2 vz=0...0w=ux2yz2v

  2. Se e allora ha più 1 di 2.x=0..0z=1..1w=ux2yz2v

  3. Se e allora ha più 0 di 1.x=0..0z=2..2w=ux2yz2v

Quindi non è una parola della tua lingua. Pertanto, non è privo di contesto.ux2yz2v

Per altre tecniche, vedi la discussione: Come dimostrare che una lingua non è senza contesto?


È per la stessa lingua che ho? Sembra essere per il linguaggio simile in cui tutti gli 0 e gli 1 sono di uguale lunghezza. Questa lingua ha il numero di 2> = il numero di 1> = il numero di 0
justausr

1
Sì, lo è, ma usando uno qualsiasi dei lemmi di pompaggio, puoi scegliere la parola (e io ho scelto ): il lemma di Ogden dovrebbe funzionare per tutti. 0p1p2p
jmad

Non ho mai sentito parlare del lemma di Ogden, quindi dovrò esaminarlo. Avevo ragione affermando che fallisce il lemma del pompaggio?
justausr

@justausr nemmeno io, fino a poco tempo fa (e grazie alla discussione a cui ho fatto riferimento). E sì, avevi ragione: il lemma del pompaggio fa quasi la stessa cosa, ma non scegliere dove pompare lo rende inutile qui.
jmad

5

Il lemma del pompaggio dovrebbe risolvere il tuo problema relativo alla terza parte della parola; Si noti che quando si divide , qualsiasi combinazione di u v n w x n y è anche nel linguaggio, tra cui quando n = 0 . Prova questo.z=uvwxyuvnwxnyn=0

EDIT: Come afferma jmad , il Pumping Lemma è come un gioco:

  1. Il lemma del pompaggio ti dà una p
  2. Devi dare una parola della lingua di lunghezza almeno psp
  3. Il lemma di pompaggio lo riscrive in questo modo: con alcune condizioni ( | v x y |p e | v y |1 )s=uvxyz|vxy|p|vy|1
  4. Dai un numero intero n0
  5. Se non è in L , vinci, L non è privo di contesto.uvnxynzLL

Quindi quello che devi fare è dichiarare una parola, suddividere 3 in casi e mostrare che per ogni caso puoi trovare una tale che la parola risultante non sia nella lingua.n

Quando dividi , pensa a tutti i casi in cui v x y può cadere. Notate che se v x y non rientra nei 2, allora è facile pompare gli 0 e gli 1 finché non superano i 2 e quindi avete una parola che non è nella lingua. Il mio suggerimento è che, se v x y cade in 2 territori, puoi anche far scomparire v e y impostando n = 0 , quindi u v n x y n z = us=uvxyzvxyvxyvxyvyn=0 . Quindi eliminando un 2 potresti arrivare a una parola che non rientra nella lingua.uvnxynz=uxz


Stai dicendo di mettere tutto uvwxy nella sezione con 2?
justausr,

Se viene data la parola giusta. Elaborerò nella mia risposta.
Blue Magister,

Ecco, provalo adesso. Non sono sicuro che il mio lemma di pompaggio sia uguale al tuo lemma di pompaggio, quindi mi appello a Wikipedia .
Blue Magister,
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.