4.35 Pmm compile

Chargement de règles utilisateur (Pmm)

Syntaxe

  pc

Utilisation

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.

Exemple

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.