Skip to content

Commit 79e8762

Browse files
TDiazTmattam82
authored andcommitted
Adapt to rocq-prover/rocq#21195 (Univ.Constraints -> UnivConstraints)
fixup optcomp Fix overlay for elimination-constraints Fix overlay Fix overlay, test on 9.1 Fix unused opens Try to fix the weird issue with univ_binder_compat_820 Typo Another unused open Another try
1 parent 639cd9f commit 79e8762

File tree

6 files changed

+251
-102
lines changed

6 files changed

+251
-102
lines changed

src/rocq_elpi_HOAS.ml

Lines changed: 94 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,13 @@ let constraint_eq u1 u2 =
108108
let open UnivProblem in
109109
ULe (u1, u2)
110110

111+
[%%if coq = "9.0" || coq = "9.1"]
111112
let add_constraints state c = S.update (Option.get !pre_engine) state (fun ({ sigma } as x) ->
112113
{ x with sigma = Evd.add_universe_constraints sigma c })
113-
114+
[%%else]
115+
let add_constraints state c = S.update (Option.get !pre_engine) state (fun ({ sigma } as x) ->
116+
{ x with sigma = Evd.add_constraints sigma c })
117+
[%%endif]
114118
let add_universe_constraint state c =
115119
let open UnivProblem in
116120
try add_constraints state (Set.singleton c)
@@ -204,23 +208,92 @@ let universe_level_variable =
204208
end
205209
}
206210

