Skip to content

Commit 4817188

Browse files
committed
Adapt to PR#18903
1 parent 1f43b47 commit 4817188

11 files changed

Lines changed: 58 additions & 75 deletions

File tree

examples/HoTT_light.v

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ Proof. reduce. destruct X. destruct X0. destruct x0. reflexivity. Defined.
268268

269269
Definition trans_co_eq_inv_arrow_morphism@{i j k} :
270270
∀ (A : Type@{i}) (R : crelation@{i j} A),
271-
Transitive R → Proper@{k j} (respectful@{i j k j k j} R
272-
(respectful@{i j k j k j} Id (@flip@{k k k} _ _ Type@{j} arrow))) R.
271+
Transitive R → Proper@{k j} (respectful@{i j k j} R
272+
(respectful@{i j k j} Id (@flip@{k k k} _ _ Type@{j} arrow))) R.
273273
Proof. reduce. transitivity y. assumption. now destruct X1. Defined.
274274
#[local] Existing Instance trans_co_eq_inv_arrow_morphism.
275275

@@ -458,7 +458,7 @@ Definition path_contr {A} {H:Contr A} (x y : A) : x = y
458458
Definition path2_contr {A} {H:Contr A} {x y : A} (p q : x = y) : p = q.
459459
assert (K : forall (r : x = y), r = path_contr x y).
460460
intro r; destruct r; symmetry; now apply concat_Vp.
461-
apply (transitivity (y:=path_contr x y)).
461+
apply (transitivity (path_contr x y)).
462462
- apply K.
463463
- symmetry; apply K.
464464
Defined.

src/equations_common.ml

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,14 @@ let e_type_of env evd t =
221221
evd := evm; t
222222

223223
let collapse_term_qualities uctx c =
224-
let nf_evar _ = None in
225-
let nf_qvar q = match UState.nf_qvar uctx q with
226-
| QConstant _ as q -> q
227-
| QVar q -> (* hack *) QConstant QType
228-
in
229-
let nf_univ _ = None in
230-
UnivSubst.nf_evars_and_universes_opt_subst nf_evar nf_qvar nf_univ c
224+
let rec self () c =
225+
let nf_qvar q = match UState.nf_qvar uctx q with
226+
| QConstant _ as q -> q
227+
| QVar q -> (* hack *) QConstant QType
228+
in
229+
let nf_univ _ = None in
230+
UnivSubst.map_universes_opt_subst_with_binders id self nf_qvar nf_univ () c
231+
in self () c
231232

232233
let make_definition ?opaque ?(poly=false) evm ?types b =
233234
let env = Global.env () in
@@ -257,7 +258,7 @@ let declare_constant id body ty ~poly ~kind evd =
257258
let cst = Declare.declare_constant ~name:id (Declare.DefinitionEntry ce) ~kind in
258259
Flags.if_verbose Feedback.msg_info (str((Id.to_string id) ^ " is defined"));
259260
if poly then
260-
let cstr = EConstr.(mkConstU (cst, EInstance.make (UVars.UContext.instance (Evd.to_universe_context evm)))) in
261+
let cstr = EConstr.(mkConstU (cst, EInstance.make (UVars.Instance.of_level_instance (UVars.UContext.instance (Evd.to_universe_context evm))))) in
261262
cst, (evm0, cstr)
262263
else cst, (evm0, EConstr.UnsafeMonomorphic.mkConst cst)
263264

