4.1 Abstract Expression

Abstraction dune expression

Syntaxe

  ae(EX,ID)
avec :

Utilisation

Cette commande permet de générer le but Δe(EX) (EX = ID => [EX := ID]G) où Δe(EX) représente le lemme de bonne définition de l’expression EX (voir chapitre 2.3 page §) et [EX := ID]G le but courant dans lequel ont été remplacées les diverses occurences de l’expression EX (apparaissant dans le but) par l’identificateur ID.

Il est nécessaire de vérifier la bonne définition de l’expression EX car sortie de son contexte (le but courant), elle peut éventuellement être mal définie.
Supposons en effet que sous l’hypothèse xx + 1 <= 1 on ait le but xx + 1 <= 1 max(1..xx) = xx. Ce but est bien défini puisque xx + 1 <= 1 est bien défini et not(xx + 1 <= 1)   Δp(max(1..xx) = xx) i.e. not(xx + 1 <= 1) => Δe(max(1..xx)) soit encore not(xx + 1 <= 1) => 1..x NAT FIN(NAT) not(1..xx) = (d’après la bonne définition de et de max). Si on effectue ae(max(1..xx),MAX) sans précaution concernant la bonne définition, on obtient le but max(1..xx) = MAX => xx + 1 <= 1 MAX = xx. Puis une déduction (par dd) permet de faire monter en hypothèses la formule max(1..xx) = MAX qui est maintenant dépourvue de sens puisqu’on a l’hypothèse xx + 1 <= 1 (et donc 1..xx = ).

Remarquons enfin que le prouveur tente une preuve automatique du lemme de bonne définition de l’expression EX et si la preuve échoue, le lemme de bonne définition devra être démontrée interactivement.

Exemple1

Soit le but à démontrer suivant :


 
1+wr<=p2 => p2+1<=p1 or p1<=wr &  
1+p2<=wr => p2+1<=p1 & p1<=wr  
=>  
p2+1<=p1 or p1<=p3  
 


L’opérateur désire remplacer l’expression p2 + 1 par pp2 :


 
PRI> ae(p2+1,pp2)  
 


On obtient le but suivant (le lemme de bonne défintion de p2 + 1, réduit à btrue, est démontré automatiquement par le prouveur) :


 
p2+1=pp2  
=>  
(1+wr<=p2 => pp2<=p1 or p1<=wr &  
1+p2<=wr => pp2<=p1 & p1<=wr  
=>  
pp2<=p1 or p1<=p3)  
 
 


On peut ensuite monter en hypothèse l’égalité pp2 = p2 + 1 (en utilisant la commande deduction dd) et on vérifie cela à l’aide de la commande Search Hypothesis :


 
PRI> sh(p2)  
 
Searching all Hypothesis that  
     contain p2  
     match with a  
Starting search...  
Found hypothesis List is  
            pp2=p2+1 &  
            3<=p2 &  
            p2<=2147483647 &  
            0<=p2 &  
            p2: INTEGER  
End of found hypothesis  
 


Exemple2

Soit le but à démontrer suivant :


 
    Hypothesis  
      ...  
      0<=aa &  
      aa <= bb &  
      ...  
    Goal  
      max(aa..bb) = {bb}  
 
 


L’utilisateur souhaite remplacer l’expression max(aa..bb) par MAXI :


 
    ae(max(aa..bb),MAXI)  
 


Le lemme de bonne définition associé à l’expression max(aa..bb) est not(aa..bb = ) aa..bb NATURAL : FIN(NATURAL). Le prouveur automatique ne parvient pas à le démontrer, il génére donc le premier sous-but suivant :


 
    not(aa..bb = {})  
 
 


Une fois ce but démontré (par exemple par ah(aa<=bb) & pp(rp.0)), le prouveur génére le sous-but suivant :


 
    aa..bb /\ NATURAL: FIN(NATURAL)  
 
 


La commande pr suffit alors à démontrer ce but. La bonne définition de l’expression max(aa..bb) est donc démontrée. Le prouveur peut donc effectuer la subsitution de max(aa..bb) par MAXI dans le but de départ et générer le nouveau but :


 
   max(aa..bb) = MAXI => MAXI = {bb}