207-
let universe_constraint : Univ.univ_constraint API.Conversion.t =
211+
[%%if coq = "9.0" || coq = "9.1"]
212+
type univ_cst = Univ.univ_constraint
213+
type univ_csts = Univ.Constraints.t
214+
type univ_ctx_set = Univ.ContextSet.t
215+
216+
let univ_lt = Univ.Lt
217+
let univ_le = Univ.Le
218+
let univ_eq = Univ.Eq
219+
let univ_csts_of_list = Univ.Constraints.of_list
220+
let univ_csts_to_list = Univ.Constraints.elements
221+
let evd_merge_ctx_set rigid = Evd.merge_sort_context_set rigid
222+
let subst_univs_constraints = Univ.subst_univs_level_constraints
223+
let univs_of_csts = UVars.UContext.constraints
224+
let mk_universe_decl univdecl_extensible_instance univdecl_extensible_constraints univdecl_constraints univdecl_instance =
225+
let open UState in
226+
{ univdecl_qualities = [];
227+
univdecl_extensible_instance;
228+
univdecl_extensible_qualities = false;
229+
univdecl_extensible_constraints;
230+
univdecl_constraints;
231+
univdecl_instance}
232+
let default_univ_decl = UState.default_univ_decl
233+
let dest_udecl ({ UState.univdecl_instance ; univdecl_constraints } : UState.universe_decl) =
234+
univdecl_instance, univdecl_constraints
235+
236+
let universe_constraint : univ_cst API.Conversion.t =
208237
let open API.Conversion in let open API.AlgebraicData in declare {
209238
ty = TyName "univ-constraint";
210239
doc = "Constraint between two universes level variables";
211240
pp = (fun fmt _ -> Format.fprintf fmt "<todo>");
212241
constructors = [
213242
K("lt","",A(universe_level_variable,A(universe_level_variable,N)),
214-
B (fun u1 u2 -> (u1,Univ.Lt,u2)),
243+
B (fun u1 u2 -> (u1,univ_lt,u2)),
215244
M (fun ~ok ~ko -> function (l1,Univ.Lt,l2) -> ok l1 l2 | _ -> ko ()));
216245
K("le","",A(universe_level_variable,A(universe_level_variable,N)),
217-
B (fun u1 u2 -> (u1,Univ.Le,u2)),
246+
B (fun u1 u2 -> (u1,univ_le,u2)),
218247
M (fun ~ok ~ko -> function (l1,Univ.Le,l2) -> ok l1 l2 | _ -> ko ()));
219248
K("eq","",A(universe_level_variable,A(universe_level_variable,N)),
220-
B (fun u1 u2 -> (u1,Univ.Eq,u2)),
249+
B (fun u1 u2 -> (u1,univ_eq,u2)),
221250
M (fun ~ok ~ko -> function (l1,Univ.Eq,l2) -> ok l1 l2 | _ -> ko ()))
222251
]
223252
} |> API.ContextualConversion.(!<)
253+
[%%else]
254+
type univ_cst = Univ.UnivConstraint.t
255+
type univ_csts = Univ.UnivConstraints.t
256+
type univ_ctx_set = PConstraints.ContextSet.t
257+
let univ_lt = Univ.UnivConstraint.Lt
258+
let univ_le = Univ.UnivConstraint.Le
259+
let univ_eq = Univ.UnivConstraint.Eq
260+
let univ_csts_of_list = Univ.UnivConstraints.of_list
261+
let univ_csts_to_list = Univ.UnivConstraints.elements
262+
let evd_merge_ctx_set rigid = Evd.merge_sort_context_set rigid QGraph.Internal
263+
let subst_univs_constraints x = UVars.subst_univs_constraints (Sorts.QVar.Map.empty,x)
264+
let univs_of_csts x = PConstraints.univs @@ UVars.UContext.constraints x
265+
let mk_universe_decl sort_poly_decl_extensible_instance sort_poly_decl_extensible_constraints sort_poly_decl_univ_constraints sort_poly_decl_instance =
266+
let open UState in
267+
{ sort_poly_decl_qualities = [];
268+
sort_poly_decl_extensible_instance;
269+
sort_poly_decl_elim_constraints = Sorts.ElimConstraints.empty;
270+
sort_poly_decl_extensible_qualities = false;
271+
sort_poly_decl_extensible_constraints;
272+
sort_poly_decl_univ_constraints;
273+
sort_poly_decl_instance}
274+
let default_univ_decl = UState.default_sort_poly_decl
275+
let dest_udecl ({ UState.sort_poly_decl_instance ; sort_poly_decl_univ_constraints } : UState.sort_poly_decl) =
276+
sort_poly_decl_instance, sort_poly_decl_univ_constraints
277+
278+
let universe_constraint : univ_cst API.Conversion.t =
279+
let open API.Conversion in let open API.AlgebraicData in declare {
280+
ty = TyName "univ-constraint";
281+
doc = "Constraint between two universes level variables";
282+
pp = (fun fmt _ -> Format.fprintf fmt "<todo>");
283+
constructors = [
284+
K("lt","",A(universe_level_variable,A(universe_level_variable,N)),
285+
B (fun u1 u2 -> (u1,univ_lt,u2)),
286+
M (fun ~ok ~ko -> function (l1,Univ.UnivConstraint.Lt,l2) -> ok l1 l2 | _ -> ko ()));
287+
K("le","",A(universe_level_variable,A(universe_level_variable,N)),
288+
B (fun u1 u2 -> (u1,univ_le,u2)),
289+
M (fun ~ok ~ko -> function (l1,Univ.UnivConstraint.Le,l2) -> ok l1 l2 | _ -> ko ()));
290+
K("eq","",A(universe_level_variable,A(universe_level_variable,N)),
291+
B (fun u1 u2 -> (u1,univ_eq,u2)),
292+
M (fun ~ok ~ko -> function (l1,Univ.UnivConstraint.Eq,l2) -> ok l1 l2 | _ -> ko ()))
293+
]
294+
} |> API.ContextualConversion.(!<)
295+
[%%endif]
296+
224297

225298
let universe_variance : (Univ.Level.t * UVars.Variance.t option) API.Conversion.t =
226299
let open API.Conversion in let open API.AlgebraicData in declare {
@@ -243,8 +316,8 @@ let universe_variance : (Univ.Level.t * UVars.Variance.t option) API.Conversion.
243316
]
244317
} |> API.ContextualConversion.(!<)
245318

246-
type universe_decl = (Univ.Level.t list * bool) * (Univ.Constraints.t * bool)
247-
type universe_decl_cumul = ((Univ.Level.t * UVars.Variance.t option) list * bool) * (Univ.Constraints.t * bool)
319+
type universe_decl = (Univ.Level.t list * bool) * (univ_csts * bool)
320+
type universe_decl_cumul = ((Univ.Level.t * UVars.Variance.t option) list * bool) * (univ_csts * bool)
248321

