Definition. We define True to be ∀p : prop, pp of type prop.
Definition. We define False to be ∀p : prop, p of type prop.
Axiom. (FalseE) We take the following as an axiom:
False∀p : prop, p
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.
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.
Axiom. (andI) We take the following as an axiom:
∀A B : prop, ABA B
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
Variable A : SType
Definition. We define eq to be λx y : A∀Q : AAprop, Q x yQ y x of type AAprop.
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
Variable A : SType
Definition. We define ex to be λQ : Aprop∀P : prop, (∀x : A, Q xP)P of type (Aprop)prop.
End of Section Ex
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.
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.
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.
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.
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.
Axiom. (neq_ordsucc_0) We take the following as an axiom:
∀a : set, ordsucc a 0
Axiom. (eq_1_Sing0) We take the following as an axiom:
1 = {0}
Primitive. The name nat_p is a term of type setprop.
Axiom. (nat_0) We take the following as an axiom:
nat_p 0
Axiom. (nat_1) We take the following as an axiom:
nat_p 1
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.
Axiom. (omega_nat_p) We take the following as an axiom:
∀nomega, nat_p n
Axiom. (nat_p_omega) We take the following as an axiom:
∀n : set, nat_p nn omega
Axiom. (omega_ordsucc) We take the following as an axiom:
∀nomega, ordsucc n omega
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.
Axiom. (If_i_0) We take the following as an axiom:
∀p : prop, ∀x y : set, ¬ p(if p then x else y) = y
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.
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.
Axiom. (beta) We take the following as an axiom:
∀X : set, ∀F : setset, ∀x : set, x X(λxXF x) x = F x
Definition. We define lam_id to be λX ⇒ lam X (λx ⇒ x) of type setset.
Definition. We define lam_comp to be λX g f ⇒ lam X (λx : setg (f x)) of type setsetsetset.
Definition. We define struct_id to be λX ⇒ lam_id (X 0) of type setset.
Definition. We define struct_comp to be λX Y Z f g ⇒ lam_comp (X 0) f g of type setsetsetsetsetset.
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.
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)
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
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.
Definition. We define HomSet to be λX Y f ⇒ f YX of type setsetsetprop.
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.
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
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.
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
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
Axiom. (bij_inv) We take the following as an axiom:
∀X Y, ∀f : setset, bij X Y fbij Y X (inv X f)
Axiom. (ap0_lam) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (λxXY x)(z 0) X
Axiom. (ap1_lam) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (λxXY x)(z 1) (Y (z 0))
Axiom. (tuple_2_inj) We take the following as an axiom:
∀x y w z : set, (x,y) = (w,z)x = w y = z
Axiom. (tuple_2_setprod) We take the following as an axiom:
∀X : set, ∀Y : set, ∀xX, ∀yY, (x,y) X Y
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
Variable x0 x1 : set
Axiom. (tuple_2_0_eq) We take the following as an axiom:
(x0,x1) 0 = x0
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.
Axiom. (ordinal_Empty) We take the following as an axiom:
ordinal Empty
Axiom. (nat_p_ordinal) We take the following as an axiom:
∀n : set, nat_p nordinal n
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.
Axiom. (SNoLt_irref) We take the following as an axiom:
∀x, ¬ (x < x)
Axiom. (SNoLt_tra) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx < yy < zx < z
Axiom. (SNoLeE) We take the following as an axiom:
∀x y, SNo xSNo yx <= yx < y x = y
Axiom. (SNo_0) We take the following as an axiom:
SNo 0
Axiom. (SNo_1) We take the following as an axiom:
SNo 1
Axiom. (SNoLt_0_1) We take the following as an axiom:
0 < 1
Axiom. (SNo_minus_SNo) We take the following as an axiom:
∀x, SNo xSNo (- x)
Axiom. (SNo_add_SNo) We take the following as an axiom:
∀x y, SNo xSNo ySNo (x + y)
Axiom. (minus_SNo_0) We take the following as an axiom:
- 0 = 0
Axiom. (minus_SNo_invol) We take the following as an axiom:
∀x, SNo x- - x = x
Axiom. (add_SNo_0R) We take the following as an axiom:
∀x, SNo xx + 0 = x
Axiom. (add_SNo_com) We take the following as an axiom:
∀x y, SNo xSNo yx + y = y + x
Axiom. (add_SNo_Lt2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zy < zx + y < x + z
Axiom. (add_SNo_Lt2_cancel) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y < x + zy < z
Axiom. (add_SNo_cancel_L) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y = x + zy = z
Axiom. (add_SNo_cancel_R) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y = z + yx = z
Axiom. (add_SNo_minus_SNo_rinv) We take the following as an axiom:
∀x, SNo xx + - x = 0
Axiom. (minus_add_SNo_distr) We take the following as an axiom:
∀x y, SNo xSNo y- (x + y) = (- x) + (- y)
Axiom. (add_SNo_minus_SNo_prop2) We take the following as an axiom:
∀x y, SNo xSNo yx + - x + y = y
Axiom. (add_SNo_minus_R2') We take the following as an axiom:
∀x y, SNo xSNo y(x + - y) + y = x
Axiom. (minus_SNo_Lt_contra) We take the following as an axiom:
∀x y, SNo xSNo yx < y- y < - x
Axiom. (minus_SNo_Lt_contra3) We take the following as an axiom:
∀x y, SNo xSNo y- x < - yy < x
Axiom. (ordinal_SNo) We take the following as an axiom:
∀alpha, ordinal alphaSNo alpha
Axiom. (ordinal_SNoLt_In) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha < betaalpha beta
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.
Axiom. (nat_p_int) We take the following as an axiom:
∀n, nat_p nn int
Axiom. (int_SNo) We take the following as an axiom:
∀xint, SNo x
Axiom. (Subq_omega_int) We take the following as an axiom:
omega int
Axiom. (int_minus_SNo) We take the following as an axiom:
∀xint, - x int
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.
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.
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
Axiom. (pack_u_0_eq2) We take the following as an axiom:
∀X, ∀F : setset, X = pack_u X F 0
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.
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.
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)))
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.
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)
Axiom. (MetaCat_struct_u_bij) We take the following as an axiom:
MetaCat struct_u_bij Hom_struct_u struct_id struct_comp
Primitive. The name MetaFunctor is a term of type (setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setprop)(setsetsetprop)(setset)(setsetsetsetsetset)(setset)(setsetsetset)prop.
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
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.
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.
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.
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.
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
Definition. We define omega_iterate to be λn h x ⇒ nat_primrec x (λ_ r ⇒ h r) n of type set(setset)setset.
Axiom. (omega_iterate_0) We take the following as an axiom:
∀h : setset, ∀x, omega_iterate 0 h x = x
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)
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
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
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)
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)
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)
Definition. We define MetaCat_struct_u_forgetfree_eta to be λX ⇒ λxX(0,x) of type setset.
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
Definition. We define MetaCat_struct_u_bij_free0 to be λX ⇒ pack_u (int X) (λu ⇒ (u 0 + 1,u 1)) of type setset.
Definition. We define MetaCat_struct_u_bij_free1 to be λX Y h ⇒ λuint X(u 0,h (u 1)) of type setsetsetset.
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.
Theorem. (MetaCat_struct_u_bij_forgetfree)
Proof:
Proof not loaded.
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.