4.45 Search hypothesis

Recherche dhypothèses

Syntaxe

  sh(P,A)
  sh(P)
avec :

Utilisation

Cette commande permet de rechercher, parmi les hypothèses, celles qui satisfont certains critères.

P représente ce que les parties d’une hypothèse doivent vérifier pour que celle-ci soit sélectionnée. P doit être un ensemble de sous-formules séparées par les trois opérateurs spéciaux _and, _or, _not.
Par exemple : si P est égal à
  (var1 __and var2) __or var3
on sélectionne les hypothèses qui contiennent soit var1 et var2 à la fois, soit var3.
Les formules avec des jokers sont autorisées.

A représente ce que l’hypothèse dans sa globalité doit vérifier, dans le même langage que précédemment.
Par exemple :
  (a = b) __or (a b)
sélectionne les hypothèses qui sont soit des égalités, soit des implications.
Attention ! ! A l’intérieur d’un __not, l’usage de __and et __or n’est pas reconnu.
De même, A ne doit pas être équivalent à un terme du genre ((a = b) __and (a b)), sinon aucune hypothèse ne serait sélectionnée.

L’argument A peut être omis.

Si l’un des éléments de P est une variable, alors il faut que les hypothèses trouvées contiennent la variable en question.
Par exemple :
  sh(var)
sélectionne les hypothèses qui contiennent var, mais pas var$i ou my_var (var est considéré ici comme une formule et non comme une chaine de caractères).

Une utilisation classique consiste à rechercher toutes les hypothèses qui font référence à une variable donnée.

Exemple

Soit la situation suivante :


 
    Hypothesis  
        ENS = {e1,e2,e3,e4,e5} &  
        ENS: FIN(NATURAL*{ENS.enum}) &  
        not(ENS = {}) &  
        xx: 1..10 &  
        yy: 1..10 &  
        zz: 1..100 &  
        tt: ENS &  
        uu: ENS &  
        not(uu = tt) &  
        uu: {e1,e2,e3,e4} => tt = e5 &  
        uu = e5 => tt = e1 &  
        1<=xx &  
        xx<=10 &  
        1<=yy &  
        yy<=10 &  
        1<=zz &  
        zz<=100  
    Goal  
        not(uu = e1)  
 


On commence par rechercher toutes les hypothèses qui contiennent la variable uu.


 
PRI> sh(uu)  
 


Le résultat obtenu est :


 
Searching all Hypothesis that :  
  contain uu  
  match with a  
Starting search...  
Found hypothesis List is  
        uu = e5 => tt = e1 &  
        uu: {e1,e2,e3,e4} => tt = e5 &  
        not(uu = tt) &  
        uu: ENS  
End of found hypothesis  
 


Le message match with a est affiché car lorsque le paramètre A est omis, les hypothèses doivent coïncider avec le pattern très générique a.
On cherche ensuite les hypothèses qui font référence simultanément à uu et tt.


 
PRI> sh(uu _and tt)  
 


Le resultat obtenu est le suivant :


 
Searching all Hypothesis that :  
  contain uu _and tt  
  match with a  
Starting search...  
Found hypothesis List is  
        uu = e5 => tt = e1 &  
        uu: {e1,e2,e3,e4} => tt = e5 &  
        not(uu = tt)  
End of found hypothesis  
 


On cherche maintenant les hypothèses qui font référence à la variable uu ou qui contiennent l’expression not(a) (a est un joker).


 
PRI> sh(uu _or not(a))  
 


Les hypothèses sélectionnées sont :


 
Searching all Hypothesis that :  
  contain uu _or not(a)  
  match with a  
Starting search...  
Found hypothesis List is  
        uu = e5 => tt = e1 &  
        uu: {e1,e2,e3,e4} => tt = e5 &  
        not(uu = tt) &  
        uu: ENS  
End of found hypothesis  
 


On cherche enfin les hypothèses qui font référence à la variable uu et dont la forme est a : b ou a = b.


 
PRI> sh(uu, (a:b _or a=b))  
 


Les hypothèses sélectionnées sont :
 


 
Searching all Hypothesis that :  
  contain uu  
  match with a: b _or a = b  
Starting search...  
Found hypothesis List is  
        uu: ENS  
End of found hypothesis