249322
type any_universe_decl =
250323
| NonCumul of universe_decl
@@ -257,11 +330,11 @@ let universe_decl : any_universe_decl API.Conversion.t =
257330
pp = (fun fmt _ -> Format.fprintf fmt "<todo>");
258331
constructors = [
259332
K("upoly-decl","",A(list universe_level_variable,A(bool,A(list universe_constraint,A(bool,N)))),
260-
B (fun x sx y sy-> NonCumul ((x,sx),(Univ.Constraints.of_list y,sy))),
261-
M (fun ~ok ~ko -> function NonCumul ((x,sx),(y,sy)) -> ok x sx (Univ.Constraints.elements y) sy | Cumul _ -> ko ()));
333+
B (fun x sx y sy-> NonCumul ((x,sx),(univ_csts_of_list y,sy))),
334+
M (fun ~ok ~ko -> function NonCumul ((x,sx),(y,sy)) -> ok x sx (univ_csts_to_list y) sy | Cumul _ -> ko ()));
262335
K("upoly-decl-cumul","",A(list universe_variance,A(bool,A(list universe_constraint,A(bool,N)))),
263-
B (fun x sx y sy -> Cumul ((x,sx),(Univ.Constraints.of_list y,sy))),
264-
M (fun ~ok ~ko -> function Cumul ((x,sx),(y,sy)) -> ok x sx (Univ.Constraints.elements y) sy | NonCumul _ -> ko ()))
336+
B (fun x sx y sy -> Cumul ((x,sx),(univ_csts_of_list y,sy))),
337+
M (fun ~ok ~ko -> function Cumul ((x,sx),(y,sy)) -> ok x sx (univ_csts_to_list y) sy | NonCumul _ -> ko ()))
265338
]
266339
} |> API.ContextualConversion.(!<)
267340

@@ -889,8 +962,8 @@ module CoqEngine_HOAS : sig
889962

890963
(* when the env changes under the hood, we can adapt sigma or drop it but keep
891964
its constraints *)
892-
val from_env_keep_univ_of_sigma : uctx:Univ.ContextSet.t -> env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
893-
val from_env_keep_univ_and_sigma : uctx:Univ.ContextSet.t -> env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
965+
val from_env_keep_univ_of_sigma : uctx:univ_ctx_set -> env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
966+
val from_env_keep_univ_and_sigma : uctx:univ_ctx_set -> env0:Environ.env -> env:Environ.env -> Evd.evar_map -> coq_engine
894967

895968
end = struct
896969

@@ -1690,11 +1763,11 @@ let body_of_constant state c inst_opt = S.update_return engine state (fun x ->
16901763
let c, ctx = UnivGen.fresh_global_instance x.global_env (ConstRef c) ?names:inst_opt in
16911764
let c, inst = Constr.destConst c in
16921765
let bo = Vars.subst_instance_constr inst bo in
1693-
let sigma = Evd.merge_sort_context_set Evd.univ_rigid x.sigma ctx in
1766+
let sigma = evd_merge_ctx_set Evd.univ_rigid x.sigma ctx in
16941767
let sigma = match priv with
16951768
| Opaqueproof.PrivateMonomorphic () -> sigma
16961769
| Opaqueproof.PrivatePolymorphic ctx ->
1697-
let ctx = Util.on_snd (Univ.subst_univs_level_constraints (snd (UVars.make_instance_subst inst))) ctx in
1770+
let ctx = Util.on_snd (subst_univs_constraints (snd (UVars.make_instance_subst inst))) ctx in
16981771
Evd.merge_context_set Evd.univ_rigid sigma ctx
16991772
in
17001773
{ x with sigma }, (Some (EConstr.of_constr bo), Some inst)
@@ -1852,7 +1925,7 @@ let in_coq_poly_gref ~depth ~origin ~failsafe s t i =
18521925
s, u, []
18531926
with Not_found ->
18541927
let u, ctx = UnivGen.fresh_global_instance (get_global_env s) t in
1855-
let s = update_sigma s (fun sigma -> Evd.merge_sort_context_set UState.univ_flexible_alg sigma ctx) in
1928+
let s = update_sigma s (fun sigma -> evd_merge_ctx_set UState.univ_flexible_alg sigma ctx) in
18561929
let u =
18571930
match C.kind u with
18581931
| C.Const (_, u) -> u
@@ -2943,9 +3016,9 @@ let universes_of_term state t =
29433016
let sigma = get_sigma state in
29443017
snd (EConstr.universes_of_constr sigma t)
29453018

2946-
let universes_of_udecl state ({ UState.univdecl_instance ; univdecl_constraints } : UState.universe_decl) =
2947-
let used1 = univdecl_instance in
2948-
let used2 = List.map (fun (x,_,y) -> [x;y]) (Univ.Constraints.elements univdecl_constraints) in
3019+
let universes_of_udecl state udecl =
3020+
let used1, csts = dest_udecl udecl in
3021+
let used2 = List.map (fun (x,_,y) -> [x;y]) (univ_csts_to_list csts) in
29493022
let used = List.fold_right Univ.Level.Set.add used1 Univ.Level.Set.empty in
29503023
let used = List.fold_right Univ.Level.Set.add (List.flatten used2) used in
29513024
used
@@ -2966,18 +3039,9 @@ let name_universe_level state l =
29663039
)
29673040

