Download Prouveur interactif - Manuel Utilisateur

Transcript
148
Prouveur interactif - Manuel Utilisateur
Le but devient :
(nc1-nc2) mod 2 ∈ 1-2. .0 ⇒ nc1-(nc1-nc2)/2-(nc2+(nc1-nc2)/2) ∈ -1. .1
Nous retrouvons le but précédent l’ajout d’hypothèse, sous l’hypothèse voulue. Cette partie de la démonstration a profité à la fois de la règle ajoutée et des fonctionnalités de
preuve automatique, ce qui nous permet de ne pas s’attarder sur les parties démontrables
automatiquement. La zone de ligne de commande contient l’arbre de preuve suivant :
Force(0) &
dd &
dc(nc1-nc2<=0) &
dd &
ah((nc1-nc2) mod 2: 1-2..0) &
ar(IntDiv.4,Once) &
pr &
pr &
pr &
Next
Le mot clef Next indenté directement sous la commande ah indique que le but actuel est
un sous-but produit par cette commande. Rappelons que ah(H) produit deux sous-buts à
partir d’un but B : le sous-but H puis le sous-but H ⇒ B. Nous sommes donc sur ce
deuxième sous-but, en effet Next est le deuxième mot clef indenté sous ah, après ar.
La règle manuelle a servi à fabriquer une nouvelle hypothèse, il s’agit donc d’une sorte
de génération par l’avant. Il aurait été possible de fabriquer une règle forward pour obtenir le même résultat, mais celle-ci serait moins simple. Le procédé utilisant l’ajout d’hypothèse nous permet d’exploiter facilement une règle écrite uniquement en fonction de
considérations mathématiques.
Nous avons introduit l’intervalle de variation du reste, mais le prouveur ne peut pas encore
aboutir sans utiliser la première règle de la théorie IntDiv :
b*(a/b) == a - (a mod b);
Si nous utilisons la commande pr, il est clair que le but courant ne va pas être déchargé. Il
est néanmoins utile que le prouveur simplifie la nouvelle hypothèse et commence la preuve
en simplifiant le but. Pour faire tout ceci sans démarrer des preuves par cas exploratoires,
nous pouvons utiliser pr(Red) :
PRI > pr(Red)
Starting Prover Call
Le but devient :
0 ≤ 1+nc1-nc2-2×((nc1-nc2)/2)