Appel du prouveur de prédicats
pp
pp(t)
pp(rp.n)
pp(rt.n)
pp(rp.n|t)
pp(rp(f))
avec :
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)
Cette commande permet d’utiliser le prouveur de prédicats sur le but courant.
Cette fonction a trois modes de fonctionnement :
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.
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.