Les définitions des machines de Turing indiquent toujours explicitement que le symbole vide ne fait pas partie de l'alphabet saisi.
Je me demande ce qui ne va pas quand vous le ferez partie de l'alphabet d'entrée, car effectivement le symbole vide semble déjà faire partie de l'entrée.
Pour expliquer que «semble» dans la dernière phrase, considérez ce qui suit.
Dans la configuration par défaut, un nombre infini de symboles vierges apparaissent à droite de l'entrée. Lorsque la tête de bande se déplace sur le premier symbole vierge, le calcul peut simplement continuer, car il n'a pas besoin d'être un état d'acceptation ou de rejet.
Supposons maintenant que le calcul écrive ensuite les symboles de l'alphabet d'entrée à droite de ce premier symbole vierge, puis revient à la position la plus à gauche tout en revenant à l'état de départ. Il recommencerait alors avec une bande différente. Effectivement, cela commence maintenant par une entrée différente, où il y a des symboles d'entrée à droite du blanc qui n'étaient pas là auparavant. L'entrée semble inclure efficacement le symbole vierge. Le comportement ultérieur de la machine pourrait également être différent: après avoir rencontré à nouveau le flan, il rencontrera maintenant différents symboles à droite.
En supposant que ce scénario soit en effet possible, pourquoi ne considéreriez-vous pas la partie symbole vierge de l'alphabet d'entrée et pourquoi ne permettriez-vous pas de l'inclure comme partie de l'entrée «initiale»?
C'est peut-être juste un moyen de définir l'entrée de telle sorte qu'elle ne soit pas toujours infinie?
la source
Réponses:
La raison principale est qu'il permet à la machine de détecter la fin de son entrée: c'est (le caractère avant) le premier blanc. Si vous avez autorisé des blancs dans l'entrée, la machine ne pourrait jamais savoir si elle pourrait trouver plus d'entrée en balayant plus à droite. Bien sûr, vous pouvez résoudre ce problème en ayant un caractère spécial "fin d'entrée", mais vous devez alors insister sur le fait que cela ne peut pas apparaître dans l'entrée, de sorte que vous venez de déplacer le problème d'un niveau plus profond.
Cela rend également les conditions initiales beaucoup plus faciles à spécifier: l'entrée est la section non vierge de la bande initiale, qui doit être finie et contiguë. Et si vous voulez qu'un caractère vide fasse partie de l'alphabet saisi, vous pouvez toujours ajouter un caractère supplémentaire (appelez-le "espace" ou quelque chose) et faire en sorte que la machine se comporte comme vous le souhaitez lorsqu'elle le voit.
la source
Vous pouvez définir le symbole vierge pour faire partie de l'alphabet. Le problème est que si une machine de Turing avec l'entrée b010010b (où b signifie blanc ) ne lit jamais au-delà du deuxième b, alors la machine se comportera exactement de la même manière sur toutes les entrées commençant par b010010b.
Ces machines de Turing sont appelées machines de Turing de préfixe , et elles sont très utiles pour prouver certains théorèmes sur la complexité de Kolmogorov.
la source
Réponse très courte: l' alphabet de la bande est l'ensemble des symboles qui peuvent apparaître sur la bande, et il comprend le symbole vierge. L' alphabet d'entrée est l'ensemble des symboles qui peuvent apparaître dans l'entrée initiale , et il n'inclut pas le symbole vide. L'alphabet principal auquel la machine tient est l'alphabet sur bande: elle a encore besoin de règles pour savoir quoi faire lorsqu'elle voit un blanc, par exemple.
Cette distinction est importante, comme d'autres l'ont dit, pour que la machine puisse dire où se termine son entrée. C'est la même raison pour laquelle vous ne pouvez pas (utilement) mettre un caractère zéro au milieu d'une chaîne en C: le caractère zéro est réservé pour signifier "le dernier caractère non nul avant que ce ne soit la fin des données, donc quand vous voyez cela, vous avez terminé ". Si vous devez vous attendre à zéro caractère au milieu de la chaîne, l'écriture
strlen
devient beaucoup plus difficile.la source