Je regardais les " Cinq étapes de l'acceptation des mathématiques constructives " d'Andrej Bauer et il dit qu'il y a deux types de preuves par contradiction (ou deux choses que les mathématiciens appellent preuve par contradiction):
- Supposons que est faux ... bla bla bla, contradiction. Par conséquent, est vrai.
- Supposons que soit vrai ... bla bla bla, contradiction. Par conséquent, est faux.
La première équivaut à la loi du milieu exclu (LEM) et la seconde consiste à prouver la négation.
La preuve de l'indécidabilité du problème de l'arrêt (HP) est une preuve par contradiction: supposons qu'il existe une machine qui puisse décider du HP ... bla bla bla, contradiction. Par conséquent, n'existe pas.
Donc, que soit " existe et peut décider du HP". Supposons que soit vrai ... bla bla bla, contradiction. Par conséquent, est faux.
Cela ressemble au deuxième type de preuve par contradiction, est-il donc possible de prouver l'indécidabilité du problème d'arrêt dans Coq (sans supposer LEM)?
EDIT: Je voudrais voir quelques points sur la preuve de cela en utilisant la contradiction. Je sais que cela peut également être prouvé en utilisant la diagonalisation.
la source
Réponses:
Vous avez tout à fait raison de dire que le problème de l'arrêt est un exemple du deuxième type de «preuve par contradiction» - ce n'est vraiment qu'une déclaration négative.
Supposons
decides_halt(M)
qu'un prédicat indique que la machineM
décide si son entrée est une machine qui s'arrête (c'est-à-dire,M
un programme qui, pour une machinem
et une entréei
, décide si ellem
s'arrête en entréei
).Oubliant un instant comment le prouver, le problème d'arrêt est la déclaration selon laquelle il n'y a pas de machine qui décide du problème d'arrêt. Nous pourrions déclarer cela dans Coq comme
(exists M, decides_halt M) -> False
, ou peut-être préférons-nous dire qu'une machine donnée ne résout pas le problème d'arrêtforall M, decides_halt M -> False
. Il s'avère que sans aucun axiome ces deux formalisations sont équivalentes en Coq. (J'ai énoncé la preuve pour que vous puissiez voir comment cela fonctionne, mais vousfirstorder
ferez tout cela!)Je pense que l'une ou l'autre de ces affirmations n'est pas trop difficile à prouver comme argument de diagonalisation, bien que formaliser les machines, la calculabilité et l'arrêt soit probablement assez difficile. Pour un exemple plus simple, il est pas trop difficile de prouver le théorème de diagonalisation de Cantor (voir https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 pour une preuve
nat -> nat
etnat
ne sont pas isomorphes).La diagonalisation ci-dessus donne un exemple de la façon dont vous pourriez procéder pour dériver une contradiction d'un isomorphisme entre
nat -> nat
etnat
. Voici l'essence de cette preuve présentée comme un exemple autonome:Même sans regarder les détails, nous pouvons voir dans la déclaration que cette preuve prend la simple existence d'une bijection et démontre qu'elle est impossible. Nous donnons d'abord les deux côtés de la bijection les noms
seq
etindex
. La clé est que le comportement de la bijection à la séquence spécialef := fun n => S (seq n n)
et son indiceindex f
sont contradictoires. La preuve du problème d'arrêt dériverait d'une contradiction de manière similaire, instanciant son hypothèse sur une machine qui résout le problème d'arrêt avec une machine soigneusement choisie (et en particulier une qui dépend en fait de la machine supposée).la source