Non ho avuto il tempo di scrivere questo prima, ma ho trovato una risposta. Ecco cosa ho fatto:
Sia il originale . Costruiremo un nuovo , lo chiameremo ( sta per modificato).OPD APD AMM
Per trovare il complemento di , possiamo considerare gli stati finali come stati non finali e viceversa. È la stessa procedura utilizzata per gli automatismi finiti. Tuttavia, c'è una sottigliezza. Il problema principale è che nel PDA originale l'ingresso può portare a uno stato che non è uno stato finale ma potrebbe eseguire un e arrivare ad uno stato accettante . Lanciare gli stati come menzionato sopra, farebbe terminare in con l'input che sarebbe uno stato finale (facendo accettare a l'accettazione dell'input) anche se in seguito eseguirà un inOOwSϵ - m o v eS'MSwMϵ - m o v eS', uno stato non accettante. Pertanto, sia che accetteranno . Qualcosa di simile accade se era uno stato finale e uno stato non finale raggiungibile da attraverso una .OMwSS'Sϵ−move
Per ovviare a questo problema, dobbiamo assicurarci che tutti i movimenti avvengano prima di leggere il simbolo successivo. Cioè, entreremo in uno stato di lettura solo quando viene seguito un percorso di -moves e raggiungiamo uno stato che non ha -move disponibile. Chiamiamo questi ultimi stati come stati di lettura , poiché hanno bisogno di un vero simbolo per eseguire una nuova transizione.ϵϵϵ
Definisci gli stati di come tuple nella forma dove ( è l'insieme di stati del originale ) e .M<q,n>q∈QQPDAn∈{1,2,3,4}
Se in , lascia in se .δ(q,ϵ,X)=<q′,α>Oδ(<q,3>,ϵ,X)=<<q′,2>,α>Mq∈FO
Se in , lascia in se .δ(q,ϵ,X)=<q′,α>Oδ(<q,3>,ϵ,X)=<<q′,3>,α>Mq∉FO
Se in , lascia in .δ(q,ϵ,X)=<q′,α>Oδ(<q,2>,ϵ,X)=<<q′,2>,α>M
Se è in , inδ(q,ϵ,X)undefinedOδ(<q,2>,ϵ,X)=<<q,1>,X>M
Se è in , inδ(q,ϵ,X)undefinedOδ(<q,3>,ϵ,X)=<<q,4>,X>M
In quelle definizioni, lasciamo che gli stati della forma e consumino -moves imitando -moves di fino a quando non ce ne sono più. Quindi, esegui un -move in uno stato di lettura. Ora per gli stati di lettura,<q,2><q,3>ϵϵOϵ
- Se in , lascia in .δ(q,a,X)=<q′,α>Oδ(<q,1>,a,X)=δ(<q,4>,a,X)=<<q′,3>,α>M
Effettuando questa definizione, consumiamo un simbolo dell'input e passiamo a uno stato della forma per iniziare una nuova serie di -moves.<q,3>ϵ
Infine, fai in modo che gli stati della forma accettino gli stati di se . Inoltre, assicurarsi lo stato iniziale di se è lo stato iniziale di .<q,4>Mq∉FO<q0,3>Mq0O
Quello che abbiamo fatto è il seguente:
Crea 4 "piani" di stati (il secondo elemento della tupla negli stati di determina in quale piano siamo). Piano 3 imita Consente di spostare di eventualmente raggiungere uno stato di accettazione di . In tal caso, passiamo al secondo piano; altrimenti, rimaniamo al piano 3. Quando non ci sono più -moves da seguire di , definiamo -moves di per raggiungere uno stato di lettura. I piani 1 e 4 corrispondono agli stati di lettura. Se eravamo al piano 3, andiamo al piano 4. Se fossimo al piano 2, raggiungiamo il piano 1. Solo gli stati (gli stati che si trovano al piano 4) accettano gli stati diMϵOqOϵOϵM<q,4>M , purché non è uno stato accettante .qO
Per favore fatemi sapere se ho fatto un refuso a scrivere questo. Avrei potuto facilmente confondermi. Inoltre, il mio inglese non è molto buono, quindi sentiti libero di modificare e riformulare le cose meglio.