Réécriture d’après une égalité en hypothèse
eh(a, A, f)
avec :
Cette commande permet de remplacer a par A, soit dans le but courant, soit dans toutes les
hypothèses, soit enfin dans l’hypothèse h.
Le mot-clé _h permet d’utiliser une égalité dont on ne connait qu’un membre (droit ou gauche).
Dans ce cas, la dernière égalité en hypothèse, satisfaisante, est utilisée.
Si f = Hyp(h), le but devient :
H ⇒ B
où H est obtenu en remplaçant a par A dans l’hypothèse h, si elle existe.
Si f = AllHyp, le but devient :
H ⇒ B
où H est obtenu en remplaçant a par A dans toutes les hypothèses.
Si f = Goal, le but devient :
B′
où B′ est obtenu en remplaçant a par A dans le but courant.
Très souvent, une preuve échoue parce qu’une égalité n’a pas été employée. Les démonstrateurs
automatiques sont obligés de prendre des précautions avec les réécritures utilisant des
égalités ; en effet, celles-ci peuvent générer des bouclages (voir chapitre 2.9 page §).
Le prouveur interactif peut, quant à lui, se permettre de telles réécritures, qui sont appliquées
ponctuellement et sous le contrôle de l’opérateur.
Dans le cas d’une réécriture du but, il se peut que la commande interactive aille à l’encontre
d’une normalisation faite par le prouveur automatique ; si on relance en automatique, celui-ci
refera immédiatement la transformée inverse.
Néanmoins, la commande peut être utile si l’opérateur utilise d’autres commandes interactives
sur le but réécrit, avant de rappeler le démonstrateur automatique.
Soit la situation suivante :
Hypothesis ENS = {e1,e2,e3,e4,e5} & ENS: FIN(NATURAL*{ENS.enum}) & not(ENS = {}) & tt: ENS & zz: ENS & not(zz = tt) & #kk.(kk: ENS & not(kk = zz) & not(kk = tt)) & zz: {e1,e2,e3,e4} => tt = e5 & zz = e5 => tt = e1 & zz = e5 or zz = e1 & uu = zz & !vv.(vv: ENS & (not(zz = vv) or not(tt = vv)) => zz = vv) Goal uu = e5 => zz = e1
|
Il est possible de substituer uu par zz dans le but.
PRI> eh(uu,zz,Goal) Starting use Equality in Hypothesis
|
Le but devient :
Goal zz = e5 => zz = e1
|
Il est possible d’effectuer la substitution pour une hypothèse
PRI> eh(zz,uu,Hyp(zz = e5 or zz = e1)) Starting use Equality in Hypothesis
|
Le but devient :
Goal uu = e5 or uu = e1 => (zz = e5 => zz = e1)
|
Il est possible d’effectuer la substitution pour toutes les hypothèses.
PRI> eh(zz,uu,AllHyp) Starting use Equality in Hypothesis
|
Toutes les nouvelles hypothèses apparaissent comme antécédent du but courant :
Goal uu: ENS & not(uu = tt) & #kk.(kk: ENS & not(kk = uu) & not(kk = tt)) & (uu: {e1,e2,e3,e4} => tt = e5) & (uu = e5 => tt = e1) & (uu = e5 or uu = e1) & !vv.(vv: ENS & (not(uu = vv) or not(tt = vv)) => uu = vv) => (uu = e5 or uu = e1 => ( zz = e5 => zz = e1))
|
Soit la situation suivante :
Hypothesis ENS = {e1,e2,e3,e4,e5} & ENS: FIN(NATURAL*{ENS.enum}) & not(ENS = {}) & zz: ENS & uu = tt or uu = zz & tt: {e1,e2,e3,e4} => zz = e5 & zz = e5 => tt: {e1,e2,e3,e4} & tt = e5 => zz = e1 & zz = e1 => tt = e5 & zz = e5 Goal e2 = e5 or e2 = zz
|
Si l’opérateur désire utiliser une égalité avec e5 en membre de droite, sans s’occuper du membre
de gauche :
PRI> eh(_h,e5,Goal) Starting use Equality in Hypothesis
|
en utilisant l’égalité zz = e5, le but devient :
Goal e2 = e5 or e2 = e5
|
Si l’opérateur désire utiliser la dernière égalité en hypothèse dont le membre gauche est
zz :
PRI> eh(zz,_h,Goal) Starting use Equality in Hypothesis
|
le but devient :
Goal e2 = e5 or e2 = e5
|
Le but est effectivement transformé, en utilisant l’hypothèse zz = e5.