Tentative de preuve par cas
dc(f)
dc(v,E)
avec :
Cette commande permet le déclenchement d’une preuve par cas.
Si le but à prouver est B :
Remarquons que l’utilisateur doit vérifier que le prédicat v ∈ E est bien typé (voir chapitre 2.2 page §) et bien défini (voir chapitre 2.3 page §).
La preuve à venir dépend de la forme de l’expression v,E :
Soit la situation suivante :
Hypothesis xx: 1..10 & yy: 1..10 & zz: 1..100 & xx: 1..5 => yy = 10 & xx: 6..10 => yy = 1 & yy*xx<=100 & xx*yy<=100 or (yy*yy<=100 & yy*yy<=100) Goal xx+yy-1: 1..100
|
Du fait de la présence des deux hypothèses xx : 1..5 => yy = 10 et xx : 6..10 => yy = 1,
l’opérateur décide de lancer une preuve par cas, pour le prédicat xx : 1..5.
PRI> dc(xx: 1..5)
|
Le premier but traité est donc :
Goal xx: 1..5 => xx+yy-1: 1..100
|
Le prouveur va donc tenter de prouver le but courant, d’abord sous l’hypothèse xx : 1..5. Pour
cela, l’opérateur applique la commande pr (voir chapitre 4.38 page §).
PRI> pr
|
Le but est prouvé par le prouveur automatique. L’autre cas à traiter est donc not(xx : 1..5).
Goal not(xx: 1..5) => xx+yy-1: 1..100
|
L’opérateur lance de nouveau le prouveur automatique.
PRI> pr
|
La PO est prouvée et sa ligne de commande est :
Force(0) & dd & dc(xx: 1..5) & pr & pr & Next
|
Considérons maintenant la preuve par cas, dans le cas d’un ensemble énuméré.
Soit la situation suivante :
Hypothesis ENS = {e1,e2,e3,e4,e5} & ENS: FIN(NATURAL*{ENS.enum}) & not(ENS = {}) & xx: ENS & xx: {e1,e2,e3,e4} Goal not(xx = e5)
|
L’opérateur lance une preuve par cas, relativement à xx, qui appartient à l’ensemble énuméré
ENS.
PRI> dc(xx,ENS) Do Cases on Enumerated: {5}\/{4}\/{3}\/{2}\/{1}
|
Le prouveur interactif va donc déclencher 5 preuves successives :
Goal xx = e5 => not(xx = e5) Goal xx = e4 => not(xx = e5) Goal xx = e3 => not(xx = e5) Goal xx = e2 => not(xx = e5) Goal xx = e1 => not(xx = e5)
|