Chapitre 7
Patchprover : ajout direct de règles dans le prouveur
Ce système s’utilise de la manière suivante :
- Créer un fichier de nom PatchProver dans le répertoire “base de donnée du projet”
(bdp) concerné
- Programmer en langage de théories dans ce fichier, sachant que :
- Les règles de la théorie PatchProverBi où i est la force seront appliquées par
la force i AVANT les règles et les mécanismes du prouveur.
- Les règles de la théorie PatchProverAi où i est la force seront appliquées par
la force i APRES les règles et les mécanismes du prouveur (juste avant l’échec).
- Les règles de la théorie PatchProverHi sont appliquées sur la formule
conjonctive de chaque paquet d’hypothèses qui est chargé en force i.
- La force Rapide n’est pas équipée du PatchProver.
Dans PatchProverBi, B signifie ”Before” et dans PatchProverAi, A signifie
”After”.
- Ces théories sont déclarées vides dans le prouveur :
- PatchProverH0 PatchProverH1 PatchProverH2 PatchProverH3
- PatchProverB0 PatchProverB1 PatchProverB2 PatchProverB3
- PatchProverA0 PatchProverA1 PatchProverA2 PatchProverA3
- AUCUNE NORMALISATION N’EST FAITE DANS CE FICHIER. Donc ne jamais
utiliser les formes de gauche du tableau de normalisation. En particulier : dans les
notations internes du prouveur, {e} doit toujours être un singleton. Sinon le
comportement ultérieur n’est pas garanti.
- Toutes ces théories sont des backward. Les théories PatchProverHi doivent fonctionner
comme des réécritures.En effet, elles sont appelées sur chaque paquet d’hypothèses
par
bguard((PatchProveri~;RES): bresult(H), Q)
On peut créer d’autres théories, faire des bcall et des bguard, etc... Pour sortir des
messages, utiliser
bcall(WRITE: bwritef(...))
- ATTENTION : L’USAGE DE PATCHPROVER EST RESERVE A L’UTILISATEUR
CONNAISSANT LE LANGAGE DE THEORIES. CE N’EST PAS UNE MÉTHODE
SECURITAIRE. PatchProver n’est lu qu’au démarrage du prouveur automatique ou
interactif. Après avoir modifié ce fichier, il vaut mieux dé-prouver toutes les obligations
de preuve et lancer une preuve en rejeu.
- Si PatchProver contient des erreurs de syntaxe, il n’est pas pris en compte et n’a donc
pas d’influence sur la preuve.
Les règles et les appels de mécanismes doivent obligatoirement être équipés du système de trace
(voir chapitre 10 page ), si l’on veut utiliser le mécanisme de trace lors des démonstrations et
obtenir l’arbre de preuve. Si des règles du PatchProver sont appliquées et ne sont
pas tracées, le comportement du module de génération d’arbre de preuve n’est plus
garanti.