diff options
-rw-r--r-- | pretyping/evarconv.ml | 2 | ||||
-rw-r--r-- | pretyping/evarutil.ml | 10 | ||||
-rw-r--r-- | pretyping/evd.ml | 13 | ||||
-rw-r--r-- | pretyping/evd.mli | 3 | ||||
-rw-r--r-- | printing/printer.ml | 2 | ||||
-rw-r--r-- | proofs/evar_refiner.ml | 4 | ||||
-rw-r--r-- | proofs/goal.ml | 6 | ||||
-rw-r--r-- | tactics/evar_tactics.ml | 2 | ||||
-rw-r--r-- | toplevel/himsg.ml | 4 |
9 files changed, 25 insertions, 21 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 diff --git a/printing/printer.ml b/printing/printer.ml index 9b8c16938..90ddf8384 100644 --- a/printing/printer.ml +++ b/printing/printer.ml @@ -294,7 +294,7 @@ let pr_concl n sigma g = (* display evar type: a context and a type *) let pr_evgl_sign gl = - let ps = pr_named_context_of (evar_unfiltered_env gl) in + let ps = pr_named_context_of (evar_env gl) in let _, l = List.filter2 (fun b c -> not b) (evar_filter gl) (evar_context gl) in let ids = List.rev (List.map pi1 l) in let warn = diff --git a/proofs/evar_refiner.ml b/proofs/evar_refiner.ml index 8f7513371..71a07326f 100644 --- a/proofs/evar_refiner.ml +++ b/proofs/evar_refiner.ml @@ -36,7 +36,7 @@ let define_and_solve_constraints evk c evd = let w_refine (evk,evi) (ltac_var,rawc) sigma = if Evd.is_defined sigma evk then error "Instantiate called on already-defined evar"; - let env = Evd.evar_env evi in + let env = Evd.evar_filtered_env evi in let sigma',typed_c = try Pretyping.understand_ltac ~resolve_classes:true true sigma env ltac_var (Pretyping.OfType (Some evi.evar_concl)) rawc @@ -53,7 +53,7 @@ let w_refine (evk,evi) (ltac_var,rawc) sigma = (* Main component of vernac command Existential *) let instantiate_pf_com evk com sigma = let evi = Evd.find sigma evk in - let env = Evd.evar_env evi in + let env = Evd.evar_filtered_env evi in let rawc = Constrintern.intern_constr sigma env com in let sigma' = w_refine (evk,evi) (([],[]),rawc) sigma in sigma' diff --git a/proofs/goal.ml b/proofs/goal.ml index a9aa4fa59..df3f6e0db 100644 --- a/proofs/goal.ml +++ b/proofs/goal.ml @@ -464,17 +464,17 @@ module V82 = struct (* Old style env primitive *) let env evars gl = let evi = content evars gl in - Evd.evar_env evi + Evd.evar_filtered_env evi (* For printing *) let unfiltered_env evars gl = let evi = content evars gl in - Evd.evar_unfiltered_env evi + Evd.evar_env evi (* Old style hyps primitive *) let hyps evars gl = let evi = content evars gl in - evi.Evd.evar_hyps + Evd.evar_hyps evi (* Access to ".evar_concl" *) let concl evars gl = diff --git a/tactics/evar_tactics.ml b/tactics/evar_tactics.ml index b7d5e1802..87aff97fb 100644 --- a/tactics/evar_tactics.ml +++ b/tactics/evar_tactics.ml @@ -41,7 +41,7 @@ let instantiate n (ist,rawc) ido gl = if n <= 0 then error "Incorrect existential variable index."; let evk,_ = List.nth evl (n-1) in let evi = Evd.find sigma evk in - let ltac_vars = Tacinterp.extract_ltac_constr_values ist (Evd.evar_env evi) in + let ltac_vars = Tacinterp.extract_ltac_constr_values ist (Evd.evar_filtered_env evi) in let sigma' = w_refine (evk,evi) (ltac_vars,rawc) sigma in tclTHEN (tclEVARS sigma') diff --git a/toplevel/himsg.ml b/toplevel/himsg.ml index 8289f6ca2..cfaea3d74 100644 --- a/toplevel/himsg.ml +++ b/toplevel/himsg.ml @@ -353,7 +353,7 @@ let explain_evar_kind env evi = function | Evar_kinds.InternalHole -> str "an internal placeholder" ++ Option.cata (fun evi -> - let env = Evd.evar_env evi in + let env = Evd.evar_filtered_env evi in str " of type " ++ pr_lconstr_env env evi.evar_concl ++ pr_ne_context_of (str " in environment:"++ fnl ()) (mt ()) env) (mt ()) evi @@ -386,7 +386,7 @@ let explain_unsolvability = function let explain_typeclass_resolution env evi k = match Typeclasses.class_of_constr evi.evar_concl with | Some c -> - let env = Evd.evar_env evi in + let env = Evd.evar_filtered_env evi in fnl () ++ str "Could not find an instance for " ++ pr_lconstr_env env evi.evar_concl ++ pr_ne_context_of (str " in environment:"++ fnl ()) (str ".") env |