aboutsummaryrefslogtreecommitdiff
path: root/pretyping
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2015-09-27 16:36:10 +0200
committerPierre-Marie Pédrot2015-09-27 16:47:30 +0200
commit9cadb903b7c3a3be8014152b293cd5ade3a7c8b7 (patch)
treefb4a962f5776a90c74ec14eb40175c95eb6604fc /pretyping
parentca14b0bb67c9db000736333a056fc147c6f5199c (diff)
Removing subst_defined_metas_evars from Evd.
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/unification.ml13
1 files changed, 13 insertions, 0 deletions
diff --git a/pretyping/unification.ml b/pretyping/unification.ml
index 24e06007e9..123f9b8cd3 100644
--- a/pretyping/unification.ml
+++ b/pretyping/unification.ml
@@ -554,6 +554,19 @@ let isAllowedEvar flags c = match kind_of_term c with
| Evar (evk,_) -> not (Evar.Set.mem evk flags.frozen_evars)
| _ -> false
+
+let subst_defined_metas_evars (bl,el) c =
+ let rec substrec c = match kind_of_term c with
+ | Meta i ->
+ let select (j,_,_) = Int.equal i j in
+ substrec (pi2 (List.find select bl))
+ | Evar (evk,args) ->
+ let select (_,(evk',args'),_) = Evar.equal evk evk' && Array.equal Constr.equal args args' in
+ (try substrec (pi3 (List.find select el))
+ with Not_found -> map_constr substrec c)
+ | _ -> map_constr substrec c
+ in try Some (substrec c) with Not_found -> None
+
let check_compatibility env pbty flags (sigma,metasubst,evarsubst) tyM tyN =
match subst_defined_metas_evars (metasubst,[]) tyM with
| None -> sigma