Codifichiamo il contenuto del nastro della macchina Turing in forme sentenziali; un insieme speciale di non terminali codifica lo stato corrente. Ce ne può essere solo uno nella forma sentenziale in qualsiasi momento, posizionato a destra del simbolo a cui la TM sta puntando.
La seconda idea cruciale è che dobbiamo invertire il processo: le TM prendono la parola come input e la convertono in o 0 , oppure non terminano. La grammatica, tuttavia, deve generare la parola. Fortunatamente, le grammatiche sono intrinsecamente non deterministiche, quindi possiamo solo lasciarlo "indovinare" da dove proviene il 1 accettante ; tutte le parole che fanno accettare la TM possono quindi essere generate.101
Sia l'insieme di stato-nonterminali; wlog lascia che Q 0 sia lo stato-iniziale-non-terminale e Q F ⊆ Q l'insieme degli stati-accettazione-non-terminale. Innanzitutto, abbiamo bisogno di regole di partenza che generino tutte le possibili configurazioni di accettazione:Q ={ Q0, ... , QK}Q0QF⊆ Q
S→#1Qf#per tutti .Qf∈QF
Allo stesso modo, terminiamo quando "raggiungiamo" lo stato iniziale nella posizione corretta, vale a dire sul primo simbolo:
#aQ0→#aa∈Σ
La traduzione delle attuali transizioni di stato è semplice:
aQaQbabQ→cQ′ for a,c∈Σ∧(a,Q,N)∈δ(c,Q′)→acQ′ for a,b,c∈Σ∧(b,Q,L)∈δ(c,Q′)→cQ′b for a,b,c∈Σ∧(a,Q,R)∈δ(c,Q′)
###d=#
#Q0Σ