Question

j'ai étudié Théorie de type constructif (CTT) et l'une des choses sur lesquelles je ne suis pas clair est la partie de la preuve: prouver l'exactitude d'un programme sous une forme de preuve qui n'est rien d'autre que le programme lui-même (Correspondance Curry-Howard)

La plupart des exemples que j'ai vus dans les livres (par exemple, Théorie des types et programmation fonctionnelle - Thomson et Tapl) Afficher les "preuves" sur $ lambda $ -abstractions et applications sur les termes (c'est-à-dire, littéralement $ a, b, e ... $). Les preuves semblent principalement s'appuyer sur les signatures types des fonctions, sous le supposition que la fonction fait ce qu'elle prétend. Peu de choses sont discutées sur le «comment» de l'exactitude de la fonction.

Par exemple, lors de l'écriture d'un vrai programme (par exemple, dans Haskell et d'autres langues fonctionnelles [pures]), la fonction à l'étude pourrait faire un calcul arbitraire et renvoyer un terme du bon taper pour que la preuve passe par (parlant statiquement). Alors, comment savons-nous que le programme fait du calcul en calcul la "bonne" chose (dynamiquement parlant) et pas seulement la simulant pour dépasser un système de prestation?

D'après ce que je comprends, voici comment les choses devraient se passer (et probablement le cas, mais je ne sais pas si j'ai raison), grossièrement parlant:

  1. Compte tenu des spécifications d'un programme dans quelque chose comme la logique de prédicat, nous "le convertissons" en une "représentation dactylographiée" équivalente
  2. En utilisant une inférence vers l'arrière, nous substituons les "fonctions" par leurs valeurs appropriées, qui pourraient elles-mêmes être d'autres fonctions (c'est-à-dire que nous remplaçons les fonctions par leur règles de calcul, mais je pense plus sur les lignes de remplacement de la fonction par son corps, du point de vue de la programmation, par souci d'argument. En supposant qu'ils "retournent" le type correct, cela semble être une substitution crédible)
  3. Nous continuons à faire le n ° 2 ci-dessus jusqu'à ce que nous atteignions les opérations primitives (encore une fois, grossièrement parlant) que nous pouvons prouver trivialement (ou sinon, peut-être que la preuve est "simple" assez).
  4. Une fois que nous avons frappé tous les "axiomes" (ou des preuves triviales) le long de toutes les branches des inférences arrière, nous nous arrêtons.
  5. QED

Deux questions:

  • Ma compréhension / intuition de "Comment" la preuve de l'exactitude fonctionne-t-elle dans CTT fonctionne correctement? Il semble qu'il ne sera pas possible pour le programme de "tricher" ceci ou peut-il?
  • Et deuxièmement, c'est ce que comme les assistants de la preuve Coq vous aider à prouver / analyser (à un niveau élevé)?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top