Come faccio a dimostrare se un PDA accetta una stringa


8

Come faccio a dimostrare che il problema di decidere se un PDA accetta una stringa del modulo {w!w|w{0,1}*} è indecidibile?

Ho cercato di ridurre questo problema a un altro indecidibile, ad esempio se due grammatiche senza contesto accettano la stessa lingua. Tuttavia, non sono sicuro di come usarlo come subroutine.

Risposte:


12

Ecco il mio approccio: mostrerò che se riesci a decidere il tuo problema, allora puoi decidere il problema di corrispondenza (PCP) di Post , che è noto per non essere decidibile.

Ricorda, PCP è un problema decisionale che chiede se in un set di 2-tuples P={(X1,y1),...,(Xn,yn)} puoi costruire una sequenza (incl. ripetizione) tale che il concatenato Xiose concatenati yios di questa sequenza formano la stessa parola. Si noti che l'alfabeto deve contenere almeno 2 caratteri.

Quindi, lascia Pessere un'istanza del PCP. Considera la seguente grammatica senza contesto, in cui abbiamo introdotto un nuovo simbolo terminaletio per il io-th element in P. La grammatica ha le seguenti regole:

SX!YXX1X't1|X2X't2|XnX'tnX'X1X't1|X2X't2|XnX'tn|εYy1Yt1|y2Yt2|ynYtn|ε
(La variabile X' è lì solo per escludere S!).

Naturalmente, data la grammatica, possiamo trovare un PDA corrispondente che accetta la stessa lingua della grammatica. Quindi, costruisci il PDA corrispondente e quindi utilizza l'algoritmo ipotetico per il tuo problema per determinare se questo PDA accetta qualsiasi parola del modulou!v (vale a dire, se si può derivare qualsiasi parola del modulo u!vda questa grammatica). Mostrerò come utilizzare queste informazioni per risolvere l'istanza PCPP.

Supponiamo ora che u!vè una parola in questa grammatica. La parolau ha due parti, il suffisso, costituito da tioterminali e il resto chiamato prefisso. Lo stesso vale perv. abbiamou=vse e solo se i loro prefissi e suffissi coincidono. I suffissi coincidono solo se abbiamo usato la stessa sequenza di tuple daP per costruire le parole u e v. I prefissi diu e v coincidono se la concatenazione di Xios e yios (basato sulla sequenza inversa di tuple fornita da tios) è lo stesso. Quindiu=v se e solo se esiste una soluzione per l'istanza PCP P.

Allo stesso modo, se esiste una soluzione per l'istanza PCP P, quindi dalla soluzione è facile costruire una parola del modulo u!v che è derivabile da questa grammatica.

Ne segue l'istanza PCP P ha una soluzione se e solo se questa grammatica contiene una parola del modulo u!v. Se esistesse un algoritmo per decidere il tuo problema, potremmo usarlo per risolvere PCP. Ma ovviamente il PCP è noto per essere indecidibile, quindi anche il tuo problema è indecidibile.


1
Bello! Bene, decisamente più semplice della mia soluzione. +1
Hendrik Jan

1
Trovo difficile seguire il flusso di questa risposta. Perché discutete dell'esistenza di PDA / grammatica nel terzo paragrafo? Se ho letto correttamente, si desidera mappare le istanze di PCP sulla grammatica, riducendo così la questione se il PCP sia decidibile. A tal fine, devi anche mostrare il contrario dell'ultimo paragrafo, vale a dire che se no u!uè accettato, il PCP non ha soluzione. (Bel trucco con iltio, a proposito.)
Raffaello

@Raphael, ho modificato la risposta per rispondere al tuo commento. Aspetti positivi - grazie!
DW

5

L'approccio potrebbe essere il seguente. Prova a creare un linguaggio privo di contesto (= PDA) che codifichi i passaggi di calcolo di una TM, in modo tale che il calcolo completo abbia esito positivo se esiste una parola del modulo che descrivi.

Per prima cosa devi codificare configurazioni separate: contenuto del nastro + stato + testa di posizione (lo avrai visto per equivalenza grammaticale). Un linguaggio senza contesto può codificare un singolo passaggioCC' di un calcolo a condizione che tu usi l'immagine speculare C#m(C'), dove m(C)indica l'immagine speculare (inversione) di $$ C $. (Sono sciatto qui: potrebbe essere necessario distinguere la configurazione e la sua descrizione.)

Ora considera la lingua di passaggi separati, concatenati con la lingua delle configurazioni duplicate: C0#C1#m(C2)#C3#m(C4)#...C2n-1#m(C2n)#Cf! C1'#m(C1')#C2'#m(C2')#...Cn+1'#m(Cn+1') con per ogni K, C2K-1(C2K). Questo è senza contesto, inoltre il codiceC0 come iniziale e Cf come configurazioni finali.

Ora la prima parte assicura che abbiamo passi consecutivi, la seconda parte che le configurazioni successive sono uguali. Se entrambe le parti corrispondono, abbiamo un calcolo. Che non possiamo decidere.

Questa è l'idea. Potrei avere degli indici sbagliati e l'intera sequenza deve essere codificata in binario, ma questo può essere risolto.


Okay ho capito. Tuttavia, la parte "Adesso considera il linguaggio dei passaggi separati, concatenato con il linguaggio delle configurazioni duplicate ..." potrebbe trarre vantaggio da ulteriori spiegazioni. Ad esempio, è possibile utilizzare gli indici corretti. Comunque, è una bella idea.
A.Schulz,
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.