29683041

2969-
let mk_universe_decl univdecl_extensible_instance univdecl_extensible_constraints univdecl_constraints univdecl_instance =
2970-
let open UState in
2971-
{ univdecl_qualities = [];
2972-
univdecl_extensible_instance;
2973-
univdecl_extensible_qualities = false;
2974-
univdecl_extensible_constraints;
2975-
univdecl_constraints;
2976-
univdecl_instance}
2977-
29783042
let poly_cumul_udecl_variance_of_options state options =
29793043
match options.universe_decl with
2980-
| NotUniversePolymorphic -> state, false, false, UState.default_univ_decl, [| |]
3044+
| NotUniversePolymorphic -> state, false, false, default_univ_decl, [| |]
29813045
| Cumulative ((univ_lvlt_var,univdecl_extensible_instance),(univdecl_constraints,univdecl_extensible_constraints)) ->
29823046
let univdecl_instance, variance = List.split univ_lvlt_var in
29833047
state, true, true,
@@ -3536,7 +3600,7 @@ let upoly_decl_of ~depth state ~loose_udecl mie =
35363600
if not (CArray.is_empty qvars) then nYI "sort poly inductives"
35373601
else
35383602
let state, vars = CArray.fold_left_map (fun s l -> fst (name_universe_level s l), l) state vars in
3539-
let csts = UVars.UContext.constraints uc in
3603+
let csts = univs_of_csts uc in
35403604
begin match mie.mind_entry_variance with
35413605
| None ->
35423606
let state, up, gls = universe_decl.API.Conversion.embed ~depth state (NonCumul ((Array.to_list vars,loose_udecl),(csts,loose_udecl))) in

src/rocq_elpi_HOAS.mli

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,19 @@ type uinstanceoption =
2424
| VarInstance of (FlexibleData.Elpi.t * RawData.term list * inv_rel_key)
2525
(* a variable was provided, the command will compute the instance to unify with it *)
2626

