Machine de Turing à deux états pour l'appariement des parenthèses

9

Au collège, nous avons appris la théorie du calcul en général et les machines de Turing plus spécifiquement. L'un des grands résultats théoriques est qu'au prix d'un alphabet potentiellement grand (symboles), vous pouvez réduire le nombre d'états à seulement 2.

Je cherchais des exemples de différentes machines de Turing et un exemple courant présenté est le matcher / vérificateur de parenthèses. Essentiellement, il vérifie si une chaîne de parenthèses, par exemple, (()()()))()()()est équilibrée (l'exemple précédent retournerait 0 pour asymétrique).

Essayez comme je peux, je ne peux obtenir que ceci soit une machine à trois états. J'aimerais savoir si quelqu'un peut réduire cela au minimum théorique de 2 et quelle était son approche / ses états / symboles!

Juste pour clarifier, les parenthèses sont "prises en sandwich" entre la bande vierge, donc dans l'exemple ci-dessus - - - - - - - (()()()))()()() - - - - - - -serait l'entrée sur la bande. L'alphabet comprendrait (, ), 1, 0, -et l' *halt*Etat ne compte pas comme un état.

Pour référence, l'approche à trois états que j'ai est la suivante: Description des états:

 State s1: Looks for Closing parenthesis

 State s2: Looks for Open parenthesis

 State s3: Checks the tape to ensure everything is matched

 Symbols: ),(,X

Transitions répertoriées comme:

Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0  -
Action: s1 -  s3    -  r

//Transitions of TM
Action: s1 (  s1  (   l
Action: s1 )  s2  X  r
Action: s1 X  s1  X  l
Action: s2 ( s1 X  l
Action: s2 X  s2 X r
Action: s3 (  *halt* 0 -
Action: s3 X  s3     X r
Action: s3 -  *halt* 1 -

Pardonnez la manière informelle d'écrire tout cela. J'apprends toujours les constructions théoriques derrière cela.

Quatre amusants
la source
Sommes-nous autorisés à utiliser un alphabet plus grand?
Raphael
@Raphael Selon le résultat théorique, on peut échanger des états pour l'alphabet et vice versa. Donc, en réduisant les états à deux, vous devrez probablement utiliser un alphabet plus grand. Alors oui, la réponse courte est que l'alphabet peut être aussi grand que souhaité
Four_FUN
Je pense que, dans un TM à deux bandes, cela peut être fait sans symboles supplémentaires et.
Karolis Juodelė
@Four_FUN êtes-vous du MIT?

Réponses:

8

Juste un recueil de "code source" de la réponse de Raphaël: c'est une version de travail qui utilise la même astuce (sur l'état q1) et a l'alphabet de la bande:
_ ( ) [ { / \ (où est le symbole vierge initial)_

q0:  _ -> accept  // accept on empty string and on balanced parenthesis
     ( -> {,R,q1  // mark the first open "(" with "{" and goto q1
     ) -> reject  // reject if found unbalanced ")"
     \ -> /,L,q0  // go left
     / -> \,R,q0  // go right

q1:  ( -> [,R,q1  // replace "(" with "[" and continue ...
     ) -> /,L,q1  // ... until first ")", replace it with "/" and goto left
     [ -> \,R,q1  // found matching "(" bracket, goto right and search for another ")"
     _ -> reject  // no ")" found for the first "{", reject
     { -> \,R,q0  // this must be the last match, goto q0 and check if it is true
     \ -> /,L,q1  // go left
     / -> \,R,q1  // go right

Vous pouvez le voir au travail en utilisant un simulateur en ligne de machine Turing ; le code source est:

0 _ Y r halt
0 ( { r 1
0 ) N r halt
0 \ / l 0
0 / \ r 0
1 ( [ r 1
1 ) / l 1
1 [ \ r 1
1 _ N r halt
1 { \ r 0
1 \ / l 1
1 / \ r 1

Une dernière note: si vous voulez voir comment cette technique peut être poussée à la limite, lisez (et essayez de comprendre :-) la construction de la machine Universal Turing avec 2 états et 18 symboles par Y. Rogozhin dans "Small universal Turing" Machines"

Vor
la source
N'avons-nous pas décidé que les réponses ne présentant que du code source ne sont pas bonnes pour l' informatique ? ;)
Raphael
1
@Raphael: Je suis d'accord avec vous, mais le mien peut être vu comme un addendum au vôtre (cela semble bien, même si je n'ai pas vérifié les détails). Je vais ajouter une note à ce sujet.
Vor
1
@Raphael: Je l'ai codé juste pour le plaisir en essayant de minimiser les symboles de la bande, et cela "semble" :-) fonctionner, alors j'ai décidé de le poster.
Vor
@Vor. Merci beaucoup pour votre contribution supplémentaire à ce problème. Tout cela me dit que j'ai besoin de plus de pratique dans ce domaine. Merci d'avoir posté votre code source malgré tout, même si la théorie était ce que je recherchais.
Four_FUN
1
@Four_FUN: le Rogozhin Universal TM (2,18) est une machine de Turing standard (c'est-à-dire en dehors de l'entrée, sa bande initiale ne contient que des symboles vierges) qui simule un système arbitraire à 2 étiquettes (qui est un modèle universel). Le symbole à 2 états 3 est une machine faiblement de Turing (la bande initiale doit être remplie d'une séquence infinie d'un motif), et l'universalité est "atteinte" en simulant la règle 110 des automates cellulaires (qui s'est avérée être Turing complète ). Il y a une preuve (prétendue?) Qu'une TM standard (2,3) ne peut pas être complète de Turing.
Vor
7

Réponse stupide: votre résultat promet qu'il y a un machine de Turing universelle à deux états. Construisez n'importe quelle MT pour le langage Dyck, calculez son index et codez-le en dur dans la machine universelle.

{#,(,),x}a^a

  • q0

    )aa^)x^
    )#x^q1

    (^(^x
    )^# première, boucle / reject¹ .

  • q1(^+x^#x^


  1. x
Raphael
la source
Si cela ne vous dérange pas de me demander, comment ma solution promet-elle exactement une MT universelle avec deux états? (solution très intelligente btw. merci pour votre contribution)
Four_FUN
1
@Four_FUN: parce que vous dites dans votre question: "... L'un des grands résultats théoriques est qu'au prix d'un alphabet potentiellement grand (symboles), vous pouvez réduire le nombre d'états à seulement 2 ..." . .. vous pouvez donc également choisir une machine de Turing universelle arbitraire et réduire le nombre d'états à seulement 2. Et si vous faites des expériences, vous vous rendrez également compte qu'il n'est pas difficile de faire une procédure automatique qui convertit une MT arbitraire en équivalent TM à 2 états (si vous ne vous souciez pas de la minimisation du nombre de symboles de l'alphabet).
Vor