@@ -1101,20 +1102,9 @@ let evd_comb1 f evd x =
11011102
let nonalgebraic_universe_level_of_universe env sigma u =
11021103
match ESorts.kind sigma u with
11031104
| Sorts.Set | Sorts.Prop | Sorts.SProp ->
1104-
sigma, Univ.Level.set, u
1105-
| Sorts.Type u0 | Sorts.QSort (_, u0) ->
1106-
match Univ.Universe.level u0 with
1107-
| Some l ->
1108-
(match Evd.universe_rigidity sigma l with
1109-
| Evd.UnivFlexible true ->
1110-
Evd.make_nonalgebraic_variable sigma l, l, ESorts.make @@ Sorts.sort_of_univ @@ Univ.Universe.make l
1111-
| _ -> sigma, l, u)
1112-
| None ->
1113-
let sigma, l = Evd.new_univ_level_variable Evd.univ_flexible sigma in
1114-
let ul = ESorts.make @@ Sorts.sort_of_univ @@ Univ.Universe.make l in
1115-
let sigma = Evd.set_leq_sort env sigma u ul in
1116-
sigma, l, ul
1117-
1105+
sigma, Univ.Universe.type0, u
1106+
| Sorts.Type u0 | Sorts.QSort (_, u0) -> sigma, u0, u
1107+
11181108
let instance_of env sigma ?argu goalu =
11191109
let sigma, goall, goalu = nonalgebraic_universe_level_of_universe env sigma goalu in
11201110
let inst =

src/equations_common.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ val splay_prod_n_assum : env -> Evd.evar_map -> int -> types -> rel_context * ty
442442

443443
(* Universes *)
444444
val nonalgebraic_universe_level_of_universe :
445-
Environ.env -> Evd.evar_map -> ESorts.t -> Evd.evar_map * Univ.Level.t * ESorts.t
445+
Environ.env -> Evd.evar_map -> ESorts.t -> Evd.evar_map * Univ.Universe.t * ESorts.t
446446
val instance_of :
447447
Environ.env ->
448448
Evd.evar_map ->

src/noconf.ml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,7 @@ let derive_no_confusion ~pm env sigma0 ~poly (ind,u as indu) =
138138
let id = add_prefix "NoConfusion_" indid in
139139
let cstNoConf = Declare.declare_constant ~name:id (Declare.DefinitionEntry ce) ~kind:Decls.(IsDefinition Definition) in
140140
let env = Global.env () in
141-
let sigma = Evd.from_env env in
142-
let sigma, indu = Evd.fresh_global
143-
~rigid:Evd.univ_rigid (* Universe levels of the inductive family should not be tampered with. *)
144-
env sigma (GlobRef.IndRef ind) in
145-
let indu = destInd sigma indu in
146-
Noconf_hom.derive_noConfusion_package ~pm env sigma ~poly indu indid
141+
Noconf_hom.derive_noConfusion_package ~pm env ~poly ind indid
147142
~prefix:"" ~tactic:(noconf_tac ()) cstNoConf
148143

149144
let () =

src/noconf_hom.ml

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,21 @@ let get_forced_positions sigma args concl =
5353
in
5454
List.rev (List.fold_left_i is_forced 1 [] args)
5555

