Comment puis-je convertir la machine Turing la langue reconnue en une grammaire illimitée?

19

Selon cet article de Wikipedia , les grammaires illimitées sont équivalentes aux machines de Turing. L'article note que je peux convertir n'importe quelle machine Turing en une grammaire illimitée, mais il montre uniquement comment convertir une grammaire en machine Turing.

Comment puis-je vraiment faire cela et convertir la machine Turing le langage reconnu en une grammaire sans restriction? J'ai essayé de remplacer les règles de transition par des règles de grammaire, mais une machine de Turing peut également avoir de nombreuses configurations d'états différentes ...L

Ava Petrofsky
la source

Réponses:

9

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 FQ 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}Q0QFQ

S#1QF#pour tous les .QFQF

De même, nous terminons lorsque nous «atteignons» l'état de départ dans la position correcte, à savoir sur le premier symbole:

#uneQ0#unepour tous .uneΣ

La traduction des transitions d'état réelles est simple:

uneQcQ  pour une,cΣ(une,Q,N)δ(c,Q)uneQbunecQ pour une,b,cΣ(b,Q,L)δ(c,Q)unebQcQb pour une,b,cΣ(une,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 = # .###=#

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Σ

Raphael
la source