27-
type universe_decl = (Univ.Level.t list * bool) * (Univ.Constraints.t * bool)
28-
type universe_decl_cumul = ((Univ.Level.t * UVars.Variance.t option) list * bool) * (Univ.Constraints.t * bool)
27+
[%%if coq = "9.0" || coq = "9.1"]
28+
type univ_cst = Univ.univ_constraint
29+
type univ_csts = Univ.Constraints.t
30+
type univ_ctx_set = Univ.ContextSet.t
31+
[%%else]
32+
type univ_cst = Univ.UnivConstraint.t
33+
type univ_csts = Univ.UnivConstraints.t
34+
type univ_ctx_set = PConstraints.ContextSet.t
35+
[%%endif]
36+
37+
type universe_decl = (Univ.Level.t list * bool) * (univ_csts * bool)
38+
type universe_decl_cumul = ((Univ.Level.t * UVars.Variance.t option) list * bool) * (univ_csts * bool)
39+
2940
type universe_decl_option =
3041
| NotUniversePolymorphic
3142
| Cumulative of universe_decl_cumul
@@ -115,10 +126,14 @@ type record_field_spec = { name : Name.t; is_coercion : coercion_status; is_cano
115126
val lp2inductive_entry :
116127
depth:int -> empty coq_context -> constraints -> State.t -> term ->
117128
State.t * (DeclareInd.default_dep_elim list * Entries.mutual_inductive_entry * Univ.ContextSet.t * UnivNames.universe_binders * (bool * record_field_spec list) option * DeclareInd.one_inductive_impls list) * Conversion.extra_goals
118-
[%%else]
129+
[%%elif coq = "9.1"]
119130
val lp2inductive_entry :
120131
depth:int -> empty coq_context -> constraints -> State.t -> term ->
121132
State.t * (DeclareInd.default_dep_elim list * Entries.mutual_inductive_entry * Univ.ContextSet.t * UState.named_universes_entry * (bool * record_field_spec list) option * DeclareInd.one_inductive_impls list) * Conversion.extra_goals
133+
[%%else]
134+
val lp2inductive_entry :
135+
depth:int -> empty coq_context -> constraints -> State.t -> term ->
136+
State.t * (DeclareInd.default_dep_elim list * Entries.mutual_inductive_entry * PConstraints.ContextSet.t * UState.named_universes_entry * (bool * record_field_spec list) option * DeclareInd.one_inductive_impls list) * Conversion.extra_goals
122137
[%%endif]
123138

124139
[%%if coq = "9.0"]
@@ -222,7 +237,12 @@ val in_elpiast_primitive : loc:Ast.Loc.t -> primitive_value -> Ast.Term.t
222237

223238
val uinstance : UVars.Instance.t Conversion.t
224239

240+
[%%if coq = "9.0" || coq = "9.1"]
225241
val universe_constraint : Univ.univ_constraint Conversion.t
242+
[%%else]
243+
val universe_constraint : Univ.UnivConstraint.t Conversion.t
244+
[%%endif]
245+
226246
val universe_variance : (Univ.Level.t * UVars.Variance.t option) Conversion.t
227247
type any_universe_decl =
228248
| NonCumul of universe_decl
@@ -306,11 +326,16 @@ val body_of_constant :
306326
State.t -> Names.Constant.t -> UVars.Instance.t option ->
307327
State.t * EConstr.t option * UVars.Instance.t option
308328

309-
val grab_global_env : uctx:Univ.ContextSet.t -> State.t -> State.t
310329
val grab_global_env_drop_univs_and_sigma : State.t -> State.t
311330
val grab_global_env_drop_sigma : State.t -> State.t
312-
val grab_global_env_drop_sigma_keep_univs : uctx:Univ.ContextSet.t -> State.t -> State.t
313331

332+
[%%if coq = "9.0" || coq = "9.1"]
333+
val grab_global_env : uctx:Univ.ContextSet.t -> State.t -> State.t
334+
val grab_global_env_drop_sigma_keep_univs : uctx:Univ.ContextSet.t -> State.t -> State.t
335+
[%%else]
336+
val grab_global_env : uctx:PConstraints.ContextSet.t -> State.t -> State.t
337+
val grab_global_env_drop_sigma_keep_univs : uctx:PConstraints.ContextSet.t -> State.t -> State.t
338+
[%%endif]
314339
val mk_decl : depth:int -> Name.t -> ty:term -> term
315340
(* Adds an Arg for the normal form with ctx_len context entry vars in scope *)
316341

@@ -347,10 +372,16 @@ val force_level_of_universe : state -> Univ.Universe.t -> state * Univ.Level.t *
347372
val purge_algebraic_univs_sort : state -> EConstr.ESorts.t -> state * Sorts.t
348373
val ideclc : constant
349374
val uideclc : constant
350-
val poly_cumul_udecl_variance_of_options : state -> options -> state * bool * bool * UState.universe_decl * Entries.variance_entry
351375
val merge_universe_context : state -> UState.t -> state
352376
val restricted_sigma_of : Univ.Level.Set.t -> state -> Evd.evar_map
353377
val universes_of_term : state -> EConstr.t -> Univ.Level.Set.t
378+
379+
[%%if coq = "9.0" || coq = "9.1"]
380+
val poly_cumul_udecl_variance_of_options : state -> options -> state * bool * bool * UState.universe_decl * Entries.variance_entry
354381
val universes_of_udecl : state -> UState.universe_decl -> Univ.Level.Set.t
382+
[%%else]
383+
val poly_cumul_udecl_variance_of_options : state -> options -> state * bool * bool * UState.sort_poly_decl * Entries.variance_entry
384+
val universes_of_udecl : state -> UState.sort_poly_decl -> Univ.Level.Set.t
385+
[%%endif]
355386

356387
val mind_record : Declarations.mind_specif -> Declarations.record_info

0 commit comments

Comments
 (0)