56-
let derive_noConfusion_package ~pm env sigma ~poly (ind,u as indu) indid ~prefix ~tactic cstNoConf =
56+
let derive_noConfusion_package ~pm env ~poly ind indid ~prefix ~tactic cstNoConf =
57+
let sigma = Evd.from_env env in
58+
let noid = add_prefix "noConfusion" (add_prefix prefix (add_prefix "_" indid))
59+
and packid = add_prefix "NoConfusion" (add_prefix prefix (add_prefix "Package_" indid)) in
60+
let tc = Typeclasses.class_info_exn env sigma (Lazy.force coq_noconfusion_class) in
61+
let sigma, noconf = Evd.fresh_global ~rigid:Evd.univ_rigid env sigma (GlobRef.ConstRef cstNoConf) in
62+
let sigma, noconfcl = new_global sigma tc.Typeclasses.cl_impl in
63+
let inst, u = destInd sigma noconfcl in
5764
let mindb, oneind = Global.lookup_inductive ind in
5865
let ctx = List.map of_rel_decl oneind.mind_arity_ctxt in
59-
let ctx = subst_instance_context (snd indu) ctx in
6066
let ctx = smash_rel_context ctx in
6167
let len =
6268
if prefix = "" then mindb.mind_nparams
6369
else List.length ctx in
6470
let argsvect = rel_vect 0 len in
65-
let noid = add_prefix "noConfusion" (add_prefix prefix (add_prefix "_" indid))
66-
and packid = add_prefix "NoConfusion" (add_prefix prefix (add_prefix "Package_" indid)) in
67-
let tc = Typeclasses.class_info_exn env sigma (Lazy.force coq_noconfusion_class) in
68-
let sigma, noconf = Evd.fresh_global ~rigid:Evd.univ_rigid env sigma (GlobRef.ConstRef cstNoConf) in
69-
let sigma, noconfcl = new_global sigma tc.Typeclasses.cl_impl in
70-
let inst, u = destInd sigma noconfcl in
7171
let noconfterm = mkApp (noconf, argsvect) in
7272
let ctx, argty =
7373
let ty = Retyping.get_type_of env sigma noconf in
@@ -267,12 +267,7 @@ let derive_no_confusion_hom ~pm env sigma0 ~poly (ind,u as indu) =
267267
(* The principles are now shown, let's prove this forms an equivalence *)
268268
Global.set_strategy (Conv_oracle.EvalConstRef program_cst) Conv_oracle.transparent;
269269
let env = Global.env () in
270-
let sigma = Evd.from_env env in
271-
let sigma, indu = Evd.fresh_global
272-
~rigid:Evd.univ_rigid (* Universe levels of the inductive family should not be tampered with. *)
273-
env sigma (GlobRef.IndRef ind) in
274-
let indu = destInd sigma indu in
275-
(), derive_noConfusion_package ~pm env sigma ~poly indu indid
270+
(), derive_noConfusion_package ~pm env ~poly ind indid
276271
~prefix:"Hom" ~tactic:(noconf_hom_tac ()) program_cst
277272
in
278273
let prog = Splitting.make_single_program env evd data.Covering.flags p ctxmap splitting None in

src/noconf_hom.mli

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ open EConstr
1212
val derive_noConfusion_package :
1313
pm:Declare.OblState.t ->
1414
Environ.env ->
15-
Evd.evar_map ->
1615
poly:bool ->
17-
Names.inductive * EConstr.EInstance.t ->
16+
Names.inductive ->
1817
Names.Id.t ->
1918
prefix:string ->
2019
tactic:unit Proofview.tactic ->

src/sigma_types.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ let telescope env evd = function
139139
let sigty = mkAppG env evd (Lazy.force coq_sigma) [|t; pred|] in
140140
let _, u = destInd !evd (fst (destApp !evd sigty)) in
141141
let _, ua = UVars.Instance.to_array (EInstance.kind !evd u) in
142-
let l = Sorts.sort_of_univ @@ Univ.Universe.make ua.(0) in
142+
let l = Sorts.sort_of_univ @@ ua.(0) in
143143
(* Ensure that the universe of the sigma is only >= those of t and pred *)
144144
let open UnivProblem in
145145
let enforce_leq env sigma t cstr =

src/splitting.ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,9 +1114,10 @@ let gather_fresh_context sigma u octx =
11141114
Sorts.QVar.Set.empty qarr
11151115
in
11161116
let levels =
1117-
Array.fold_left (fun ctx' l ->
1118-
if not (Univ.Level.Set.mem l univs) then Univ.Level.Set.add l ctx'
1119-
else ctx')
1117+
Array.fold_left (fun ctx' u ->
1118+
let levels = Univ.Universe.levels u in
1119+
let levels = Univ.Level.Set.diff levels univs in
1120+
Univ.Level.Set.union levels ctx')
11201121
Univ.Level.Set.empty uarr
11211122
in
11221123
(qualities, levels), (UVars.AbstractContext.instantiate u octx)

test-suite/LogicType.v

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,28 @@ Require Import Equations.Type.FunctionalInduction.
4141

4242
Set Universe Minimization ToSet.
4343
Derive NoConfusionHom for vector.
44+
45+
Print NoConfusionHomPackage_vector.
4446
Unset Universe Minimization ToSet.
4547

4648
#[export]
47-
Instance vector_eqdec@{i +|+} {A : Type@{i}} {n} `(EqDec@{i} A) : EqDec (vector A n).
49+
Instance vector_eqdec@{i} {A : Type@{i}} {n} `(EqDec@{i} A) : EqDec@{i} (vector@{i} A n).
4850
Proof.
4951
intros. intros x. intros y. induction x.
5052
- left. now depelim y.
5153
- depelim y.
5254
pose proof (Classes.eq_dec a a0).
5355
dependent elimination X as [inl id_refl|inr Ha].
54-
-- specialize (IHx v).
55-
dependent elimination IHx as [inl id_refl|inr H'].
56-
--- left; reflexivity.
57-
--- right. simplify *. now apply H'.
56+
-- specialize (IHx v).
57+
dependent elimination IHx as [inl id_refl|inr H'].
58+
--- left; reflexivity.
59+
--- right. simplify *. now apply H'.
5860
-- right; simplify *. now apply Ha.
5961
Defined.
6062

6163
Record vect {A} := mkVect { vect_len : nat; vect_vector : vector A vect_len }.
6264
Coercion mkVect : vector >-> vect.
65+
Set Universe Minimization ToSet.
6366

6467
Derive NoConfusion for vect.
6568
Reserved Notation "x ++v y" (at level 60).
@@ -98,7 +101,7 @@ Section foo.
98101
| (xs, ys) := (cons x xs, cons y ys) }.
99102
End foo.
100103

101-
104+
Set Universe Minimization ToSet.
102105
Section vlast.
103106
Context {A : Type}.
104107
Equations vlast {n} (v : vector A (S n)) : A by wf (signature_pack v) (@vector_subterm A) :=

theories/Prop/DepElim.v

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ Proof.
125125
intros X. eapply (X eq_refl). apply eq_refl.
126126
Defined.
127127

128-
Polymorphic Lemma eq_simplification_sigma1_dep@{i j | i <= eq.u0 +} {A : Type@{i}} {P : A -> Type@{i}} {B : Type@{j}}
128+
Polymorphic Lemma eq_simplification_sigma1_dep@{i j | i <= eq.u0 ?} {A : Type@{i}} {P : A -> Type@{i}} {B : Type@{j}}
129129
(p q : A) (x : P p) (y : P q) :
130130
(forall e : p = q, (@eq_rect A p P x q e) = y -> B) ->
131131
((p, x) = (q, y) -> B).
@@ -158,11 +158,11 @@ Proof.
158158
apply (X eq_refl eq_refl).
159159
Defined.
160160

161-
Polymorphic Definition pack_sigma_eq@{i | +} {A : Type@{i}} {P : A -> Type@{i}} {p q : A} {x : P p} {y : P q}
161+
Polymorphic Definition pack_sigma_eq@{i | ?} {A : Type@{i}} {P : A -> Type@{i}} {p q : A} {x : P p} {y : P q}
162162
(e' : p = q) (e : @eq_rect A p P x q e' = y) : (p, x) = (q, y).
163163
Proof. destruct e'. simpl in e. destruct e. apply eq_refl. Defined.
164164

165-
Polymorphic Lemma eq_simplification_sigma1_dep_dep@{i j | i <= eq.u0 +} {A : Type@{i}} {P : A -> Type@{i}}
165+
Polymorphic Lemma eq_simplification_sigma1_dep_dep@{i j | i <= eq.u0 ?} {A : Type@{i}} {P : A -> Type@{i}}
166166
(p q : A) (x : P p) (y : P q) {B : (p, x) = (q, y) -> Type@{j}} :
167167
(forall e' : p = q, forall e : @eq_rect A p P x q e' = y, B (pack_sigma_eq e' e)) ->
168168
(forall e : (p, x) = (q, y), B e).
@@ -177,20 +177,20 @@ Proof.
177177
apply (X eq_refl eq_refl).
178178
Defined.
179179
Set Printing Universes.
180-
Polymorphic Lemma pr2_inv_uip@{i| i <= eq.u0 +} {A : Type@{i}}
180+
Polymorphic Lemma pr2_inv_uip@{i| i <= eq.u0 ?} {A : Type@{i}}
181181
{P : A -> Type@{i}} {x : A} {y y' : P x} :
182182
y = y' -> sigmaI@{i} P x y = sigmaI@{i} P x y'.
183183
Proof. exact (solution_right (P:=fun y' => (x, y) = (x, y')) y eq_refl y'). Defined.
184184

185-
Polymorphic Lemma pr2_uip@{i | +} {A : Type@{i}}
185+
Polymorphic Lemma pr2_uip@{i | ?} {A : Type@{i}}
186186
{E : UIP A} {P : A -> Type@{i}} {x : A} {y y' : P x} :
187187
sigmaI@{i} P x y = sigmaI@{i} P x y' -> y = y'.
188188
Proof.
189189
refine (eq_simplification_sigma1_dep_dep@{i i} _ _ _ _ _).
190190
intros e'. destruct (uip eq_refl e'). intros e ; exact e.
191191
Defined.
192192

193-
Polymorphic Lemma pr2_uip_refl@{i | +} {A : Type@{i}}
193+
Polymorphic Lemma pr2_uip_refl@{i | ?} {A : Type@{i}}
194194
{E : UIP A} (P : A -> Type@{i}) (x : A) (y : P x) :
195195
pr2_uip@{i} (@eq_refl _ (x, y)) = eq_refl.
196196
Proof.
@@ -201,13 +201,13 @@ Defined.
201201
(** If we have decidable equality on [A] we use this version which is
202202
axiom-free! *)
203203

204-
Polymorphic Lemma simplification_sigma2_uip@{i j |+} :
204+
Polymorphic Lemma simplification_sigma2_uip@{i j |?} :
205205
forall {A : Type@{i}} `{UIP A} {P : A -> Type@{i}} {B : Type@{j}}
206206
(p : A) (x y : P p),
207207
(x = y -> B) -> ((p , x) = (p, y) -> B).
208208
Proof. intros. apply X. apply pr2_uip@{i} in H0. assumption. Defined.
209209

210-
Polymorphic Lemma simplification_sigma2_uip_refl@{i j | +} :
210+
Polymorphic Lemma simplification_sigma2_uip_refl@{i j | ?} :
211211
forall {A : Type@{i}} {uip:UIP A} {P : A -> Type@{i}} {B : Type@{j}}
212212
(p : A) (x : P p) (G : x = x -> B),
213213
@simplification_sigma2_uip A uip P B p x x G eq_refl = G eq_refl.
@@ -223,7 +223,7 @@ Polymorphic Lemma simplification_sigma2_dec_point :
223223
(x = y -> B) -> ((p, x) = (p, y) -> B).
224224
Proof. intros. apply X. apply inj_right_sigma_point in H0. assumption. Defined.
225225

226-
Polymorphic Lemma simplification_sigma2_dec_point_refl@{i +} :
226+
Polymorphic Lemma simplification_sigma2_dec_point_refl@{i ?} :
227227
forall {A} (p : A) `{eqdec:EqDecPoint A p} {P : A -> Type} {B}
228228
(x : P p) (G : x = x -> B),
229229
@simplification_sigma2_dec_point A p eqdec P B x x G eq_refl = G eq_refl.
@@ -233,7 +233,7 @@ Proof.
233233
Defined.
234234
Arguments simplification_sigma2_dec_point : simpl never.
235235

236-
Polymorphic Lemma simplification_K_uip@{i j| i <= eq.u0 +} {A : Type@{i}} `{UIP A} (x : A) {B : x = x -> Type@{j}} :
236+
Polymorphic Lemma simplification_K_uip@{i j| i <= eq.u0 ?} {A : Type@{i}} `{UIP A} (x : A) {B : x = x -> Type@{j}} :
237237
B eq_refl -> (forall p : x = x, B p).
238238
Proof. apply UIP_K. Defined.
239239
Arguments simplification_K_uip : simpl never.
@@ -247,7 +247,7 @@ Proof.
247247
Defined.
248248

249249
Polymorphic
250-
Definition ind_pack_eq@{i | +} {A : Type@{i}} {B : A -> Type@{i}} {x : A} {p q : B x} (e : p = q) :
250+
Definition ind_pack_eq@{i | ?} {A : Type@{i}} {B : A -> Type@{i}} {x : A} {p q : B x} (e : p = q) :
251251
@eq (sigma (fun x => B x)) (x, p) (x, q) :=
252252
(pr2_inv_uip e).
253253

@@ -268,7 +268,7 @@ Arguments pr2_uip : simpl never.
268268
Arguments pr2_inv_uip : simpl never.
269269

270270
Polymorphic
271-
Lemma simplify_ind_pack@{i j | +} {A : Type@{i}} {uip : UIP A}
271+
Lemma simplify_ind_pack@{i j | ?} {A : Type@{i}} {uip : UIP A}
272272
(B : A -> Type@{i}) (x : A) (p q : B x) (G : p = q -> Type@{j}) :
273273
(forall e : (x, p) = (x, q), opaque_ind_pack_eq_inv G e) ->
274274
(forall e : p = q, G e).
@@ -280,7 +280,7 @@ Defined.
280280
Arguments simplify_ind_pack : simpl never.
281281

282282
Polymorphic
283-
Lemma simplify_ind_pack_inv@{i j | +} {A : Type@{i}} {uip : UIP A}
283+
Lemma simplify_ind_pack_inv@{i j | ?} {A : Type@{i}} {uip : UIP A}
284284
(B : A -> Type@{i}) (x : A) (p : B x) (G : p = p -> Type@{j}) :
285285
G eq_refl -> opaque_ind_pack_eq_inv G eq_refl.
286286
Proof.
@@ -289,22 +289,22 @@ Defined.
289289
Arguments simplify_ind_pack_inv : simpl never.
290290

291291
Polymorphic
292-
Definition simplified_ind_pack@{i j | +} {A : Type@{i}} {uip : UIP A}
292+
Definition simplified_ind_pack@{i j | ?} {A : Type@{i}} {uip : UIP A}
293293
(B : A -> Type@{i}) (x : A) (p : B x) (G : p = p -> Type@{j})
294294
(t : opaque_ind_pack_eq_inv G eq_refl) :=
295295
eq_rect _ G t _ (@pr2_uip_refl A uip B x p).
296296
Arguments simplified_ind_pack : simpl never.
297297

298298
Polymorphic
299-
Lemma simplify_ind_pack_refl@{i j | +} {A : Type@{i}} {uip : UIP A}
299+
Lemma simplify_ind_pack_refl@{i j | ?} {A : Type@{i}} {uip : UIP A}
300300
(B : A -> Type@{i}) (x : A) (p : B x) (G : p = p -> Type@{j})
301301
(t : forall (e : (x, p) = (x, p)), opaque_ind_pack_eq_inv G e) :
302302
simplify_ind_pack B x p p G t eq_refl =
303303
simplified_ind_pack B x p G (t eq_refl).
304304
Proof. reflexivity. Qed.
305305

306306
Polymorphic
307-
Lemma simplify_ind_pack_elim@{i j | +} {A : Type@{i}} {uip : UIP A}
307+
Lemma simplify_ind_pack_elim@{i j | ?} {A : Type@{i}} {uip : UIP A}
308308
(B : A -> Type@{i}) (x : A) (p : B x) (G : p = p -> Type@{j})
309309
(t : G eq_refl) :
310310
simplified_ind_pack B x p G (simplify_ind_pack_inv B x p G t) = t.

0 commit comments

Comments
 (0)