4.33 Mono Lemma Prover

Appel du prouveur mono-lemme

Syntaxe

  ml
  ml(t)
  ml(rp.n)
  ml(rp.n|t)
  ml(rp(f))
  ml(rp(f)|t)
  ml(ff(l))
   ml(ff(l)|t)
  ml(ff(l)|rp.n)
  ml(ff(l)|rp.n|t)
  ml(ff(l)|rp(f))
  ml(ff(l)|rp(f)|t)

avec :

Utilisation

Cette commande permet d’utiliser le prouveur mono-lemme sur le but courant, le prouveur mono-lemme étant identique au prouveur automatique mais avec un traitement des hypothèses sensiblement différent.
Cette fonction a trois modes de fonctionnement :

  1. Le premiers mode appelle le prouveur mono-lemme sur le but et toutes les hypothèses courantes.
  2. Le deuxième mode appelle le prouveur mono-lemme 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 mono-lemme sur le but et les hypothèses sélectionnées, de manière additive. Par exemple, ml(rp(sees+loc+inv)) permet de lancer la preuve du but sous les 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 mono-lemme 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 mono-lemme 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).

On peut enfin paramétrer la force de preuve que l’on veut utiliser (avec l’argument ff(l)). Si l est une liste de forces, la preuve sera tentée successivement avec chacune des forces de la liste jusqu’à ce que la preuve réussisse ou bien qu’on ait épuisé la liste.

Exemple

Le prouveur mono-lemme peut s’utiliser sur l’obligation de preuve complète (on notera qu’ici la force courante est 0) :


 
PRI> ml  
Starting Mono Lemma Prover Call  
Proved by the Mono Lemma Prover  
with force 0  
 


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


 
PRI> ml(rp.1 | 5)  
Starting Mono Lemma Prover Call  
Proved by the Mono Lemma Prover  
with force 0  
 


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


 
PRI> ml(rp.5 | 10)  
Starting Mono Lemma Prover Call  
The Mono Lemma Prover failed to prove the current goal  
 


Le prouveur mono-lemme 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(ml(rp.1 | 10), Replace.Gen.All)  
 


Le prouveur peut aussi s’utiliser avec une liste de forces à tenter. On parcourt la liste de forces jusqu’à ce qu’une d’elles permette d’effectuer la preuve. Ici la force 1 permet de décharger le but, on n’essaie donc pas la force 3.


 
PRI> ml(ff(0;1;3) | rp.0 | 50)  
Starting Mono Lemma Prover Call  
Proved by the Mono Lemma Prover  
with force 1