Comment les tactiques fonctionnent-elles dans les assistants de preuve?
Je suppose que cette réponse sera un peu difficile.
Premièrement, il ne suffit pas de se demander "comment les tactiques fonctionnent dans les assistants de preuve", car elles fonctionnent différemment selon les assistants de preuve. Il existe actuellement deux classes principales d'assistants: ceux dérivés de la LCF d'origine, tels que Isabelle, HOL et HOL light, et les assistants de preuve basés sur la théorie des types, tels que Coq et Matita. Dans ces deux différentes classes d'assistants de preuve, la tactique fonctionne différemment, ce qui montre que ce qui se passe sous le capot, par exemple Isabelle, est assez différent de ce qui se passe sous le capot, par exemple à Matita.
Demandez-vous: que se passe-t-il lorsque nous essayons de prouver une proposition P dans Matita? Nous introduisons une métavariable X de type P. Nous jouons ensuite un jeu, pour ainsi dire, où nous raffinons X, ajoutant de plus en plus de structure au terme incomplet, jusqu'à obtenir un terme lambda complet (c'est-à-dire ne contenant plus de métavariables). Une fois que nous sommes en possession d'un terme lambda complet, nous dactylographions le vérifie par rapport à P, en nous assurant qu'il occupe le type requis. Nous voyons ensuite que dans Coq et Matita, une tactique est simplement une fonction de termes de preuves incomplètes à des termes de preuves incomplets, ce qui, espérons-le, permet de structurer le terme après application (cette observation a motivé de nombreux travaux récents, par exemple Jojgov , Pientka et autres).
Par exemple, la tactique de Matita "intro" introduit une abstraction lambda par rapport au terme existant, "cases" introduit une expression de correspondance dans le terme et "apply" introduit une application d'un terme à l'autre. Ces tactiques de base peuvent être combinées, en utilisant des fonctions d'ordre supérieur, pour en créer d'autres plus complexes. L'idée de base est toujours la même: une tactique vise toujours à ajouter un peu de structure à un terme de preuve incomplet.
Notez que les développeurs souhaitent redonner un terme à chaque vérification de type après chaque application tactique. Strictement parlant, ils ne sont pas tenus de le faire, car tout ce qui compte pour les assistants de preuve basés sur la théorie des types est que, lorsque l'utilisateur fournit à Qed la preuve, nous sommes en possession d'un terme de preuve qui habite la proposition P. arrivé à ce terme de preuve est en grande partie hors de propos. Cependant, Coq et Matita visent tous deux à redonner à l'utilisateur un terme de preuve (éventuellement incomplet) indiquant que les vérificateurs de typage sont vérifiés après chaque application tactique. Pourtant, cet invariant peut échouer (et souvent échoue), notamment en ce qui concerne les deux vérifications syntaxiques que les assistants de preuve basés sur CIC doivent implémenter.
En particulier, nous pouvons effectuer ce qui semble être une preuve valable, en appliquant une série de tactiques jusqu'à ce qu'il ne reste plus aucun objectif ouvert. Nous arrivons ensuite à Qed la preuve supposée, seulement pour découvrir que le vérificateur de terminaison de Matita, ou son vérificateur de positivité stricte, se plaint, car le terme de preuve généré par la tactique a invalidé l’un de ces contrôles syntaxiques (c’est-à-dire une métavariable dans la position un appel récursif a été instancié avec un terme qui n’est pas syntaxiquement plus petit que l’argument original). Cela montre que, dans un certain sens, la théorie des types de CIC n’est pas "assez forte" et ne reflète pas les exigences de positivité ou de syntaxe de taille de ses types (observation qui motive les types dimensionnés d’Abel, et quelques travaux récents sur les types de positivité ).
Par contre, les assistants de preuve de style LCF sont assez différents. Ici, le noyau consiste en un module (généralement implémenté dans une variante de ML), contenant un type abstrait "thm", et des fonctions qui implémentent les règles d'inférence de la logique de l'assistant de preuve, mappant "thm" à "thm", etc. en avant. Nous nous appuyons sur la discipline de dactylographie de ML pour nous assurer que la seule manière de construire une valeur de type "thm" consiste à utiliser ces règles d'inférence (tactiques de base). Le noyau d'Isabelle est ici .
Les preuves consistent alors en une série d’applications de ces tactiques de base (ou de tactiques plus complexes et de plus grande taille, qui sont à nouveau réalisées en reliant des tactiques plus simples utilisant des fonctions d’ordre supérieur --- chez Isabelle, les fonctions d’ordre supérieur, appelées tactiques, peuvent être vu ici ). Contrairement aux assistants de preuve basés sur la théorie des types, un assistant de style LCF n'a pas besoin de laisser traîner un témoin de preuve explicite. La précision de la preuve est garantie par la construction et notre confiance dans la discipline de dactylographie de ML (de nombreux assistants, par exemple Isabelle, génèrent toutefois des conditions de preuve pour leurs preuves).