En résumé : Turing Machine peut effectuer des calculs infinis (finement spécifiés) sur des données infinies (finement spécifiées) et produire des résultats infinis (finement spécifiés). L'idée de base est que ces infinis peuvent être définis comme la limite des entités finies, définies d'une manière mathématiquement appropriée. C'est la base de la sémantique mathématique du calcul. Si vous envisagez des programmes plutôt que des machines de Turing, ces programmes peuvent également contenir des structures de données infinies (finement spécifiées). Le cas d'une fonction tabulée fact
comme algorithme possible est finalement analysé, sous forme de programme ou de modèle de MT, avec un indice sur la relation avec l'évaluation paresseuse d'objets infinis.
Avec beaucoup plus de détails
En ce qui concerne votre dernière question, une MT ne calcule pas sur des nombres arbitraires, mais sur la représentation symbolique de ces nombres comme de longues chaînes arbitraires (non bornées) de symboles les représentant. Modulo codage correct, il est vrai qu'ils peuvent comparer ou faire de l'arithmétique avec de tels nombres à travers ces représentations.
Mais la question initiale concerne le rôle de l'infini dans les machines de Turing en général.
Une réponse courante à cette question est que les machines de Turing ne traitent jamais de l'infini. Ils sont définis de manière finie, et tout ce qu'ils calculent est calculé en temps fini sur une partie finie de la bande (donc une bande finie plus grande serait suffisante). Ce qui est vrai, c'est que le temps requis pour l'espace de la TM est illimité, ce qui n'est pas la même chose que l'infini.
Par conséquent, toute réponse qui est calculée par une MT pourrait également être calculée par un automate à états finis (FSA), qui est "dans une certaine mesure" une façon d'examiner la tabulation. La difficulté est que certaines tailles d'entrée (il s'agit presque toujours de cela, ne serait-ce que pour lire l'entrée) dépasseront la taille de l'automate. Mais alors, nous pouvons simplement en utiliser un plus gros. Donc, si nous voulons considérer la taille d'entrée illimitée, nous avons besoin d'une séquence infinie de FSA qui peut faire le calcul. En fait, nous pouvons avoir besoin d'une machine à états finis un peu plus complexe que la FSA traditionnelle car il peut y avoir une sortie à calculer (plutôt qu'une réponse oui-non), mais un transducteur à états finis devrait probablement le faire.
Donc, si nous examinons un problème qui a un ensemble infini d'instances, comme le calcul d'un GCD, ou simplement en utilisant des arithmétiques sur des entiers de taille arbitraire, nous voyons que l'infini nous revient par la porte arrière, comme cet infini ensemble de FSA.
π
Là encore, nous pouvons remplacer cela par une séquence infinie de calculs finis avec des machines finies. Mais trichons-nous?
D'un point de vue physique, c'est le mieux que nous puissions faire. Nous savons seulement comment construire des machines finies, du moins selon l'état actuel de la technique en physique, qui ne devrait pas trop changer sur cette question dans un avenir proche.
Mais comment pouvons-nous gérer ces infinis de manière cohérente et maniable d'un point de vue mathématique.
Lorsque vous considérez un ensemble infini de FSA qui peut en quelque sorte coopérer pour calculer un ensemble infini de réponses, vous ne pouvez pas le faire arbitrairement. Vous avez besoin de quelques garanties pour vous assurer que ce que vous faites est logique. Il est bien connu que vous pouvez construire trivialement n'importe quel ensemble avec une union infinie d'ensembles réguliers, en fait avec une union infinie d'ensembles singleton. Ainsi, envisager des unions arbitraires infinies d'automates sans aucune restriction ne vous mènera nulle part. Vous considérez même dans le même ensemble d'automates qui vous donnent des réponses incohérentes.
Ce que vous voulez vraiment, c'est définir une notion de cohérence. Mais cela nécessite quelques précautions. Supposons que vous utilisez une séquence infinie d'automates pour simuler une MT qui répond oui ou non, ou ne s'arrête pas. Le problème est qu'une FSA s'arrêtera toujours avec une réponse, comme oui ou non. Mais si vous utilisez un FSA qui n'est en fait pas assez grand pour l'entrée choisie, à quoi devrait-il répondre? Oui et non sont réservés aux cas où la FSA a effectivement mis fin au calcul de la MT, et l'utilisation de l'une de ces réponses avec un calcul inachevé ne ferait que semer la confusion. Ce que vous voulez, c'est une réponse qui dit: " désolé, je suis trop petit et je ne peux pas le dire. Essayez avec un plus grand gars de la famille ". En d'autres termes, vous voulez une réponse telle que le
débordement , ou vous ne savez pas⊥
Vous avez donc besoin d'automates qui ont 3 sortes d'états: acceptant, non acceptant et non défini. Un état indéfini peut être considéré comme un état représentant une partie manquante de l'automate qui force l'arrêt du calcul. Ainsi, lorsque le calcul s'arrête, selon l'état où il s'arrête, vous obtenez la réponse oui , non ou indéfini .
Maintenant, vous voyez que ce que vous voulez, ce sont des séquences infinies d'automates cohérentes . Les deux oui et non sont compatibles avec
indéfini , mais oui est non conforme à pas . Ensuite, deux automates sont cohérents lorsqu'ils donnent des réponses cohérentes sur la même entrée.
π3.14 ⊥ ⊥ ⊥ ⊥ . . .3.1415 ⊥ ⊥ ⊥ ⊥ . . .⊥ . ⊥ 5159 ⊥ ⊥ ⊥ ⊥ . . .3.1416 ⊥ ⊥ ⊥ ⊥ . . .3.1416 ⊥ ⊥ ⊥ ⊥ . . .π
Je ne développerai pas davantage ces aspects théoriques, ce qui est un peu gênant quand on se base sur Turing Machines. Le fait est que ces concepts conduisent à l'idée que les domaines de calcul (qu'il s'agisse de données ou de machines), forment des structures mathématiques telles que des réseaux, dans lesquels un objet infini peut être défini de manière adéquate comme les limites de séquences infiniment croissantes (c'est-à-dire de mieux en mieux définies) de objets finis. Définir les séquences infinies nécessite un peu plus d'appareil et une notion de continuité. C'est fondamentalement le sujet de la théorie sémantique de Dana Scott, et cela donne une vision quelque peu différente des concepts de calculabilité.
Ensuite, les machines de Turing, ou d'autres dispositifs formels qui peuvent faire du "calcul infini" peuvent être définis comme des limites de séquences d'approximations finies des machines, de mieux en mieux définies. Il en va de même pour toutes les données avec lesquelles les machines calculent, qu'elles soient en entrée ou en sortie.
Le document le plus simple que j'ai jamais lu à ce sujet est un ensemble de notes de cours manuscrites de Dana Scott, souvent appelées notes de cours d'Amsterdam. Mais je ne pouvais pas le trouver sur le web. Tout pointeur vers une copie (même incomplète, car j'en ai une partie) serait le bienvenu. Mais vous pouvez consulter d'autres publications anciennes de Scott telles que
Outline of a Mathematical Theory of Computation .
Retour à l'exemple initial de la question
Ces concepts d'approximation s'appliquent aussi bien aux données qu'aux programmes. La fonctionfact
est définie de manière récursive, ce qui signifie que c'est le point le moins fixe d'une fonction qui peut être utilisé pour calculer une séquence convergeant l'approximation finie de fact
. Cette séquence de fonctions finies de plus en plus définies converge vers une entité infinie qui est ce que vous appelez la fonction fact
.
fact
⊥ ( non définie ) lorsque la table n'est pas suffisamment définie (assez grande). L'algorithme de recherche de table doit également être défini par une séquence d'approximations, car il calcule avec une table infinie.
Il est vrai que, si l'on considère le modèle élémentaire de calcul TM, un tel tableau infini ne peut pas être exprimé dans ce formalisme. Cela ne signifie pas que cela n'aurait aucun sens. Une machine de Turing pourrait avoir une deuxième bande qui est censée être initialisée avec les valeurs tabulées de certaines fonctions telles que fact
. Elle ne modifie pas la puissance de calcul de la MT, tant que cette fonction est calculable, c'est-à-dire tant que la table peut être initialisée avec un calcul infini d'une autre MT qui peut calculer toutes les paires argument-valeur pour la fonction concernée.
Mais en pratique, vous ne pouvez pas effectuer un calcul infini. Par conséquent, la bonne façon de le faire est de calculer la table paresseusement, c'est-à-dire de ne remplir les entrées qu'en cas de besoin. C'est précisément ce qui se fait avec la mémorisation, c'est la réponse que je vous ai donnée, avec différentes justifications, pour votre question précédente.