@@ -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
870870end = 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 =
22432251let 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
22572265let 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+
22762297let solvec = E.Constants. declare_global_symbol " solve"
22772298let msolvec = E.Constants. declare_global_symbol " msolve"
22782299let goalc = E.Constants. declare_global_symbol " goal"
0 commit comments