4.37 Predicate prover

Appel du prouveur de prédicats

Syntaxe

  pp
  pp(t)
  pp(rp.n)
  pp(rt.n)
  pp(rp.n|t)
  pp(rp(f))

avec :

Alias

  p0 est équivalent à pp(rp.0)
  p0(t) est équivalent à pp(rp.1|t)
  p1 est équivalent à pp(rp.1)
  p1(t) est équivalent à pp(rp.1|t)

  t0 est équivalent à pp(rt.0)
  t0(t) est équivalent à pp(rt.1|t)
  t1 est équivalent à pp(rt.1)
  t1(t) est équivalent à pp(rt.1|t)

Utilisation

Cette commande permet d’utiliser le prouveur de prédicats sur le but courant.
Cette fonction a trois modes de fonctionnement :

  1. Le premiers mode appelle le prouveur de prédicats sur le but et toutes les hypothèses courantes. Ce mode n’est pas adapté au traitement d’un grand nombre d’hypothèses.
  2. Le deuxième mode appelle le prouveur de prédicats sur le but et les hypothèses de l’obligation de preuve réduite. Les hypothèses sélectionnées sont les mêmes que pour la fonction rp(voir chapitre 4.42 page §).
  3. Le troisième mode appelle le prouveur de prédicats sur le but et les hypothèses sélectionnées, de manière additive. Par exemple, pp(rp(sees+loc+inv)) permet de lancer la preuve du but sous les assertions et invariants des machines vues et utilisées, les hypothèses locales et les invariants du composant.

Dans les trois modes, le prouveur de prédicats est lancé avec un temps de coupure. Sans précision de la part de l’utilisateur, ce temps de coupure est de 60 secondes en interactif.

Lorsque la preuve est rejouée en automatique, les appels au prouveur de prédicats se font avec un temps de coupure spécifié par la ressource Time_Out du fichier de ressource de l’Atelier B (300 secondes par défaut). Cette marge permet de rejouer un appel au prouveur de prédicat, couronné de succès, sur une machine moins puissante.

Exemple

Le prouveur de prédicats peut s’utiliser sur l’obligation de preuve complète :


 
PRI> pp  
Starting Prover Predicate Call  
Proved by the Predicate Prover  
 


ou sur l’obligation de preuve réduite. Cette option s’utilise lorsque l’obligation de preuve a de nombreuses hypothèses :


 
PRI> pp(rp.1 | 5)  
Starting Prover Predicate Call  
Proved by the Predicate Prover  
 


La preuve peut être tentée avec plus d’hypothèses sélectionnées, mais le succès n’est plus garanti.


 
PRI> pp(rp.5 | 10)  
Starting Prover Predicate Call  
The Predicate Prover don’t prove the current goal  
 


Le prouveur de prédicats peut s’utiliser pour prouver une obligation de preuve donnée ou pour prouver un sous-but. Il peut à ce titre faire partie d’une stratégie de preuve, en étant utilisé dans le corps de la commande te (voir chapitre 4.54 page §).
Il est ici utilisé sur les obligations de preuve réduites (1 itération) avec un temps de coupure de 10 secondes.


 
PRI> te(pp(rp.1 | 10), Replace.Gen.All)  
Begin TryEveryWhere  
 


Le travail effectué par le prouveur de prédicat est alors affiché :


 
+--+  
Summary  
Initialisation.1 transformed   Unproved --> Proved,   pp(rp.1)  
Initialisation.4 transformed   Unproved --> Proved,   pp(rp.1)  
End TryEveryWhere  
 


Deux obligations de preuve Initialisation.1 et Initialisation.4 ont été déchargées.