Question

En apprenant la théorie des preuves, je suis intéressé à savoir comment «prouver les propriétés d'un programme». Je ne vois pas encore exactement ce qui doit être prouvé, ni comment le prouver, ce qui mène à cette brève discussion suivie de quelques questions.

Dans certaines langues (comme Tla +), le programme est la spécification (je pense). Si ce n'est pas TLA +, vous pouvez peut-être le faire Coq, mais j'en ai entendu parler. Cela signifie donc grossièrement que Ce que vous écrivez est automatiquement prouvé. Mais si c'est le cas, comment faites-vous prouver que c'est prouvé. Il semble qu'à un moment donné, vous devez réellement test le code et les preuves et voir qu'il fait ce que dit la spécification. Un TDD de base.

En examinant le Correspondance Curry-Howard, Les programmes sont des preuves, ou du moins des programmes de style Lambda / Functional / Logic. Je ne sais pas vraiment ce que cela signifie dans la pratique. Si vous écrivez simplement une nouvelle fonction qui implémente une spécification signifie que nous avons une preuve, ou quoi.

Les questions sont donc:

  1. Ce que nous prouvons exactement.
  2. Comment prouvons-nous que le système répond à la spécification (si la langue est ou n'est pas la spécification réelle). Si j'écris du code qui dit "Je gérerai toujours cette erreur de demande HTTP en traçant sa sortie sur la console", et qui est "spécifiée" dans la spécification, alors comment est-elle prouvée. Je ne sais pas ce que je fais pour dire "garanti, ce comportement se produira". Dans ma tête, la seule façon dont cela peut être prouvé est de faire des tests sur le code (c.-à-d. Des tests de modèle ou simplement des tests de simulation de force brute comme vous le verriez dans TDD).
  3. Lors de l'écriture de tests (comme dans TDD) entre en jeu lors de la création de ces preuves. Je me demande si les preuves ont besoin de tests, de quelque chose de chose, ou à quel moment vous êtes Fini avec votre preuve prouvé.

Alors il semble que Quel Nous voulons prouver que le système se comporte comme prévu. Et étant donné que nous avons défini comment nous voulons que le système fonctionne, la question est Comment prouver qu'il correspond à la spécification, À un haut niveau. Combien prouvons-nous, comment savons-nous que les preuves prouvent réellement ce que nous voulons et le comportement sera ce que nous voulons (et prouvé).

Pas de solution correcte

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