diff options
| author | herbelin | 2006-09-12 08:34:51 +0000 |
|---|---|---|
| committer | herbelin | 2006-09-12 08:34:51 +0000 |
| commit | 56b8bf5bdada4a09ace234c96304b4898def9664 (patch) | |
| tree | cf583273e4a28924302d7cfb117e252bdbdbe655 /pretyping/evarutil.ml | |
| parent | 3b8a00ab56de51d59cc14ef548929403365269e8 (diff) | |
Ajout unification pattern dans l'algorithme d'unification des
tactiques (unification.ml) + renommages (evarconv.ml) + exemple (unification.v)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9131 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping/evarutil.ml')
| -rw-r--r-- | pretyping/evarutil.ml | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml index 73cfa698db..47b10e6dd0 100644 --- a/pretyping/evarutil.ml +++ b/pretyping/evarutil.ml @@ -493,9 +493,15 @@ let head_evar = that we don't care whether args itself contains Rel's or even Rel's distinct from the ones in l *) -let is_unification_pattern (_,args) l = +let is_unification_pattern_evar (_,args) l = let l' = Array.to_list args @ l in - List.for_all (fun a -> isRel a or isVar a) l' & list_uniquize l' = l' + List.for_all (fun a -> isRel a or isVar a) l' & list_distinct l' + +let is_unification_pattern f l = + match kind_of_term f with + | Meta _ -> array_for_all isRel l & array_distinct l + | Evar ev -> is_unification_pattern_evar ev (Array.to_list l) + | _ -> false (* From a unification problem "?X l1 = term1 l2" such that l1 is made of distinct rel's, build "\x1...xn.(term1 l2)" (patterns unification) *) |
