J'essaie de trouver un moyen d'expliquer l'idée de la preuve du problème de l'arrêt de la manière la plus accessible possible (aux étudiants CS de premier cycle). L'argument le plus simple que j'ai trouvé est celui-ci ; c'est précisément le style de traitement que je vise. Cependant, l'auto-référence (en particulier, vérifier si un programme s'arrête sur lui-même) n'est pas la plus didactique.
Ce que je me demande, en tant que croquis de preuve, c'est pourquoi nous ne pourrions pas simplifier encore plus et dire: si nous supposons un programme H(P,I)
pour le problème de l'arrêt qui s'arrête avec vrai si P(I)
s'arrête et s'arrête avec faux sinon, alors nous pourrions créer un programme de la forme:
def Q(J):
if H(Q,J) then loop forever
else halt
... qui est un programme valide si et seulement si le problème d'arrêt est un programme valide. Nous pouvons alors nous demander: à quoi devrait H(Q,J)
revenir une valeur arbitraire J
? Nous voyons une contradiction dans les deux possibilités, et nous concluons que puisque l'existence de H
nous permet de construire le programme contradictoire Q
, donc un programme de la forme H
ne peut pas exister.
Il y a encore une certaine auto-référence ici dans la mesure où le programme Q
vérifie s'il s'arrête ou non sur l'entrée actuelle (et fait le contraire), mais pour moi, cela semble beaucoup plus intuitif que de mettre en place une situation où nous avons besoin d'un appel de la forme P(P)
ou H(P,P)
, etc. Cependant, je n'ai pas vu cet argument plus simple utilisé, et je pense qu'il l'aurait été s'il était valable. Mes questions sont donc les suivantes:
- L'argument ci-dessus est-il suffisant comme preuve (esquisse) du problème de l'arrêt?
- Si oui, pourquoi tant d'arguments vont-ils avec une étape déroutante du formulaire
P(P)
ouH(P,P)
? (Est-ce juste pour supprimer "l'entrée" sans importance de l'équation?) - Sinon, qu'est-ce qui manque?
- Si oui, pourquoi tant d'arguments vont-ils avec une étape déroutante du formulaire
Il existe une variété de questions connexes sur ce sujet, telles que:
- Arrêter le problème sans autoréférence
- Existe-t-il une preuve plus intuitive de l'indécidabilité du problème d'arrêt que la diagonalisation?
J'ai également trouvé la mention de la preuve basée sur le paradoxe de Berry, qui est assez attrayante. Pourtant, je n'ai pas encore réussi à me convaincre si l'argument spécifique ci-dessus fonctionne ou non (même si ce n'est que pour ma propre compréhension; je sens que je manque peut-être quelque chose de stupide et je voudrais savoir ce que c'est).