4.44 Suggest for exist

Instanciation du but existentiellement quantifié

Syntaxe

  se(v1,,vn)
avec :

Utilisation

Cette commande permet de choisir l’instanciation de variables, sous la portée d’un quantificateur existentiel apparaissant dans le but courant.
Si le but est de la forme :
  (w1,,wn).P(w1,,wn)
alors le but devient :
  P(v1,,vn)

Cette commande n’est protégé ni contre le mauvais typage (voir chapitre 2.2 page §) ni contre la mauvaise définition (voir chapitre 2.3 page §) des valeurs avec lesquelles ont souhaite instancier les variables. Il faut donc faire attention à ne pas introduire d’expressions mal typées ou mal définies.

Ceci peut être vérifié a posteriori à l’aide de l’outil mdelta (cf. Manuel Utilisateur Version 1.0.).

Si la valeur d’une ou plusieurs variables n’est pas connue ou doit rester indéterminée, il est possible d’utiliser le mot-clé _h, afin de ne pas instancier les variables choisies. Par exemple, si le but est :

    #(aa,bb,cc,dd).P(aa,bb,cc,dd)

alors

    se(e1,ENS1,_h,(MAXINT-ff(3)))

transformera le but en

    #cc.P(e1,ENS1,cc,(MAXINT-ff(3)))

Exemple

Soit la situation suivante :


 
    Hypothesis  
        ENS = {e1,e2,e3,e4,e5} &  
        uu: ENS &  
        zz: ENS &  
    Goal  
        #kk.(kk: ENS & not(kk = uu) & not(kk = zz))  
 
 


L’opérateur peut remplacer la variable kk par une valeur judicieusement choisie.


 
PRI> se(e1)  
Starting Suggest for Exist  
 


Dans ce cas, le but courant est remplacé par le but avec la variable kk instanciée.


 
    Goal  
        e1: ENS & not(e1 = uu) & not(e1 = zz)