Instanciation d’une hypothèse universellement quantifiée
ph(v1,…,vn,h)
avec :
Cette commande permet d’assigner une valeur aux variables qui apparaissent, en hypothèse, sous la portée d’un même quantificateur universel. On affecte les valeurs v1,…,vn aux variables w1,…,wn. Si la valeur d’une ou plusieurs variables n’est pas connue, on peut utiliser le mot-clé _h pour signifier que la ou les variables ne seront pas instanciées. Par exemple :
permettra de générer l’hypothèse correspondant à
B étant le but initial, le but devient :
P(v1,…,vn) ∧ (Q(v1,…,vn) ⇒ B)
Les prédicats P(v1,…,vn) contiennent les typages de v1,…,vn.
Notons cependant que la particularisation des hypothèses quantifiées universellement n’est pas
protégée contre le mauvais typage (voir chapitre 2.2 page §) ainsi que la mauvaise définition
(voir chapitre 2.3 page §). On peut instancier une variable liée par une valeur mal typée ou mal
définie. L’utilisateur doit donc vérifier la correction du typage et la bonne définition de ces
valeurs avant d’utiliser cette commande.
Ceci peut être vérifié a posteriori à l’aide de l’outil mdelta (cf. Manuel Utilisateur Version 1.0.).
Soit la situation suivante :
Hypothesis ENS = {e1,e2,e3,e4,e5} & tt: ENS & uu: ENS & zz: ENS & !vv.(vv: ENS & (not(uu = vv) or not(tt = vv)) => zz = vv) Goal not(tt = uu)
|
L’opérateur désire utiliser l’hypothèse ∀vv.(vv ∈ ENS ∧(not(uu = vv) ∨not(tt = vv)) ⇒ zz = vv),
en instanciant vv avec la valeur e1.
La preuve de vv ∈ ENS ∧ (not(uu = vv) ∨not(tt = vv)) ⇒ zz = vv va se décomposer en deux
parties (après instanciation) :
Si ces deux sous-buts sont prouvés alors le but deviendra zz = e1 ⇒ not(tt = uu).
PRI> ph(e1,!vv.(vv: ENS & (not(uu = vv) or not(tt = vv)) => zz = vv)) Starting Particularize Hypothesis
|
Le prédicat de typage instancié doit d’abord être prouvé :
Goal e1: ENS
|
La commande pr permet de décharger ce premier sous-but.
PRI> pr
|
Le but suivant est donc :
Goal not(uu = e1) or not(tt = e1)
|
L’opérateur lance alors le coeur de preuve :
PRI> pr Starting Prover Call
|
Le but est prouvé. Le but suivant est alors généré :
Goal zz = e1 => not(tt = uu))
|
Le prédicat zz = e1 peut alors être mis en hypothèse par l’une des deux commandes pr ou dd (voir chapitre 4.14 page §).