Skip to content

Instantly share code, notes, and snippets.

@jonsterling
Created September 23, 2017 04:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonsterling/094a81f0b8d15a63025a1687cfc43f2e to your computer and use it in GitHub Desktop.
Save jonsterling/094a81f0b8d15a63025a1687cfc43f2e to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
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