Chargement de règles utilisateur (Pmm)
pc
Cette commande permet le chargement et la compilation des règles manuelles.
Pour permettre de traiter les cas de preuve les plus difficiles, il est possible d’écrire des règles
manuelles dans le fichier .pmm (proof manual methods) (voir chapitre 6 page §), créé par
l’opérateur et ayant comme préfixe le nom du composant traité.
Ce fichier devra contenir un ensemble de théories valides séparées par des &, écrites en langage
de théorie.
L’utilisation de ces règles devrait rester marginale. En effet, ces règles peuvent être fausses et
conduire le prouveur à prouver des obligations de preuve fausses.
Lors du lancement du prouveur interactif, le fichier pmm du composant, s’il existe est chargé
automatiquement en mémoire.
Dans le cas où le fichier pmm a été modifié par l’opérateur au cours de la preuve interactive et
que celui-ci désire utiliser les règles du fichier pmm dans sa dernière version, la commande pc,
spécifique, permet de charger en mémoire les règles du fichier pmm correspondant au
composant.
Lors du chargement du fichier pmm, le prouveur affiche un message d’acceptation du fichier ou
un message d’erreur.
Attention !
Alors que toutes les autres fonctionnalités du prouveur interactif sont totalement protégées,
cette possibilité d’application de règles écrites manuellement ne l’est pas.
Il est possible d’entrer une règle fausse, provoquant ainsi des démonstrations fausses. Si aucune
règle manuelle de ce type n’a été utilisée, alors la validité du prouveur (automatique +
interactif) suffit à assurer la validité de la preuve, quelles que soient les commandes interactives
appelées.
Si par contre, des règles manuelles ont été ajoutées, alors il faudra s’assurer de la validité de ces
règles. L’emploi d’un démonstrateur de règles pourra être préconisé pour cette tâche ; mais il
est clair que l’esprit dans lequel est fait le prouveur interactif est d’éviter l’emploi de ces règles
manuelles.
Soit la situation suivante :
Hypothesis xx: 1..10 & yy: 1..10 & zz: 1..109 Goal (xx+1)*yy-1: 1..109
|
L’opérateur lance le coeur de preuve :
PRI> pr Starting Prover Call
|
Le but (xx + 1) * yy - 1 : 1..109 est décomposé en 2 sous-buts 1 ≤ (xx + 1) * yy - 1 et
(xx + 1) * yy - 1 ≤ 109. Le premier sous-but est d’abord traité.
Le prouveur automatique s’arrête car il ne sait pas résoudre l’inégalité 0 <= -2 + yy + xx*yy.
New Hypothesis since last command 2: 1..109 & 2: 1..10 & 0<=2 & 2: NATURAL & 2: INTEGER & 0<=0 & 0: NATURAL & 0: INTEGER Goal 0<= -2+yy+xx*yy
|
L’opérateur décide donc d’introduire une nouvelle règle par l’intermédiaire du fichier pmm et de
l’utiliser dans le cas de la preuve.
Le fichier test.pmm contient alors :
THEORY test IS binhyp(a: 1..10) & binhyp(b: 1..10) => 0<= -2+a+b*a END
|
La règle est d’abord chargée puis compilée.
PRI> pc Loading theory test
|
Pour décharger le sous-but, 0 <= -2 + yy + xx*yy, on applique la règle numéro 1 de la théorie
test.
PRI> ar(test.1,Once) Starting Apply Rule
|
Le premier sous-but est déchargé et le prouveur automatique essaye maintenant de prouver le
second sous-but :
Hypothesis xx: 1..10 & yy: 1..10 & zz: 1..109 Goal (xx+1)*yy-1<=109
|
Le deuxième sous-but est alors à prouver, mais n’est pas prouvé par l’intermédiaire de la
commande pr.
L’opérateur ajoute alors la règle permettant de décharger ce but.
Le fichier test.pmm contient finalement :
THEORY test IS binhyp(a: 1..10) & binhyp(b: 1..10) => 0<= -2+a+b*a; binhyp(a: 1..10) & binhyp(b: 1..10) => (a+1)*b-1<=109 END
|
Le fichier pmm ayant été modifié, il faut le recharger en mémoire. Les règles anciennement
chargées sont écrasées par les nouvelles.
PRI> pc Loading theory test
|
Pour décharger le sous-but, (a + 1) *b- 1 <= 109, on applique la règle numéro 2 de la théorie
test.
PRI> ar(test.2,Once) Starting Apply Rule
|
L’obligation de preuve est alors prouvée.