aboutsummaryrefslogtreecommitdiff
path: root/pretyping/evarutil.ml
diff options
context:
space:
mode:
authorherbelin2006-09-12 08:34:51 +0000
committerherbelin2006-09-12 08:34:51 +0000
commit56b8bf5bdada4a09ace234c96304b4898def9664 (patch)
treecf583273e4a28924302d7cfb117e252bdbdbe655 /pretyping/evarutil.ml
parent3b8a00ab56de51d59cc14ef548929403365269e8 (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.ml10
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) *)