Created
September 23, 2017 04:08
-
-
Save jonsterling/094a81f0b8d15a63025a1687cfc43f2e to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Nuprl_functional = | |
λ _top_assumption_ : nat, | |
(λ (_evar_0_ : (λ n : nat, matrix_functional (Nuprl n)) 0) | |
(_evar_0_0 : ∀ n : nat, (λ n0 : nat, matrix_functional (Nuprl n0)) (S n)), | |
match | |
_top_assumption_ as n | |
return ((λ n0 : nat, matrix_functional (Nuprl n0)) n) | |
with | |
| 0 => _evar_0_ | |
| S x => _evar_0_0 x | |
end) | |
(λ (A : Tm.t 0) (R1 R2 : behavior) (H : CTyF (CTyF Empty) (A, R1)) | |
(H0 : CTyF (CTyF Empty) (A, R2)) (_the_hidden_goal_:=R1 = R2), | |
(λ _evar_0_ : CTyF Empty (A, R1) → CTyF Empty (A, R2) → _the_hidden_goal_, | |
eq_ind_r | |
(λ _pattern_value_ : ℘ (Tm.t 0 * behavior), | |
_pattern_value_ (A, R1) → _pattern_value_ (A, R2) → _the_hidden_goal_) | |
_evar_0_ CTyF_idempotent) | |
(λ (H1 : CTyF Empty (A, R1)) (H2 : CTyF Empty (A, R2)), | |
CTyF_Empty_functional H1 H2) H H0) | |
(λ (n : nat) (A : Tm.t 0), | |
(λ | |
(_evar_0_ : ∀ (i : nat) (l : i < 0), | |
(λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
(Tm.var l)) | |
(_evar_0_0 : (λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
Tm.unit) | |
(_evar_0_1 : (λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
Tm.bool) | |
(_evar_0_2 : (λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
Tm.ax) | |
(_evar_0_3 : (λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
Tm.tt) | |
(_evar_0_4 : (λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
Tm.ff) | |
(_evar_0_5 : ∀ t : Tm.t 0, | |
(λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) t | |
→ ∀ t0 : Tm.t 0, | |
(λ t1 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t1) | |
t0 | |
→ (λ t1 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t1) | |
(Tm.prod t t0)) | |
(_evar_0_6 : ∀ t : Tm.t 0, | |
(λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) t | |
→ ∀ t0 : Tm.t 0, | |
(λ t1 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t1) | |
t0 | |
→ (λ t1 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t1) | |
(Tm.arr t t0)) | |
(_evar_0_7 : ∀ t : Tm.t 0, | |
(λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) t | |
→ ∀ t0 : Tm.t 0, | |
(λ t1 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t1) | |
t0 | |
→ (λ t1 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t1) | |
(Tm.pair t t0)) | |
(_evar_0_8 : ∀ (c : CLK) (t : Tm.t 0), | |
(λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) t | |
→ (λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) | |
(Tm.ltr c t)) | |
(_evar_0_9 : ∀ t : CLK → Tm.t 0, | |
(∀ c : CLK, | |
(λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) | |
(t c)) | |
→ (λ t0 : Tm.t 0, based_matrix_functional (Nuprl (S n)) t0) | |
(Tm.isect t)) | |
(_evar_0_10 : ∀ n0 : nat, | |
(λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) | |
(Tm.univ n0)), | |
Tm.t_ind (λ t : Tm.t 0, based_matrix_functional (Nuprl (S n)) t) _evar_0_ | |
_evar_0_0 _evar_0_1 _evar_0_2 _evar_0_3 _evar_0_4 _evar_0_5 _evar_0_6 | |
_evar_0_7 _evar_0_8 _evar_0_9 _evar_0_10 A) | |
(λ (i : nat) (l : i < 0) (R1 R2 : behavior) | |
(H : CTyF (Spine (S n)) (Tm.var l, R1)) | |
(H0 : CTyF (Spine (S n)) (Tm.var l, R2)), | |
CTyF_ind H0 | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.var l, R1)) | |
(C2 : Spine (S n) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H11 : gen_x ⇓ gen_x0), | |
(λ H12 : gen_x ⇓ gen_x0, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ H13 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
end) H11) (Tm.var l) (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Spine (S n) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) (Tm.univ C3) H6 eq_refl eq_refl H7 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Spine (S n) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) (Tm.univ C3) H6 eq_refl eq_refl H7 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Spine (S n) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 | |
(@ex_intro _ _ H7 | |
(@ex_intro _ _ H9 | |
(@ex_intro _ _ H11 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H19 : gen_x ⇓ gen_x0), | |
(λ H20 : gen_x ⇓ gen_x0, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ H21 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
end) H19) (Tm.var l) (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Spine (S n) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H7 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H13 : gen_x ⇓ gen_x0), | |
(λ H14 : gen_x ⇓ gen_x0, | |
match | |
H14 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H15 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_unit => | |
λ H15 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_univ n0 => | |
λ H15 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_isect n0 => | |
λ H15 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_tt => | |
λ H15 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ff => | |
λ H15 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ax => | |
λ H15 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
end) H13) (Tm.var l) (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Spine (S n) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H7 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H11 : gen_x ⇓ gen_x0), | |
(λ H12 : gen_x ⇓ gen_x0, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ H13 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
end) H11) (Tm.var l) (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.var l, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj _ _ => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ H7 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
end) H5) (Tm.var l) Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj _ _ => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ H7 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
end) H5) (Tm.var l) Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ H18 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
end) H16) (Tm.var l) Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H10 : gen_x ⇓ gen_x0), | |
(λ H11 : gen_x ⇓ gen_x0, | |
match | |
H11 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H12 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_unit => | |
λ H12 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_univ n0 => | |
λ H12 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_isect n0 => | |
λ H12 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_tt => | |
λ H12 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ff => | |
λ H12 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ax => | |
λ H12 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
end) H10) (Tm.var l) Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.var l, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj _ _ => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ H7 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
end) H5) (Tm.var l) Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj _ _ => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ H7 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H7 | |
: False in | |
False_ind False H8) | |
end) H5) (Tm.var l) Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ H18 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
end) H16) (Tm.var l) Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H10 : gen_x ⇓ gen_x0), | |
(λ H11 : gen_x ⇓ gen_x0, | |
match | |
H11 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H12 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_unit => | |
λ H12 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_univ n0 => | |
λ H12 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_isect n0 => | |
λ H12 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_tt => | |
λ H12 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ff => | |
λ H12 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ax => | |
λ H12 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
end) H10) (Tm.var l) Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.var l, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H2 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 (conj H8 (conj H10 (conj H12 H13)))))) => | |
match C1 with | |
| @ex_intro _ _ C4 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H19 : gen_x ⇓ gen_x0), | |
(λ H20 : gen_x ⇓ gen_x0, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ H21 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
end) H19) (Tm.var l) (Tm.prod C3 H2) H8 eq_refl eq_refl | |
H10 H12 H13 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj H10 (conj H12 (conj H14 H15)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ H18 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
end) H16) (Tm.var l) (Tm.prod C3 H4) H10 eq_refl | |
eq_refl H12 H14 H15 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj H10 (conj H12 (conj H14 H15)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ H18 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H18 | |
: False in | |
False_ind False H19) | |
end) H16) (Tm.var l) (Tm.prod C3 H4) H10 eq_refl | |
eq_refl H12 H14 H15 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H2 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 (conj H8 (conj H10 (conj H12 H13)))))) => | |
match C1 with | |
| @ex_intro _ _ C4 | |
(@ex_intro _ _ H15 | |
(@ex_intro _ _ H17 | |
(@ex_intro _ _ H19 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H27 : gen_x ⇓ gen_x0), | |
(λ H28 : gen_x ⇓ gen_x0, | |
match | |
H28 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H29 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
| eval_unit => | |
λ H29 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
| @eval_univ n0 => | |
λ H29 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
| @eval_isect n0 => | |
λ H29 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
| eval_tt => | |
λ H29 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
| eval_ff => | |
λ H29 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
| eval_ax => | |
λ H29 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H30 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H29 | |
: False in | |
False_ind False H30) | |
end) H27) (Tm.var l) (Tm.prod C3 H2) H8 eq_refl eq_refl | |
H10 H12 H13 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H2 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 (conj H8 (conj H10 (conj H12 H13)))))) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H15 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H21 : gen_x ⇓ gen_x0), | |
(λ H22 : gen_x ⇓ gen_x0, | |
match | |
H22 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H23 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_unit => | |
λ H23 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| @eval_univ n0 => | |
λ H23 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| @eval_isect n0 => | |
λ H23 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_tt => | |
λ H23 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_ff => | |
λ H23 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_ax => | |
λ H23 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
end) H21) (Tm.var l) (Tm.prod C3 H2) H8 eq_refl eq_refl | |
H10 H12 H13 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H2 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 (conj H8 (conj H10 (conj H12 H13)))))) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H15 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H19 : gen_x ⇓ gen_x0), | |
(λ H20 : gen_x ⇓ gen_x0, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ H21 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
end) H19) (Tm.var l) (Tm.prod C3 H2) H8 eq_refl eq_refl | |
H10 H12 H13 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.var l, R1)) | |
(C2 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 (conj H6 H7))) => | |
match C1 with | |
| @ex_intro _ _ C4 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H13 : gen_x ⇓ gen_x0), | |
(λ H14 : gen_x ⇓ gen_x0, | |
match | |
H14 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H15 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_unit => | |
λ H15 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_univ n0 => | |
λ H15 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_isect n0 => | |
λ H15 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_tt => | |
λ H15 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ff => | |
λ H15 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ax => | |
λ H15 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
end) H13) (Tm.var l) (Tm.isect C3) H4 eq_refl eq_refl | |
H6 H7 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 (conj H6 (conj H8 H9))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H10 : gen_x ⇓ gen_x0), | |
(λ H11 : gen_x ⇓ gen_x0, | |
match | |
H11 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H12 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_unit => | |
λ H12 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_univ n0 => | |
λ H12 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_isect n0 => | |
λ H12 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_tt => | |
λ H12 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ff => | |
λ H12 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ax => | |
λ H12 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
end) H10) (Tm.var l) (Tm.isect C3) H6 eq_refl eq_refl | |
H8 H9 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 (conj H6 (conj H8 H9))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H10 : gen_x ⇓ gen_x0), | |
(λ H11 : gen_x ⇓ gen_x0, | |
match | |
H11 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H12 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_unit => | |
λ H12 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_univ n0 => | |
λ H12 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| @eval_isect n0 => | |
λ H12 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_tt => | |
λ H12 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ff => | |
λ H12 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
| eval_ax => | |
λ H12 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H12 | |
: False in | |
False_ind False H13) | |
end) H10) (Tm.var l) (Tm.isect C3) H6 eq_refl eq_refl | |
H8 H9 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 (conj H6 H7))) => | |
match C1 with | |
| @ex_intro _ _ C4 | |
(@ex_intro _ _ H9 | |
(@ex_intro _ _ H11 | |
(@ex_intro _ _ H13 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H21 : gen_x ⇓ gen_x0), | |
(λ H22 : gen_x ⇓ gen_x0, | |
match | |
H22 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H23 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_unit => | |
λ H23 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| @eval_univ n0 => | |
λ H23 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| @eval_isect n0 => | |
λ H23 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_tt => | |
λ H23 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_ff => | |
λ H23 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
| eval_ax => | |
λ H23 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H24 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H23 | |
: False in | |
False_ind False H24) | |
end) H21) (Tm.var l) (Tm.isect C3) H4 eq_refl eq_refl | |
H6 H7 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 (conj H6 H7))) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H9 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H15 : gen_x ⇓ gen_x0), | |
(λ H16 : gen_x ⇓ gen_x0, | |
match | |
H16 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H17 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
| eval_unit => | |
λ H17 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
| @eval_univ n0 => | |
λ H17 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
| @eval_isect n0 => | |
λ H17 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
| eval_tt => | |
λ H17 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
| eval_ff => | |
λ H17 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
| eval_ax => | |
λ H17 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H18 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H17 | |
: False in | |
False_ind False H18) | |
end) H15) (Tm.var l) (Tm.isect C3) H4 eq_refl eq_refl | |
H6 H7 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 (conj H6 H7))) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H9 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H13 : gen_x ⇓ gen_x0), | |
(λ H14 : gen_x ⇓ gen_x0, | |
match | |
H14 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H15 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_unit => | |
λ H15 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_univ n0 => | |
λ H15 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_isect n0 => | |
λ H15 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_tt => | |
λ H15 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ff => | |
λ H15 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ax => | |
λ H15 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(C3 κ, H2 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ (∀ κ : CLK, H2 κ (e1, e2))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
end) H13) (Tm.var l) (Tm.isect C3) H4 eq_refl eq_refl | |
H6 H7 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.var l, R1)) | |
(C2 : Close.later (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H11 : gen_x ⇓ gen_x0), | |
(λ H12 : gen_x ⇓ gen_x0, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ S : behavior, ... ∧ ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ H13 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
end) H11) (Tm.var l) (Tm.ltr C3 H2) H4 eq_refl eq_refl | |
H5 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.later (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ S : behavior, ... ∧ ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) (Tm.ltr C3 H4) H6 eq_refl eq_refl | |
H7 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.later (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ S : behavior, ... ∧ ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ H10 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, R2)) → | |
block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H10 | |
: False in | |
False_ind False H11) | |
end) H8) (Tm.var l) (Tm.ltr C3 H4) H6 eq_refl eq_refl | |
H7 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.later (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 | |
(@ex_intro _ _ H7 | |
(@ex_intro _ _ H9 | |
(@ex_intro _ _ H11 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H19 : gen_x ⇓ gen_x0), | |
(λ H20 : gen_x ⇓ gen_x0, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ S : behavior, ... ∧ ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ H21 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H21 | |
: False in | |
False_ind False H22) | |
end) H19) (Tm.var l) (Tm.ltr C3 H2) H4 eq_refl eq_refl | |
H5 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.later (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H7 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H13 : gen_x ⇓ gen_x0), | |
(λ H14 : gen_x ⇓ gen_x0, | |
match | |
H14 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ S : behavior, ... ∧ ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H15 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_unit => | |
λ H15 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_univ n0 => | |
λ H15 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| @eval_isect n0 => | |
λ H15 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_tt => | |
λ H15 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ff => | |
λ H15 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
| eval_ax => | |
λ H15 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H15 | |
: False in | |
False_ind False H16) | |
end) H13) (Tm.var l) (Tm.ltr C3 H2) H4 eq_refl eq_refl | |
H5 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.var l, R1)) | |
(C2 : Close.later (CTyF (Spine (S n))) (Tm.var l, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H2 (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H7 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H11 : gen_x ⇓ gen_x0), | |
(λ H12 : gen_x ⇓ gen_x0, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.var l | |
→ t0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ S : behavior, ... ∧ ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.var l, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ H13 : Tm.unit = Tm.var l, | |
False_ind | |
(Tm.unit = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.var l, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.var l, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.var l, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.var l, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.var l, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H2 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ | |
e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ | |
(∃ | |
S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, R2)) → | |
block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.var l) H13 | |
: False in | |
False_ind False H14) | |
end) H11) (Tm.var l) (Tm.ltr C3 H2) H4 eq_refl eq_refl | |
H5 | |
end | |
end))) | |
(λ (R1 R2 : behavior) (H : CTyF (Spine (S n)) (Tm.unit, R1)) | |
(H0 : CTyF (Spine (S n)) (Tm.unit, R2)), | |
CTyF_ind H0 | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.unit, R1)) | |
(C2 : Spine (S n) (Tm.unit, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H11 : gen_x ⇓ gen_x0), | |
(λ H12 : gen_x ⇓ gen_x0, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H13 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
end) H11) Tm.unit (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Spine (S n) (Tm.unit, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H10 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit (Tm.univ C3) H6 eq_refl eq_refl H7 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Spine (S n) (Tm.unit, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H10 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit (Tm.univ C3) H6 eq_refl eq_refl H7 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Spine (S n) (Tm.unit, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 | |
(@ex_intro _ _ H7 | |
(@ex_intro _ _ H9 | |
(@ex_intro _ _ H11 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H19 : gen_x ⇓ gen_x0), | |
(λ H20 : gen_x ⇓ gen_x0, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H21 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
end) H19) Tm.unit (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Spine (S n) (Tm.unit, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H7 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H13 : gen_x ⇓ gen_x0), | |
(λ H14 : gen_x ⇓ gen_x0, | |
match | |
H14 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H15 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H15 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H15 | |
: False in | |
False_ind False H16) | |
| @eval_univ n0 => | |
λ H15 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| @eval_isect n0 => | |
λ H15 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_tt => | |
λ H15 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_ff => | |
λ H15 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_ax => | |
λ H15 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
end) H13) Tm.unit (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Spine (S n) (Tm.unit, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 (conj _ (conj H4 H5)) => | |
match C1 with | |
| @ex_intro _ _ C4 (@ex_intro _ _ H7 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H11 : gen_x ⇓ gen_x0), | |
(λ H12 : gen_x ⇓ gen_x0, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H13 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S))) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
end) H11) Tm.unit (Tm.univ C3) H4 eq_refl eq_refl H5 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.unit, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (conj _ (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H10 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
(λ (gen_x1 gen_x2 : Tm.t 0) | |
(H11 : gen_x1 ⇓ gen_x2), | |
(λ H12 : gen_x1 ⇓ gen_x2, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, ... ∧ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H13 : Tm.unit = Tm.univ C3), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S))) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.univ C3) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.univ C3 | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
end) H11) Tm.unit (Tm.univ C3) H6 eq_refl eq_refl | |
H7 H10 | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj H3 H4 => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H7 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
(λ (gen_x1 gen_x2 : Tm.t 0) | |
(H8 : gen_x1 ⇓ gen_x2), | |
(λ H9 : gen_x1 ⇓ gen_x2, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H10 : ∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
(H11 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
binrel_extensionality R1 R2 | |
(λ (e1 e2 : Tm.t 0) | |
(H12:= | |
H11 e1 e2 | |
: R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
match H12 with | |
| conj H13 H14 => | |
let H15 := | |
H10 e1 e2 | |
: R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax in | |
match H15 with | |
| conj H16 H17 => | |
conj (λ H18 : R1 ..., H14 (...)) | |
(λ H18 : R2 ..., H17 (...)) | |
end | |
end) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit Tm.unit H3 eq_refl eq_refl H4 H7 | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
end) H5) Tm.unit Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj H3 H4 => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H7 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
(λ (gen_x1 gen_x2 : Tm.t 0) | |
(H8 : gen_x1 ⇓ gen_x2), | |
(λ H9 : gen_x1 ⇓ gen_x2, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H10 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit Tm.bool H3 eq_refl eq_refl H4 H7 | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
end) H5) Tm.unit Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj H10 (conj H12 (conj H14 H15)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H18 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
(λ (gen_x1 gen_x2 : Tm.t 0) | |
(H19 : gen_x1 ⇓ gen_x2), | |
(λ H20 : gen_x1 ⇓ gen_x2, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, R1 ... ↔ (...)) | |
→ (∀ e1 e2 : ..., ... ↔ ...) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A1, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∃ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H21 : Tm.unit = Tm.prod C3 H4), | |
False_ind | |
(block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ A0 ⇓ ... ∧ (...)) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : ..., | |
... ∧ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.prod C3 H4) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∃ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∃ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∃ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∃ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, j ≤ n ∧ ... ∧ ...) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∃ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
end) H19) Tm.unit (Tm.prod C3 H4) H10 eq_refl | |
eq_refl H12 H14 H15 H18 | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
end) H16) Tm.unit Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 (conj H6 (conj H8 H9))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H10 : gen_x ⇓ gen_x0), | |
(λ H11 : gen_x ⇓ gen_x0, | |
match | |
H11 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H12 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H12 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
(λ (gen_x1 gen_x2 : Tm.t 0) | |
(H13 : gen_x1 ⇓ gen_x2), | |
(λ H14 : gen_x1 ⇓ gen_x2, | |
match | |
H14 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ _top_assumption_0 : ..., | |
... ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) ↔ (∀ ..., ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 ... ↔ ... ∧ ...) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H15 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H15 : Tm.unit = Tm.isect C3), | |
False_ind | |
(block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ (e1, e2))) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.isect C3) H15 | |
: False in | |
False_ind False H16) | |
| @eval_univ n0 => | |
λ H15 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| @eval_isect n0 => | |
λ H15 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_tt => | |
λ H15 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_ff => | |
λ H15 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
| eval_ax => | |
λ H15 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.isect C3 | |
→ block | |
((∀ κ : CLK, | |
CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(C3 κ, H4 κ)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R1 (e1, e2) | |
↔ (∀ κ : CLK, H4 κ ...)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H16 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H15 | |
: False in | |
False_ind False H16) | |
end) H13) Tm.unit (Tm.isect C3) H6 eq_refl | |
eq_refl H8 H9 H12 | |
| @eval_univ n0 => | |
λ H12 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| @eval_isect n0 => | |
λ H12 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_tt => | |
λ H12 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_ff => | |
λ H12 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_ax => | |
λ H12 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
end) H10) Tm.unit Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj H6 H7)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ _ : Tm.unit = Tm.unit) | |
(H10 : ∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax), | |
(λ (gen_x1 gen_x2 : Tm.t 0) | |
(H11 : gen_x1 ⇓ gen_x2), | |
(λ H12 : gen_x1 ⇓ gen_x2, | |
match | |
H12 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : ..., | |
... ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H13 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H13 : Tm.unit = Tm.ltr C3 H4), | |
False_ind | |
(block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
Tm.t 0 * behavior, | |
let | |
(A0, R) := | |
_top_assumption_0 in | |
∃ j : nat, ... ∧ ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.ltr C3 H4) H13 | |
: False in | |
False_ind False H14) | |
| @eval_univ n0 => | |
λ H13 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| @eval_isect n0 => | |
λ H13 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_tt => | |
λ H13 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ff => | |
λ H13 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
| eval_ax => | |
λ H13 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.ltr C3 H4 | |
→ block | |
(▷[ C3] (CTyF | |
(λ | |
_top_assumption_0 : | |
... * behavior, | |
let ... _top_assumption_0 in | |
∃ ..., ...) | |
(H4, R1)) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H14 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H13 | |
: False in | |
False_ind False H14) | |
end) H11) Tm.unit (Tm.ltr C3 H4) H6 eq_refl | |
eq_refl H7 H10 | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.unit | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) ↔ e1 ⇓ Tm.ax ∧ e2 ⇓ Tm.ax) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit Tm.unit H1 eq_refl eq_refl H2 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.unit, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H10 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj _ _ => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H7 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H7 | |
: False in | |
False_ind False H8) | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
end) H5) Tm.unit Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| conj _ _ => | |
(λ (gen_x gen_x0 : Tm.t 0) (H5 : gen_x ⇓ gen_x0), | |
(λ H6 : gen_x ⇓ gen_x0, | |
match | |
H6 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H7 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H7 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H7 | |
: False in | |
False_ind False H8) | |
| @eval_univ n0 => | |
λ H7 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| @eval_isect n0 => | |
λ H7 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_tt => | |
λ H7 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ff => | |
λ H7 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
| eval_ax => | |
λ H7 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H8 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H7 | |
: False in | |
False_ind False H8) | |
end) H5) Tm.unit Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.prod (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj _ (conj _ (conj _ _)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H18 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
end) H16) Tm.unit Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.isect (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj _ (conj _ _))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H10 : gen_x ⇓ gen_x0), | |
(λ H11 : gen_x ⇓ gen_x0, | |
match | |
H11 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H12 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H12 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H12 | |
: False in | |
False_ind False H13) | |
| @eval_univ n0 => | |
λ H12 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| @eval_isect n0 => | |
λ H12 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_tt => | |
λ H12 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_ff => | |
λ H12 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
| eval_ax => | |
λ H12 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H13 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H12 | |
: False in | |
False_ind False H13) | |
end) H10) Tm.unit Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end) | |
(λ (C1 : Close.later (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| conj H1 H2 => | |
match C1 with | |
| @ex_intro _ _ C3 (@ex_intro _ _ H4 (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H8 : gen_x ⇓ gen_x0), | |
(λ H9 : gen_x ⇓ gen_x0, | |
match | |
H9 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H10 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H10 : Tm.unit = Tm.bool), | |
False_ind | |
(block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.bool H10 | |
: False in | |
False_ind False H11) | |
| @eval_univ n0 => | |
λ H10 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| @eval_isect n0 => | |
λ H10 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_tt => | |
λ H10 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ff => | |
λ H10 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
| eval_ax => | |
λ H10 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.bool | |
→ block | |
((∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ e1 ⇓ Tm.tt ∧ e2 ⇓ Tm.tt | |
∨ e1 ⇓ Tm.ff ∧ e2 ⇓ Tm.ff) | |
→ block (R1 = R2))) | |
(let H11 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H10 | |
: False in | |
False_ind False H11) | |
end) H8) Tm.unit Tm.bool H1 eq_refl eq_refl H2 | |
end | |
end)) | |
(CTyF_ind H | |
(λ (C1 : Spine (S n) (Tm.unit, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H2 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 (conj H8 (conj H10 (conj H12 H13)))))) => | |
match C1 with | |
| @ex_intro _ _ C4 (conj _ (conj _ _)) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H19 : gen_x ⇓ gen_x0), | |
(λ H20 : gen_x ⇓ gen_x0, | |
match | |
H20 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H21 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H21 : Tm.unit = Tm.prod C3 H2), | |
False_ind | |
(block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.prod C3 H2) H21 | |
: False in | |
False_ind False H22) | |
| @eval_univ n0 => | |
λ H21 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| @eval_isect n0 => | |
λ H21 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_tt => | |
λ H21 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_ff => | |
λ H21 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
| eval_ax => | |
λ H21 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.prod C3 H2 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H4) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H2, H6) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H4 (e11, e21) ∧ H6 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H22 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H21 | |
: False in | |
False_ind False H22) | |
end) H19) Tm.unit (Tm.prod C3 H2) H8 eq_refl eq_refl | |
H10 H12 H13 | |
end | |
end) | |
(λ (C1 : Close.unit (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj H10 (conj H12 (conj H14 H15)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H18 : Tm.unit = Tm.prod C3 H4), | |
False_ind | |
(block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.prod C3 H4) H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.univ n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => True | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| @eval_isect n0 => | |
λ H18 : Tm.isect n0 = Tm.unit, | |
False_ind | |
(Tm.isect n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.isect n0) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => True | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_tt => | |
λ H18 : Tm.tt = Tm.unit, | |
False_ind | |
(Tm.tt = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.tt | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => True | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_ff => | |
λ H18 : Tm.ff = Tm.unit, | |
False_ind | |
(Tm.ff = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ff | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => True | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_ax => | |
λ H18 : Tm.ax = Tm.unit, | |
False_ind | |
(Tm.ax = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.ax | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => True | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
end) H16) Tm.unit (Tm.prod C3 H4) H10 eq_refl eq_refl | |
H12 H14 H15 | |
end | |
end) | |
(λ (C1 : Close.bool (CTyF (Spine (S n))) (Tm.unit, R1)) | |
(C2 : Close.prod (CTyF (Spine (S n))) (Tm.unit, R2)), | |
match C1 with | |
| conj _ _ => | |
match C2 with | |
| @ex_intro _ _ C3 | |
(@ex_intro _ _ H4 | |
(@ex_intro _ _ H6 | |
(@ex_intro _ _ H8 (conj H10 (conj H12 (conj H14 H15)))))) => | |
(λ (gen_x gen_x0 : Tm.t 0) (H16 : gen_x ⇓ gen_x0), | |
(λ H17 : gen_x ⇓ gen_x0, | |
match | |
H17 in (t ⇓ t0) | |
return | |
(t = Tm.unit | |
→ t0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF ... ... ∧ CTyF ... ...))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
with | |
| @eval_prod A0 B => | |
λ H18 : Tm.prod A0 B = Tm.unit, | |
False_ind | |
(Tm.prod A0 B = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A1, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A1 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind (Tm.prod A0 B) | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => False | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => True | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I Tm.unit H18 | |
: False in | |
False_ind False H19) | |
| eval_unit => | |
λ (_ : Tm.unit = Tm.unit) | |
(H18 : Tm.unit = Tm.prod C3 H4), | |
False_ind | |
(block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
∧ e2 ⇓ Tm.pair e21 e22 | |
∧ H6 (e11, e21) ∧ H8 (e12, e22))) | |
→ block (R1 = R2))) | |
(let H19 := | |
eq_ind Tm.unit | |
(λ e : Tm.t 0, | |
match e with | |
| @Tm.var _ _ _ => False | |
| Tm.unit => True | |
| Tm.bool => False | |
| Tm.ax => False | |
| Tm.tt => False | |
| Tm.ff => False | |
| Tm.prod _ _ => False | |
| Tm.arr _ _ => False | |
| Tm.pair _ _ => False | |
| Tm.ltr _ _ => False | |
| Tm.isect _ => False | |
| Tm.univ _ => False | |
end) I (Tm.prod C3 H4) H18 | |
: False in | |
False_ind False H19) | |
| @eval_univ n0 => | |
λ H18 : Tm.univ n0 = Tm.unit, | |
False_ind | |
(Tm.univ n0 = Tm.prod C3 H4 | |
→ block | |
(CTyF | |
(λ _top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (Spine n) (e1, S) | |
∧ CTyF (Spine n) (e2, S)))) | |
(C3, H6) | |
→ CTyF | |
(λ | |
_top_assumption_0 : Tm.t 0 * behavior, | |
let (A0, R) := _top_assumption_0 in | |
∃ j : nat, | |
j ≤ n | |
∧ A0 ⇓ Tm.univ j | |
∧ (∀ e1 e2 : Tm.t 0, | |
R (e1, e2) | |
↔ (∃ S : behavior, | |
CTyF (...) (e1, S) | |
∧ CTyF (...) (e2, S)))) | |
(H4, H8) | |
→ (∀ e1 e2 : Tm.t 0, | |
R2 (e1, e2) | |
↔ (∃ e11 e12 e21 e22 : Tm.t 0, | |
e1 ⇓ Tm.pair e11 e12 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment