L1
Definition. We define True to be ∀p : prop, pp of type prop.
L1
Definition. We define False to be ∀p : prop, p of type prop.
L2
Axiom. (FalseE) We take the following as an axiom:
False∀p : prop, p
L4
Definition. We define not to be λA : propAFalse of type propprop.
Notation. We use ¬ as a prefix operator with priority 700 corresponding to applying term not.
L9
Definition. We define and to be λA B : prop∀p : prop, (ABp)p of type proppropprop.
Notation. We use as an infix operator with priority 780 and which associates to the left corresponding to applying term and.
L14
Axiom. (andI) We take the following as an axiom:
∀A B : prop, ABA B
L16
Definition. We define or to be λA B : prop∀p : prop, (Ap)(Bp)p of type proppropprop.
Notation. We use as an infix operator with priority 785 and which associates to the left corresponding to applying term or.
Beginning of Section Eq
L23
Variable A : SType
L24
Definition. We define eq to be λx y : A∀Q : AAprop, Q x yQ y x of type AAprop.
L25
Definition. We define neq to be λx y : A¬ eq x y of type AAprop.
End of Section Eq
Notation. We use = as an infix operator with priority 502 and no associativity corresponding to applying term eq.
Notation. We use as an infix operator with priority 502 and no associativity corresponding to applying term neq.
Beginning of Section Ex
L33
Variable A : SType
L34
Definition. We define ex to be λQ : Aprop∀P : prop, (∀x : A, Q xP)P of type (Aprop)prop.
End of Section Ex
L36
Axiom. (prop_ext_2) We take the following as an axiom:
∀p q : prop, (pq)(qp)p = q
Primitive. The name In is a term of type setsetprop.
Notation. We use as an infix operator with priority 500 and no associativity corresponding to applying term In. Furthermore, we may write xA, B to mean x : set, xAB.
L40
Definition. We define Subq to be λA B ⇒ ∀xA, x B of type setsetprop.
Notation. We use as an infix operator with priority 500 and no associativity corresponding to applying term Subq. Furthermore, we may write xA, B to mean x : set, xAB.
Notation. We use x...y [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using ex and handling ∈ or ⊆ ascriptions using and.
L45
Definition. We define nIn to be λx X ⇒ ¬ In x X of type setsetprop.
Notation. We use as an infix operator with priority 502 and no associativity corresponding to applying term nIn.
Primitive. The name Empty is a term of type set.
L53
Axiom. (EmptyE) We take the following as an axiom:
∀x : set, x Empty
Primitive. The name Sing is a term of type setset.
Notation. {x} is notation for Sing x.
L59
Axiom. (SingE) We take the following as an axiom:
∀x y : set, y {x}y = x
Primitive. The name ordsucc is a term of type setset.
Notation. Natural numbers 0,1,2,... are notation for the terms formed using Empty as 0 and forming successors with ordsucc.
L66
Axiom. (neq_ordsucc_0) We take the following as an axiom:
∀a : set, ordsucc a 0
L68
Axiom. (eq_1_Sing0) We take the following as an axiom:
Primitive. The name nat_p is a term of type setprop.
L72
Axiom. (nat_0) We take the following as an axiom:
L74
Axiom. (nat_1) We take the following as an axiom:
L75
Axiom. (nat_inv) We take the following as an axiom:
∀n, nat_p nn = 0 ∃x, nat_p x n = ordsucc x
Primitive. The name omega is a term of type set.
L79
Axiom. (omega_nat_p) We take the following as an axiom:
L81
Axiom. (nat_p_omega) We take the following as an axiom:
∀n : set, nat_p nn omega
L82
Axiom. (omega_ordsucc) We take the following as an axiom:
Primitive. The name nat_primrec is a term of type set(setsetset)setset.
Primitive. The name If_i is a term of type propsetsetset.
Notation. if cond then T else E is notation corresponding to If_i type cond T E where type is the inferred type of T.
L91
Axiom. (If_i_0) We take the following as an axiom:
∀p : prop, ∀x y : set, ¬ p(if p then x else y) = y
L94
Axiom. (If_i_1) We take the following as an axiom:
∀p : prop, ∀x y : set, p(if p then x else y) = x
Primitive. The name lam is a term of type set(setset)set.
L100
Definition. We define setprod to be λX Y : setlam X (λ_ ⇒ Y) of type setsetset.
Notation. We use as an infix operator with priority 440 and which associates to the left corresponding to applying term setprod.
Primitive. The name ap is a term of type setsetset.
Notation. When x is a set, a term x y is notation for ap x y.
Notation. λ xAB is notation for the set lam Ax : set ⇒ B).
Notation. We now use n-tuple notation (a0,...,an-1) for n ≥ 2 for λ i ∈ n . if i = 0 then a0 else ... if i = n-2 then an-2 else an-1.
L111
Axiom. (beta) We take the following as an axiom:
∀X : set, ∀F : setset, ∀x : set, x X(λxXF x) x = F x
L113
Definition. We define lam_id to be λX ⇒ lam X (λx ⇒ x) of type setset.
L115
Definition. We define lam_comp to be λX g f ⇒ lam X (λx : setg (f x)) of type setsetsetset.
L118
Definition. We define struct_id to be λX ⇒ lam_id (X 0) of type setset.
L120
Definition. We define struct_comp to be λX Y Z f g ⇒ lam_comp (X 0) f g of type setsetsetsetsetset.
L122
Axiom. (lam_ext) We take the following as an axiom:
∀X, ∀F G : setset, (∀xX, F x = G x)(λxXF x) = (λxXG x)
Primitive. The name Pi is a term of type set(setset)set.
Notation. We use x...y [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using Pi.
L130
Axiom. (lam_Pi) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀F : setset, (∀xX, F x Y x)(λxXF x) (xX, Y x)
L133
Axiom. (ap_Pi) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀f : set, ∀x : set, f (xX, Y x)x Xf x Y x
L134
Definition. We define setexp to be λY X : setxX, Y of type setsetset.
Notation. We use :^: as an infix operator with priority 430 and which associates to the left corresponding to applying term setexp.
L139
Definition. We define HomSet to be λX Y f ⇒ f YX of type setsetsetprop.
L141
Definition. We define bij to be λX Y f ⇒ (∀uX, f u Y) (∀u vX, f u = f vu = v) (∀wY, ∃uX, f u = w) of type setset(setset)prop.
L149
Axiom. (bijI) We take the following as an axiom:
∀X Y, ∀f : setset, (∀uX, f u Y)(∀u vX, f u = f vu = v)(∀wY, ∃uX, f u = w)bij X Y f
L155
Axiom. (bijE) We take the following as an axiom:
∀X Y, ∀f : setset, bij X Y f∀p : prop, ((∀uX, f u Y)(∀u vX, f u = f vu = v)(∀wY, ∃uX, f u = w)p)p
Primitive. The name inv is a term of type set(setset)setset.
L167
Axiom. (surj_rinv) We take the following as an axiom:
∀X Y, ∀f : setset, (∀wY, ∃uX, f u = w)∀yY, inv X f y X f (inv X f y) = y
L169
Axiom. (inj_linv) We take the following as an axiom:
∀X, ∀f : setset, (∀u vX, f u = f vu = v)∀xX, inv X f (f x) = x
L171
Axiom. (bij_inv) We take the following as an axiom:
∀X Y, ∀f : setset, bij X Y fbij Y X (inv X f)
L173
Axiom. (ap0_lam) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (λxXY x)(z 0) X
L175
Axiom. (ap1_lam) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (λxXY x)(z 1) (Y (z 0))
L177
Axiom. (tuple_2_inj) We take the following as an axiom:
∀x y w z : set, (x,y) = (w,z)x = w y = z
L179
Axiom. (tuple_2_setprod) We take the following as an axiom:
∀X : set, ∀Y : set, ∀xX, ∀yY, (x,y) X Y
L180
Axiom. (tuple_lam_eta) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z(λxXY x), (z 0,z 1) = z
Beginning of Section Tuples
L183
Variable x0 x1 : set
L185
Axiom. (tuple_2_0_eq) We take the following as an axiom:
(x0,x1) 0 = x0
L186
Axiom. (tuple_2_1_eq) We take the following as an axiom:
(x0,x1) 1 = x1
End of Section Tuples
Primitive. The name ordinal is a term of type setprop.
L193
Axiom. (ordinal_Empty) We take the following as an axiom:
L195
Axiom. (nat_p_ordinal) We take the following as an axiom:
∀n : set, nat_p nordinal n
L196
Axiom. (ordinal_ordsucc) We take the following as an axiom:
∀alpha : set, ordinal alphaordinal (ordsucc alpha)
Primitive. The name SNo is a term of type setprop.
Primitive. The name SNoLt is a term of type setsetprop.
Primitive. The name SNoLe is a term of type setsetprop.
Primitive. The name minus_SNo is a term of type setset.
Primitive. The name add_SNo is a term of type setsetset.
Notation. We use < as an infix operator with priority 490 and no associativity corresponding to applying term SNoLt.
Notation. We use <= as an infix operator with priority 490 and no associativity corresponding to applying term SNoLe.
Notation. We use - as a prefix operator with priority 358 corresponding to applying term minus_SNo.
Notation. We use + as an infix operator with priority 360 and which associates to the right corresponding to applying term add_SNo.
L214
Axiom. (SNoLt_irref) We take the following as an axiom:
∀x, ¬ (x < x)
L216
Axiom. (SNoLt_tra) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx < yy < zx < z
L217
Axiom. (SNoLeE) We take the following as an axiom:
∀x y, SNo xSNo yx <= yx < y x = y
L219
Axiom. (SNo_0) We take the following as an axiom:
L221
Axiom. (SNo_1) We take the following as an axiom:
L222
Axiom. (SNoLt_0_1) We take the following as an axiom:
0 < 1
L224
Axiom. (SNo_minus_SNo) We take the following as an axiom:
∀x, SNo xSNo (- x)
L226
Axiom. (SNo_add_SNo) We take the following as an axiom:
∀x y, SNo xSNo ySNo (x + y)
L227
Axiom. (minus_SNo_0) We take the following as an axiom:
- 0 = 0
L229
Axiom. (minus_SNo_invol) We take the following as an axiom:
∀x, SNo x- - x = x
L230
Axiom. (add_SNo_0R) We take the following as an axiom:
∀x, SNo xx + 0 = x
L231
Axiom. (add_SNo_com) We take the following as an axiom:
∀x y, SNo xSNo yx + y = y + x
L232
Axiom. (add_SNo_Lt2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zy < zx + y < x + z
L233
Axiom. (add_SNo_Lt2_cancel) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y < x + zy < z
L234
Axiom. (add_SNo_cancel_L) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y = x + zy = z
L236
Axiom. (add_SNo_cancel_R) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y = z + yx = z
L238
Axiom. (add_SNo_minus_SNo_rinv) We take the following as an axiom:
∀x, SNo xx + - x = 0
L240
Axiom. (minus_add_SNo_distr) We take the following as an axiom:
∀x y, SNo xSNo y- (x + y) = (- x) + (- y)
L241
Axiom. (add_SNo_minus_SNo_prop2) We take the following as an axiom:
∀x y, SNo xSNo yx + - x + y = y
L243
Axiom. (add_SNo_minus_R2') We take the following as an axiom:
∀x y, SNo xSNo y(x + - y) + y = x
L245
Axiom. (minus_SNo_Lt_contra) We take the following as an axiom:
∀x y, SNo xSNo yx < y- y < - x
L247
Axiom. (minus_SNo_Lt_contra3) We take the following as an axiom:
∀x y, SNo xSNo y- x < - yy < x
L248
Axiom. (ordinal_SNo) We take the following as an axiom:
∀alpha, ordinal alphaSNo alpha
L250
Axiom. (ordinal_SNoLt_In) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha < betaalpha beta
L251
Axiom. (ordinal_ordsucc_SNo_eq) We take the following as an axiom:
∀alpha, ordinal alphaordsucc alpha = 1 + alpha
Primitive. The name int is a term of type set.
L256
Axiom. (nat_p_int) We take the following as an axiom:
∀n, nat_p nn int
L258
Axiom. (int_SNo) We take the following as an axiom:
∀xint, SNo x
L259
Axiom. (Subq_omega_int) We take the following as an axiom:
L260
Axiom. (int_minus_SNo) We take the following as an axiom:
∀xint, - x int
L261
Axiom. (int_add_SNo) We take the following as an axiom:
∀x yint, x + y int
Primitive. The name pack_u is a term of type set(setset)set.
Primitive. The name unpack_u_i is a term of type set(set(setset)set)set.
L268
Axiom. (unpack_u_i_eq) We take the following as an axiom:
∀Phi : set(setset)set, ∀X, ∀F : setset, (∀F' : setset, (∀xX, F x = F' x)Phi X F' = Phi X F)unpack_u_i (pack_u X F) Phi = Phi X F
Primitive. The name unpack_u_o is a term of type set(set(setset)prop)prop.
L277
Axiom. (unpack_u_o_eq) We take the following as an axiom:
∀Phi : set(setset)prop, ∀X, ∀F : setset, (∀F' : setset, (∀xX, F x = F' x)Phi X F' = Phi X F)unpack_u_o (pack_u X F) Phi = Phi X F
L283
Axiom. (pack_u_0_eq2) We take the following as an axiom:
∀X, ∀F : setset, X = pack_u X F 0
L285
Definition. We define struct_u to be λS ⇒ ∀q : setprop, (∀X, ∀F : setset, (∀xX, F x X)q (pack_u X F))q S of type setprop.
L287
Axiom. (pack_struct_u_I) We take the following as an axiom:
∀X, ∀F : setset, (∀xX, F x X)struct_u (pack_u X F)
Primitive. The name Hom_struct_u is a term of type setsetsetprop.
L292
Axiom. (Hom_struct_u_pack) We take the following as an axiom:
∀X Y, ∀opX opY : setset, ∀f, (Hom_struct_u (pack_u X opX) (pack_u Y opY) f) = (f YX (∀xX, f (opX x) = opY (f x)))
L298
Definition. We define struct_u_bij to be λX ⇒ struct_u X unpack_u_o X (λX' h ⇒ bij X' X' (λx ⇒ h x)) of type setprop.
Primitive. The name MetaCat is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)prop.
L304
Axiom. (MetaCatSet) We take the following as an axiom:
MetaCat (λ_ ⇒ True) HomSet (λX ⇒ lam_id X) (λX Y Z g f ⇒ lam_comp X g f)
L306
Axiom. (MetaCat_struct_u_bij) We take the following as an axiom:
Primitive. The name MetaFunctor is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setset)(setsetsetset)prop.
L310
Axiom. (MetaFunctor_I) We take the following as an axiom:
∀C0 : setprop, ∀C1 : setsetsetprop, ∀idC : setset, ∀compC : setsetsetsetsetset, ∀D0 : setprop, ∀D1 : setsetsetprop, ∀idD : setset, ∀compD : setsetsetsetsetset, ∀F0 : setset, ∀F1 : setsetsetset, (∀X, C0 XD0 (F0 X))(∀X Y f, C0 XC0 YC1 X Y fD1 (F0 X) (F0 Y) (F1 X Y f))(∀X, C0 XF1 X X (idC X) = idD (F0 X))(∀X Y Z f g, C0 XC0 YC0 ZC1 X Y fC1 Y Z gF1 X Z (compC X Y Z g f) = compD (F0 X) (F0 Y) (F0 Z) (F1 Y Z g) (F1 X Y f))MetaFunctor C0 C1 idC compC D0 D1 idD compD F0 F1
L323
Axiom. (MetaCat_struct_u_bij_Forgetful) We take the following as an axiom:
MetaFunctor struct_u_bij Hom_struct_u struct_id struct_comp (λ_ ⇒ True) HomSet (λX ⇒ lam_id X) (λX Y Z f g ⇒ (lam_comp X f g)) (λX ⇒ X 0) (λX Y f ⇒ f)
Primitive. The name MetaFunctor_strict is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setset)(setsetsetset)prop.
L332
Axiom. (MetaFunctor_strict_I) We take the following as an axiom:
∀C0 : setprop, ∀C1 : setsetsetprop, ∀idC : setset, ∀compC : setsetsetsetsetset, ∀D0 : setprop, ∀D1 : setsetsetprop, ∀idD : setset, ∀compD : setsetsetsetsetset, ∀F0 : setset, ∀F1 : setsetsetset, MetaCat C0 C1 idC compCMetaCat D0 D1 idD compDMetaFunctor C0 C1 idC compC D0 D1 idD compD F0 F1MetaFunctor_strict C0 C1 idC compC D0 D1 idD compD F0 F1
Primitive. The name MetaNatTrans is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setset)(setsetsetset)(setset)(setsetsetset)(setset)prop.
L346
Axiom. (MetaNatTrans_I) We take the following as an axiom:
∀C0 : setprop, ∀C1 : setsetsetprop, ∀idC : setset, ∀compC : setsetsetsetsetset, ∀D0 : setprop, ∀D1 : setsetsetprop, ∀idD : setset, ∀compD : setsetsetsetsetset, ∀F0 : setset, ∀F1 : setsetsetset, ∀G0 : setset, ∀G1 : setsetsetset, ∀eta : setset, (∀X, C0 XD1 (F0 X) (G0 X) (eta X))(∀X Y f, C0 XC0 YC1 X Y fcompD (F0 X) (G0 X) (G0 Y) (G1 X Y f) (eta X) = compD (F0 X) (F0 Y) (G0 Y) (eta Y) (F1 X Y f))MetaNatTrans C0 C1 idC compC D0 D1 idD compD F0 F1 G0 G1 eta
Primitive. The name MetaAdjunction is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setset)(setsetsetset)(setset)(setsetsetset)(setset)(setset)prop.
L362
Axiom. (MetaAdjunction_I) We take the following as an axiom:
∀C0 : setprop, ∀C1 : setsetsetprop, ∀idC : setset, ∀compC : setsetsetsetsetset, ∀D0 : setprop, ∀D1 : setsetsetprop, ∀idD : setset, ∀compD : setsetsetsetsetset, ∀F0 : setset, ∀F1 : setsetsetset, ∀G0 : setset, ∀G1 : setsetsetset, ∀eta eps : setset, (∀X, C0 XcompD (F0 X) (F0 (G0 (F0 X))) (F0 X) (eps (F0 X)) (F1 X (G0 (F0 X)) (eta X)) = idD (F0 X))(∀Y, D0 YcompC (G0 Y) (G0 (F0 (G0 Y))) (G0 Y) (G1 (F0 (G0 Y)) Y (eps Y)) (eta (G0 Y)) = idC (G0 Y))MetaAdjunction C0 C1 idC compC D0 D1 idD compD F0 F1 G0 G1 eta eps
Primitive. The name MetaAdjunction_strict is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setset)(setsetsetset)(setset)(setsetsetset)(setset)(setset)prop.
L377
Axiom. (MetaAdjunction_strict_I) We take the following as an axiom:
∀C0 : setprop, ∀C1 : setsetsetprop, ∀idC : setset, ∀compC : setsetsetsetsetset, ∀D0 : setprop, ∀D1 : setsetsetprop, ∀idD : setset, ∀compD : setsetsetsetsetset, ∀F0 : setset, ∀F1 : setsetsetset, ∀G0 : setset, ∀G1 : setsetsetset, ∀eta eps : setset, MetaFunctor_strict C0 C1 idC compC D0 D1 idD compD F0 F1MetaFunctor D0 D1 idD compD C0 C1 idC compC G0 G1MetaNatTrans C0 C1 idC compC C0 C1 idC compC (λX : setX) (λX Y f : setf) (λX : setG0 (F0 X)) (λX Y f : setG1 (F0 X) (F0 Y) (F1 X Y f)) etaMetaNatTrans D0 D1 idD compD D0 D1 idD compD (λA : setF0 (G0 A)) (λA B h : setF1 (G0 A) (G0 B) (G1 A B h)) (λA : setA) (λA B h : seth) epsMetaAdjunction C0 C1 idC compC D0 D1 idD compD F0 F1 G0 G1 eta epsMetaAdjunction_strict C0 C1 idC compC D0 D1 idD compD F0 F1 G0 G1 eta eps
L392
Definition. We define omega_iterate to be λn h x ⇒ nat_primrec x (λ_ r ⇒ h r) n of type set(setset)setset.
L395
Axiom. (omega_iterate_0) We take the following as an axiom:
∀h : setset, ∀x, omega_iterate 0 h x = x
L397
Axiom. (omega_iterate_S_out) We take the following as an axiom:
∀nomega, ∀h : setset, ∀x, omega_iterate (ordsucc n) h x = h (omega_iterate n h x)
L399
Axiom. (omega_iterate_In) We take the following as an axiom:
∀X, ∀xX, ∀h : setset, (∀xX, h x X)∀n, nat_p nomega_iterate n h x X
L403
Axiom. (omega_iterate_ext) We take the following as an axiom:
∀X, ∀xX, ∀h h' : setset, (∀xX, h x X)(∀xX, h x = h' x)∀n, nat_p nomega_iterate n h x = omega_iterate n h' x
L407
Axiom. (omega_iterate_comm) We take the following as an axiom:
∀X, ∀xX, ∀h k : setset, (∀xX, h x X)∀f : setset, (∀xX, f (h x) = k (f x))∀n, nat_p nf (omega_iterate n h x) = omega_iterate n k (f x)
L412
Axiom. (omega_iterate_pair_count1) We take the following as an axiom:
∀x, ∀n, nat_p nomega_iterate n (λu ⇒ (ordsucc (u 0),u 1)) (0,x) = (n,x)
L415
Axiom. (omega_iterate_pair_countback1) We take the following as an axiom:
∀x, ∀n, nat_p nomega_iterate n (λu ⇒ (u 0 + - 1,u 1)) (0,x) = (- n,x)
L418
Definition. We define MetaCat_struct_u_forgetfree_eta to be λX ⇒ λxX(0,x) of type setset.
L421
Axiom. (int_neg_or_nonneg) We take the following as an axiom:
∀xint, ∀p : prop, (x < 0- x omegap)(0 <= x¬ (x < 0)x omegap)p
L427
Definition. We define MetaCat_struct_u_bij_free0 to be λX ⇒ pack_u (int X) (λu ⇒ (u 0 + 1,u 1)) of type setset.
L430
Definition. We define MetaCat_struct_u_bij_free1 to be λX Y h ⇒ λuint X(u 0,h (u 1)) of type setsetsetset.
L433
Definition. We define MetaCat_struct_u_bij_forgetfree_eps to be λA ⇒ unpack_u_i A (λX h ⇒ λuint Xif u 0 < 0 then omega_iterate (- (u 0)) (inv X h) (u 1) else omega_iterate (u 0) h (u 1)) of type setset.
L436
Proof:
Proof not loaded.
L1312
Proposition. (MetaCat_struct_u_bij_left_adjoint_forgetful)
∃F0 : setset, ∃F1 : setsetsetset, ∃eta eps : setset, MetaAdjunction_strict (λ_ ⇒ True) HomSet (λX ⇒ (lam_id X)) (λX Y Z f g ⇒ (lam_comp X f g)) struct_u_bij Hom_struct_u struct_id struct_comp F0 F1 (λX ⇒ X 0) (λX Y f ⇒ f) eta eps
Proof:
Proof not loaded.