@@ -81,8 +81,8 @@ Ltac specialize_Σ wfΣ :=
81
81
Section fix_sigma.
82
82
83
83
Context {cf : checker_flags} {nor : normalizing_flags}.
84
- Context (X_type : abstract_env_ext_impl ).
85
- Context (X : X_type.π1).
84
+ Context (X_type : abstract_env_impl ).
85
+ Context (X : X_type.π2. π1).
86
86
87
87
Local Definition heΣ Σ (wfΣ : abstract_env_ext_rel X Σ) :
88
88
∥ wf_ext Σ ∥ := abstract_env_ext_wf _ wfΣ.
356
356
357
357
Section Erase.
358
358
Context {nor : normalizing_flags}.
359
- Context (X_type : abstract_env_ext_impl (cf := extraction_checker_flags)).
360
- Context (X : X_type.π1).
359
+ Context (X_type : abstract_env_impl (cf := extraction_checker_flags)).
360
+ Context (X : X_type.π2. π1).
361
361
362
362
(* Ltac sq' :=
363
363
repeat match goal with
@@ -718,8 +718,8 @@ Definition erase_mutual_inductive_body (mib : mutual_inductive_body) : E.mutual_
718
718
E.ind_npars := mib.(ind_npars);
719
719
E.ind_bodies := bodies; |}.
720
720
721
- Lemma is_arity_irrel {X_type : abstract_env_ext_impl } {X : X_type.π1}
722
- {X_type' : abstract_env_ext_impl } {X' : X_type'.π1} {Γ h h' t wt wt'} :
721
+ Lemma is_arity_irrel {X_type : abstract_env_impl } {X : X_type.π2 .π1}
722
+ {X_type' : abstract_env_impl } {X' : X_type'.π2 .π1} {Γ h h' t wt wt'} :
723
723
Hlookup X_type X X_type' X' ->
724
724
is_arity X_type X Γ h t wt = is_arity X_type' X' Γ h' t wt'.
725
725
Proof .
@@ -885,7 +885,7 @@ Program Fixpoint erase_global_decls {X_type : abstract_env_impl} (deps : Kername
885
885
let X' := abstract_pop_decls X in
886
886
if KernameSet.mem kn deps then
887
887
let Xext := abstract_make_wf_env_ext X' (cst_universes cb) _ in
888
- let cb' := erase_constant_body X_type.π2.π1 Xext cb _ in
888
+ let cb' := erase_constant_body X_type Xext cb _ in
889
889
let deps := KernameSet.union deps (snd cb') in
890
890
let X'' := erase_global_decls deps X' decls _ in
891
891
((kn, E.ConstantDecl (fst cb')) :: X'')
@@ -1556,7 +1556,7 @@ Lemma erase_correct (wfl := Ee.default_wcbv_flags) X_type (X : X_type.π1)
1556
1556
univs wfext t v Σ' t' deps decls prf :
1557
1557
let Xext := abstract_make_wf_env_ext X univs wfext in
1558
1558
forall wt : forall Σ, Σ ∼_ext Xext -> welltyped Σ [] t,
1559
- erase X_type.π2.π1 Xext [] t wt = t' ->
1559
+ erase X_type Xext [] t wt = t' ->
1560
1560
KernameSet.subset (term_global_deps t') deps ->
1561
1561
erase_global_decls deps X decls prf = Σ' ->
1562
1562
(forall Σ : global_env, abstract_env_rel X Σ -> Σ |-p t ▷ v) ->
@@ -1630,7 +1630,7 @@ Proof.
1630
1630
- eapply leq_term_sprop_sorted_l; eauto.
1631
1631
Qed .
1632
1632
1633
- Fixpoint map_erase X_type (X : X_type.π1) Γ
1633
+ Fixpoint map_erase ( X_type:abstract_env_impl) (X : X_type.π2 .π1) Γ
1634
1634
(ts : list term)
1635
1635
(H2 : forall Σ : global_env_ext, abstract_env_ext_rel X Σ ->
1636
1636
Forall (welltyped Σ Γ) ts) {struct ts}: list E.term.
@@ -1828,7 +1828,7 @@ Lemma erases_deps_erase (cf := config.extraction_checker_flags)
1828
1828
(wfΣ : forall Σ, (abstract_env_rel X Σ) -> ∥ wf_ext (Σ, univs) ∥) decls prf
1829
1829
(X' := abstract_make_wf_env_ext X univs wfΣ) Γ t
1830
1830
(wt : forall Σ : global_env_ext, abstract_env_ext_rel X' Σ -> welltyped Σ Γ t) :
1831
- let et := erase X_type.π2.π1 X' Γ t wt in
1831
+ let et := erase X_type X' Γ t wt in
1832
1832
let deps := EAstUtils.term_global_deps et in
1833
1833
forall Σ, (abstract_env_rel X Σ) ->
1834
1834
erases_deps Σ (erase_global_decls X_type deps X decls prf) et.
@@ -1856,7 +1856,7 @@ Lemma erases_deps_erase_weaken (cf := config.extraction_checker_flags)
1856
1856
(X' := abstract_make_wf_env_ext X univs wfΣ) Γ t
1857
1857
(wt : forall Σ : global_env_ext, abstract_env_ext_rel X' Σ -> welltyped Σ Γ t)
1858
1858
deps :
1859
- let et := erase X_type.π2.π1 X' Γ t wt in
1859
+ let et := erase X_type X' Γ t wt in
1860
1860
let tdeps := EAstUtils.term_global_deps et in
1861
1861
forall Σ, (abstract_env_rel X Σ) ->
1862
1862
erases_deps Σ (erase_global_decls X_type (KernameSet.union deps tdeps) X decls prf) et.
@@ -1990,7 +1990,7 @@ Qed.
1990
1990
1991
1991
Lemma erase_wf_fixpoints (efl := all_env_flags) {X_type X} univs wfΣ {Γ t} wt
1992
1992
(X' := abstract_make_wf_env_ext X univs wfΣ) :
1993
- let t' := erase X_type.π2.π1 X' Γ t wt in
1993
+ let t' := erase X_type X' Γ t wt in
1994
1994
wf_fixpoints t'.
1995
1995
Proof .
1996
1996
cbn. pose proof (abstract_env_ext_exists X') as [[Σ' wf']].
@@ -2004,7 +2004,7 @@ Qed.
2004
2004
2005
2005
Lemma erase_wellformed (efl := all_env_flags) {X_type X} decls prf univs wfΣ {Γ t} wt
2006
2006
(X' := abstract_make_wf_env_ext X univs wfΣ) :
2007
- let t' := erase X_type.π2.π1 X' Γ t wt in
2007
+ let t' := erase X_type X' Γ t wt in
2008
2008
wellformed (erase_global_decls X_type (term_global_deps t') X decls prf) #|Γ| t'.
2009
2009
Proof .
2010
2010
set (t' := erase _ _ _ _ _). cbn.
@@ -2024,7 +2024,7 @@ Qed.
2024
2024
2025
2025
Lemma erase_wellformed_weaken (efl := all_env_flags) {X_type X} decls prf univs wfΣ {Γ t} wt
2026
2026
(X' := abstract_make_wf_env_ext X univs wfΣ) deps:
2027
- let t' := erase X_type.π2.π1 X' Γ t wt in
2027
+ let t' := erase X_type X' Γ t wt in
2028
2028
wellformed (erase_global_decls X_type (KernameSet.union deps (term_global_deps t')) X decls prf) #|Γ| t'.
2029
2029
Proof .
2030
2030
set (t' := erase _ _ _ _ _). cbn.
@@ -2046,22 +2046,22 @@ Qed.
2046
2046
Lemma erase_constant_body_correct'' {X_type X} {cb} {decls prf} {univs wfΣ}
2047
2047
(X' := abstract_make_wf_env_ext X univs wfΣ)
2048
2048
{onc : forall Σ' : global_env_ext, abstract_env_ext_rel X' Σ' -> ∥ on_constant_decl (lift_typing typing) Σ' cb ∥} {body} deps :
2049
- EAst.cst_body (fst (erase_constant_body X_type.π2.π1 X' cb onc)) = Some body ->
2049
+ EAst.cst_body (fst (erase_constant_body X_type X' cb onc)) = Some body ->
2050
2050
forall Σ' : global_env_ext, abstract_env_ext_rel X' Σ' ->
2051
2051
∥ ∑ t T, (Σ' ;;; [] |- t : T) * (Σ' ;;; [] |- t ⇝ℇ body) *
2052
- (term_global_deps body = snd (erase_constant_body X_type.π2.π1 X' cb onc)) *
2052
+ (term_global_deps body = snd (erase_constant_body X_type X' cb onc)) *
2053
2053
wellformed (efl:=all_env_flags) (erase_global_decls X_type (KernameSet.union deps (term_global_deps body)) X decls prf) 0 body ∥.
2054
2054
Proof .
2055
2055
intros ? Σ' wfΣ'. pose proof (abstract_env_exists X) as [[Σ wf]].
2056
2056
destruct cb as [name [bod|] udecl]; simpl.
2057
2057
simpl in H. noconf H.
2058
- set (obl :=(erase_constant_body_obligation_1 ( X_type.π2).π1 X'
2058
+ set (obl :=(erase_constant_body_obligation_1 X_type X'
2059
2059
{|
2060
2060
cst_type := name;
2061
2061
cst_body := Some bod;
2062
2062
cst_universes := udecl |} onc bod eq_refl)). clearbody obl.
2063
2063
destruct (obl _ wfΣ'). sq.
2064
- have er : (Σ, univs);;; [] |- bod ⇝ℇ erase X_type.π2.π1 X' [] bod obl.
2064
+ have er : (Σ, univs);;; [] |- bod ⇝ℇ erase X_type X' [] bod obl.
2065
2065
{ eapply (erases_erase (X:=X')).
2066
2066
now rewrite <- (abstract_make_wf_env_ext_correct X univs wfΣ _ _ wf wfΣ').
2067
2067
}
@@ -2074,7 +2074,7 @@ Qed.
2074
2074
Lemma erase_global_cst_decl_wf_glob X_type X deps decls heq :
2075
2075
forall cb wfΣ hcb,
2076
2076
let X' := abstract_make_wf_env_ext X (cst_universes cb) wfΣ in
2077
- let ecb := erase_constant_body X_type.π2.π1 X' cb hcb in
2077
+ let ecb := erase_constant_body X_type X' cb hcb in
2078
2078
let Σ' := erase_global_decls X_type (KernameSet.union deps ecb.2) X decls heq in
2079
2079
(@wf_global_decl all_env_flags Σ' (EAst.ConstantDecl ecb.1) : Prop).
2080
2080
Proof .
@@ -2218,7 +2218,7 @@ Lemma expanded_erase (cf := config.extraction_checker_flags)
2218
2218
{X_type X decls prf} univs wfΣ t wtp :
2219
2219
forall Σ : global_env, abstract_env_rel X Σ -> PCUICEtaExpand.expanded Σ [] t ->
2220
2220
let X' := abstract_make_wf_env_ext X univs wfΣ in
2221
- let et := (erase X_type.π2.π1 X' [] t wtp) in
2221
+ let et := (erase X_type X' [] t wtp) in
2222
2222
let deps := EAstUtils.term_global_deps et in
2223
2223
expanded (erase_global_decls X_type deps X decls prf) [] et.
2224
2224
Proof .
@@ -2282,7 +2282,7 @@ Lemma erase_eval_to_box (wfl := Ee.default_wcbv_flags)
2282
2282
{X_type X} {univs wfext t v Σ' t' deps decls prf} :
2283
2283
let Xext := abstract_make_wf_env_ext X univs wfext in
2284
2284
forall wt : forall Σ : global_env_ext, abstract_env_ext_rel Xext Σ -> welltyped Σ [] t,
2285
- erase X_type.π2.π1 Xext [] t wt = t' ->
2285
+ erase X_type Xext [] t wt = t' ->
2286
2286
KernameSet.subset (term_global_deps t') deps ->
2287
2287
erase_global_decls X_type deps X decls prf = Σ' ->
2288
2288
forall Σext : global_env_ext, abstract_env_ext_rel Xext Σext ->
@@ -2306,7 +2306,7 @@ Lemma erase_eval_to_box_eager (wfl := Ee.default_wcbv_flags)
2306
2306
{X_type X} {univs wfext t v Σ' t' deps decls prf} :
2307
2307
let Xext := abstract_make_wf_env_ext X univs wfext in
2308
2308
forall wt : forall Σ : global_env_ext, abstract_env_ext_rel Xext Σ -> welltyped Σ [] t,
2309
- erase X_type.π2.π1 Xext [] t wt = t' ->
2309
+ erase X_type Xext [] t wt = t' ->
2310
2310
KernameSet.subset (term_global_deps t') deps ->
2311
2311
erase_global_decls X_type deps X decls prf = Σ' ->
2312
2312
forall Σext : global_env_ext, abstract_env_ext_rel Xext Σext ->
@@ -2318,12 +2318,12 @@ Proof.
2318
2318
intros.
2319
2319
destruct (erase_eval_to_box wt H H0 H1 _ H2 X0 H3).
2320
2320
subst t'.
2321
- destruct (inspect_bool (is_erasableb X_type.π2.π1 Xext [] t wt)) eqn:heq.
2321
+ destruct (inspect_bool (is_erasableb X_type Xext [] t wt)) eqn:heq.
2322
2322
- simp erase. rewrite heq.
2323
2323
simp erase => //.
2324
2324
- elimtype False.
2325
2325
pose proof (abstract_env_exists X) as [[? wf]].
2326
- destruct (@is_erasableP X_type.π2.π1 Xext [] t wt) => //. apply n.
2326
+ destruct (@is_erasableP X_type Xext [] t wt) => //. apply n.
2327
2327
intros. sq. now rewrite (abstract_env_ext_irr _ H H2).
2328
2328
Qed .
2329
2329
@@ -2348,7 +2348,7 @@ Lemma firstorder_erases_deterministic X_type (X : X_type.π1)
2348
2348
PCUICEnvironment.lookup_env Σ (i.(inductive_mind)) = Some (InductiveDecl mind) ->
2349
2349
@firstorder_ind Σ (firstorder_env Σ) i ->
2350
2350
erases Σ [] t t' ->
2351
- t' = erase X_type.π2.π1 Xext [] t wt.
2351
+ t' = erase X_type Xext [] t wt.
2352
2352
Proof .
2353
2353
(* pose proof (referenced_impl_ext_wf (@wf_env_ext_referenced extraction_checker_flags Σ)) as Hext. *)
2354
2354
(* rename X into Hext. *)
@@ -2371,7 +2371,7 @@ Proof.
2371
2371
red in H1, Herasable. unfold PCUICAst.lookup_inductive, PCUICAst.lookup_minductive, isPropositionalArity in *.
2372
2372
edestruct PCUICEnvironment.lookup_env as [ [] | ], nth_error, destArity as [[] | ]; auto; try congruence.
2373
2373
+ inv H2.
2374
- * cbn. unfold erase_clause_1. destruct (inspect_bool (is_erasableb ( X_type.π2).π1 Xext [] (tConstruct i n ui) Hyp0)).
2374
+ * cbn. unfold erase_clause_1. destruct (inspect_bool (is_erasableb X_type Xext [] (tConstruct i n ui) Hyp0)).
2375
2375
-- exfalso. sq. destruct (@is_erasableP _ _ [] (tConstruct i n ui) Hyp0) => //.
2376
2376
specialize_Σ Hrel. sq.
2377
2377
eapply (isErasable_Propositional (args := [])) in s; eauto.
@@ -2411,12 +2411,12 @@ forall Σ, abstract_env_ext_rel Xext Σ ->
2411
2411
Σ ;;; [] |- t : mkApps (tInd i u) args ->
2412
2412
PCUICEnvironment.lookup_env Σ (i.(inductive_mind)) = Some (InductiveDecl mind) ->
2413
2413
@firstorder_ind Σ (firstorder_env Σ) i ->
2414
- erase X_type.π2.π1 Xext [] t wt = t' ->
2414
+ erase X_type Xext [] t wt = t' ->
2415
2415
KernameSet.subset (term_global_deps t') deps ->
2416
2416
erase_global_decls X_type deps X decls prf = Σ' ->
2417
2417
red Σ [] t v ->
2418
2418
(forall v', red1 Σ [] v v' -> False) ->
2419
- forall wt', ∥ Σ' ⊢ t' ▷ erase X_type.π2.π1 Xext [] v wt' ∥.
2419
+ forall wt', ∥ Σ' ⊢ t' ▷ erase X_type Xext [] v wt' ∥.
2420
2420
Proof .
2421
2421
intros Xext wt Σ Hrel Hax Hty Hdecl Hfo <- Hsub <- Hred Hirred wt'.
2422
2422
pose proof (heΣ _ _ _ Hrel) as [Hwf]. eapply wcbv_standardization in Hty as Hty_; eauto. destruct Hty_ as [Heval].
@@ -2438,12 +2438,12 @@ forall Σ, abstract_env_ext_rel Xext Σ ->
2438
2438
Σ ;;; [] |- t : mkApps (tInd i u) args ->
2439
2439
PCUICEnvironment.lookup_env Σ (i.(inductive_mind)) = Some (InductiveDecl mind) ->
2440
2440
@firstorder_ind Σ (firstorder_env Σ) i ->
2441
- erase X_type.π2.π1 Xext [] t wt = t' ->
2441
+ erase X_type Xext [] t wt = t' ->
2442
2442
KernameSet.subset (term_global_deps t') deps ->
2443
2443
erase_global_decls X_type deps X decls prf = Σ' ->
2444
2444
red Σ [] t v ->
2445
2445
(forall v', red1 Σ [] v v' -> False) ->
2446
- exists wt', ∥ Σ' ⊢ t' ▷ erase X_type.π2.π1 Xext [] v wt' ∥.
2446
+ exists wt', ∥ Σ' ⊢ t' ▷ erase X_type Xext [] v wt' ∥.
2447
2447
Proof .
2448
2448
intros Xext wt Σ Hrel Hax Hty Hdecl Hfo <- Hsub <- Hred Hirred.
2449
2449
unshelve eexists.
@@ -2508,7 +2508,7 @@ Program Fixpoint erase_global_decls_fast (deps : KernameSet.t)
2508
2508
| (kn, ConstantDecl cb) :: decls =>
2509
2509
if KernameSet.mem kn deps then
2510
2510
let Xext' := abstract_make_wf_env_ext X (cst_universes cb) _ in
2511
- let cb' := erase_constant_body X_type.π2.π1 Xext' cb _ in
2511
+ let cb' := erase_constant_body X_type Xext' cb _ in
2512
2512
let deps := KernameSet.union deps (snd cb') in
2513
2513
let Σ' := erase_global_decls_fast deps X_type X decls _ in
2514
2514
((kn, E.ConstantDecl (fst cb')) :: Σ')
@@ -2621,19 +2621,19 @@ Proof.
2621
2621
now eapply extends_decls_extends.
2622
2622
Qed .
2623
2623
2624
- Definition reduce_stack_eq {cf} {fl} {X_type : abstract_env_ext_impl } {X : X_type.π1} Γ t π wi : reduce_stack fl X_type X Γ t π wi = ` (reduce_stack_full fl X_type X Γ t π wi).
2624
+ Definition reduce_stack_eq {cf} {fl} {X_type : abstract_env_impl } {X : X_type.π2 .π1} Γ t π wi : reduce_stack fl X_type X Γ t π wi = ` (reduce_stack_full fl X_type X Γ t π wi).
2625
2625
Proof .
2626
2626
unfold reduce_stack. destruct reduce_stack_full => //.
2627
2627
Qed .
2628
2628
2629
2629
Definition same_principal_type {cf}
2630
- {X_type : abstract_env_ext_impl } {X : X_type.π1}
2631
- {X_type' : abstract_env_ext_impl } {X' : X_type'.π1}
2630
+ {X_type : abstract_env_impl } {X : X_type.π2 .π1}
2631
+ {X_type' : abstract_env_impl } {X' : X_type'.π2 .π1}
2632
2632
{Γ : context} {t} (p : PCUICSafeRetyping.principal_type X_type X Γ t) (p' : PCUICSafeRetyping.principal_type X_type' X' Γ t) :=
2633
2633
p.π1 = p'.π1.
2634
2634
2635
- Definition Hlookup {cf} (X_type : abstract_env_ext_impl ) (X : X_type.π1)
2636
- (X_type' : abstract_env_ext_impl ) (X' : X_type'.π1) :=
2635
+ Definition Hlookup {cf} (X_type : abstract_env_impl ) (X : X_type.π2 .π1)
2636
+ (X_type' : abstract_env_impl ) (X' : X_type'.π2 .π1) :=
2637
2637
forall Σ : global_env_ext, abstract_env_ext_rel X Σ ->
2638
2638
forall Σ' : global_env_ext, abstract_env_ext_rel X' Σ' ->
2639
2639
forall kn decl decl',
@@ -2767,7 +2767,7 @@ Lemma expanded_erase_fast (cf := config.extraction_checker_flags)
2767
2767
forall Σ : global_env, abstract_env_rel X Σ ->
2768
2768
PCUICEtaExpand.expanded Σ [] t ->
2769
2769
let X' := abstract_make_wf_env_ext X univs wfΣ in
2770
- let et := (erase X_type.π2.π1 X' [] t wtp) in
2770
+ let et := (erase X_type X' [] t wtp) in
2771
2771
let deps := EAstUtils.term_global_deps et in
2772
2772
expanded (erase_global_fast X_type deps X decls prf) [] et.
2773
2773
Proof .
@@ -2790,7 +2790,7 @@ Qed.
2790
2790
Lemma erase_wellformed_fast (efl := all_env_flags)
2791
2791
{X_type X decls prf} univs wfΣ {Γ t} wt
2792
2792
(X' := abstract_make_wf_env_ext X univs wfΣ) :
2793
- let t' := erase X_type.π2.π1 X' Γ t wt in
2793
+ let t' := erase X_type X' Γ t wt in
2794
2794
wellformed (erase_global_fast X_type (term_global_deps t') X decls prf) #|Γ| t'.
2795
2795
Proof .
2796
2796
intros.
0 commit comments