aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping
diff options
context:
space:
mode:
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/evarconv.ml2
-rw-r--r--pretyping/evarutil.ml10
-rw-r--r--pretyping/evd.ml13
-rw-r--r--pretyping/evd.mli3
4 files changed, 16 insertions, 12 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index 52ef44672..ca5ed190f 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -636,7 +636,7 @@ let second_order_matching ts env_rhs evd (evk,args) argoccs rhs =
try
let args = Array.to_list args in
let evi = Evd.find_undefined evd evk in
- let env_evar = evar_env evi in
+ let env_evar = evar_filtered_env evi in
let sign = named_context_val env_evar in
let ctxt = evar_filtered_context evi in
let filter = evar_filter evi in
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml
index f4f373754..fcc284832 100644
--- a/pretyping/evarutil.ml
+++ b/pretyping/evarutil.ml
@@ -1452,7 +1452,7 @@ type conv_fun =
let check_evar_instance evd evk1 body conv_algo =
let evi = Evd.find evd evk1 in
- let evenv = evar_unfiltered_env evi in
+ let evenv = evar_env evi in
(* FIXME: The body might be ill-typed when this is called from w_merge *)
let ty =
try Retyping.get_type_of evenv evd body
@@ -1571,7 +1571,7 @@ let rec invert_definition conv_algo choose env evd (evk,argsv as ev) rhs =
raise (NotEnoughInformationToProgress sols);
(* No unique projection but still restrict to where it is possible *)
(* materializing is necessary, but is restricting useful? *)
- let ty = find_solution_type (evar_env evi) sols in
+ let ty = find_solution_type (evar_filtered_env evi) sols in
let sign = evar_filtered_context evi in
let ty' = instantiate_evar sign ty (Array.to_list argsv) in
let (evd,evar,(evk',argsv' as ev')) =
@@ -1711,7 +1711,7 @@ and evar_define conv_algo ?(choose=false) env evd (evk,argsv as ev) rhs =
* Another problem is that type variables are evars of type Type
let _ =
try
- let env = evar_env evi in
+ let env = evar_filtered_env evi in
let ty = evi.evar_concl in
Typing.check env evd' body ty
with e ->
@@ -1963,7 +1963,7 @@ let idx = Id.of_string "x"
let define_pure_evar_as_product evd evk =
let evi = Evd.find_undefined evd evk in
- let evenv = evar_unfiltered_env evi in
+ let evenv = evar_env evi in
let id = next_ident_away idx (ids_of_named_context (evar_context evi)) in
let evd1,dom = new_type_evar evd evenv ~filter:(evar_filter evi) in
let evd2,rng =
@@ -1997,7 +1997,7 @@ let define_evar_as_product evd (evk,args) =
let define_pure_evar_as_lambda env evd evk =
let evi = Evd.find_undefined evd evk in
- let evenv = evar_unfiltered_env evi in
+ let evenv = evar_env evi in
let typ = whd_betadeltaiota env evd (evar_concl evi) in
let evd1,(na,dom,rng) = match kind_of_term typ with
| Prod (na,dom,rng) -> (evd,(na,dom,rng))
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index a6049d0cf..4208a3763 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -50,14 +50,17 @@ let make_evar hyps ccl = {
}
let evar_concl evi = evi.evar_concl
-let evar_hyps evi = evi.evar_hyps
-let evar_context evi = named_context_of_val evi.evar_hyps
-let evar_body evi = evi.evar_body
let evar_filter evi = evi.evar_filter
-let evar_unfiltered_env evi = Global.env_of_context evi.evar_hyps
+let evar_body evi = evi.evar_body
+let evar_context evi = named_context_of_val evi.evar_hyps
let evar_filtered_context evi =
snd (List.filter2 (fun b c -> b) (evar_filter evi) (evar_context evi))
-let evar_env evi =
+let evar_hyps evi = evi.evar_hyps
+let evar_filtered_hyps evi =
+ List.fold_right push_named_context_val (evar_filtered_context evi)
+ empty_named_context_val
+let evar_env evi = Global.env_of_context evi.evar_hyps
+let evar_filtered_env evi =
List.fold_right push_named (evar_filtered_context evi)
(reset_context (Global.env()))
diff --git a/pretyping/evd.mli b/pretyping/evd.mli
index 86ec47d3e..53956f99b 100644
--- a/pretyping/evd.mli
+++ b/pretyping/evd.mli
@@ -111,10 +111,11 @@ val evar_concl : evar_info -> constr
val evar_context : evar_info -> named_context
val evar_filtered_context : evar_info -> named_context
val evar_hyps : evar_info -> named_context_val
+val evar_filtered_hyps : evar_info -> named_context_val
val evar_body : evar_info -> evar_body
val evar_filter : evar_info -> bool list
-val evar_unfiltered_env : evar_info -> env
val evar_env : evar_info -> env
+val evar_filtered_env : evar_info -> env
(*** Unification state ***)
type evar_map