Skip to content

Commit 507f037

Browse files
authored
Merge pull request #651 from LPCIC/master-of-the-universes
[add-const] do not recompute the uctx for the evar map
2 parents 35c19a8 + 544bff1 commit 507f037

File tree

4 files changed

+119
-70
lines changed

4 files changed

+119
-70
lines changed

builtin-doc/coq-builtin.elpi

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,8 @@ external pred coq.env.add-axiom i:id, i:term, o:constant.
804804

805805
% [coq.env.add-section-variable Name Ty C] Declare a new section variable: C
806806
% gets a constant derived from Name
807-
% and the current module
807+
% and the current module.
808+
%
808809
external pred coq.env.add-section-variable i:id, i:term, o:constant.
809810

810811
% [coq.env.add-indt Decl I] Declares an inductive type.

src/coq_elpi_HOAS.ml

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -864,8 +864,8 @@ module CoqEngine_HOAS : sig
864864

865865
(* when the env changes under the hood, we can adapt sigma or drop it but keep
866866
its constraints *)
867-
val from_env_keep_univ_of_sigma : env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
868-
val from_env_keep_univ_and_sigma : env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
867+
val from_env_keep_univ_of_sigma : uctx:Univ.ContextSet.t -> env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
868+
val from_env_keep_univ_and_sigma : uctx:Univ.ContextSet.t -> env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
869869

870870
end = struct
871871

@@ -882,16 +882,24 @@ let show_coq_engine ?with_univs e = Format.asprintf "%a" (pp_coq_engine ?with_un
882882

883883
let from_env env = from_env_sigma env (Evd.from_env env)
884884

885-
let from_env_keep_univ_and_sigma ~env0 ~env sigma0 =
885+
886+
[%%if coq = "8.19" || coq = "8.20"]
887+
let demote uctx sigma0 env =
888+
let uctx = UState.update_sigma_univs (Evd.evar_universe_context sigma0) (Environ.universes env) in
889+
UState.demote_global_univs env uctx
890+
[%%else]
891+
let demote uctx sigma0 env =
892+
UState.demote_global_univs uctx (Evd.evar_universe_context sigma0)
893+
[%%endif]
894+
895+
let from_env_keep_univ_and_sigma ~uctx ~env0 ~env sigma0 =
886896
assert(env0 != env);
887-
let uctx = UState.update_sigma_univs (Evd.evar_universe_context sigma0) (Environ.universes env) in
888-
let uctx = UState.demote_global_univs env uctx in
897+
let uctx = demote uctx sigma0 env in
889898
from_env_sigma env (Evd.set_universe_context sigma0 uctx)
890899

891-
let from_env_keep_univ_of_sigma ~env0 ~env sigma0 =
900+
let from_env_keep_univ_of_sigma ~uctx ~env0 ~env sigma0 =
892901
assert(env0 != env);
893-
let uctx = UState.update_sigma_univs (Evd.evar_universe_context sigma0) (Environ.universes env) in
894-
let uctx = UState.demote_global_univs env uctx in
902+
let uctx = demote uctx sigma0 env in
895903
from_env_sigma env (Evd.from_ctx uctx)
896904

897905
let init () =
@@ -2243,16 +2251,16 @@ let lp2constr syntactic_constraints coq_ctx ~depth state t =
22432251
let set_sigma state sigma = S.update engine state (fun x -> { x with sigma })
22442252

22452253
(* We reset the evar map since it depends on the env in which it was created *)
2246-
let grab_global_env state =
2254+
let grab_global_env ~uctx state =
22472255
let env0 = get_global_env state in
22482256
let env = Global.env () in
22492257
if env == env0 then state
22502258
else
22512259
if Environ.universes env0 == Environ.universes env then
2252-
let state = S.set engine state (CoqEngine_HOAS.from_env_sigma env (get_sigma state)) in
2260+
let state = S.set engine state (CoqEngine_HOAS.from_env_sigma env (get_sigma state)) in
22532261
state
22542262
else
2255-
let state = S.set engine state (CoqEngine_HOAS.from_env_keep_univ_and_sigma ~env0 ~env (get_sigma state)) in
2263+
let state = S.set engine state (CoqEngine_HOAS.from_env_keep_univ_and_sigma ~uctx ~env0 ~env (get_sigma state)) in
22562264
state
22572265
let grab_global_env_drop_univs_and_sigma state =
22582266
let env0 = get_global_env state in
@@ -2267,12 +2275,25 @@ let grab_global_env_drop_sigma state =
22672275
let env0 = get_global_env state in
22682276
let env = Global.env () in
22692277
if env == env0 then state
2270-
else
2271-
let state = S.set engine state (CoqEngine_HOAS.from_env_keep_univ_of_sigma ~env0 ~env (get_sigma state)) in
2278+
else begin
2279+
let sigma = get_sigma state in
2280+
let ustate = Evd.evar_universe_context sigma in
2281+
let state = S.set engine state (CoqEngine_HOAS.from_env_sigma env (Evd.from_ctx ustate)) in
22722282
let state = UVMap.empty state in
22732283
state
2284+
end
22742285

2275-
2286+
let grab_global_env_drop_sigma_keep_univs ~uctx state =
2287+
let env0 = get_global_env state in
2288+
let env = Global.env () in
2289+
if env == env0 then state
2290+
else begin
2291+
let sigma = get_sigma state in
2292+
let state = S.set engine state (CoqEngine_HOAS.from_env_keep_univ_of_sigma ~uctx ~env0 ~env sigma) in
2293+
let state = UVMap.empty state in
2294+
state
2295+
end
2296+
22762297
let solvec = E.Constants.declare_global_symbol "solve"
22772298
let msolvec = E.Constants.declare_global_symbol "msolve"
22782299
let goalc = E.Constants.declare_global_symbol "goal"

src/coq_elpi_HOAS.mli

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,10 @@ val body_of_constant :
296296
State.t -> Names.Constant.t -> UVars.Instance.t option ->
297297
State.t * EConstr.t option * UVars.Instance.t option
298298

299-
val grab_global_env : State.t -> State.t
299+
val grab_global_env : uctx:Univ.ContextSet.t -> State.t -> State.t
300300
val grab_global_env_drop_univs_and_sigma : State.t -> State.t
301301
val grab_global_env_drop_sigma : State.t -> State.t
302+
val grab_global_env_drop_sigma_keep_univs : uctx:Univ.ContextSet.t -> State.t -> State.t
302303

303304
val mk_decl : depth:int -> Name.t -> ty:term -> term
304305
(* Adds an Arg for the normal form with ctx_len context entry vars in scope *)

0 commit comments

Comments
 (0)