2 ||M|| This file is part of HELM, an Hypertextual, Electronic
3 ||A|| Library of Mathematics, developed at the Computer Science
4 ||T|| Department of the University of Bologna, Italy.
8 \ / This file is distributed under the terms of the
9 \ / GNU General Public License Version 2
10 V_______________________________________________________________ *)
12 include "basics/pts.ma".
13 (*include "hints_declaration.ma".*)
15 (* propositional equality *)
17 inductive eq (A:Type[1]) (x:A) : A → Prop ≝
20 interpretation "leibnitz's equality" 'eq t x y = (eq t x y).
23 ∀A.∀a,x.∀p:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 ? x a.∀P:
24 ∀x:A. x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 a → Type[2]. P a (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 A a) → P x p.
25 #A #a #x #p (cases p) // qed.
28 ∀A.∀a.∀P: ∀x:A. x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 a → Prop. P a (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 A a) →
29 ∀x.∀p:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 ? x a.P x p.
30 #A #a #P #p #x0 #p0; @(
\ 5a href="cic:/matita/basics/logic/eq_rect_r.def(1)"
\ 6eq_rect_r
\ 5/a
\ 6 ? ? ? p0) //; qed.
32 lemma eq_rect_Type2_r:
33 ∀A.∀a.∀P: ∀x:A.
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 ? x a → Type[2]. P a (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 A a) →
34 ∀x.∀p:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 ? x a.P x p.
35 #A #a #P #H #x #p (generalize in match H) (generalize in match P)
38 theorem rewrite_l: ∀A:Type[1].∀x.∀P:A → Type[1]. P x → ∀y. x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 y → P y.
39 #A #x #P #Hx #y #Heq (cases Heq); //; qed.
41 theorem sym_eq: ∀A.∀x,y:A. x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 y → y
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 x.
42 #A #x #y #Heq @(
\ 5a href="cic:/matita/basics/logic/rewrite_l.def(1)"
\ 6rewrite_l
\ 5/a
\ 6 A x (λz.z
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x)); //; qed.
44 theorem rewrite_r: ∀A:Type[1].∀x.∀P:A → Type[1]. P x → ∀y. y
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 x → P y.
45 #A #x #P #Hx #y #Heq (cases (
\ 5a href="cic:/matita/basics/logic/sym_eq.def(2)"
\ 6sym_eq
\ 5/a
\ 6 ? ? ? Heq)); //; qed.
47 theorem eq_coerc: ∀A,B:Type[0].A→(A
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6B)→B.
48 #A #B #Ha #Heq (elim Heq); //; qed.
50 theorem trans_eq : ∀A.∀x,y,z:A. x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 y → y
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 z → x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 z.
51 #A #x #y #z #H1 #H2 >H1; //; qed.
53 theorem eq_f: ∀A,B.∀f:A→B.∀x,y:A. x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6y → f x
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 f y.
54 #A #B #f #x #y #H >H; //; qed.
56 (* deleterio per auto? *)
57 theorem eq_f2: ∀A,B,C.∀f:A→B→C.
58 ∀x1,x2:A.∀y1,y2:B. x1
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x2 → y1
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6y2 → f x1 y1
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 f x2 y2.
59 #A #B #C #f #x1 #x2 #y1 #y2 #E1 #E2 >E1; >E2; //; qed.
61 (* hint to genereric equality
62 definition eq_equality: equality ≝
63 mk_equality eq refl rewrite_l rewrite_r.
66 unification hint 0 ≔ T,a,b;
68 (*------------------------------------*) ⊢
69 equal X T a b ≡ eq T a b.
72 (********** connectives ********)
74 inductive True: Prop ≝
77 inductive False: Prop ≝ .
79 (* ndefinition Not: Prop → Prop ≝
82 inductive Not (A:Prop): Prop ≝
83 nmk: (A →
\ 5a href="cic:/matita/basics/logic/False.ind(1,0,0)"
\ 6False
\ 5/a
\ 6) → Not A.
86 interpretation "logical not" 'not x = (Not x).
88 theorem absurd : ∀A:Prop. A →
\ 5a title="logical not" href="cic:/fakeuri.def(1)"
\ 6¬
\ 5/a
\ 6A →
\ 5a href="cic:/matita/basics/logic/False.ind(1,0,0)"
\ 6False
\ 5/a
\ 6.
89 #A #H #Hn (elim Hn); /2/; qed.
92 ntheorem absurd : ∀ A,C:Prop. A → ¬A → C.
93 #A; #C; #H; #Hn; nelim (Hn H).
96 theorem not_to_not : ∀A,B:Prop. (A → B) →
\ 5a title="logical not" href="cic:/fakeuri.def(1)"
\ 6¬
\ 5/a
\ 6B →
\ 5a title="logical not" href="cic:/fakeuri.def(1)"
\ 6¬
\ 5/a
\ 6A.
100 interpretation "leibnitz's non-equality" 'neq t x y = (Not (eq t x y)).
102 theorem sym_not_eq: ∀A.∀x,y:A. x
\ 5a title="leibnitz's non-equality" href="cic:/fakeuri.def(1)"
\ 6≠
\ 5/a
\ 6 y → y
\ 5a title="leibnitz's non-equality" href="cic:/fakeuri.def(1)"
\ 6≠
\ 5/a
\ 6 x.
106 inductive And (A,B:Prop) : Prop ≝
107 conj : A → B → And A B.
109 interpretation "logical and" 'and x y = (And x y).
111 theorem proj1: ∀A,B:Prop. A
\ 5a title="logical and" href="cic:/fakeuri.def(1)"
\ 6∧
\ 5/a
\ 6 B → A.
112 #A #B #AB (elim AB) //; qed.
114 theorem proj2: ∀ A,B:Prop. A
\ 5a title="logical and" href="cic:/fakeuri.def(1)"
\ 6∧
\ 5/a
\ 6 B → B.
115 #A #B #AB (elim AB) //; qed.
118 inductive Or (A,B:Prop) : Prop ≝
119 or_introl : A → (Or A B)
120 | or_intror : B → (Or A B).
122 interpretation "logical or" 'or x y = (Or x y).
124 definition decidable : Prop → Prop ≝
125 λ A:Prop. A
\ 5a title="logical or" href="cic:/fakeuri.def(1)"
\ 6∨
\ 5/a
\ 6 \ 5a title="logical not" href="cic:/fakeuri.def(1)"
\ 6¬
\ 5/a
\ 6 A.
128 inductive ex (A:Type[0]) (P:A → Prop) : Prop ≝
129 ex_intro: ∀ x:A. P x → ex A P.
131 interpretation "exists" 'exists x = (ex ? x).
133 inductive ex2 (A:Type[0]) (P,Q:A →Prop) : Prop ≝
134 ex_intro2: ∀ x:A. P x → Q x → ex2 A P Q.
138 λ A,B. (A → B)
\ 5a title="logical and" href="cic:/fakeuri.def(1)"
\ 6∧
\ 5/a
\ 6 (B → A).
140 interpretation "iff" 'iff a b = (iff a b).
142 (* cose per destruct: da rivedere *)
144 definition R0 ≝ λT:Type[0].λt:T.t.
146 definition R1 ≝
\ 5a href="cic:/matita/basics/logic/eq_rect_Type0.fix(0,5,1)"
\ 6eq_rect_Type0
\ 5/a
\ 6.
152 ∀T1:∀x0:T0. a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x0 → Type[0].
153 ∀a1:T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a0).
154 ∀T2:∀x0:T0. ∀p0:a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x0. ∀x1:T1 x0 p0.
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 ?? T1 a1 ? p0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 x1 → Type[0].
155 ∀a2:T2 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a1).
157 ∀e0:a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 b0.
159 ∀e1:
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 ?? T1 a1 ? e0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 b1.
161 #T0 #a0 #T1 #a1 #T2 #a2 #b0 #e0 #b1 #e1
162 @(
\ 5a href="cic:/matita/basics/logic/eq_rect_Type0.fix(0,5,1)"
\ 6eq_rect_Type0
\ 5/a
\ 6 ????? e1)
163 @(
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 ?? ? ?? e0)
170 ∀T1:∀x0:T0. a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x0 → Type[0].
171 ∀a1:T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a0).
172 ∀T2:∀x0:T0. ∀p0:a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x0. ∀x1:T1 x0 p0.
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 ?? T1 a1 ? p0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 x1 → Type[0].
173 ∀a2:T2 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a1).
174 ∀T3:∀x0:T0. ∀p0:a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6x0. ∀x1:T1 x0 p0.∀p1:
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 ?? T1 a1 ? p0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 x1.
175 ∀x2:T2 x0 p0 x1 p1.
\ 5a href="cic:/matita/basics/logic/R2.def(3)"
\ 6R2
\ 5/a
\ 6 ???? T2 a2 x0 p0 ? p1
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 x2 → Type[0].
176 ∀a3:T3 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a1) a2 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? a2).
178 ∀e0:a0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 b0.
180 ∀e1:
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 ?? T1 a1 ? e0
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 b1.
182 ∀e2:
\ 5a href="cic:/matita/basics/logic/R2.def(3)"
\ 6R2
\ 5/a
\ 6 ???? T2 a2 b0 e0 ? e1
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 b2.
183 T3 b0 e0 b1 e1 b2 e2.
184 #T0 #a0 #T1 #a1 #T2 #a2 #T3 #a3 #b0 #e0 #b1 #e1 #b2 #e2
185 @(
\ 5a href="cic:/matita/basics/logic/eq_rect_Type0.fix(0,5,1)"
\ 6eq_rect_Type0
\ 5/a
\ 6 ????? e2)
186 @(
\ 5a href="cic:/matita/basics/logic/R2.def(3)"
\ 6R2
\ 5/a
\ 6 ?? ? ???? e0 ? e1)
193 ∀T1:∀x0:T0.
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 T0 a0 x0 → Type[0].
194 ∀a1:T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0).
195 ∀T2:∀x0:T0. ∀p0:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T0 …) a0 x0. ∀x1:T1 x0 p0.
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T1 …) (
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 T0 a0 T1 a1 x0 p0) x1 → Type[0].
196 ∀a2:T2 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1).
197 ∀T3:∀x0:T0. ∀p0:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T0 …) a0 x0. ∀x1:T1 x0 p0.∀p1:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T1 …) (
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 T0 a0 T1 a1 x0 p0) x1.
198 ∀x2:T2 x0 p0 x1 p1.
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T2 …) (
\ 5a href="cic:/matita/basics/logic/R2.def(3)"
\ 6R2
\ 5/a
\ 6 T0 a0 T1 a1 T2 a2 x0 p0 x1 p1) x2 → Type[0].
199 ∀a3:T3 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1)
200 a2 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T2 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1)) a2).
201 ∀T4:∀x0:T0. ∀p0:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T0 …) a0 x0. ∀x1:T1 x0 p0.∀p1:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T1 …) (
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 T0 a0 T1 a1 x0 p0) x1.
202 ∀x2:T2 x0 p0 x1 p1.∀p2:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T2 …) (
\ 5a href="cic:/matita/basics/logic/R2.def(3)"
\ 6R2
\ 5/a
\ 6 T0 a0 T1 a1 T2 a2 x0 p0 x1 p1) x2.
203 ∀x3:T3 x0 p0 x1 p1 x2 p2.∀p3:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T3 …) (
\ 5a href="cic:/matita/basics/logic/R3.def(4)"
\ 6R3
\ 5/a
\ 6 T0 a0 T1 a1 T2 a2 T3 a3 x0 p0 x1 p1 x2 p2) x3.
205 ∀a4:T4 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1)
206 a2 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T2 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1)) a2)
207 a3 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T3 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1)
208 a2 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T2 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0) a1 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 (T1 a0 (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 T0 a0)) a1)) a2))
211 ∀e0:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T0 …) a0 b0.
213 ∀e1:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T1 …) (
\ 5a href="cic:/matita/basics/logic/R1.def(2)"
\ 6R1
\ 5/a
\ 6 T0 a0 T1 a1 b0 e0) b1.
215 ∀e2:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T2 …) (
\ 5a href="cic:/matita/basics/logic/R2.def(3)"
\ 6R2
\ 5/a
\ 6 T0 a0 T1 a1 T2 a2 b0 e0 b1 e1) b2.
216 ∀b3: T3 b0 e0 b1 e1 b2 e2.
217 ∀e3:
\ 5a href="cic:/matita/basics/logic/eq.ind(1,0,2)"
\ 6eq
\ 5/a
\ 6 (T3 …) (
\ 5a href="cic:/matita/basics/logic/R3.def(4)"
\ 6R3
\ 5/a
\ 6 T0 a0 T1 a1 T2 a2 T3 a3 b0 e0 b1 e1 b2 e2) b3.
218 T4 b0 e0 b1 e1 b2 e2 b3 e3.
219 #T0 #a0 #T1 #a1 #T2 #a2 #T3 #a3 #T4 #a4 #b0 #e0 #b1 #e1 #b2 #e2 #b3 #e3
220 @(
\ 5a href="cic:/matita/basics/logic/eq_rect_Type0.fix(0,5,1)"
\ 6eq_rect_Type0
\ 5/a
\ 6 ????? e3)
221 @(
\ 5a href="cic:/matita/basics/logic/R3.def(4)"
\ 6R3
\ 5/a
\ 6 ????????? e0 ? e1 ? e2)
225 (* TODO concrete definition by means of proof irrelevance *)
226 axiom streicherK : ∀T:Type[1].∀t:T.∀P:t
\ 5a title="leibnitz's equality" href="cic:/fakeuri.def(1)"
\ 6=
\ 5/a
\ 6 t → Type[2].P (
\ 5a href="cic:/matita/basics/logic/eq.con(0,1,2)"
\ 6refl
\ 5/a
\ 6 ? t) → ∀p.P p.