Nous encodons le contenu de la bande de la machine Turing sous des formes sententielles; un ensemble spécial de non-terminaux encode l'état actuel. Il ne peut y en avoir qu'un sous la forme sententielle à tout moment, placé à droite du symbole sur lequel la MT pointe actuellement.
La deuxième idée cruciale est que nous devons inverser le processus: les MT prennent le mot en entrée et le convertissent en ou 0 , ou ils ne se terminent pas. La grammaire, cependant, doit générer le mot. Heureusement, les grammaires sont intrinsèquement non déterministes, nous pouvons donc simplement le laisser «deviner» d'où vient le 1 acceptant ; tous les mots qui font accepter la MT peuvent alors être générés.101
Soit l'ensemble des états non terminaux; wlog laisse Q 0 être l'état de départ non terminal et Q F ⊆ Q l'ensemble des états d'acceptation non terminaux. Tout d'abord, nous avons besoin de règles de démarrage qui génèrent toutes les configurations d'acceptation possibles:Q ={ Q0, … , Qk}Q0QF⊆ Q
S→ # 1 QF#pour tous les .QF∈ QF
De même, nous terminons lorsque nous «atteignons» l'état de départ dans la position correcte, à savoir sur le premier symbole:
# a Q0→ # apour tous .un ∈ Σ
La traduction des transitions d'état réelles est simple:
un Qa Q ba b Q→ c Q′ pour a , c ∈ Σ ∧ ( a , Q , N) ∈ δ( c , Q′)→ a c Q′ pour a , b , c ∈ Σ ∧ ( b , Q , L ) ∈ δ( c , Q′)→ c Q′b pour a , b , c ∈ Σ ∧ ( a , Q , R ) ∈ δ( c , Q′)
Il y a quelques problèmes techniques à régler; par exemple, vous devez vous débarrasser des bornes à la fin. Cela peut être fait en générant deux terminaux non spéciaux au lieu de terminer, en les échangeant aux extrémités, puis en supprimant le # avec eux. En outre, il faut créer plus de # sur demande; cela nécessite un piratage des règles avec d = # .###ré= #
De plus, la construction devient un peu plus compliquée si le TM utilise des symboles non entrés. Dans ce cas, les règles de terminaison peuvent être erronées: s'il y a des symboles de non-entrée quelque part sur la bande, nous n'avons pas généré un mot correct. Cela peut être corrigé de manière similaire à la suppression de : engendre un non-terminal spécial de Q 0 qui est échangé vers la droite et supprimé uniquement si tous les symboles sont de Σ .#Q0Σ