Primitive. The name Eps_i is a term of type (setprop)set.
Axiom. (Eps_i_ax) We take the following as an axiom:
∀P : setprop, ∀x : set, P xP (Eps_i P)
Definition. We define True to be ∀p : prop, pp of type prop.
Definition. We define False to be ∀p : prop, p of type prop.
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.
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.
Definition. We define iff to be λA B : propand (AB) (BA) of type proppropprop.
Notation. We use <-> as an infix operator with priority 805 and no associativity corresponding to applying term iff.
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 FE
Variable A B : SType
Axiom. (func_ext) We take the following as an axiom:
∀f g : AB, (∀x : A, f x = g x)f = g
End of Section FE
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
Notation. We use exists x...y [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using ex.
Axiom. (prop_ext) We take the following as an axiom:
∀p q : prop, iff p qp = 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.
Axiom. (set_ext) We take the following as an axiom:
∀X Y : set, X YY XX = Y
Axiom. (In_ind) We take the following as an axiom:
∀P : setprop, (∀X : set, (xX, P x)P X)∀X : set, P X
Notation. We use exists x...y [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using ex and handling ∈ or ⊆ ascriptions using and.
Primitive. The name Empty is a term of type set.
Axiom. (EmptyAx) We take the following as an axiom:
~ exists x : set, x Empty
Primitive. The name Union is a term of type setset.
Axiom. (UnionEq) We take the following as an axiom:
∀X x, x Union X <-> exists Y, x Y /\ Y X
Primitive. The name Power is a term of type setset.
Axiom. (PowerEq) We take the following as an axiom:
∀X Y : set, Y Power X <-> Y X
Primitive. The name Repl is a term of type set(setset)set.
Notation. {B| xA} is notation for Repl Ax . B).
Axiom. (ReplEq) We take the following as an axiom:
∀A : set, ∀F : setset, ∀y : set, y {F x|xA} <-> exists xA, y = F x
Definition. We define TransSet to be λU : setxU, x U of type setprop.
Definition. We define Union_closed to be λU : set∀X : set, X UUnion X U of type setprop.
Definition. We define Power_closed to be λU : set∀X : set, X UPower X U of type setprop.
Definition. We define Repl_closed to be λU : set∀X : set, X U∀F : setset, (∀x : set, x XF x U){F x|xX} U of type setprop.
Definition. We define ZF_closed to be λU : setUnion_closed U /\ Power_closed U /\ Repl_closed U of type setprop.
Primitive. The name UnivOf is a term of type setset.
Axiom. (UnivOf_In) We take the following as an axiom:
∀N : set, N UnivOf N
Axiom. (UnivOf_TransSet) We take the following as an axiom:
∀N : set, TransSet (UnivOf N)
Axiom. (UnivOf_ZF_closed) We take the following as an axiom:
∀N : set, ZF_closed (UnivOf N)
Axiom. (UnivOf_Min) We take the following as an axiom:
∀N U : set, N UTransSet UZF_closed UUnivOf N U
Axiom. (FalseE) We take the following as an axiom:
False∀p : prop, p
Axiom. (TrueI) We take the following as an axiom:
True
Axiom. (andI) We take the following as an axiom:
∀A B : prop, ABA /\ B
Axiom. (andEL) We take the following as an axiom:
∀A B : prop, A /\ BA
Axiom. (andER) We take the following as an axiom:
∀A B : prop, A /\ BB
Axiom. (orIL) We take the following as an axiom:
∀A B : prop, AA \/ B
Axiom. (orIR) We take the following as an axiom:
∀A B : prop, BA \/ B
Beginning of Section PropN
Variable P1 P2 P3 : prop
Axiom. (and3I) We take the following as an axiom:
P1P2P3P1 /\ P2 /\ P3
Axiom. (and3E) We take the following as an axiom:
P1 /\ P2 /\ P3(∀p : prop, (P1P2P3p)p)
Axiom. (or3I1) We take the following as an axiom:
P1P1 \/ P2 \/ P3
Axiom. (or3I2) We take the following as an axiom:
P2P1 \/ P2 \/ P3
Axiom. (or3I3) We take the following as an axiom:
P3P1 \/ P2 \/ P3
Axiom. (or3E) We take the following as an axiom:
P1 \/ P2 \/ P3(∀p : prop, (P1p)(P2p)(P3p)p)
Variable P4 : prop
Axiom. (and4I) We take the following as an axiom:
P1P2P3P4P1 /\ P2 /\ P3 /\ P4
Variable P5 : prop
Axiom. (and5I) We take the following as an axiom:
P1P2P3P4P5P1 /\ P2 /\ P3 /\ P4 /\ P5
End of Section PropN
Axiom. (not_or_and_demorgan) We take the following as an axiom:
∀A B : prop, ~ (A \/ B)~ A /\ ~ B
Axiom. (not_ex_all_demorgan_i) We take the following as an axiom:
∀P : setprop, (~ exists x, P x)∀x, ~ P x
Axiom. (iffI) We take the following as an axiom:
∀A B : prop, (AB)(BA)(A <-> B)
Axiom. (iffEL) We take the following as an axiom:
∀A B : prop, (A <-> B)AB
Axiom. (iffER) We take the following as an axiom:
∀A B : prop, (A <-> B)BA
Axiom. (iff_refl) We take the following as an axiom:
∀A : prop, A <-> A
Axiom. (iff_sym) We take the following as an axiom:
∀A B : prop, (A <-> B)(B <-> A)
Axiom. (iff_trans) We take the following as an axiom:
∀A B C : prop, (A <-> B)(B <-> C)(A <-> C)
Axiom. (eq_i_tra) We take the following as an axiom:
∀x y z, x = yy = zx = z
Axiom. (f_eq_i) We take the following as an axiom:
∀f : setset, ∀x y, x = yf x = f y
Axiom. (neq_i_sym) We take the following as an axiom:
∀x y, x <> yy <> x
Definition. We define nIn to be λx X ⇒ ~ In x X of type setsetprop.
Notation. We use /:e as an infix operator with priority 502 and no associativity corresponding to applying term nIn.
Axiom. (Eps_i_ex) We take the following as an axiom:
∀P : setprop, (exists x, P x)P (Eps_i P)
Axiom. (pred_ext) We take the following as an axiom:
∀P Q : setprop, (∀x, P x <-> Q x)P = Q
Axiom. (prop_ext_2) We take the following as an axiom:
∀p q : prop, (pq)(qp)p = q
Axiom. (Subq_ref) We take the following as an axiom:
∀X : set, X X
Axiom. (Subq_tra) We take the following as an axiom:
∀X Y Z : set, X YY ZX Z
Axiom. (Subq_contra) We take the following as an axiom:
∀X Y z : set, X Yz /:e Yz /:e X
Axiom. (EmptyE) We take the following as an axiom:
∀x : set, x /:e Empty
Axiom. (Subq_Empty) We take the following as an axiom:
∀X : set, Empty X
Axiom. (Empty_Subq_eq) We take the following as an axiom:
∀X : set, X EmptyX = Empty
Axiom. (Empty_eq) We take the following as an axiom:
∀X : set, (∀x, x /:e X)X = Empty
Axiom. (UnionI) We take the following as an axiom:
∀X x Y : set, x YY Xx Union X
Axiom. (UnionE) We take the following as an axiom:
∀X x : set, x Union Xexists Y : set, x Y /\ Y X
Axiom. (UnionE_impred) We take the following as an axiom:
∀X x : set, x Union X∀p : prop, (∀Y : set, x YY Xp)p
Axiom. (PowerI) We take the following as an axiom:
∀X Y : set, Y XY Power X
Axiom. (PowerE) We take the following as an axiom:
∀X Y : set, Y Power XY X
Axiom. (Empty_In_Power) We take the following as an axiom:
∀X : set, Empty Power X
Axiom. (Self_In_Power) We take the following as an axiom:
∀X : set, X Power X
Axiom. (xm) We take the following as an axiom:
∀P : prop, P \/ ~ P
Axiom. (dneg) We take the following as an axiom:
∀P : prop, ~ ~ PP
Axiom. (not_all_ex_demorgan_i) We take the following as an axiom:
∀P : setprop, ~ (∀x, P x)exists x, ~ P x
Axiom. (eq_or_nand) We take the following as an axiom:
or = (λx y : prop~ (~ x /\ ~ y))
Primitive. The name exactly1of2 is a term of type proppropprop.
Axiom. (exactly1of2_I1) We take the following as an axiom:
∀A B : prop, A~ Bexactly1of2 A B
Axiom. (exactly1of2_I2) We take the following as an axiom:
∀A B : prop, ~ ABexactly1of2 A B
Axiom. (exactly1of2_E) We take the following as an axiom:
∀A B : prop, exactly1of2 A B∀p : prop, (A~ Bp)(~ ABp)p
Axiom. (exactly1of2_or) We take the following as an axiom:
∀A B : prop, exactly1of2 A BA \/ B
Axiom. (ReplI) We take the following as an axiom:
∀A : set, ∀F : setset, ∀x : set, x AF x {F x|xA}
Axiom. (ReplE) We take the following as an axiom:
∀A : set, ∀F : setset, ∀y : set, y {F x|xA}exists xA, y = F x
Axiom. (ReplE_impred) We take the following as an axiom:
∀A : set, ∀F : setset, ∀y : set, y {F x|xA}∀p : prop, (∀x : set, x Ay = F xp)p
Axiom. (ReplE') We take the following as an axiom:
∀X, ∀f : setset, ∀p : setprop, (xX, p (f x))y{f x|xX}, p y
Axiom. (Repl_Empty) We take the following as an axiom:
∀F : setset, {F x|xEmpty} = Empty
Axiom. (ReplEq_ext_sub) We take the following as an axiom:
∀X, ∀F G : setset, (xX, F x = G x){F x|xX} {G x|xX}
Axiom. (ReplEq_ext) We take the following as an axiom:
∀X, ∀F G : setset, (xX, F x = G x){F x|xX} = {G x|xX}
Axiom. (Repl_inv_eq) We take the following as an axiom:
∀P : setprop, ∀f g : setset, (∀x, P xg (f x) = x)∀X, (xX, P x){g y|y{f x|xX}} = X
Axiom. (Repl_invol_eq) We take the following as an axiom:
∀P : setprop, ∀f : setset, (∀x, P xf (f x) = x)∀X, (xX, P x){f y|y{f x|xX}} = X
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_correct) We take the following as an axiom:
∀p : prop, ∀x y : set, p /\ (if p then x else y) = x \/ ~ p /\ (if p then x else y) = y
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
Axiom. (If_i_or) We take the following as an axiom:
∀p : prop, ∀x y : set, (if p then x else y) = x \/ (if p then x else y) = y
Primitive. The name UPair is a term of type setsetset.
Notation. {x,y} is notation for UPair x y.
Axiom. (UPairE) We take the following as an axiom:
∀x y z : set, x {y,z}x = y \/ x = z
Axiom. (UPairI1) We take the following as an axiom:
∀y z : set, y {y,z}
Axiom. (UPairI2) We take the following as an axiom:
∀y z : set, z {y,z}
Primitive. The name Sing is a term of type setset.
Notation. {x} is notation for Sing x.
Axiom. (SingI) We take the following as an axiom:
∀x : set, x {x}
Axiom. (SingE) We take the following as an axiom:
∀x y : set, y {x}y = x
Axiom. (Sing_inj) We take the following as an axiom:
∀x y, {x} = {y}x = y
Primitive. The name binunion is a term of type setsetset.
Notation. We use :\/: as an infix operator with priority 345 and which associates to the left corresponding to applying term binunion.
Axiom. (binunionI1) We take the following as an axiom:
∀X Y z : set, z Xz X :\/: Y
Axiom. (binunionI2) We take the following as an axiom:
∀X Y z : set, z Yz X :\/: Y
Axiom. (binunionE) We take the following as an axiom:
∀X Y z : set, z X :\/: Yz X \/ z Y
Axiom. (binunionE') We take the following as an axiom:
∀X Y z, ∀p : prop, (z Xp)(z Yp)(z X :\/: Yp)
Axiom. (binunion_asso) We take the following as an axiom:
∀X Y Z : set, X :\/: (Y :\/: Z) = (X :\/: Y) :\/: Z
Axiom. (binunion_com_Subq) We take the following as an axiom:
∀X Y : set, X :\/: Y Y :\/: X
Axiom. (binunion_com) We take the following as an axiom:
∀X Y : set, X :\/: Y = Y :\/: X
Axiom. (binunion_idl) We take the following as an axiom:
∀X : set, Empty :\/: X = X
Axiom. (binunion_idr) We take the following as an axiom:
∀X : set, X :\/: Empty = X
Axiom. (binunion_Subq_1) We take the following as an axiom:
∀X Y : set, X X :\/: Y
Axiom. (binunion_Subq_2) We take the following as an axiom:
∀X Y : set, Y X :\/: Y
Axiom. (binunion_Subq_min) We take the following as an axiom:
∀X Y Z : set, X ZY ZX :\/: Y Z
Axiom. (Subq_binunion_eq) We take the following as an axiom:
∀X Y, (X Y) = (X :\/: Y = Y)
Definition. We define SetAdjoin to be λX y ⇒ X :\/: {y} of type setsetset.
Notation. We now use the set enumeration notation {...,...,...} in general. If 0 elements are given, then Empty is used to form the corresponding term. If 1 element is given, then Sing is used to form the corresponding term. If 2 elements are given, then UPair is used to form the corresponding term. If more than elements are given, then SetAdjoin is used to reduce to the case with one fewer elements.
Primitive. The name famunion is a term of type set(setset)set.
Notation. We use \/_ x [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using famunion.
Axiom. (famunionI) We take the following as an axiom:
∀X : set, ∀F : (setset), ∀x y : set, x Xy F xy \/_ xX, F x
Axiom. (famunionE) We take the following as an axiom:
∀X : set, ∀F : (setset), ∀y : set, y (\/_ xX, F x)exists xX, y F x
Axiom. (famunionE_impred) We take the following as an axiom:
∀X : set, ∀F : (setset), ∀y : set, y (\/_ xX, F x)∀p : prop, (∀x, x Xy F xp)p
Axiom. (famunion_Empty) We take the following as an axiom:
∀F : setset, (\/_ xEmpty, F x) = Empty
Axiom. (famunion_Subq) We take the following as an axiom:
∀X, ∀f g : setset, (xX, f x g x)famunion X f famunion X g
Axiom. (famunion_ext) We take the following as an axiom:
∀X, ∀f g : setset, (xX, f x = g x)famunion X f = famunion X g
Beginning of Section SepSec
Variable X : set
Variable P : setprop
Let z : setEps_i (λz ⇒ z X /\ P z)
Let F : setsetλx ⇒ if P x then x else z
Primitive. The name Sep is a term of type set.
End of Section SepSec
Notation. {xA | B} is notation for Sep Ax . B).
Axiom. (SepI) We take the following as an axiom:
∀X : set, ∀P : (setprop), ∀x : set, x XP xx {xX|P x}
Axiom. (SepE) We take the following as an axiom:
∀X : set, ∀P : (setprop), ∀x : set, x {xX|P x}x X /\ P x
Axiom. (SepE1) We take the following as an axiom:
∀X : set, ∀P : (setprop), ∀x : set, x {xX|P x}x X
Axiom. (SepE2) We take the following as an axiom:
∀X : set, ∀P : (setprop), ∀x : set, x {xX|P x}P x
Axiom. (Sep_Empty) We take the following as an axiom:
∀P : setprop, {xEmpty|P x} = Empty
Axiom. (Sep_Subq) We take the following as an axiom:
∀X : set, ∀P : setprop, {xX|P x} X
Axiom. (Sep_In_Power) We take the following as an axiom:
∀X : set, ∀P : setprop, {xX|P x} Power X
Primitive. The name ReplSep is a term of type set(setprop)(setset)set.
Notation. {B| xA, C} is notation for ReplSep Ax . C) (λ x . B).
Axiom. (ReplSepI) We take the following as an axiom:
∀X : set, ∀P : setprop, ∀F : setset, ∀x : set, x XP xF x {F x|xX, P x}
Axiom. (ReplSepE) We take the following as an axiom:
∀X : set, ∀P : setprop, ∀F : setset, ∀y : set, y {F x|xX, P x}exists x : set, x X /\ P x /\ y = F x
Axiom. (ReplSepE_impred) We take the following as an axiom:
∀X : set, ∀P : setprop, ∀F : setset, ∀y : set, y {F x|xX, P x}∀p : prop, (xX, P xy = F xp)p
Primitive. The name binintersect is a term of type setsetset.
Notation. We use :/\: as an infix operator with priority 340 and which associates to the left corresponding to applying term binintersect.
Axiom. (binintersectI) We take the following as an axiom:
∀X Y z, z Xz Yz X :/\: Y
Axiom. (binintersectE) We take the following as an axiom:
∀X Y z, z X :/\: Yz X /\ z Y
Axiom. (binintersectE1) We take the following as an axiom:
∀X Y z, z X :/\: Yz X
Axiom. (binintersectE2) We take the following as an axiom:
∀X Y z, z X :/\: Yz Y
Axiom. (binintersect_Subq_1) We take the following as an axiom:
∀X Y : set, X :/\: Y X
Axiom. (binintersect_Subq_2) We take the following as an axiom:
∀X Y : set, X :/\: Y Y
Axiom. (binintersect_Subq_eq_1) We take the following as an axiom:
∀X Y, X YX :/\: Y = X
Axiom. (binintersect_Subq_max) We take the following as an axiom:
∀X Y Z : set, Z XZ YZ X :/\: Y
Axiom. (binintersect_com_Subq) We take the following as an axiom:
∀X Y : set, X :/\: Y Y :/\: X
Axiom. (binintersect_com) We take the following as an axiom:
∀X Y : set, X :/\: Y = Y :/\: X
Primitive. The name setminus is a term of type setsetset.
Notation. We use :\: as an infix operator with priority 350 and no associativity corresponding to applying term setminus.
Axiom. (setminusI) We take the following as an axiom:
∀X Y z, (z X)(z /:e Y)z X :\: Y
Axiom. (setminusE) We take the following as an axiom:
∀X Y z, (z X :\: Y)z X /\ z /:e Y
Axiom. (setminusE1) We take the following as an axiom:
∀X Y z, (z X :\: Y)z X
Axiom. (setminusE2) We take the following as an axiom:
∀X Y z, (z X :\: Y)z /:e Y
Axiom. (setminus_Subq) We take the following as an axiom:
∀X Y : set, X :\: Y X
Axiom. (setminus_Subq_contra) We take the following as an axiom:
∀X Y Z : set, Z YX :\: Y X :\: Z
Axiom. (setminus_In_Power) We take the following as an axiom:
∀A U, A :\: U Power A
Axiom. (setminus_idr) We take the following as an axiom:
∀X, X :\: Empty = X
Axiom. (In_irref) We take the following as an axiom:
∀x, x /:e x
Axiom. (In_no2cycle) We take the following as an axiom:
∀x y, x yy xFalse
Primitive. The name ordsucc is a term of type setset.
Axiom. (ordsuccI1) We take the following as an axiom:
∀x : set, x ordsucc x
Axiom. (ordsuccI2) We take the following as an axiom:
∀x : set, x ordsucc x
Axiom. (ordsuccE) We take the following as an axiom:
∀x y : set, y ordsucc xy x \/ y = x
Notation. Natural numbers 0,1,2,... are notation for the terms formed using Empty as 0 and forming successors with ordsucc.
Axiom. (neq_0_ordsucc) We take the following as an axiom:
∀a : set, 0 <> ordsucc a
Axiom. (neq_ordsucc_0) We take the following as an axiom:
∀a : set, ordsucc a <> 0
Axiom. (ordsucc_inj) We take the following as an axiom:
∀a b : set, ordsucc a = ordsucc ba = b
Axiom. (ordsucc_inj_contra) We take the following as an axiom:
∀a b : set, a <> bordsucc a <> ordsucc b
Axiom. (In_0_1) We take the following as an axiom:
0 1
Axiom. (In_0_2) We take the following as an axiom:
0 2
Axiom. (In_1_2) We take the following as an axiom:
1 2
Axiom. (In_1_3) We take the following as an axiom:
1 3
Axiom. (In_2_3) We take the following as an axiom:
2 3
Axiom. (In_1_4) We take the following as an axiom:
1 4
Axiom. (In_2_4) We take the following as an axiom:
2 4
Axiom. (In_3_4) We take the following as an axiom:
3 4
Axiom. (In_1_5) We take the following as an axiom:
1 5
Axiom. (In_2_5) We take the following as an axiom:
2 5
Axiom. (In_3_5) We take the following as an axiom:
3 5
Axiom. (In_4_5) We take the following as an axiom:
4 5
Axiom. (In_1_6) We take the following as an axiom:
1 6
Axiom. (In_1_7) We take the following as an axiom:
1 7
Axiom. (In_1_8) We take the following as an axiom:
1 8
Definition. We define nat_p to be λn : set∀p : setprop, p 0(∀x : set, p xp (ordsucc x))p n of type setprop.
Axiom. (nat_0) We take the following as an axiom:
nat_p 0
Axiom. (nat_ordsucc) We take the following as an axiom:
∀n : set, nat_p nnat_p (ordsucc n)
Axiom. (nat_1) We take the following as an axiom:
nat_p 1
Axiom. (nat_2) We take the following as an axiom:
nat_p 2
Axiom. (nat_3) We take the following as an axiom:
nat_p 3
Axiom. (nat_4) We take the following as an axiom:
nat_p 4
Axiom. (nat_5) We take the following as an axiom:
nat_p 5
Axiom. (nat_6) We take the following as an axiom:
nat_p 6
Axiom. (nat_7) We take the following as an axiom:
nat_p 7
Axiom. (nat_8) We take the following as an axiom:
nat_p 8
Axiom. (nat_0_in_ordsucc) We take the following as an axiom:
∀n, nat_p n0 ordsucc n
Axiom. (nat_ordsucc_in_ordsucc) We take the following as an axiom:
∀n, nat_p nmn, ordsucc m ordsucc n
Axiom. (nat_ind) We take the following as an axiom:
∀p : setprop, p 0(∀n, nat_p np np (ordsucc n))∀n, nat_p np n
Axiom. (nat_inv_impred) We take the following as an axiom:
∀p : setprop, p 0(∀n, nat_p np (ordsucc n))∀n, nat_p np n
Axiom. (nat_inv) We take the following as an axiom:
∀n, nat_p nn = 0 \/ exists x, nat_p x /\ n = ordsucc x
Axiom. (nat_complete_ind) We take the following as an axiom:
∀p : setprop, (∀n, nat_p n(mn, p m)p n)∀n, nat_p np n
Axiom. (nat_p_trans) We take the following as an axiom:
∀n, nat_p nmn, nat_p m
Axiom. (nat_trans) We take the following as an axiom:
∀n, nat_p nmn, m n
Axiom. (nat_ordsucc_trans) We take the following as an axiom:
∀n, nat_p nmordsucc n, m n
Axiom. (Union_ordsucc_eq) We take the following as an axiom:
∀n, nat_p nUnion (ordsucc n) = n
Axiom. (cases_1) We take the following as an axiom:
i1, ∀p : setprop, p 0p i
Axiom. (cases_2) We take the following as an axiom:
i2, ∀p : setprop, p 0p 1p i
Axiom. (cases_3) We take the following as an axiom:
i3, ∀p : setprop, p 0p 1p 2p i
Axiom. (neq_0_1) We take the following as an axiom:
0 <> 1
Axiom. (neq_1_0) We take the following as an axiom:
1 <> 0
Axiom. (neq_0_2) We take the following as an axiom:
0 <> 2
Axiom. (neq_2_0) We take the following as an axiom:
2 <> 0
Axiom. (neq_1_2) We take the following as an axiom:
1 <> 2
Axiom. (neq_1_3) We take the following as an axiom:
1 <> 3
Axiom. (neq_2_3) We take the following as an axiom:
2 <> 3
Axiom. (neq_2_4) We take the following as an axiom:
2 <> 4
Axiom. (neq_3_4) We take the following as an axiom:
3 <> 4
Axiom. (ZF_closed_E) We take the following as an axiom:
∀U, ZF_closed U∀p : prop, (Union_closed UPower_closed URepl_closed Up)p
Axiom. (ZF_Union_closed) We take the following as an axiom:
∀U, ZF_closed UXU, Union X U
Axiom. (ZF_Power_closed) We take the following as an axiom:
∀U, ZF_closed UXU, Power X U
Axiom. (ZF_Repl_closed) We take the following as an axiom:
∀U, ZF_closed UXU, ∀F : setset, (xX, F x U){F x|xX} U
Axiom. (ZF_UPair_closed) We take the following as an axiom:
∀U, ZF_closed Ux yU, {x,y} U
Axiom. (ZF_Sing_closed) We take the following as an axiom:
∀U, ZF_closed UxU, {x} U
Axiom. (ZF_binunion_closed) We take the following as an axiom:
∀U, ZF_closed UX YU, (X :\/: Y) U
Axiom. (ZF_ordsucc_closed) We take the following as an axiom:
∀U, ZF_closed UxU, ordsucc x U
Axiom. (nat_p_UnivOf_Empty) We take the following as an axiom:
∀n : set, nat_p nn UnivOf Empty
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
Definition. We define ordinal to be λalpha : setTransSet alpha /\ betaalpha, TransSet beta of type setprop.
Axiom. (ordinal_TransSet) We take the following as an axiom:
∀alpha : set, ordinal alphaTransSet alpha
Axiom. (ordinal_Empty) We take the following as an axiom:
ordinal Empty
Axiom. (ordinal_Hered) We take the following as an axiom:
∀alpha : set, ordinal alphabetaalpha, ordinal beta
Axiom. (TransSet_ordsucc) We take the following as an axiom:
∀X : set, TransSet XTransSet (ordsucc X)
Axiom. (ordinal_ordsucc) We take the following as an axiom:
∀alpha : set, ordinal alphaordinal (ordsucc alpha)
Axiom. (nat_p_ordinal) We take the following as an axiom:
∀n : set, nat_p nordinal n
Axiom. (ordinal_1) We take the following as an axiom:
ordinal 1
Axiom. (ordinal_2) We take the following as an axiom:
ordinal 2
Axiom. (omega_TransSet) We take the following as an axiom:
TransSet omega
Axiom. (omega_ordinal) We take the following as an axiom:
ordinal omega
Axiom. (ordsucc_omega_ordinal) We take the following as an axiom:
ordinal (ordsucc omega)
Axiom. (TransSet_ordsucc_In_Subq) We take the following as an axiom:
∀X : set, TransSet XxX, ordsucc x X
Axiom. (ordinal_ordsucc_In_Subq) We take the following as an axiom:
∀alpha, ordinal alphabetaalpha, ordsucc beta alpha
Axiom. (ordinal_trichotomy_or) We take the following as an axiom:
∀alpha beta : set, ordinal alphaordinal betaalpha beta \/ alpha = beta \/ beta alpha
Axiom. (ordinal_trichotomy_or_impred) We take the following as an axiom:
∀alpha beta : set, ordinal alphaordinal beta∀p : prop, (alpha betap)(alpha = betap)(beta alphap)p
Axiom. (ordinal_In_Or_Subq) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha beta \/ beta alpha
Axiom. (ordinal_linear) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha beta \/ beta alpha
Axiom. (ordinal_ordsucc_In_eq) We take the following as an axiom:
∀alpha beta, ordinal alphabeta alphaordsucc beta alpha \/ alpha = ordsucc beta
Axiom. (ordinal_lim_or_succ) We take the following as an axiom:
∀alpha, ordinal alpha(betaalpha, ordsucc beta alpha) \/ (exists betaalpha, alpha = ordsucc beta)
Axiom. (ordinal_ordsucc_In) We take the following as an axiom:
∀alpha, ordinal alphabetaalpha, ordsucc beta ordsucc alpha
Axiom. (ordinal_famunion) We take the following as an axiom:
∀X, ∀F : setset, (xX, ordinal (F x))ordinal (\/_ xX, F x)
Axiom. (ordinal_binintersect) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaordinal (alpha :/\: beta)
Axiom. (ordinal_binunion) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaordinal (alpha :\/: beta)
Axiom. (ordinal_ind) We take the following as an axiom:
∀p : setprop, (∀alpha, ordinal alpha(betaalpha, p beta)p alpha)∀alpha, ordinal alphap alpha
Axiom. (least_ordinal_ex) We take the following as an axiom:
∀p : setprop, (exists alpha, ordinal alpha /\ p alpha)exists alpha, ordinal alpha /\ p alpha /\ betaalpha, ~ p beta
Definition. We define inj to be λX Y f ⇒ (uX, f u Y) /\ (u vX, f u = f vu = v) of type setset(setset)prop.
Definition. We define bij to be λX Y f ⇒ (uX, f u Y) /\ (u vX, f u = f vu = v) /\ (wY, exists 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, exists 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, exists 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, exists 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. (bij_id) We take the following as an axiom:
∀X, bij X X (λx ⇒ x)
Axiom. (bij_comp) We take the following as an axiom:
∀X Y Z : set, ∀f g : setset, bij X Y fbij Y Z gbij X Z (λx ⇒ g (f x))
Definition. We define equip to be λX Y : setexists f : setset, bij X Y f of type setsetprop.
Axiom. (equip_ref) We take the following as an axiom:
∀X, equip X X
Axiom. (equip_sym) We take the following as an axiom:
∀X Y, equip X Yequip Y X
Axiom. (equip_tra) We take the following as an axiom:
∀X Y Z, equip X Yequip Y Zequip X Z
Axiom. (equip_0_Empty) We take the following as an axiom:
∀X, equip X 0X = 0
Beginning of Section SchroederBernstein
Axiom. (KnasterTarski_set) We take the following as an axiom:
∀A, ∀F : setset, (UPower A, F U Power A)(U VPower A, U VF U F V)exists YPower A, F Y = Y
Axiom. (image_In_Power) We take the following as an axiom:
∀A B, ∀f : setset, (xA, f x B)UPower A, {f x|xU} Power B
Axiom. (image_monotone) We take the following as an axiom:
∀f : setset, ∀U V, U V{f x|xU} {f x|xV}
Axiom. (setminus_antimonotone) We take the following as an axiom:
∀A U V, U VA :\: V A :\: U
Axiom. (SchroederBernstein) We take the following as an axiom:
∀A B, ∀f g : setset, inj A B finj B A gequip A B
End of Section SchroederBernstein
Beginning of Section PigeonHole
Axiom. (PigeonHole_nat) We take the following as an axiom:
∀n, nat_p n∀f : setset, (iordsucc n, f i n)~ (i jordsucc n, f i = f ji = j)
Axiom. (PigeonHole_nat_bij) We take the following as an axiom:
∀n, nat_p n∀f : setset, (in, f i n)(i jn, f i = f ji = j)bij n n f
End of Section PigeonHole
Definition. We define finite to be λX ⇒ exists nomega, equip X n of type setprop.
Axiom. (finite_ind) We take the following as an axiom:
∀p : setprop, p Empty(∀X y, finite Xy /:e Xp Xp (X :\/: {y}))∀X, finite Xp X
Axiom. (finite_Empty) We take the following as an axiom:
finite 0
Axiom. (adjoin_finite) We take the following as an axiom:
∀X y, finite Xfinite (X :\/: {y})
Axiom. (binunion_finite) We take the following as an axiom:
∀X, finite X∀Y, finite Yfinite (X :\/: Y)
Axiom. (famunion_nat_finite) We take the following as an axiom:
∀X : setset, ∀n, nat_p n(in, finite (X i))finite (\/_ in, X i)
Axiom. (Subq_finite) We take the following as an axiom:
∀X, finite X∀Y, Y Xfinite Y
Axiom. (TransSet_In_ordsucc_Subq) We take the following as an axiom:
∀x y, TransSet yx ordsucc yx y
Axiom. (exandE_i) We take the following as an axiom:
∀P Q : setprop, (exists x, P x /\ Q x)∀r : prop, (∀x, P xQ xr)r
Axiom. (exandE_ii) We take the following as an axiom:
∀P Q : (setset)prop, (exists x : setset, P x /\ Q x)∀p : prop, (∀x : setset, P xQ xp)p
Axiom. (exandE_iii) We take the following as an axiom:
∀P Q : (setsetset)prop, (exists x : setsetset, P x /\ Q x)∀p : prop, (∀x : setsetset, P xQ xp)p
Axiom. (exandE_iiii) We take the following as an axiom:
∀P Q : (setsetsetset)prop, (exists x : setsetsetset, P x /\ Q x)∀p : prop, (∀x : setsetsetset, P xQ xp)p
Beginning of Section Descr_ii
Variable P : (setset)prop
Primitive. The name Descr_ii is a term of type setset.
Hypothesis Pex : exists f : setset, P f
Hypothesis Puniq : ∀f g : setset, P fP gf = g
Axiom. (Descr_ii_prop) We take the following as an axiom:
End of Section Descr_ii
Beginning of Section Descr_iii
Variable P : (setsetset)prop
Primitive. The name Descr_iii is a term of type setsetset.
Hypothesis Pex : exists f : setsetset, P f
Hypothesis Puniq : ∀f g : setsetset, P fP gf = g
Axiom. (Descr_iii_prop) We take the following as an axiom:
End of Section Descr_iii
Beginning of Section Descr_Vo1
Variable P : Vo 1prop
Primitive. The name Descr_Vo1 is a term of type Vo 1.
Hypothesis Pex : exists f : Vo 1, P f
Hypothesis Puniq : ∀f g : Vo 1, P fP gf = g
Axiom. (Descr_Vo1_prop) We take the following as an axiom:
End of Section Descr_Vo1
Beginning of Section If_ii
Variable p : prop
Variable f g : setset
Primitive. The name If_ii is a term of type setset.
Axiom. (If_ii_1) We take the following as an axiom:
pIf_ii = f
Axiom. (If_ii_0) We take the following as an axiom:
~ pIf_ii = g
End of Section If_ii
Beginning of Section If_iii
Variable p : prop
Variable f g : setsetset
Primitive. The name If_iii is a term of type setsetset.
Axiom. (If_iii_1) We take the following as an axiom:
pIf_iii = f
Axiom. (If_iii_0) We take the following as an axiom:
~ pIf_iii = g
End of Section If_iii
Beginning of Section EpsilonRec_i
Variable F : set(setset)set
Definition. We define In_rec_i_G to be λX Y ⇒ ∀R : setsetprop, (∀X : set, ∀f : setset, (xX, R x (f x))R X (F X f))R X Y of type setsetprop.
Primitive. The name In_rec_i is a term of type setset.
Axiom. (In_rec_i_G_c) We take the following as an axiom:
∀X : set, ∀f : setset, (xX, In_rec_i_G x (f x))In_rec_i_G X (F X f)
Axiom. (In_rec_i_G_inv) We take the following as an axiom:
∀X : set, ∀Y : set, In_rec_i_G X Yexists f : setset, (xX, In_rec_i_G x (f x)) /\ Y = F X f
Hypothesis Fr : ∀X : set, ∀g h : setset, (xX, g x = h x)F X g = F X h
Axiom. (In_rec_i_G_f) We take the following as an axiom:
∀X : set, ∀Y Z : set, In_rec_i_G X YIn_rec_i_G X ZY = Z
Axiom. (In_rec_i_G_In_rec_i) We take the following as an axiom:
∀X : set, In_rec_i_G X (In_rec_i X)
Axiom. (In_rec_i_G_In_rec_i_d) We take the following as an axiom:
∀X : set, In_rec_i_G X (F X In_rec_i)
Axiom. (In_rec_i_eq) We take the following as an axiom:
∀X : set, In_rec_i X = F X In_rec_i
End of Section EpsilonRec_i
Beginning of Section EpsilonRec_ii
Variable F : set(set(setset))(setset)
Definition. We define In_rec_G_ii to be λX Y ⇒ ∀R : set(setset)prop, (∀X : set, ∀f : set(setset), (xX, R x (f x))R X (F X f))R X Y of type set(setset)prop.
Primitive. The name In_rec_ii is a term of type set(setset).
Axiom. (In_rec_G_ii_c) We take the following as an axiom:
∀X : set, ∀f : set(setset), (xX, In_rec_G_ii x (f x))In_rec_G_ii X (F X f)
Axiom. (In_rec_G_ii_inv) We take the following as an axiom:
∀X : set, ∀Y : (setset), In_rec_G_ii X Yexists f : set(setset), (xX, In_rec_G_ii x (f x)) /\ Y = F X f
Hypothesis Fr : ∀X : set, ∀g h : set(setset), (xX, g x = h x)F X g = F X h
Axiom. (In_rec_G_ii_f) We take the following as an axiom:
∀X : set, ∀Y Z : (setset), In_rec_G_ii X YIn_rec_G_ii X ZY = Z
Axiom. (In_rec_G_ii_In_rec_ii) We take the following as an axiom:
∀X : set, In_rec_G_ii X (In_rec_ii X)
Axiom. (In_rec_G_ii_In_rec_ii_d) We take the following as an axiom:
∀X : set, In_rec_G_ii X (F X In_rec_ii)
Axiom. (In_rec_ii_eq) We take the following as an axiom:
∀X : set, In_rec_ii X = F X In_rec_ii
End of Section EpsilonRec_ii
Beginning of Section EpsilonRec_iii
Variable F : set(set(setsetset))(setsetset)
Definition. We define In_rec_G_iii to be λX Y ⇒ ∀R : set(setsetset)prop, (∀X : set, ∀f : set(setsetset), (xX, R x (f x))R X (F X f))R X Y of type set(setsetset)prop.
Primitive. The name In_rec_iii is a term of type set(setsetset).
Axiom. (In_rec_G_iii_c) We take the following as an axiom:
∀X : set, ∀f : set(setsetset), (xX, In_rec_G_iii x (f x))In_rec_G_iii X (F X f)
Axiom. (In_rec_G_iii_inv) We take the following as an axiom:
∀X : set, ∀Y : (setsetset), In_rec_G_iii X Yexists f : set(setsetset), (xX, In_rec_G_iii x (f x)) /\ Y = F X f
Hypothesis Fr : ∀X : set, ∀g h : set(setsetset), (xX, g x = h x)F X g = F X h
Axiom. (In_rec_G_iii_f) We take the following as an axiom:
∀X : set, ∀Y Z : (setsetset), In_rec_G_iii X YIn_rec_G_iii X ZY = Z
Axiom. (In_rec_G_iii_In_rec_iii) We take the following as an axiom:
∀X : set, In_rec_G_iii X (In_rec_iii X)
Axiom. (In_rec_G_iii_In_rec_iii_d) We take the following as an axiom:
∀X : set, In_rec_G_iii X (F X In_rec_iii)
Axiom. (In_rec_iii_eq) We take the following as an axiom:
∀X : set, In_rec_iii X = F X In_rec_iii
End of Section EpsilonRec_iii
Beginning of Section NatRec
Variable z : set
Variable f : setsetset
Let F : set(setset)setλn g ⇒ if Union n n then f (Union n) (g (Union n)) else z
Definition. We define nat_primrec to be In_rec_i F of type setset.
Axiom. (nat_primrec_r) We take the following as an axiom:
∀X : set, ∀g h : setset, (xX, g x = h x)F X g = F X h
Axiom. (nat_primrec_0) We take the following as an axiom:
Axiom. (nat_primrec_S) We take the following as an axiom:
∀n : set, nat_p nnat_primrec (ordsucc n) = f n (nat_primrec n)
End of Section NatRec
Beginning of Section NatArith
Definition. We define add_nat to be λn m : setnat_primrec n (λ_ r ⇒ ordsucc r) m of type setsetset.
Notation. We use + as an infix operator with priority 360 and which associates to the right corresponding to applying term add_nat.
Axiom. (add_nat_0R) We take the following as an axiom:
∀n : set, n + 0 = n
Axiom. (add_nat_SR) We take the following as an axiom:
∀n m : set, nat_p mn + ordsucc m = ordsucc (n + m)
Axiom. (add_nat_p) We take the following as an axiom:
∀n : set, nat_p n∀m : set, nat_p mnat_p (n + m)
Axiom. (add_nat_1_1_2) We take the following as an axiom:
1 + 1 = 2
Axiom. (add_nat_0L) We take the following as an axiom:
∀m : set, nat_p m0 + m = m
Axiom. (add_nat_SL) We take the following as an axiom:
∀n : set, nat_p n∀m : set, nat_p mordsucc n + m = ordsucc (n + m)
Axiom. (add_nat_com) We take the following as an axiom:
∀n : set, nat_p n∀m : set, nat_p mn + m = m + n
Axiom. (nat_Subq_add_ex) We take the following as an axiom:
∀n, nat_p n∀m, nat_p mn mexists k, nat_p k /\ m = k + n
Definition. We define mul_nat to be λn m : setnat_primrec 0 (λ_ r ⇒ n + r) m of type setsetset.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_nat.
Axiom. (mul_nat_0R) We take the following as an axiom:
∀n : set, n * 0 = 0
Axiom. (mul_nat_SR) We take the following as an axiom:
∀n m : set, nat_p mn * ordsucc m = n + n * m
Axiom. (mul_nat_p) We take the following as an axiom:
∀n : set, nat_p n∀m : set, nat_p mnat_p (n * m)
End of Section NatArith
Definition. We define Inj1 to be In_rec_i (λX f ⇒ {0} :\/: {f x|xX}) of type setset.
Axiom. (Inj1_eq) We take the following as an axiom:
∀X : set, Inj1 X = {0} :\/: {Inj1 x|xX}
Axiom. (Inj1I1) We take the following as an axiom:
∀X : set, 0 Inj1 X
Axiom. (Inj1I2) We take the following as an axiom:
∀X x : set, x XInj1 x Inj1 X
Axiom. (Inj1E) We take the following as an axiom:
∀X y : set, y Inj1 Xy = 0 \/ exists xX, y = Inj1 x
Axiom. (Inj1NE1) We take the following as an axiom:
∀x : set, Inj1 x <> 0
Axiom. (Inj1NE2) We take the following as an axiom:
∀x : set, Inj1 x /:e {0}
Definition. We define Inj0 to be λX ⇒ {Inj1 x|xX} of type setset.
Axiom. (Inj0I) We take the following as an axiom:
∀X x : set, x XInj1 x Inj0 X
Axiom. (Inj0E) We take the following as an axiom:
∀X y : set, y Inj0 Xexists x : set, x X /\ y = Inj1 x
Definition. We define Unj to be In_rec_i (λX f ⇒ {f x|xX :\: {0}}) of type setset.
Axiom. (Unj_eq) We take the following as an axiom:
∀X : set, Unj X = {Unj x|xX :\: {0}}
Axiom. (Unj_Inj1_eq) We take the following as an axiom:
∀X : set, Unj (Inj1 X) = X
Axiom. (Inj1_inj) We take the following as an axiom:
∀X Y : set, Inj1 X = Inj1 YX = Y
Axiom. (Unj_Inj0_eq) We take the following as an axiom:
∀X : set, Unj (Inj0 X) = X
Axiom. (Inj0_inj) We take the following as an axiom:
∀X Y : set, Inj0 X = Inj0 YX = Y
Axiom. (Inj0_0) We take the following as an axiom:
Inj0 0 = 0
Axiom. (Inj0_Inj1_neq) We take the following as an axiom:
∀X Y : set, Inj0 X <> Inj1 Y
Definition. We define setsum to be λX Y ⇒ {Inj0 x|xX} :\/: {Inj1 y|yY} of type setsetset.
Notation. We use :+: as an infix operator with priority 450 and which associates to the left corresponding to applying term setsum.
Axiom. (Inj0_setsum) We take the following as an axiom:
∀X Y x : set, x XInj0 x X :+: Y
Axiom. (Inj1_setsum) We take the following as an axiom:
∀X Y y : set, y YInj1 y X :+: Y
Axiom. (setsum_Inj_inv) We take the following as an axiom:
∀X Y z : set, z X :+: Y(exists xX, z = Inj0 x) \/ (exists yY, z = Inj1 y)
Axiom. (Inj0_setsum_0L) We take the following as an axiom:
∀X : set, 0 :+: X = Inj0 X
Axiom. (Subq_1_Sing0) We take the following as an axiom:
1 {0}
Axiom. (Subq_Sing0_1) We take the following as an axiom:
{0} 1
Axiom. (eq_1_Sing0) We take the following as an axiom:
1 = {0}
Axiom. (Inj1_setsum_1L) We take the following as an axiom:
∀X : set, 1 :+: X = Inj1 X
Axiom. (nat_setsum1_ordsucc) We take the following as an axiom:
∀n : set, nat_p n1 :+: n = ordsucc n
Axiom. (setsum_0_0) We take the following as an axiom:
0 :+: 0 = 0
Axiom. (setsum_1_0_1) We take the following as an axiom:
1 :+: 0 = 1
Axiom. (setsum_1_1_2) We take the following as an axiom:
1 :+: 1 = 2
Beginning of Section pair_setsum
Let pair ≝ setsum
Definition. We define proj0 to be λZ ⇒ {Unj z|zZ, exists x : set, Inj0 x = z} of type setset.
Definition. We define proj1 to be λZ ⇒ {Unj z|zZ, exists y : set, Inj1 y = z} of type setset.
Axiom. (Inj0_pair_0_eq) We take the following as an axiom:
Inj0 = pair 0
Axiom. (Inj1_pair_1_eq) We take the following as an axiom:
Inj1 = pair 1
Axiom. (pairI0) We take the following as an axiom:
∀X Y x, x Xpair 0 x pair X Y
Axiom. (pairI1) We take the following as an axiom:
∀X Y y, y Ypair 1 y pair X Y
Axiom. (pairE) We take the following as an axiom:
∀X Y z, z pair X Y(exists xX, z = pair 0 x) \/ (exists yY, z = pair 1 y)
Axiom. (pairE0) We take the following as an axiom:
∀X Y x, pair 0 x pair X Yx X
Axiom. (pairE1) We take the following as an axiom:
∀X Y y, pair 1 y pair X Yy Y
Axiom. (proj0I) We take the following as an axiom:
∀w u : set, pair 0 u wu proj0 w
Axiom. (proj0E) We take the following as an axiom:
∀w u : set, u proj0 wpair 0 u w
Axiom. (proj1I) We take the following as an axiom:
∀w u : set, pair 1 u wu proj1 w
Axiom. (proj1E) We take the following as an axiom:
∀w u : set, u proj1 wpair 1 u w
Axiom. (proj0_pair_eq) We take the following as an axiom:
∀X Y : set, proj0 (pair X Y) = X
Axiom. (proj1_pair_eq) We take the following as an axiom:
∀X Y : set, proj1 (pair X Y) = Y
Definition. We define Sigma to be λX Y ⇒ \/_ xX, {pair x y|yY x} of type set(setset)set.
Notation. We use Sigma_ x...y [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using Sigma.
Axiom. (pair_Sigma) We take the following as an axiom:
∀X : set, ∀Y : setset, xX, yY x, pair x y Sigma_ xX, Y x
Axiom. (Sigma_eta_proj0_proj1) We take the following as an axiom:
∀X : set, ∀Y : setset, z(Sigma_ xX, Y x), pair (proj0 z) (proj1 z) = z /\ proj0 z X /\ proj1 z Y (proj0 z)
Axiom. (proj_Sigma_eta) We take the following as an axiom:
∀X : set, ∀Y : setset, z(Sigma_ xX, Y x), pair (proj0 z) (proj1 z) = z
Axiom. (proj0_Sigma) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (Sigma_ xX, Y x)proj0 z X
Axiom. (proj1_Sigma) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (Sigma_ xX, Y x)proj1 z Y (proj0 z)
Axiom. (pair_Sigma_E1) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀x y : set, pair x y (Sigma_ xX, Y x)y Y x
Axiom. (Sigma_E) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (Sigma_ xX, Y x)exists xX, exists yY x, z = pair x y
Definition. We define setprod to be λX Y : setSigma_ xX, 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.
Let lam : set(setset)setSigma
Definition. We define ap to be λf x ⇒ {proj1 z|zf, exists y : set, z = pair x y} 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 Sigma 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. (lamI) We take the following as an axiom:
∀X : set, ∀F : setset, xX, yF x, pair x y λxX F x
Axiom. (lamE) We take the following as an axiom:
∀X : set, ∀F : setset, ∀z : set, z (λxX F x)exists xX, exists yF x, z = pair x y
Axiom. (apI) We take the following as an axiom:
∀f x y, pair x y fy f x
Axiom. (apE) We take the following as an axiom:
∀f x y, y f xpair x y f
Axiom. (beta) We take the following as an axiom:
∀X : set, ∀F : setset, ∀x : set, x X(λxX F x) x = F x
Axiom. (proj0_ap_0) We take the following as an axiom:
∀u, proj0 u = u 0
Axiom. (proj1_ap_1) We take the following as an axiom:
∀u, proj1 u = u 1
Axiom. (pair_ap_0) We take the following as an axiom:
∀x y : set, (pair x y) 0 = x
Axiom. (pair_ap_1) We take the following as an axiom:
∀x y : set, (pair x y) 1 = y
Axiom. (ap0_Sigma) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (Sigma_ xX, Y x)(z 0) X
Axiom. (ap1_Sigma) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀z : set, z (Sigma_ xX, Y x)(z 1) (Y (z 0))
Definition. We define pair_p to be λu : setpair (u 0) (u 1) = u of type setprop.
Axiom. (pair_p_I) We take the following as an axiom:
∀x y, pair_p (pair x y)
Axiom. (Subq_2_UPair01) We take the following as an axiom:
Axiom. (tuple_pair) We take the following as an axiom:
∀x y : set, pair x y = (x,y)
Definition. We define Pi to be λX Y ⇒ {fPower (Sigma_ xX, Union (Y x))|xX, f x Y x} of type set(setset)set.
Notation. We use Pi_ x...y [possibly with ascriptions] , B as a binder notation corresponding to a term constructed using Pi.
Axiom. (PiI) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀f : set, (uf, pair_p u /\ u 0 X)(xX, f x Y x)f Pi_ xX, Y x
Axiom. (lam_Pi) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀F : setset, (xX, F x Y x)(λxX F x) (Pi_ xX, Y x)
Axiom. (ap_Pi) We take the following as an axiom:
∀X : set, ∀Y : setset, ∀f : set, ∀x : set, f (Pi_ xX, Y x)x Xf x Y x
Definition. We define setexp to be λX Y : setPi_ yY, X of type setsetset.
Notation. We use :^: as an infix operator with priority 430 and which associates to the left corresponding to applying term setexp.
Axiom. (pair_tuple_fun) We take the following as an axiom:
pair = (λx y ⇒ (x,y))
Axiom. (lamI2) We take the following as an axiom:
∀X, ∀F : setset, xX, yF x, (x,y) λxX F x
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
Axiom. (ReplEq_setprod_ext) We take the following as an axiom:
∀X Y, ∀F G : setsetset, (xX, yY, F x y = G x y){F (w 0) (w 1)|wX :*: Y} = {G (w 0) (w 1)|wX :*: Y}
Axiom. (tuple_2_Sigma) We take the following as an axiom:
∀X : set, ∀Y : setset, xX, yY x, (x,y) Sigma_ xX, Y x
Axiom. (tuple_2_setprod) We take the following as an axiom:
∀X : set, ∀Y : set, xX, yY, (x,y) X :*: Y
End of Section pair_setsum
Primitive. The name DescrR_i_io_1 is a term of type (set(setprop)prop)set.
Primitive. The name DescrR_i_io_2 is a term of type (set(setprop)prop)setprop.
Axiom. (DescrR_i_io_12) We take the following as an axiom:
∀R : set(setprop)prop, (exists x, (exists y : setprop, R x y) /\ (∀y z : setprop, R x yR x zy = z))R (DescrR_i_io_1 R) (DescrR_i_io_2 R)
Definition. We define PNoEq_ to be λalpha p q ⇒ betaalpha, p beta <-> q beta of type set(setprop)(setprop)prop.
Axiom. (PNoEq_ref_) We take the following as an axiom:
∀alpha, ∀p : setprop, PNoEq_ alpha p p
Axiom. (PNoEq_sym_) We take the following as an axiom:
∀alpha, ∀p q : setprop, PNoEq_ alpha p qPNoEq_ alpha q p
Axiom. (PNoEq_tra_) We take the following as an axiom:
∀alpha, ∀p q r : setprop, PNoEq_ alpha p qPNoEq_ alpha q rPNoEq_ alpha p r
Axiom. (PNoEq_antimon_) We take the following as an axiom:
∀p q : setprop, ∀alpha, ordinal alphabetaalpha, PNoEq_ alpha p qPNoEq_ beta p q
Definition. We define PNoLt_ to be λalpha p q ⇒ exists betaalpha, PNoEq_ beta p q /\ ~ p beta /\ q beta of type set(setprop)(setprop)prop.
Axiom. (PNoLt_E_) We take the following as an axiom:
∀alpha, ∀p q : setprop, PNoLt_ alpha p q∀R : prop, (∀beta, beta alphaPNoEq_ beta p q~ p betaq betaR)R
Axiom. (PNoLt_irref_) We take the following as an axiom:
∀alpha, ∀p : setprop, ~ PNoLt_ alpha p p
Axiom. (PNoLt_mon_) We take the following as an axiom:
∀p q : setprop, ∀alpha, ordinal alphabetaalpha, PNoLt_ beta p qPNoLt_ alpha p q
Axiom. (PNoLt_trichotomy_or_) We take the following as an axiom:
∀p q : setprop, ∀alpha, ordinal alphaPNoLt_ alpha p q \/ PNoEq_ alpha p q \/ PNoLt_ alpha q p
Axiom. (PNoLt_tra_) We take the following as an axiom:
∀alpha, ordinal alpha∀p q r : setprop, PNoLt_ alpha p qPNoLt_ alpha q rPNoLt_ alpha p r
Primitive. The name PNoLt is a term of type set(setprop)set(setprop)prop.
Axiom. (PNoLtI1) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, PNoLt_ (alpha :/\: beta) p qPNoLt alpha p beta q
Axiom. (PNoLtI2) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, alpha betaPNoEq_ alpha p qq alphaPNoLt alpha p beta q
Axiom. (PNoLtI3) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, beta alphaPNoEq_ beta p q~ p betaPNoLt alpha p beta q
Axiom. (PNoLtE) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, PNoLt alpha p beta q∀R : prop, (PNoLt_ (alpha :/\: beta) p qR)(alpha betaPNoEq_ alpha p qq alphaR)(beta alphaPNoEq_ beta p q~ p betaR)R
Axiom. (PNoLt_irref) We take the following as an axiom:
∀alpha, ∀p : setprop, ~ PNoLt alpha p alpha p
Axiom. (PNoLt_trichotomy_or) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, ordinal alphaordinal betaPNoLt alpha p beta q \/ alpha = beta /\ PNoEq_ alpha p q \/ PNoLt beta q alpha p
Axiom. (PNoLtEq_tra) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal beta∀p q r : setprop, PNoLt alpha p beta qPNoEq_ beta q rPNoLt alpha p beta r
Axiom. (PNoEqLt_tra) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal beta∀p q r : setprop, PNoEq_ alpha p qPNoLt alpha q beta rPNoLt alpha p beta r
Axiom. (PNoLt_tra) We take the following as an axiom:
∀alpha beta gamma, ordinal alphaordinal betaordinal gamma∀p q r : setprop, PNoLt alpha p beta qPNoLt beta q gamma rPNoLt alpha p gamma r
Definition. We define PNoLe to be λalpha p beta q ⇒ PNoLt alpha p beta q \/ alpha = beta /\ PNoEq_ alpha p q of type set(setprop)set(setprop)prop.
Axiom. (PNoLeI1) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, PNoLt alpha p beta qPNoLe alpha p beta q
Axiom. (PNoLeI2) We take the following as an axiom:
∀alpha, ∀p q : setprop, PNoEq_ alpha p qPNoLe alpha p alpha q
Axiom. (PNoLe_ref) We take the following as an axiom:
∀alpha, ∀p : setprop, PNoLe alpha p alpha p
Axiom. (PNoLe_antisym) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal beta∀p q : setprop, PNoLe alpha p beta qPNoLe beta q alpha palpha = beta /\ PNoEq_ alpha p q
Axiom. (PNoLtLe_tra) We take the following as an axiom:
∀alpha beta gamma, ordinal alphaordinal betaordinal gamma∀p q r : setprop, PNoLt alpha p beta qPNoLe beta q gamma rPNoLt alpha p gamma r
Axiom. (PNoLeLt_tra) We take the following as an axiom:
∀alpha beta gamma, ordinal alphaordinal betaordinal gamma∀p q r : setprop, PNoLe alpha p beta qPNoLt beta q gamma rPNoLt alpha p gamma r
Axiom. (PNoEqLe_tra) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal beta∀p q r : setprop, PNoEq_ alpha p qPNoLe alpha q beta rPNoLe alpha p beta r
Axiom. (PNoLe_tra) We take the following as an axiom:
∀alpha beta gamma, ordinal alphaordinal betaordinal gamma∀p q r : setprop, PNoLe alpha p beta qPNoLe beta q gamma rPNoLe alpha p gamma r
Definition. We define PNo_downc to be λL alpha p ⇒ exists beta, ordinal beta /\ exists q : setprop, L beta q /\ PNoLe alpha p beta q of type (set(setprop)prop)set(setprop)prop.
Definition. We define PNo_upc to be λR alpha p ⇒ exists beta, ordinal beta /\ exists q : setprop, R beta q /\ PNoLe beta q alpha p of type (set(setprop)prop)set(setprop)prop.
Axiom. (PNoLe_downc) We take the following as an axiom:
∀L : set(setprop)prop, ∀alpha beta, ∀p q : setprop, ordinal alphaordinal betaPNo_downc L alpha pPNoLe beta q alpha pPNo_downc L beta q
Axiom. (PNo_downc_ref) We take the following as an axiom:
∀L : set(setprop)prop, ∀alpha, ordinal alpha∀p : setprop, L alpha pPNo_downc L alpha p
Axiom. (PNo_upc_ref) We take the following as an axiom:
∀R : set(setprop)prop, ∀alpha, ordinal alpha∀p : setprop, R alpha pPNo_upc R alpha p
Axiom. (PNoLe_upc) We take the following as an axiom:
∀R : set(setprop)prop, ∀alpha beta, ∀p q : setprop, ordinal alphaordinal betaPNo_upc R alpha pPNoLe alpha p beta qPNo_upc R beta q
Definition. We define PNoLt_pwise to be λL R ⇒ ∀gamma, ordinal gamma∀p : setprop, L gamma p∀delta, ordinal delta∀q : setprop, R delta qPNoLt gamma p delta q of type (set(setprop)prop)(set(setprop)prop)prop.
Axiom. (PNoLt_pwise_downc_upc) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L RPNoLt_pwise (PNo_downc L) (PNo_upc R)
Definition. We define PNo_rel_strict_upperbd to be λL alpha p ⇒ betaalpha, ∀q : setprop, PNo_downc L beta qPNoLt beta q alpha p of type (set(setprop)prop)set(setprop)prop.
Definition. We define PNo_rel_strict_lowerbd to be λR alpha p ⇒ betaalpha, ∀q : setprop, PNo_upc R beta qPNoLt alpha p beta q of type (set(setprop)prop)set(setprop)prop.
Definition. We define PNo_rel_strict_imv to be λL R alpha p ⇒ PNo_rel_strict_upperbd L alpha p /\ PNo_rel_strict_lowerbd R alpha p of type (set(setprop)prop)(set(setprop)prop)set(setprop)prop.
Axiom. (PNoEq_rel_strict_upperbd) We take the following as an axiom:
∀L : set(setprop)prop, ∀alpha, ordinal alpha∀p q : setprop, PNoEq_ alpha p qPNo_rel_strict_upperbd L alpha pPNo_rel_strict_upperbd L alpha q
Axiom. (PNo_rel_strict_upperbd_antimon) We take the following as an axiom:
∀L : set(setprop)prop, ∀alpha, ordinal alpha∀p : setprop, betaalpha, PNo_rel_strict_upperbd L alpha pPNo_rel_strict_upperbd L beta p
Axiom. (PNoEq_rel_strict_lowerbd) We take the following as an axiom:
∀R : set(setprop)prop, ∀alpha, ordinal alpha∀p q : setprop, PNoEq_ alpha p qPNo_rel_strict_lowerbd R alpha pPNo_rel_strict_lowerbd R alpha q
Axiom. (PNo_rel_strict_lowerbd_antimon) We take the following as an axiom:
∀R : set(setprop)prop, ∀alpha, ordinal alpha∀p : setprop, betaalpha, PNo_rel_strict_lowerbd R alpha pPNo_rel_strict_lowerbd R beta p
Axiom. (PNoEq_rel_strict_imv) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alpha∀p q : setprop, PNoEq_ alpha p qPNo_rel_strict_imv L R alpha pPNo_rel_strict_imv L R alpha q
Axiom. (PNo_rel_strict_imv_antimon) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alpha∀p : setprop, betaalpha, PNo_rel_strict_imv L R alpha pPNo_rel_strict_imv L R beta p
Definition. We define PNo_rel_strict_uniq_imv to be λL R alpha p ⇒ PNo_rel_strict_imv L R alpha p /\ ∀q : setprop, PNo_rel_strict_imv L R alpha qPNoEq_ alpha p q of type (set(setprop)prop)(set(setprop)prop)set(setprop)prop.
Definition. We define PNo_rel_strict_split_imv to be λL R alpha p ⇒ PNo_rel_strict_imv L R (ordsucc alpha) (λdelta ⇒ p delta /\ delta <> alpha) /\ PNo_rel_strict_imv L R (ordsucc alpha) (λdelta ⇒ p delta \/ delta = alpha) of type (set(setprop)prop)(set(setprop)prop)set(setprop)prop.
Axiom. (PNo_extend0_eq) We take the following as an axiom:
∀alpha, ∀p : setprop, PNoEq_ alpha p (λdelta ⇒ p delta /\ delta <> alpha)
Axiom. (PNo_extend1_eq) We take the following as an axiom:
∀alpha, ∀p : setprop, PNoEq_ alpha p (λdelta ⇒ p delta \/ delta = alpha)
Axiom. (PNo_rel_imv_ex) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alpha(exists p : setprop, PNo_rel_strict_uniq_imv L R alpha p) \/ (exists taualpha, exists p : setprop, PNo_rel_strict_split_imv L R tau p)
Definition. We define PNo_lenbdd to be λalpha L ⇒ ∀beta, ∀p : setprop, L beta pbeta alpha of type set(set(setprop)prop)prop.
Axiom. (PNo_lenbdd_strict_imv_extend0) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha R∀p : setprop, PNo_rel_strict_imv L R alpha pPNo_rel_strict_imv L R (ordsucc alpha) (λdelta ⇒ p delta /\ delta <> alpha)
Axiom. (PNo_lenbdd_strict_imv_extend1) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha R∀p : setprop, PNo_rel_strict_imv L R alpha pPNo_rel_strict_imv L R (ordsucc alpha) (λdelta ⇒ p delta \/ delta = alpha)
Axiom. (PNo_lenbdd_strict_imv_split) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha R∀p : setprop, PNo_rel_strict_imv L R alpha pPNo_rel_strict_split_imv L R alpha p
Axiom. (PNo_rel_imv_bdd_ex) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha Rexists betaordsucc alpha, exists p : setprop, PNo_rel_strict_split_imv L R beta p
Definition. We define PNo_strict_upperbd to be λL alpha p ⇒ ∀beta, ordinal beta∀q : setprop, L beta qPNoLt beta q alpha p of type (set(setprop)prop)set(setprop)prop.
Definition. We define PNo_strict_lowerbd to be λR alpha p ⇒ ∀beta, ordinal beta∀q : setprop, R beta qPNoLt alpha p beta q of type (set(setprop)prop)set(setprop)prop.
Definition. We define PNo_strict_imv to be λL R alpha p ⇒ PNo_strict_upperbd L alpha p /\ PNo_strict_lowerbd R alpha p of type (set(setprop)prop)(set(setprop)prop)set(setprop)prop.
Axiom. (PNoEq_strict_upperbd) We take the following as an axiom:
∀L : set(setprop)prop, ∀alpha, ordinal alpha∀p q : setprop, PNoEq_ alpha p qPNo_strict_upperbd L alpha pPNo_strict_upperbd L alpha q
Axiom. (PNoEq_strict_lowerbd) We take the following as an axiom:
∀R : set(setprop)prop, ∀alpha, ordinal alpha∀p q : setprop, PNoEq_ alpha p qPNo_strict_lowerbd R alpha pPNo_strict_lowerbd R alpha q
Axiom. (PNoEq_strict_imv) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alpha∀p q : setprop, PNoEq_ alpha p qPNo_strict_imv L R alpha pPNo_strict_imv L R alpha q
Axiom. (PNo_strict_upperbd_imp_rel_strict_upperbd) We take the following as an axiom:
∀L : set(setprop)prop, ∀alpha, ordinal alphabetaordsucc alpha, ∀p : setprop, PNo_strict_upperbd L alpha pPNo_rel_strict_upperbd L beta p
Axiom. (PNo_strict_lowerbd_imp_rel_strict_lowerbd) We take the following as an axiom:
∀R : set(setprop)prop, ∀alpha, ordinal alphabetaordsucc alpha, ∀p : setprop, PNo_strict_lowerbd R alpha pPNo_rel_strict_lowerbd R beta p
Axiom. (PNo_strict_imv_imp_rel_strict_imv) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alphabetaordsucc alpha, ∀p : setprop, PNo_strict_imv L R alpha pPNo_rel_strict_imv L R beta p
Axiom. (PNo_rel_split_imv_imp_strict_imv) We take the following as an axiom:
∀L R : set(setprop)prop, ∀alpha, ordinal alpha∀p : setprop, PNo_rel_strict_split_imv L R alpha pPNo_strict_imv L R alpha p
Axiom. (PNo_lenbdd_strict_imv_ex) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha Rexists betaordsucc alpha, exists p : setprop, PNo_strict_imv L R beta p
Definition. We define PNo_least_rep to be λL R beta p ⇒ ordinal beta /\ PNo_strict_imv L R beta p /\ gammabeta, ∀q : setprop, ~ PNo_strict_imv L R gamma q of type (set(setprop)prop)(set(setprop)prop)set(setprop)prop.
Definition. We define PNo_least_rep2 to be λL R beta p ⇒ PNo_least_rep L R beta p /\ ∀x, x /:e beta~ p x of type (set(setprop)prop)(set(setprop)prop)set(setprop)prop.
Axiom. (PNo_strict_imv_pred_eq) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alpha∀p q : setprop, PNo_least_rep L R alpha pPNo_strict_imv L R alpha qbetaalpha, p beta <-> q beta
Axiom. (PNo_lenbdd_least_rep2_exuniq2) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha Rexists beta, (exists p : setprop, PNo_least_rep2 L R beta p) /\ (∀p q : setprop, PNo_least_rep2 L R beta pPNo_least_rep2 L R beta qp = q)
Primitive. The name PNo_bd is a term of type (set(setprop)prop)(set(setprop)prop)set.
Primitive. The name PNo_pred is a term of type (set(setprop)prop)(set(setprop)prop)setprop.
Axiom. (PNo_bd_pred_lem) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha RPNo_least_rep2 L R (PNo_bd L R) (PNo_pred L R)
Axiom. (PNo_bd_pred) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha RPNo_least_rep L R (PNo_bd L R) (PNo_pred L R)
Axiom. (PNo_bd_In) We take the following as an axiom:
∀L R : set(setprop)prop, PNoLt_pwise L R∀alpha, ordinal alphaPNo_lenbdd alpha LPNo_lenbdd alpha RPNo_bd L R ordsucc alpha
Beginning of Section TaggedSets
Let tag : setsetλalpha ⇒ SetAdjoin alpha {1}
Notation. We use ' as a postfix operator with priority 100 corresponding to applying term tag.
Axiom. (not_TransSet_Sing1) We take the following as an axiom:
Axiom. (not_ordinal_Sing1) We take the following as an axiom:
Axiom. (tagged_not_ordinal) We take the following as an axiom:
∀y, ~ ordinal (y ')
Axiom. (tagged_notin_ordinal) We take the following as an axiom:
∀alpha y, ordinal alpha(y ') /:e alpha
Axiom. (tagged_eqE_Subq) We take the following as an axiom:
∀alpha beta, ordinal alphaalpha ' = beta 'alpha beta
Axiom. (tagged_eqE_eq) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha ' = beta 'alpha = beta
Axiom. (tagged_ReplE) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betabeta ' {gamma '|gammaalpha}beta alpha
Axiom. (ordinal_notin_tagged_Repl) We take the following as an axiom:
∀alpha Y, ordinal alphaalpha /:e {y '|yY}
Definition. We define SNoElts_ to be λalpha ⇒ alpha :\/: {beta '|betaalpha} of type setset.
Axiom. (SNoElts_mon) We take the following as an axiom:
∀alpha beta, alpha betaSNoElts_ alpha SNoElts_ beta
Definition. We define SNo_ to be λalpha x ⇒ x SNoElts_ alpha /\ betaalpha, exactly1of2 (beta ' x) (beta x) of type setsetprop.
Definition. We define PSNo to be λalpha p ⇒ {betaalpha|p beta} :\/: {beta '|betaalpha, ~ p beta} of type set(setprop)set.
Axiom. (PNoEq_PSNo) We take the following as an axiom:
∀alpha, ordinal alpha∀p : setprop, PNoEq_ alpha (λbeta ⇒ beta PSNo alpha p) p
Axiom. (SNo_PSNo) We take the following as an axiom:
∀alpha, ordinal alpha∀p : setprop, SNo_ alpha (PSNo alpha p)
Axiom. (SNo_PSNo_eta_) We take the following as an axiom:
∀alpha x, ordinal alphaSNo_ alpha xx = PSNo alpha (λbeta ⇒ beta x)
Primitive. The name SNo is a term of type setprop.
Axiom. (SNo_SNo) We take the following as an axiom:
∀alpha, ordinal alpha∀z, SNo_ alpha zSNo z
Primitive. The name SNoLev is a term of type setset.
Axiom. (SNoLev_uniq_Subq) We take the following as an axiom:
∀x alpha beta, ordinal alphaordinal betaSNo_ alpha xSNo_ beta xalpha beta
Axiom. (SNoLev_uniq) We take the following as an axiom:
∀x alpha beta, ordinal alphaordinal betaSNo_ alpha xSNo_ beta xalpha = beta
Axiom. (SNoLev_prop) We take the following as an axiom:
∀x, SNo xordinal (SNoLev x) /\ SNo_ (SNoLev x) x
Axiom. (SNoLev_ordinal) We take the following as an axiom:
∀x, SNo xordinal (SNoLev x)
Axiom. (SNoLev_) We take the following as an axiom:
∀x, SNo xSNo_ (SNoLev x) x
Axiom. (SNo_PSNo_eta) We take the following as an axiom:
∀x, SNo xx = PSNo (SNoLev x) (λbeta ⇒ beta x)
Axiom. (SNoLev_PSNo) We take the following as an axiom:
∀alpha, ordinal alpha∀p : setprop, SNoLev (PSNo alpha p) = alpha
Axiom. (SNo_Subq) We take the following as an axiom:
∀x y, SNo xSNo ySNoLev x SNoLev y(alphaSNoLev x, alpha x <-> alpha y)x y
Definition. We define SNoEq_ to be λalpha x y ⇒ PNoEq_ alpha (λbeta ⇒ beta x) (λbeta ⇒ beta y) of type setsetsetprop.
Axiom. (SNoEq_I) We take the following as an axiom:
∀alpha x y, (betaalpha, beta x <-> beta y)SNoEq_ alpha x y
Axiom. (SNo_eq) We take the following as an axiom:
∀x y, SNo xSNo ySNoLev x = SNoLev ySNoEq_ (SNoLev x) x yx = y
End of Section TaggedSets
Definition. We define SNoLt to be λx y ⇒ PNoLt (SNoLev x) (λbeta ⇒ beta x) (SNoLev y) (λbeta ⇒ beta y) of type setsetprop.
Notation. We use < as an infix operator with priority 490 and no associativity corresponding to applying term SNoLt.
Definition. We define SNoLe to be λx y ⇒ PNoLe (SNoLev x) (λbeta ⇒ beta x) (SNoLev y) (λbeta ⇒ beta y) of type setsetprop.
Notation. We use <= as an infix operator with priority 490 and no associativity corresponding to applying term SNoLe.
Axiom. (SNoLtLe) We take the following as an axiom:
∀x y, x < yx <= y
Axiom. (SNoLeE) We take the following as an axiom:
∀x y, SNo xSNo yx <= yx < y \/ x = y
Axiom. (SNoEq_sym_) We take the following as an axiom:
∀alpha x y, SNoEq_ alpha x ySNoEq_ alpha y x
Axiom. (SNoEq_tra_) We take the following as an axiom:
∀alpha x y z, SNoEq_ alpha x ySNoEq_ alpha y zSNoEq_ alpha x z
Axiom. (SNoLtE) We take the following as an axiom:
∀x y, SNo xSNo yx < y∀p : prop, (∀z, SNo zSNoLev z SNoLev x :/\: SNoLev ySNoEq_ (SNoLev z) z xSNoEq_ (SNoLev z) z yx < zz < ySNoLev z /:e xSNoLev z yp)(SNoLev x SNoLev ySNoEq_ (SNoLev x) x ySNoLev x yp)(SNoLev y SNoLev xSNoEq_ (SNoLev y) x ySNoLev y /:e xp)p
Axiom. (SNoLtI2) We take the following as an axiom:
∀x y, SNoLev x SNoLev ySNoEq_ (SNoLev x) x ySNoLev x yx < y
Axiom. (SNoLtI3) We take the following as an axiom:
∀x y, SNoLev y SNoLev xSNoEq_ (SNoLev y) x ySNoLev y /:e xx < y
Axiom. (SNoLt_irref) We take the following as an axiom:
∀x, ~ SNoLt x x
Axiom. (SNoLt_trichotomy_or) We take the following as an axiom:
∀x y, SNo xSNo yx < y \/ x = y \/ y < x
Axiom. (SNoLt_trichotomy_or_impred) We take the following as an axiom:
∀x y, SNo xSNo y∀p : prop, (x < yp)(x = yp)(y < xp)p
Axiom. (SNoLt_tra) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx < yy < zx < z
Axiom. (SNoLe_ref) We take the following as an axiom:
∀x, SNoLe x x
Axiom. (SNoLe_antisym) We take the following as an axiom:
∀x y, SNo xSNo yx <= yy <= xx = y
Axiom. (SNoLtLe_tra) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx < yy <= zx < z
Axiom. (SNoLeLt_tra) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx <= yy < zx < z
Axiom. (SNoLe_tra) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx <= yy <= zx <= z
Axiom. (SNoLtLe_or) We take the following as an axiom:
∀x y, SNo xSNo yx < y \/ y <= x
Axiom. (SNoLt_PSNo_PNoLt) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, ordinal alphaordinal betaPSNo alpha p < PSNo beta qPNoLt alpha p beta q
Axiom. (PNoLt_SNoLt_PSNo) We take the following as an axiom:
∀alpha beta, ∀p q : setprop, ordinal alphaordinal betaPNoLt alpha p beta qPSNo alpha p < PSNo beta q
Definition. We define SNoCut to be λL R ⇒ PSNo (PNo_bd (λalpha p ⇒ ordinal alpha /\ PSNo alpha p L) (λalpha p ⇒ ordinal alpha /\ PSNo alpha p R)) (PNo_pred (λalpha p ⇒ ordinal alpha /\ PSNo alpha p L) (λalpha p ⇒ ordinal alpha /\ PSNo alpha p R)) of type setsetset.
Definition. We define SNoCutP to be λL R ⇒ (xL, SNo x) /\ (yR, SNo y) /\ (xL, yR, x < y) of type setsetprop.
Axiom. (SNoCutP_SNoCut) We take the following as an axiom:
∀L R, SNoCutP L RSNo (SNoCut L R) /\ SNoLev (SNoCut L R) ordsucc ((\/_ xL, ordsucc (SNoLev x)) :\/: (\/_ yR, ordsucc (SNoLev y))) /\ (xL, x < SNoCut L R) /\ (yR, SNoCut L R < y) /\ (∀z, SNo z(xL, x < z)(yR, z < y)SNoLev (SNoCut L R) SNoLev z /\ SNoEq_ (SNoLev (SNoCut L R)) (SNoCut L R) z)
Axiom. (SNoCutP_SNoCut_impred) We take the following as an axiom:
∀L R, SNoCutP L R∀p : prop, (SNo (SNoCut L R)SNoLev (SNoCut L R) ordsucc ((\/_ xL, ordsucc (SNoLev x)) :\/: (\/_ yR, ordsucc (SNoLev y)))(xL, x < SNoCut L R)(yR, SNoCut L R < y)(∀z, SNo z(xL, x < z)(yR, z < y)SNoLev (SNoCut L R) SNoLev z /\ SNoEq_ (SNoLev (SNoCut L R)) (SNoCut L R) z)p)p
Axiom. (SNoCutP_L_0) We take the following as an axiom:
∀L, (xL, SNo x)SNoCutP L 0
Axiom. (SNoCutP_0_R) We take the following as an axiom:
∀R, (xR, SNo x)SNoCutP 0 R
Axiom. (SNoCutP_0_0) We take the following as an axiom:
SNoCutP 0 0
Definition. We define SNoS_ to be λalpha ⇒ {xPower (SNoElts_ alpha)|exists betaalpha, SNo_ beta x} of type setset.
Axiom. (SNoS_E) We take the following as an axiom:
∀alpha, ordinal alphaxSNoS_ alpha, exists betaalpha, SNo_ beta x
Beginning of Section TaggedSets2
Let tag : setsetλalpha ⇒ SetAdjoin alpha {1}
Notation. We use ' as a postfix operator with priority 100 corresponding to applying term tag.
Axiom. (SNoS_I) We take the following as an axiom:
∀alpha, ordinal alpha∀x, betaalpha, SNo_ beta xx SNoS_ alpha
Axiom. (SNoS_I2) We take the following as an axiom:
∀x y, SNo xSNo ySNoLev x SNoLev yx SNoS_ (SNoLev y)
Axiom. (SNoS_Subq) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha betaSNoS_ alpha SNoS_ beta
Axiom. (SNoLev_uniq2) We take the following as an axiom:
∀alpha, ordinal alpha∀x, SNo_ alpha xSNoLev x = alpha
Axiom. (SNoS_E2) We take the following as an axiom:
∀alpha, ordinal alphaxSNoS_ alpha, ∀p : prop, (SNoLev x alphaordinal (SNoLev x)SNo xSNo_ (SNoLev x) xp)p
Axiom. (SNoS_In_neq) We take the following as an axiom:
∀w, SNo wxSNoS_ (SNoLev w), x <> w
Axiom. (SNoS_SNoLev) We take the following as an axiom:
∀z, SNo zz SNoS_ (ordsucc (SNoLev z))
Definition. We define SNoL to be λz ⇒ {xSNoS_ (SNoLev z)|x < z} of type setset.
Definition. We define SNoR to be λz ⇒ {ySNoS_ (SNoLev z)|z < y} of type setset.
Axiom. (SNoCutP_SNoL_SNoR) We take the following as an axiom:
∀z, SNo zSNoCutP (SNoL z) (SNoR z)
Axiom. (SNoL_E) We take the following as an axiom:
∀x, SNo xwSNoL x, ∀p : prop, (SNo wSNoLev w SNoLev xw < xp)p
Axiom. (SNoR_E) We take the following as an axiom:
∀x, SNo xzSNoR x, ∀p : prop, (SNo zSNoLev z SNoLev xx < zp)p
Axiom. (SNoL_SNoS_) We take the following as an axiom:
∀z, SNoL z SNoS_ (SNoLev z)
Axiom. (SNoR_SNoS_) We take the following as an axiom:
∀z, SNoR z SNoS_ (SNoLev z)
Axiom. (SNoL_SNoS) We take the following as an axiom:
∀x, SNo xwSNoL x, w SNoS_ (SNoLev x)
Axiom. (SNoR_SNoS) We take the following as an axiom:
∀x, SNo xzSNoR x, z SNoS_ (SNoLev x)
Axiom. (SNoL_I) We take the following as an axiom:
∀z, SNo z∀x, SNo xSNoLev x SNoLev zx < zx SNoL z
Axiom. (SNoR_I) We take the following as an axiom:
∀z, SNo z∀y, SNo ySNoLev y SNoLev zz < yy SNoR z
Axiom. (SNo_eta) We take the following as an axiom:
∀z, SNo zz = SNoCut (SNoL z) (SNoR z)
Axiom. (SNoCutP_SNo_SNoCut) We take the following as an axiom:
∀L R, SNoCutP L RSNo (SNoCut L R)
Axiom. (SNoCutP_SNoCut_L) We take the following as an axiom:
∀L R, SNoCutP L RxL, x < SNoCut L R
Axiom. (SNoCutP_SNoCut_R) We take the following as an axiom:
∀L R, SNoCutP L RyR, SNoCut L R < y
Axiom. (SNoCutP_SNoCut_fst) We take the following as an axiom:
∀L R, SNoCutP L R∀z, SNo z(xL, x < z)(yR, z < y)SNoLev (SNoCut L R) SNoLev z /\ SNoEq_ (SNoLev (SNoCut L R)) (SNoCut L R) z
Axiom. (SNoCut_Le) We take the following as an axiom:
∀L1 R1 L2 R2, SNoCutP L1 R1SNoCutP L2 R2(wL1, w < SNoCut L2 R2)(zR2, SNoCut L1 R1 < z)SNoCut L1 R1 <= SNoCut L2 R2
Axiom. (SNoCut_ext) We take the following as an axiom:
∀L1 R1 L2 R2, SNoCutP L1 R1SNoCutP L2 R2(wL1, w < SNoCut L2 R2)(zR1, SNoCut L2 R2 < z)(wL2, w < SNoCut L1 R1)(zR2, SNoCut L1 R1 < z)SNoCut L1 R1 = SNoCut L2 R2
Axiom. (SNoLt_SNoL_or_SNoR_impred) We take the following as an axiom:
∀x y, SNo xSNo yx < y∀p : prop, (zSNoL y, z SNoR xp)(x SNoL yp)(y SNoR xp)p
Axiom. (SNoL_or_SNoR_impred) We take the following as an axiom:
∀x y, SNo xSNo y∀p : prop, (x = yp)(zSNoL y, z SNoR xp)(x SNoL yp)(y SNoR xp)(zSNoR y, z SNoL xp)(x SNoR yp)(y SNoL xp)p
Axiom. (SNoL_SNoCutP_ex) We take the following as an axiom:
∀L R, SNoCutP L RwSNoL (SNoCut L R), exists w'L, w <= w'
Axiom. (SNoR_SNoCutP_ex) We take the following as an axiom:
∀L R, SNoCutP L RzSNoR (SNoCut L R), exists z'R, z' <= z
Axiom. (ordinal_SNo_) We take the following as an axiom:
∀alpha, ordinal alphaSNo_ alpha alpha
Axiom. (ordinal_SNo) We take the following as an axiom:
∀alpha, ordinal alphaSNo alpha
Axiom. (ordinal_SNoLev) We take the following as an axiom:
∀alpha, ordinal alphaSNoLev alpha = alpha
Axiom. (ordinal_SNoLev_max) We take the following as an axiom:
∀alpha, ordinal alpha∀z, SNo zSNoLev z alphaz < alpha
Axiom. (ordinal_SNoL) We take the following as an axiom:
∀alpha, ordinal alphaSNoL alpha = SNoS_ alpha
Axiom. (ordinal_SNoR) We take the following as an axiom:
∀alpha, ordinal alphaSNoR alpha = Empty
Axiom. (nat_p_SNo) We take the following as an axiom:
∀n, nat_p nSNo n
Axiom. (omega_SNo) We take the following as an axiom:
Axiom. (omega_SNoS_omega) We take the following as an axiom:
Axiom. (ordinal_In_SNoLt) We take the following as an axiom:
∀alpha, ordinal alphabetaalpha, beta < alpha
Axiom. (ordinal_SNoLev_max_2) We take the following as an axiom:
∀alpha, ordinal alpha∀z, SNo zSNoLev z ordsucc alphaz <= alpha
Axiom. (ordinal_Subq_SNoLe) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha betaalpha <= beta
Axiom. (ordinal_SNoLt_In) We take the following as an axiom:
∀alpha beta, ordinal alphaordinal betaalpha < betaalpha beta
Axiom. (omega_nonneg) We take the following as an axiom:
Axiom. (SNo_0) We take the following as an axiom:
Axiom. (SNo_1) We take the following as an axiom:
Axiom. (SNo_2) We take the following as an axiom:
Axiom. (SNoLev_0) We take the following as an axiom:
Axiom. (SNoCut_0_0) We take the following as an axiom:
Axiom. (SNoL_0) We take the following as an axiom:
Axiom. (SNoR_0) We take the following as an axiom:
Axiom. (SNoL_1) We take the following as an axiom:
Axiom. (SNoR_1) We take the following as an axiom:
Axiom. (SNo_max_SNoLev) We take the following as an axiom:
∀x, SNo x(ySNoS_ (SNoLev x), y < x)SNoLev x = x
Axiom. (SNo_max_ordinal) We take the following as an axiom:
∀x, SNo x(ySNoS_ (SNoLev x), y < x)ordinal x
Axiom. (pos_low_eq_one) We take the following as an axiom:
∀x, SNo x0 < xSNoLev x 1x = 1
Definition. We define SNo_extend0 to be λx ⇒ PSNo (ordsucc (SNoLev x)) (λdelta ⇒ delta x /\ delta <> SNoLev x) of type setset.
Definition. We define SNo_extend1 to be λx ⇒ PSNo (ordsucc (SNoLev x)) (λdelta ⇒ delta x \/ delta = SNoLev x) of type setset.
Axiom. (SNo_extend0_SNo_) We take the following as an axiom:
∀x, SNo xSNo_ (ordsucc (SNoLev x)) (SNo_extend0 x)
Axiom. (SNo_extend1_SNo_) We take the following as an axiom:
∀x, SNo xSNo_ (ordsucc (SNoLev x)) (SNo_extend1 x)
Axiom. (SNo_extend0_SNo) We take the following as an axiom:
∀x, SNo xSNo (SNo_extend0 x)
Axiom. (SNo_extend1_SNo) We take the following as an axiom:
∀x, SNo xSNo (SNo_extend1 x)
Axiom. (SNo_extend0_SNoLev) We take the following as an axiom:
∀x, SNo xSNoLev (SNo_extend0 x) = ordsucc (SNoLev x)
Axiom. (SNo_extend1_SNoLev) We take the following as an axiom:
∀x, SNo xSNoLev (SNo_extend1 x) = ordsucc (SNoLev x)
Axiom. (SNo_extend0_nIn) We take the following as an axiom:
∀x, SNo xSNoLev x /:e SNo_extend0 x
Axiom. (SNo_extend1_In) We take the following as an axiom:
∀x, SNo xSNoLev x SNo_extend1 x
Axiom. (SNo_extend0_SNoEq) We take the following as an axiom:
∀x, SNo xSNoEq_ (SNoLev x) (SNo_extend0 x) x
Axiom. (SNo_extend1_SNoEq) We take the following as an axiom:
∀x, SNo xSNoEq_ (SNoLev x) (SNo_extend1 x) x
Axiom. (SNoLev_0_eq_0) We take the following as an axiom:
∀x, SNo xSNoLev x = 0x = 0
Axiom. (SNo_0_eq_0) We take the following as an axiom:
∀q, SNo_ 0 qq = 0
Definition. We define eps_ to be λn ⇒ {0} :\/: {(ordsucc m) '|mn} of type setset.
Axiom. (eps_ordinal_In_eq_0) We take the following as an axiom:
∀n alpha, ordinal alphaalpha eps_ nalpha = 0
Axiom. (eps_0_1) We take the following as an axiom:
Axiom. (SNo__eps_) We take the following as an axiom:
Axiom. (SNo_eps_) We take the following as an axiom:
Axiom. (SNo_eps_1) We take the following as an axiom:
Axiom. (SNoLev_eps_) We take the following as an axiom:
Axiom. (SNo_eps_SNoS_omega) We take the following as an axiom:
Axiom. (SNo_eps_decr) We take the following as an axiom:
Axiom. (SNo_eps_pos) We take the following as an axiom:
Axiom. (SNo_pos_eps_Lt) We take the following as an axiom:
∀n, nat_p nxSNoS_ (ordsucc n), 0 < xeps_ n < x
Axiom. (SNo_pos_eps_Le) We take the following as an axiom:
∀n, nat_p nxSNoS_ (ordsucc (ordsucc n)), 0 < xeps_ n <= x
Axiom. (eps_SNo_eq) We take the following as an axiom:
∀n, nat_p nxSNoS_ (ordsucc n), 0 < xSNoEq_ (SNoLev x) (eps_ n) xexists mn, x = eps_ m
Axiom. (eps_SNoCutP) We take the following as an axiom:
Axiom. (eps_SNoCut) We take the following as an axiom:
End of Section TaggedSets2
Axiom. (SNo_etaE) We take the following as an axiom:
∀z, SNo z∀p : prop, (∀L R, SNoCutP L R(xL, SNoLev x SNoLev z)(yR, SNoLev y SNoLev z)z = SNoCut L Rp)p
Axiom. (SNo_ind) We take the following as an axiom:
∀P : setprop, (∀L R, SNoCutP L R(xL, P x)(yR, P y)P (SNoCut L R))∀z, SNo zP z
Beginning of Section SurrealRecI
Variable F : set(setset)set
Let default : setEps_i (λ_ ⇒ True)
Let G : set(setsetset)setsetλalpha g ⇒ If_ii (ordinal alpha) (λz : setif z SNoS_ (ordsucc alpha) then F z (λw ⇒ g (SNoLev w) w) else default) (λz : setdefault)
Primitive. The name SNo_rec_i is a term of type setset.
Hypothesis Fr : ∀z, SNo z∀g h : setset, (wSNoS_ (SNoLev z), g w = h w)F z g = F z h
Axiom. (SNo_rec_i_eq) We take the following as an axiom:
∀z, SNo zSNo_rec_i z = F z SNo_rec_i
End of Section SurrealRecI
Beginning of Section SurrealRecII
Variable F : set(set(setset))(setset)
Let default : (setset)Descr_ii (λ_ ⇒ True)
Let G : set(setset(setset))set(setset)λalpha g ⇒ If_iii (ordinal alpha) (λz : setIf_ii (z SNoS_ (ordsucc alpha)) (F z (λw ⇒ g (SNoLev w) w)) default) (λz : setdefault)
Primitive. The name SNo_rec_ii is a term of type set(setset).
Hypothesis Fr : ∀z, SNo z∀g h : set(setset), (wSNoS_ (SNoLev z), g w = h w)F z g = F z h
Axiom. (SNo_rec_ii_eq) We take the following as an axiom:
∀z, SNo zSNo_rec_ii z = F z SNo_rec_ii
End of Section SurrealRecII
Beginning of Section SurrealRec2
Variable F : setset(setsetset)set
Let G : set(setsetset)set(setset)setλw f z g ⇒ F w z (λx y ⇒ if x = w then g y else f x y)
Let H : set(setsetset)setsetλw f z ⇒ if SNo z then SNo_rec_i (G w f) z else Empty
Primitive. The name SNo_rec2 is a term of type setsetset.
Hypothesis Fr : ∀w, SNo w∀z, SNo z∀g h : setsetset, (xSNoS_ (SNoLev w), ∀y, SNo yg x y = h x y)(ySNoS_ (SNoLev z), g w y = h w y)F w z g = F w z h
Axiom. (SNo_rec2_G_prop) We take the following as an axiom:
∀w, SNo w∀f k : setsetset, (xSNoS_ (SNoLev w), f x = k x)∀z, SNo z∀g h : setset, (uSNoS_ (SNoLev z), g u = h u)G w f z g = G w k z h
Axiom. (SNo_rec2_eq_1) We take the following as an axiom:
∀w, SNo w∀f : setsetset, ∀z, SNo zSNo_rec_i (G w f) z = G w f z (SNo_rec_i (G w f))
Axiom. (SNo_rec2_eq) We take the following as an axiom:
∀w, SNo w∀z, SNo zSNo_rec2 w z = F w z SNo_rec2
End of Section SurrealRec2
Axiom. (SNo_ordinal_ind) We take the following as an axiom:
∀P : setprop, (∀alpha, ordinal alphaxSNoS_ alpha, P x)(∀x, SNo xP x)
Axiom. (SNo_ordinal_ind2) We take the following as an axiom:
∀P : setsetprop, (∀alpha, ordinal alpha∀beta, ordinal betaxSNoS_ alpha, ySNoS_ beta, P x y)(∀x y, SNo xSNo yP x y)
Axiom. (SNo_ordinal_ind3) We take the following as an axiom:
∀P : setsetsetprop, (∀alpha, ordinal alpha∀beta, ordinal beta∀gamma, ordinal gammaxSNoS_ alpha, ySNoS_ beta, zSNoS_ gamma, P x y z)(∀x y z, SNo xSNo ySNo zP x y z)
Axiom. (SNoLev_ind) We take the following as an axiom:
∀P : setprop, (∀x, SNo x(wSNoS_ (SNoLev x), P w)P x)(∀x, SNo xP x)
Axiom. (SNoLev_ind2) We take the following as an axiom:
∀P : setsetprop, (∀x y, SNo xSNo y(wSNoS_ (SNoLev x), P w y)(zSNoS_ (SNoLev y), P x z)(wSNoS_ (SNoLev x), zSNoS_ (SNoLev y), P w z)P x y)∀x y, SNo xSNo yP x y
Axiom. (SNoLev_ind3) We take the following as an axiom:
∀P : setsetsetprop, (∀x y z, SNo xSNo ySNo z(uSNoS_ (SNoLev x), P u y z)(vSNoS_ (SNoLev y), P x v z)(wSNoS_ (SNoLev z), P x y w)(uSNoS_ (SNoLev x), vSNoS_ (SNoLev y), P u v z)(uSNoS_ (SNoLev x), wSNoS_ (SNoLev z), P u y w)(vSNoS_ (SNoLev y), wSNoS_ (SNoLev z), P x v w)(uSNoS_ (SNoLev x), vSNoS_ (SNoLev y), wSNoS_ (SNoLev z), P u v w)P x y z)∀x y z, SNo xSNo ySNo zP x y z
Axiom. (SNo_omega) We take the following as an axiom:
SNo omega
Axiom. (SNoLt_0_1) We take the following as an axiom:
0 < 1
Axiom. (SNoLt_0_2) We take the following as an axiom:
0 < 2
Axiom. (SNoLt_1_2) We take the following as an axiom:
1 < 2
Axiom. (restr_SNo_) We take the following as an axiom:
∀x, SNo xalphaSNoLev x, SNo_ alpha (x :/\: SNoElts_ alpha)
Axiom. (restr_SNo) We take the following as an axiom:
∀x, SNo xalphaSNoLev x, SNo (x :/\: SNoElts_ alpha)
Axiom. (restr_SNoLev) We take the following as an axiom:
∀x, SNo xalphaSNoLev x, SNoLev (x :/\: SNoElts_ alpha) = alpha
Axiom. (restr_SNoEq) We take the following as an axiom:
∀x, SNo xalphaSNoLev x, SNoEq_ alpha (x :/\: SNoElts_ alpha) x
Axiom. (SNo_extend0_restr_eq) We take the following as an axiom:
∀x, SNo xx = SNo_extend0 x :/\: SNoElts_ (SNoLev x)
Axiom. (SNo_extend1_restr_eq) We take the following as an axiom:
∀x, SNo xx = SNo_extend1 x :/\: SNoElts_ (SNoLev x)
Beginning of Section SurrealMinus
Primitive. The name minus_SNo is a term of type setset.
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 490 and no associativity corresponding to applying term SNoLe.
Axiom. (minus_SNo_eq) We take the following as an axiom:
∀x, SNo x- x = SNoCut {- z|zSNoR x} {- w|wSNoL x}
Axiom. (minus_SNo_prop1) We take the following as an axiom:
∀x, SNo xSNo (- x) /\ (uSNoL x, - x < - u) /\ (uSNoR x, - u < - x) /\ SNoCutP {- z|zSNoR x} {- w|wSNoL x}
Axiom. (SNo_minus_SNo) We take the following as an axiom:
∀x, SNo xSNo (- x)
Axiom. (minus_SNo_Lt_contra) We take the following as an axiom:
∀x y, SNo xSNo yx < y- y < - x
Axiom. (minus_SNo_Le_contra) We take the following as an axiom:
∀x y, SNo xSNo yx <= y- y <= - x
Axiom. (minus_SNo_SNoCutP) We take the following as an axiom:
∀x, SNo xSNoCutP {- z|zSNoR x} {- w|wSNoL x}
Axiom. (minus_SNo_SNoCutP_gen) We take the following as an axiom:
∀L R, SNoCutP L RSNoCutP {- z|zR} {- w|wL}
Axiom. (minus_SNo_Lev_lem1) We take the following as an axiom:
∀alpha, ordinal alphaxSNoS_ alpha, SNoLev (- x) SNoLev x
Axiom. (minus_SNo_Lev_lem2) We take the following as an axiom:
∀x, SNo xSNoLev (- x) SNoLev x
Axiom. (minus_SNo_invol) We take the following as an axiom:
∀x, SNo x- - x = x
Axiom. (minus_SNo_Lev) We take the following as an axiom:
∀x, SNo xSNoLev (- x) = SNoLev x
Axiom. (minus_SNo_SNo_) We take the following as an axiom:
∀alpha, ordinal alpha∀x, SNo_ alpha xSNo_ alpha (- x)
Axiom. (minus_SNo_SNoS_) We take the following as an axiom:
∀alpha, ordinal alpha∀x, x SNoS_ alpha- x SNoS_ alpha
Axiom. (minus_SNoCut_eq_lem) We take the following as an axiom:
∀v, SNo v∀L R, SNoCutP L Rv = SNoCut L R- v = SNoCut {- z|zR} {- w|wL}
Axiom. (minus_SNoCut_eq) We take the following as an axiom:
∀L R, SNoCutP L R- SNoCut L R = SNoCut {- z|zR} {- w|wL}
Axiom. (minus_SNo_Lt_contra1) We take the following as an axiom:
∀x y, SNo xSNo y- x < y- y < x
Axiom. (minus_SNo_Lt_contra2) We take the following as an axiom:
∀x y, SNo xSNo yx < - yy < - x
Axiom. (mordinal_SNoLev_min_2) We take the following as an axiom:
∀alpha, ordinal alpha∀z, SNo zSNoLev z ordsucc alpha- alpha <= z
Axiom. (minus_SNo_SNoS_omega) We take the following as an axiom:
Axiom. (SNoL_minus_SNoR) We take the following as an axiom:
∀x, SNo xSNoL (- x) = {- w|wSNoR x}
End of Section SurrealMinus
Beginning of Section SurrealAdd
Notation. We use - as a prefix operator with priority 358 corresponding to applying term minus_SNo.
Primitive. The name add_SNo is a term of type setsetset.
Notation. We use + as an infix operator with priority 360 and which associates to the right corresponding to applying term add_SNo.
Axiom. (add_SNo_eq) We take the following as an axiom:
∀x, SNo x∀y, SNo yx + y = SNoCut ({w + y|wSNoL x} :\/: {x + w|wSNoL y}) ({z + y|zSNoR x} :\/: {x + z|zSNoR y})
Axiom. (add_SNo_prop1) We take the following as an axiom:
∀x y, SNo xSNo ySNo (x + y) /\ (uSNoL x, u + y < x + y) /\ (uSNoR x, x + y < u + y) /\ (uSNoL y, x + u < x + y) /\ (uSNoR y, x + y < x + u) /\ SNoCutP ({w + y|wSNoL x} :\/: {x + w|wSNoL y}) ({z + y|zSNoR x} :\/: {x + z|zSNoR y})
Axiom. (SNo_add_SNo) We take the following as an axiom:
∀x y, SNo xSNo ySNo (x + y)
Axiom. (SNo_add_SNo_3) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zSNo (x + y + z)
Axiom. (SNo_add_SNo_3c) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zSNo (x + y + - z)
Axiom. (SNo_add_SNo_4) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wSNo (x + y + z + w)
Axiom. (add_SNo_Lt1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx < zx + y < z + y
Axiom. (add_SNo_Le1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx <= zx + y <= z + y
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_Le2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zy <= zx + y <= x + z
Axiom. (add_SNo_Lt3a) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx < zy <= wx + y < z + w
Axiom. (add_SNo_Lt3b) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx <= zy < wx + y < z + w
Axiom. (add_SNo_Lt3) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx < zy < wx + y < z + w
Axiom. (add_SNo_Le3) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx <= zy <= wx + y <= z + w
Axiom. (add_SNo_SNoCutP) We take the following as an axiom:
∀x y, SNo xSNo ySNoCutP ({w + y|wSNoL x} :\/: {x + w|wSNoL y}) ({z + y|zSNoR x} :\/: {x + z|zSNoR y})
Axiom. (add_SNo_com) We take the following as an axiom:
∀x y, SNo xSNo yx + y = y + x
Axiom. (add_SNo_0L) We take the following as an axiom:
∀x, SNo x0 + x = x
Axiom. (add_SNo_0R) We take the following as an axiom:
∀x, SNo xx + 0 = x
Axiom. (add_SNo_minus_SNo_linv) We take the following as an axiom:
∀x, SNo x- x + x = 0
Axiom. (add_SNo_minus_SNo_rinv) We take the following as an axiom:
∀x, SNo xx + - x = 0
Axiom. (add_SNo_ordinal_SNoCutP) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betaSNoCutP ({x + beta|xSNoS_ alpha} :\/: {alpha + x|xSNoS_ beta}) Empty
Axiom. (add_SNo_ordinal_eq) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betaalpha + beta = SNoCut ({x + beta|xSNoS_ alpha} :\/: {alpha + x|xSNoS_ beta}) Empty
Axiom. (add_SNo_ordinal_ordinal) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betaordinal (alpha + beta)
Axiom. (add_SNo_ordinal_SL) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betaordsucc alpha + beta = ordsucc (alpha + beta)
Axiom. (add_SNo_ordinal_SR) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betaalpha + ordsucc beta = ordsucc (alpha + beta)
Axiom. (add_SNo_ordinal_InL) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betagammaalpha, gamma + beta alpha + beta
Axiom. (add_SNo_ordinal_InR) We take the following as an axiom:
∀alpha, ordinal alpha∀beta, ordinal betagammabeta, alpha + gamma alpha + beta
Axiom. (add_nat_add_SNo) We take the following as an axiom:
Axiom. (add_SNo_In_omega) We take the following as an axiom:
Axiom. (add_SNo_1_1_2) We take the following as an axiom:
1 + 1 = 2
Axiom. (add_SNo_SNoL_interpolate) We take the following as an axiom:
∀x y, SNo xSNo yuSNoL (x + y), (exists vSNoL x, u <= v + y) \/ (exists vSNoL y, u <= x + v)
Axiom. (add_SNo_SNoR_interpolate) We take the following as an axiom:
∀x y, SNo xSNo yuSNoR (x + y), (exists vSNoR x, v + y <= u) \/ (exists vSNoR y, x + v <= u)
Axiom. (add_SNo_assoc) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + (y + z) = (x + y) + 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. (minus_SNo_0) We take the following as an axiom:
- 0 = 0
Axiom. (minus_add_SNo_distr) We take the following as an axiom:
∀x y, SNo xSNo y- (x + y) = (- x) + (- y)
Axiom. (minus_add_SNo_distr_3) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z- (x + y + z) = - x + - y + - z
Axiom. (add_SNo_Lev_bd) We take the following as an axiom:
∀x y, SNo xSNo ySNoLev (x + y) SNoLev x + SNoLev y
Axiom. (add_SNo_SNoS_omega) We take the following as an axiom:
Axiom. (add_SNo_minus_R2) We take the following as an axiom:
∀x y, SNo xSNo y(x + y) + - y = x
Axiom. (add_SNo_minus_R2') We take the following as an axiom:
∀x y, SNo xSNo y(x + - y) + y = x
Axiom. (add_SNo_minus_L2) We take the following as an axiom:
∀x y, SNo xSNo y- x + (x + y) = y
Axiom. (add_SNo_minus_L2') We take the following as an axiom:
∀x y, SNo xSNo yx + (- x + y) = y
Axiom. (add_SNo_Lt1_cancel) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y < z + yx < 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_assoc_4) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx + y + z + w = (x + y + z) + w
Axiom. (add_SNo_com_3_0_1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y + z = y + x + z
Axiom. (add_SNo_com_3b_1_2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(x + y) + z = (x + z) + y
Axiom. (add_SNo_com_4_inner_mid) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x + y) + (z + w) = (x + z) + (y + w)
Axiom. (add_SNo_rotate_3_1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y + z = z + x + y
Axiom. (add_SNo_rotate_4_1) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx + y + z + w = w + x + y + z
Axiom. (add_SNo_rotate_5_1) We take the following as an axiom:
∀x y z w v, SNo xSNo ySNo zSNo wSNo vx + y + z + w + v = v + x + y + z + w
Axiom. (add_SNo_rotate_5_2) We take the following as an axiom:
∀x y z w v, SNo xSNo ySNo zSNo wSNo vx + y + z + w + v = w + v + x + y + z
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_SNo_prop3) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x + y + z) + (- z + w) = x + y + w
Axiom. (add_SNo_minus_SNo_prop4) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x + y + z) + (w + - z) = x + y + w
Axiom. (add_SNo_minus_SNo_prop5) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x + y + - z) + (z + w) = x + y + w
Axiom. (add_SNo_minus_Lt1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + - y < zx < z + y
Axiom. (add_SNo_minus_Lt2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zz < x + - yz + y < x
Axiom. (add_SNo_minus_Lt1b) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx < z + yx + - y < z
Axiom. (add_SNo_minus_Lt2b) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zz + y < xz < x + - y
Axiom. (add_SNo_minus_Lt1b3) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx + y < w + zx + y + - z < w
Axiom. (add_SNo_minus_Lt2b3) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo ww + z < x + yw < x + y + - z
Axiom. (add_SNo_minus_Lt_lem) We take the following as an axiom:
∀x y z u v w, SNo xSNo ySNo zSNo uSNo vSNo wx + y + w < u + v + zx + y + - z < u + v + - w
Axiom. (add_SNo_minus_Le2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zz <= x + - yz + y <= x
Axiom. (add_SNo_minus_Le2b) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zz + y <= xz <= x + - y
Axiom. (add_SNo_Lt_subprop2) We take the following as an axiom:
∀x y z w u v, SNo xSNo ySNo zSNo wSNo uSNo vx + u < z + vy + v < w + ux + y < z + w
Axiom. (add_SNo_Lt_subprop3a) We take the following as an axiom:
∀x y z w u a, SNo xSNo ySNo zSNo wSNo uSNo ax + z < w + ay + a < ux + y + z < w + u
Axiom. (add_SNo_Lt_subprop3b) We take the following as an axiom:
∀x y w u v a, SNo xSNo ySNo wSNo uSNo vSNo ax + a < w + vy < a + ux + y < w + u + v
Axiom. (add_SNo_Lt_subprop3c) We take the following as an axiom:
∀x y z w u a b c, SNo xSNo ySNo zSNo wSNo uSNo aSNo bSNo cx + a < b + cy + c < ub + z < w + ax + y + z < w + u
Axiom. (add_SNo_Lt_subprop3d) We take the following as an axiom:
∀x y w u v a b c, SNo xSNo ySNo wSNo uSNo vSNo aSNo bSNo cx + a < b + vy < c + ub + c < w + ax + y < w + u + v
Axiom. (ordinal_ordsucc_SNo_eq) We take the following as an axiom:
∀alpha, ordinal alphaordsucc alpha = 1 + alpha
Axiom. (add_SNo_3a_2b) We take the following as an axiom:
∀x y z w u, SNo xSNo ySNo zSNo wSNo u(x + y + z) + (w + u) = (u + y + z) + (w + x)
Axiom. (add_SNo_1_ordsucc) We take the following as an axiom:
Axiom. (add_SNo_eps_Lt) We take the following as an axiom:
∀x, SNo xnomega, x < x + eps_ n
Axiom. (add_SNo_eps_Lt') We take the following as an axiom:
∀x y, SNo xSNo ynomega, x < yx < y + eps_ n
Axiom. (SNoLt_minus_pos) We take the following as an axiom:
∀x y, SNo xSNo yx < y0 < y + - x
Axiom. (add_SNo_omega_In_cases) We take the following as an axiom:
∀m, nomega, ∀k, nat_p km n + km n \/ m + - n k
Axiom. (add_SNo_Lt4) We take the following as an axiom:
∀x y z w u v, SNo xSNo ySNo zSNo wSNo uSNo vx < wy < uz < vx + y + z < w + u + v
Axiom. (add_SNo_3_3_3_Lt1) We take the following as an axiom:
∀x y z w u, SNo xSNo ySNo zSNo wSNo ux + y < z + wx + y + u < z + w + u
Axiom. (add_SNo_3_2_3_Lt1) We take the following as an axiom:
∀x y z w u, SNo xSNo ySNo zSNo wSNo uy + x < z + wx + u + y < z + w + u
Axiom. (add_SNoCutP_lem) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly RySNoCutP ({w + y|wLx} :\/: {x + w|wLy}) ({z + y|zRx} :\/: {x + z|zRy}) /\ x + y = SNoCut ({w + y|wLx} :\/: {x + w|wLy}) ({z + y|zRx} :\/: {x + z|zRy})
Axiom. (add_SNoCutP_gen) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly RySNoCutP ({w + y|wLx} :\/: {x + w|wLy}) ({z + y|zRx} :\/: {x + z|zRy})
Axiom. (add_SNoCut_eq) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly Ryx + y = SNoCut ({w + y|wLx} :\/: {x + w|wLy}) ({z + y|zRx} :\/: {x + z|zRy})
Axiom. (add_SNo_SNoCut_L_interpolate) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly RyuSNoL (x + y), (exists vLx, u <= v + y) \/ (exists vLy, u <= x + v)
Axiom. (add_SNo_SNoCut_R_interpolate) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly RyuSNoR (x + y), (exists vRx, v + y <= u) \/ (exists vRy, x + v <= u)
Axiom. (add_SNo_minus_Lt12b3) We take the following as an axiom:
∀x y z w u v, SNo xSNo ySNo zSNo wSNo uSNo vx + y + v < w + u + zx + y + - z < w + u + - v
Axiom. (add_SNo_Le1_cancel) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + y <= z + yx <= z
Axiom. (add_SNo_minus_Le1b) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx <= z + yx + - y <= z
Axiom. (add_SNo_minus_Le1b3) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx + y <= w + zx + y + - z <= w
Axiom. (add_SNo_minus_Le12b3) We take the following as an axiom:
∀x y z w u v, SNo xSNo ySNo zSNo wSNo uSNo vx + y + v <= w + u + zx + y + - z <= w + u + - v
End of Section SurrealAdd
Notation. We use :*: as an infix operator with priority 440 and which associates to the left corresponding to applying term setprod.
Notation. We use :^: as an infix operator with priority 430 and which associates to the left corresponding to applying term setexp.
Beginning of Section SurrealMul
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.
Primitive. The name mul_SNo is a term of type setsetset.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Axiom. (mul_SNo_eq) We take the following as an axiom:
∀x, SNo x∀y, SNo yx * y = SNoCut ({(w 0) * y + x * (w 1) + - (w 0) * (w 1)|wSNoL x :*: SNoL y} :\/: {(z 0) * y + x * (z 1) + - (z 0) * (z 1)|zSNoR x :*: SNoR y}) ({(w 0) * y + x * (w 1) + - (w 0) * (w 1)|wSNoL x :*: SNoR y} :\/: {(z 0) * y + x * (z 1) + - (z 0) * (z 1)|zSNoR x :*: SNoL y})
Axiom. (mul_SNo_eq_2) We take the following as an axiom:
∀x y, SNo xSNo y∀p : prop, (∀L R, (∀u, u L(∀q : prop, (w0SNoL x, w1SNoL y, u = w0 * y + x * w1 + - w0 * w1q)(z0SNoR x, z1SNoR y, u = z0 * y + x * z1 + - z0 * z1q)q))(w0SNoL x, w1SNoL y, w0 * y + x * w1 + - w0 * w1 L)(z0SNoR x, z1SNoR y, z0 * y + x * z1 + - z0 * z1 L)(∀u, u R(∀q : prop, (w0SNoL x, z1SNoR y, u = w0 * y + x * z1 + - w0 * z1q)(z0SNoR x, w1SNoL y, u = z0 * y + x * w1 + - z0 * w1q)q))(w0SNoL x, z1SNoR y, w0 * y + x * z1 + - w0 * z1 R)(z0SNoR x, w1SNoL y, z0 * y + x * w1 + - z0 * w1 R)x * y = SNoCut L Rp)p
Axiom. (mul_SNo_prop_1) We take the following as an axiom:
∀x, SNo x∀y, SNo y∀p : prop, (SNo (x * y)(uSNoL x, vSNoL y, u * y + x * v < x * y + u * v)(uSNoR x, vSNoR y, u * y + x * v < x * y + u * v)(uSNoL x, vSNoR y, x * y + u * v < u * y + x * v)(uSNoR x, vSNoL y, x * y + u * v < u * y + x * v)p)p
Axiom. (SNo_mul_SNo) We take the following as an axiom:
∀x y, SNo xSNo ySNo (x * y)
Axiom. (SNo_mul_SNo_lem) We take the following as an axiom:
∀x y u v, SNo xSNo ySNo uSNo vSNo (u * y + x * v + - (u * v))
Axiom. (SNo_mul_SNo_3) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zSNo (x * y * z)
Axiom. (mul_SNo_eq_3) We take the following as an axiom:
∀x y, SNo xSNo y∀p : prop, (∀L R, SNoCutP L R(∀u, u L(∀q : prop, (w0SNoL x, w1SNoL y, u = w0 * y + x * w1 + - w0 * w1q)(z0SNoR x, z1SNoR y, u = z0 * y + x * z1 + - z0 * z1q)q))(w0SNoL x, w1SNoL y, w0 * y + x * w1 + - w0 * w1 L)(z0SNoR x, z1SNoR y, z0 * y + x * z1 + - z0 * z1 L)(∀u, u R(∀q : prop, (w0SNoL x, z1SNoR y, u = w0 * y + x * z1 + - w0 * z1q)(z0SNoR x, w1SNoL y, u = z0 * y + x * w1 + - z0 * w1q)q))(w0SNoL x, z1SNoR y, w0 * y + x * z1 + - w0 * z1 R)(z0SNoR x, w1SNoL y, z0 * y + x * w1 + - z0 * w1 R)x * y = SNoCut L Rp)p
Axiom. (mul_SNo_Lt) We take the following as an axiom:
∀x y u v, SNo xSNo ySNo uSNo vu < xv < yu * y + x * v < x * y + u * v
Axiom. (mul_SNo_Le) We take the following as an axiom:
∀x y u v, SNo xSNo ySNo uSNo vu <= xv <= yu * y + x * v <= x * y + u * v
Axiom. (mul_SNo_SNoL_interpolate) We take the following as an axiom:
∀x y, SNo xSNo yuSNoL (x * y), (exists vSNoL x, exists wSNoL y, u + v * w <= v * y + x * w) \/ (exists vSNoR x, exists wSNoR y, u + v * w <= v * y + x * w)
Axiom. (mul_SNo_SNoL_interpolate_impred) We take the following as an axiom:
∀x y, SNo xSNo yuSNoL (x * y), ∀p : prop, (vSNoL x, wSNoL y, u + v * w <= v * y + x * wp)(vSNoR x, wSNoR y, u + v * w <= v * y + x * wp)p
Axiom. (mul_SNo_SNoR_interpolate) We take the following as an axiom:
∀x y, SNo xSNo yuSNoR (x * y), (exists vSNoL x, exists wSNoR y, v * y + x * w <= u + v * w) \/ (exists vSNoR x, exists wSNoL y, v * y + x * w <= u + v * w)
Axiom. (mul_SNo_SNoR_interpolate_impred) We take the following as an axiom:
∀x y, SNo xSNo yuSNoR (x * y), ∀p : prop, (vSNoL x, wSNoR y, v * y + x * w <= u + v * wp)(vSNoR x, wSNoL y, v * y + x * w <= u + v * wp)p
Axiom. (mul_SNo_Subq_lem) We take the following as an axiom:
∀x y X Y Z W, ∀U U', (∀u, u U(∀q : prop, (w0X, w1Y, u = w0 * y + x * w1 + - w0 * w1q)(z0Z, z1W, u = z0 * y + x * z1 + - z0 * z1q)q))(w0X, w1Y, w0 * y + x * w1 + - w0 * w1 U')(w0Z, w1W, w0 * y + x * w1 + - w0 * w1 U')U U'
Axiom. (mul_SNo_zeroR) We take the following as an axiom:
∀x, SNo xx * 0 = 0
Axiom. (mul_SNo_oneR) We take the following as an axiom:
∀x, SNo xx * 1 = x
Axiom. (mul_SNo_com) We take the following as an axiom:
∀x y, SNo xSNo yx * y = y * x
Axiom. (mul_SNo_minus_distrL) We take the following as an axiom:
∀x y, SNo xSNo y(- x) * y = - x * y
Axiom. (mul_SNo_minus_distrR) We take the following as an axiom:
∀x y, SNo xSNo yx * (- y) = - (x * y)
Axiom. (mul_SNo_distrR) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(x + y) * z = x * z + y * z
Axiom. (mul_SNo_distrL) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx * (y + z) = x * y + x * z
Beginning of Section mul_SNo_assoc_lems
Variable M : setsetset
Hypothesis DL : ∀x y z, SNo xSNo ySNo zx * (y + z) = x * y + x * z
Hypothesis DR : ∀x y z, SNo xSNo ySNo z(x + y) * z = x * z + y * z
Hypothesis IL : ∀x y, SNo xSNo yuSNoL (x * y), ∀p : prop, (vSNoL x, wSNoL y, u + v * w <= v * y + x * wp)(vSNoR x, wSNoR y, u + v * w <= v * y + x * wp)p
Hypothesis IR : ∀x y, SNo xSNo yuSNoR (x * y), ∀p : prop, (vSNoL x, wSNoR y, v * y + x * w <= u + v * wp)(vSNoR x, wSNoL y, v * y + x * w <= u + v * wp)p
Hypothesis M_Lt : ∀x y u v, SNo xSNo ySNo uSNo vu < xv < yu * y + x * v < x * y + u * v
Hypothesis M_Le : ∀x y u v, SNo xSNo ySNo uSNo vu <= xv <= yu * y + x * v <= x * y + u * v
Axiom. (mul_SNo_assoc_lem1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(uSNoS_ (SNoLev x), u * (y * z) = (u * y) * z)(vSNoS_ (SNoLev y), x * (v * z) = (x * v) * z)(wSNoS_ (SNoLev z), x * (y * w) = (x * y) * w)(uSNoS_ (SNoLev x), vSNoS_ (SNoLev y), u * (v * z) = (u * v) * z)(uSNoS_ (SNoLev x), wSNoS_ (SNoLev z), u * (y * w) = (u * y) * w)(vSNoS_ (SNoLev y), wSNoS_ (SNoLev z), x * (v * w) = (x * v) * w)(uSNoS_ (SNoLev x), vSNoS_ (SNoLev y), wSNoS_ (SNoLev z), u * (v * w) = (u * v) * w)∀L, (uL, ∀q : prop, (vSNoL x, wSNoL (y * z), u = v * (y * z) + x * w + - v * wq)(vSNoR x, wSNoR (y * z), u = v * (y * z) + x * w + - v * wq)q)uL, u < (x * y) * z
Axiom. (mul_SNo_assoc_lem2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(uSNoS_ (SNoLev x), u * (y * z) = (u * y) * z)(vSNoS_ (SNoLev y), x * (v * z) = (x * v) * z)(wSNoS_ (SNoLev z), x * (y * w) = (x * y) * w)(uSNoS_ (SNoLev x), vSNoS_ (SNoLev y), u * (v * z) = (u * v) * z)(uSNoS_ (SNoLev x), wSNoS_ (SNoLev z), u * (y * w) = (u * y) * w)(vSNoS_ (SNoLev y), wSNoS_ (SNoLev z), x * (v * w) = (x * v) * w)(uSNoS_ (SNoLev x), vSNoS_ (SNoLev y), wSNoS_ (SNoLev z), u * (v * w) = (u * v) * w)∀R, (uR, ∀q : prop, (vSNoL x, wSNoR (y * z), u = v * (y * z) + x * w + - v * wq)(vSNoR x, wSNoL (y * z), u = v * (y * z) + x * w + - v * wq)q)uR, (x * y) * z < u
End of Section mul_SNo_assoc_lems
Axiom. (mul_SNo_assoc) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx * (y * z) = (x * y) * z
Axiom. (mul_nat_mul_SNo) We take the following as an axiom:
Axiom. (mul_SNo_In_omega) We take the following as an axiom:
Axiom. (mul_SNo_zeroL) We take the following as an axiom:
∀x, SNo x0 * x = 0
Axiom. (mul_SNo_oneL) We take the following as an axiom:
∀x, SNo x1 * x = x
Axiom. (SNo_gt2_double_ltS) We take the following as an axiom:
∀x, SNo x1 < xx + 1 < 2 * x
Axiom. (pos_mul_SNo_Lt) We take the following as an axiom:
∀x y z, SNo x0 < xSNo ySNo zy < zx * y < x * z
Axiom. (nonneg_mul_SNo_Le) We take the following as an axiom:
∀x y z, SNo x0 <= xSNo ySNo zy <= zx * y <= x * z
Axiom. (neg_mul_SNo_Lt) We take the following as an axiom:
∀x y z, SNo xx < 0SNo ySNo zz < yx * y < x * z
Axiom. (pos_mul_SNo_Lt') We take the following as an axiom:
∀x y z, SNo xSNo ySNo z0 < zx < yx * z < y * z
Axiom. (mul_SNo_Lt1_pos_Lt) We take the following as an axiom:
∀x y, SNo xSNo yx < 10 < yx * y < y
Axiom. (nonneg_mul_SNo_Le') We take the following as an axiom:
∀x y z, SNo xSNo ySNo z0 <= zx <= yx * z <= y * z
Axiom. (mul_SNo_Le1_nonneg_Le) We take the following as an axiom:
∀x y, SNo xSNo yx <= 10 <= yx * y <= y
Axiom. (pos_mul_SNo_Lt2) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w0 < x0 < yx < zy < wx * y < z * w
Axiom. (nonneg_mul_SNo_Le2) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w0 <= x0 <= yx <= zy <= wx * y <= z * w
Axiom. (mul_SNo_pos_pos) We take the following as an axiom:
∀x y, SNo xSNo y0 < x0 < y0 < x * y
Axiom. (mul_SNo_pos_neg) We take the following as an axiom:
∀x y, SNo xSNo y0 < xy < 0x * y < 0
Axiom. (mul_SNo_neg_pos) We take the following as an axiom:
∀x y, SNo xSNo yx < 00 < yx * y < 0
Axiom. (mul_SNo_neg_neg) We take the following as an axiom:
∀x y, SNo xSNo yx < 0y < 00 < x * y
Axiom. (mul_SNo_nonneg_nonneg) We take the following as an axiom:
∀x y, SNo xSNo y0 <= x0 <= y0 <= x * y
Axiom. (mul_SNo_nonpos_pos) We take the following as an axiom:
∀x y, SNo xSNo yx <= 00 < yx * y <= 0
Axiom. (mul_SNo_nonpos_neg) We take the following as an axiom:
∀x y, SNo xSNo yx <= 0y < 00 <= x * y
Axiom. (nonpos_mul_SNo_Le) We take the following as an axiom:
∀x y z, SNo xx <= 0SNo ySNo zz <= yx * y <= x * z
Axiom. (SNo_sqr_nonneg) We take the following as an axiom:
∀x, SNo x0 <= x * x
Axiom. (SNo_zero_or_sqr_pos) We take the following as an axiom:
∀x, SNo xx = 0 \/ 0 < x * x
Axiom. (SNo_pos_sqr_uniq) We take the following as an axiom:
∀x y, SNo xSNo y0 < x0 < yx * x = y * yx = y
Axiom. (SNo_nonneg_sqr_uniq) We take the following as an axiom:
∀x y, SNo xSNo y0 <= x0 <= yx * x = y * yx = y
Axiom. (SNo_foil) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x + y) * (z + w) = x * z + x * w + y * z + y * w
Axiom. (mul_SNo_minus_minus) We take the following as an axiom:
∀x y, SNo xSNo y(- x) * (- y) = x * y
Axiom. (mul_SNo_com_3_0_1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx * y * z = y * x * z
Axiom. (mul_SNo_com_3b_1_2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(x * y) * z = (x * z) * y
Axiom. (mul_SNo_com_4_inner_mid) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x * y) * (z * w) = (x * z) * (y * w)
Axiom. (mul_SNo_rotate_3_1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx * y * z = z * x * y
Axiom. (mul_SNo_rotate_4_1) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo wx * y * z * w = w * x * y * z
Axiom. (SNo_foil_mm) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x + - y) * (z + - w) = x * z + - x * w + - y * z + y * w
Axiom. (mul_SNo_nonzero_cancel) We take the following as an axiom:
∀x y z, SNo xx <> 0SNo ySNo zx * y = x * zy = z
Axiom. (mul_SNoCutP_lem) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly RySNoCutP ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ly} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ry}) ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ry} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ly}) /\ x * y = SNoCut ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ly} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ry}) ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ry} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ly}) /\ ∀q : prop, (∀LxLy' RxRy' LxRy' RxLy', (uLxLy', ∀p : prop, (wLx, w'Ly, SNo wSNo w'w < xw' < yu = w * y + x * w' + - w * w'p)p)(wLx, w'Ly, w * y + x * w' + - w * w' LxLy')(uRxRy', ∀p : prop, (zRx, z'Ry, SNo zSNo z'x < zy < z'u = z * y + x * z' + - z * z'p)p)(zRx, z'Ry, z * y + x * z' + - z * z' RxRy')(uLxRy', ∀p : prop, (wLx, zRy, SNo wSNo zw < xy < zu = w * y + x * z + - w * zp)p)(wLx, zRy, w * y + x * z + - w * z LxRy')(uRxLy', ∀p : prop, (zRx, wLy, SNo zSNo wx < zw < yu = z * y + x * w + - z * wp)p)(zRx, wLy, z * y + x * w + - z * w RxLy')SNoCutP (LxLy' :\/: RxRy') (LxRy' :\/: RxLy')x * y = SNoCut (LxLy' :\/: RxRy') (LxRy' :\/: RxLy')q)q
Axiom. (mul_SNoCutP_gen) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly RySNoCutP ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ly} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ry}) ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ry} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ly})
Axiom. (mul_SNoCut_eq) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly Ryx * y = SNoCut ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ly} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ry}) ({w 0 * y + x * w 1 + - w 0 * w 1|wLx :*: Ry} :\/: {z 0 * y + x * z 1 + - z 0 * z 1|zRx :*: Ly})
Axiom. (mul_SNoCut_abs) We take the following as an axiom:
∀Lx Rx Ly Ry x y, SNoCutP Lx RxSNoCutP Ly Ryx = SNoCut Lx Rxy = SNoCut Ly Ry∀q : prop, (∀LxLy' RxRy' LxRy' RxLy', (uLxLy', ∀p : prop, (wLx, w'Ly, SNo wSNo w'w < xw' < yu = w * y + x * w' + - w * w'p)p)(wLx, w'Ly, w * y + x * w' + - w * w' LxLy')(uRxRy', ∀p : prop, (zRx, z'Ry, SNo zSNo z'x < zy < z'u = z * y + x * z' + - z * z'p)p)(zRx, z'Ry, z * y + x * z' + - z * z' RxRy')(uLxRy', ∀p : prop, (wLx, zRy, SNo wSNo zw < xy < zu = w * y + x * z + - w * zp)p)(wLx, zRy, w * y + x * z + - w * z LxRy')(uRxLy', ∀p : prop, (zRx, wLy, SNo zSNo wx < zw < yu = z * y + x * w + - z * wp)p)(zRx, wLy, z * y + x * w + - z * w RxLy')SNoCutP (LxLy' :\/: RxRy') (LxRy' :\/: RxLy')x * y = SNoCut (LxLy' :\/: RxRy') (LxRy' :\/: RxLy')q)q
Axiom. (mul_SNo_SNoCut_SNoL_interpolate) We take the following as an axiom:
∀Lx Rx Ly Ry, SNoCutP Lx RxSNoCutP Ly Ry∀x y, x = SNoCut Lx Rxy = SNoCut Ly RyuSNoL (x * y), (exists vLx, exists wLy, u + v * w <= v * y + x * w) \/ (exists vRx, exists wRy, u + v * w <= v * y + x * w)
Axiom. (mul_SNo_SNoCut_SNoL_interpolate_impred) We take the following as an axiom:
∀Lx Rx Ly Ry, SNoCutP Lx RxSNoCutP Ly Ry∀x y, x = SNoCut Lx Rxy = SNoCut Ly RyuSNoL (x * y), ∀p : prop, (vLx, wLy, u + v * w <= v * y + x * wp)(vRx, wRy, u + v * w <= v * y + x * wp)p
Axiom. (mul_SNo_SNoCut_SNoR_interpolate) We take the following as an axiom:
∀Lx Rx Ly Ry, SNoCutP Lx RxSNoCutP Ly Ry∀x y, x = SNoCut Lx Rxy = SNoCut Ly RyuSNoR (x * y), (exists vLx, exists wRy, v * y + x * w <= u + v * w) \/ (exists vRx, exists wLy, v * y + x * w <= u + v * w)
Axiom. (mul_SNo_SNoCut_SNoR_interpolate_impred) We take the following as an axiom:
∀Lx Rx Ly Ry, SNoCutP Lx RxSNoCutP Ly Ry∀x y, x = SNoCut Lx Rxy = SNoCut Ly RyuSNoR (x * y), ∀p : prop, (vLx, wRy, v * y + x * w <= u + v * wp)(vRx, wLy, v * y + x * w <= u + v * wp)p
End of Section SurrealMul
Beginning of Section SurrealExp
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Definition. We define exp_SNo_nat to be λn m : setnat_primrec 1 (λ_ r ⇒ n * r) m of type setsetset.
Notation. We use ^ as an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
Axiom. (exp_SNo_nat_0) We take the following as an axiom:
∀x, SNo xx ^ 0 = 1
Axiom. (exp_SNo_nat_S) We take the following as an axiom:
∀x, SNo x∀n, nat_p nx ^ (ordsucc n) = x * x ^ n
Axiom. (exp_SNo_nat_1) We take the following as an axiom:
∀x, SNo xx ^ 1 = x
Axiom. (exp_SNo_nat_2) We take the following as an axiom:
∀x, SNo xx ^ 2 = x * x
Axiom. (SNo_sqr_nonneg') We take the following as an axiom:
∀x, SNo x0 <= x ^ 2
Axiom. (SNo_zero_or_sqr_pos') We take the following as an axiom:
∀x, SNo xx = 0 \/ 0 < x ^ 2
Axiom. (SNo_exp_SNo_nat) We take the following as an axiom:
∀x, SNo x∀n, nat_p nSNo (x ^ n)
Axiom. (nat_exp_SNo_nat) We take the following as an axiom:
∀x, nat_p x∀n, nat_p nnat_p (x ^ n)
Axiom. (eps_ordsucc_half_add) We take the following as an axiom:
∀n, nat_p neps_ (ordsucc n) + eps_ (ordsucc n) = eps_ n
Axiom. (eps_1_half_eq1) We take the following as an axiom:
Axiom. (eps_1_half_eq2) We take the following as an axiom:
Axiom. (double_eps_1) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx + x = y + zx = eps_ 1 * (y + z)
Axiom. (exp_SNo_1_bd) We take the following as an axiom:
∀x, SNo x1 <= x∀n, nat_p n1 <= x ^ n
Axiom. (exp_SNo_2_bd) We take the following as an axiom:
∀n, nat_p nn < 2 ^ n
Axiom. (mul_SNo_eps_power_2) We take the following as an axiom:
∀n, nat_p neps_ n * 2 ^ n = 1
Axiom. (eps_bd_1) We take the following as an axiom:
Axiom. (mul_SNo_eps_power_2') We take the following as an axiom:
∀n, nat_p n2 ^ n * eps_ n = 1
Axiom. (exp_SNo_nat_mul_add) We take the following as an axiom:
∀x, SNo x∀m, nat_p m∀n, nat_p nx ^ m * x ^ n = x ^ (m + n)
Axiom. (exp_SNo_nat_mul_add') We take the following as an axiom:
∀x, SNo xm nomega, x ^ m * x ^ n = x ^ (m + n)
Axiom. (exp_SNo_nat_pos) We take the following as an axiom:
∀x, SNo x0 < x∀n, nat_p n0 < x ^ n
Axiom. (mul_SNo_eps_eps_add_SNo) We take the following as an axiom:
Axiom. (SNoS_omega_Lev_equip) We take the following as an axiom:
∀n, nat_p nequip {xSNoS_ omega|SNoLev x = n} (2 ^ n)
Axiom. (SNoS_finite) We take the following as an axiom:
Axiom. (SNoS_omega_SNoL_finite) We take the following as an axiom:
Axiom. (SNoS_omega_SNoR_finite) We take the following as an axiom:
End of Section SurrealExp
Beginning of Section Int
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Definition. We define int to be omega :\/: {- n|nomega} of type set.
Axiom. (int_SNo_cases) We take the following as an axiom:
∀p : setprop, (nomega, p n)(nomega, p (- n))xint, p x
Axiom. (int_3_cases) We take the following as an axiom:
nint, ∀p : prop, (momega, n = - ordsucc mp)(n = 0p)(momega, n = ordsucc mp)p
Axiom. (int_SNo) We take the following as an axiom:
Axiom. (Subq_omega_int) We take the following as an axiom:
Axiom. (int_minus_SNo_omega) We take the following as an axiom:
Axiom. (int_add_SNo_lem) We take the following as an axiom:
nomega, ∀m, nat_p m- n + m int
Axiom. (int_add_SNo) We take the following as an axiom:
Axiom. (int_minus_SNo) We take the following as an axiom:
Axiom. (int_mul_SNo) We take the following as an axiom:
End of Section Int
Beginning of Section SurrealAbs
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Definition. We define abs_SNo to be λx ⇒ if 0 <= x then x else - x of type setset.
Axiom. (nonneg_abs_SNo) We take the following as an axiom:
∀x, 0 <= xabs_SNo x = x
Axiom. (not_nonneg_abs_SNo) We take the following as an axiom:
∀x, ~ (0 <= x)abs_SNo x = - x
Axiom. (abs_SNo_0) We take the following as an axiom:
Axiom. (pos_abs_SNo) We take the following as an axiom:
∀x, 0 < xabs_SNo x = x
Axiom. (neg_abs_SNo) We take the following as an axiom:
∀x, SNo xx < 0abs_SNo x = - x
Axiom. (SNo_abs_SNo) We take the following as an axiom:
∀x, SNo xSNo (abs_SNo x)
Axiom. (abs_SNo_Lev) We take the following as an axiom:
∀x, SNo xSNoLev (abs_SNo x) = SNoLev x
Axiom. (abs_SNo_minus) We take the following as an axiom:
∀x, SNo xabs_SNo (- x) = abs_SNo x
Axiom. (abs_SNo_dist_swap) We take the following as an axiom:
∀x y, SNo xSNo yabs_SNo (x + - y) = abs_SNo (y + - x)
Axiom. (SNo_triangle) We take the following as an axiom:
∀x y, SNo xSNo yabs_SNo (x + y) <= abs_SNo x + abs_SNo y
Axiom. (SNo_triangle2) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zabs_SNo (x + - z) <= abs_SNo (x + - y) + abs_SNo (y + - z)
End of Section SurrealAbs
Beginning of Section SNoMaxMin
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Notation. We use ^ as an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
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.
Definition. We define SNo_max_of to be λX x ⇒ x X /\ SNo x /\ yX, SNo yy <= x of type setsetprop.
Definition. We define SNo_min_of to be λX x ⇒ x X /\ SNo x /\ yX, SNo yx <= y of type setsetprop.
Axiom. (minus_SNo_max_min) We take the following as an axiom:
∀X y, (xX, SNo x)SNo_max_of X ySNo_min_of {- x|xX} (- y)
Axiom. (minus_SNo_max_min') We take the following as an axiom:
∀X y, (xX, SNo x)SNo_max_of {- x|xX} ySNo_min_of X (- y)
Axiom. (minus_SNo_min_max) We take the following as an axiom:
∀X y, (xX, SNo x)SNo_min_of X ySNo_max_of {- x|xX} (- y)
Axiom. (double_SNo_max_1) We take the following as an axiom:
∀x y, SNo xSNo_max_of (SNoL x) y∀z, SNo zx < zy + z < x + xexists wSNoR z, y + w = x + x
Axiom. (double_SNo_min_1) We take the following as an axiom:
∀x y, SNo xSNo_min_of (SNoR x) y∀z, SNo zz < xx + x < y + zexists wSNoL z, y + w = x + x
Axiom. (finite_max_exists) We take the following as an axiom:
∀X, (xX, SNo x)finite XX <> 0exists x, SNo_max_of X x
Axiom. (finite_min_exists) We take the following as an axiom:
∀X, (xX, SNo x)finite XX <> 0exists x, SNo_min_of X x
Axiom. (SNoS_omega_SNoL_max_exists) We take the following as an axiom:
Axiom. (SNoS_omega_SNoR_min_exists) We take the following as an axiom:
End of Section SNoMaxMin
Beginning of Section DiadicRationals
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
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 an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
Axiom. (nonneg_diadic_rational_p_SNoS_omega) We take the following as an axiom:
Definition. We define diadic_rational_p to be λx ⇒ exists komega, exists mint, x = eps_ k * m of type setprop.
Axiom. (diadic_rational_p_SNoS_omega) We take the following as an axiom:
Axiom. (int_diadic_rational_p) We take the following as an axiom:
Axiom. (omega_diadic_rational_p) We take the following as an axiom:
Axiom. (eps_diadic_rational_p) We take the following as an axiom:
Axiom. (minus_SNo_diadic_rational_p) We take the following as an axiom:
Axiom. (mul_SNo_diadic_rational_p) We take the following as an axiom:
Axiom. (add_SNo_diadic_rational_p) We take the following as an axiom:
Axiom. (SNoS_omega_diadic_rational_p_lem) We take the following as an axiom:
∀n, nat_p n∀x, SNo xSNoLev x = ndiadic_rational_p x
Axiom. (SNoS_omega_diadic_rational_p) We take the following as an axiom:
Axiom. (mul_SNo_SNoS_omega) We take the following as an axiom:
End of Section DiadicRationals
Beginning of Section SurrealDiv
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
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 an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
Definition. We define SNoL_pos to be λx ⇒ {wSNoL x|0 < w} of type setset.
Axiom. (SNo_recip_pos_pos) We take the following as an axiom:
∀x xi, SNo xSNo xi0 < xx * xi = 10 < xi
Axiom. (SNo_recip_lem1) We take the following as an axiom:
∀x x' x'i y y', SNo x0 < xx' SNoL_pos xSNo x'ix' * x'i = 1SNo yx * y < 1SNo y'1 + - x * y' = (1 + - x * y) * (x' + - x) * x'i1 < x * y'
Axiom. (SNo_recip_lem2) We take the following as an axiom:
∀x x' x'i y y', SNo x0 < xx' SNoL_pos xSNo x'ix' * x'i = 1SNo y1 < x * ySNo y'1 + - x * y' = (1 + - x * y) * (x' + - x) * x'ix * y' < 1
Axiom. (SNo_recip_lem3) We take the following as an axiom:
∀x x' x'i y y', SNo x0 < xx' SNoR xSNo x'ix' * x'i = 1SNo yx * y < 1SNo y'1 + - x * y' = (1 + - x * y) * (x' + - x) * x'ix * y' < 1
Axiom. (SNo_recip_lem4) We take the following as an axiom:
∀x x' x'i y y', SNo x0 < xx' SNoR xSNo x'ix' * x'i = 1SNo y1 < x * ySNo y'1 + - x * y' = (1 + - x * y) * (x' + - x) * x'i1 < x * y'
Definition. We define SNo_recipauxset to be λY x X g ⇒ \/_ yY, {(1 + (x' + - x) * y) * g x'|x'X} of type setsetset(setset)set.
Axiom. (SNo_recipauxset_I) We take the following as an axiom:
∀Y x X, ∀g : setset, yY, x'X, (1 + (x' + - x) * y) * g x' SNo_recipauxset Y x X g
Axiom. (SNo_recipauxset_E) We take the following as an axiom:
∀Y x X, ∀g : setset, zSNo_recipauxset Y x X g, ∀p : prop, (yY, x'X, z = (1 + (x' + - x) * y) * g x'p)p
Axiom. (SNo_recipauxset_ext) We take the following as an axiom:
∀Y x X, ∀g h : setset, (x'X, g x' = h x')SNo_recipauxset Y x X g = SNo_recipauxset Y x X h
Definition. We define SNo_recipaux to be λx g ⇒ nat_primrec ({0},0) (λk p ⇒ (p 0 :\/: SNo_recipauxset (p 0) x (SNoR x) g :\/: SNo_recipauxset (p 1) x (SNoL_pos x) g,p 1 :\/: SNo_recipauxset (p 0) x (SNoL_pos x) g :\/: SNo_recipauxset (p 1) x (SNoR x) g)) of type set(setset)setset.
Axiom. (SNo_recipaux_0) We take the following as an axiom:
∀x, ∀g : setset, SNo_recipaux x g 0 = ({0},0)
Axiom. (SNo_recipaux_S) We take the following as an axiom:
∀x, ∀g : setset, ∀n, nat_p nSNo_recipaux x g (ordsucc n) = (SNo_recipaux x g n 0 :\/: SNo_recipauxset (SNo_recipaux x g n 0) x (SNoR x) g :\/: SNo_recipauxset (SNo_recipaux x g n 1) x (SNoL_pos x) g,SNo_recipaux x g n 1 :\/: SNo_recipauxset (SNo_recipaux x g n 0) x (SNoL_pos x) g :\/: SNo_recipauxset (SNo_recipaux x g n 1) x (SNoR x) g)
Axiom. (SNo_recipaux_lem1) We take the following as an axiom:
∀x, SNo x0 < x∀g : setset, (x'SNoS_ (SNoLev x), 0 < x'SNo (g x') /\ x' * g x' = 1)∀k, nat_p k(ySNo_recipaux x g k 0, SNo y /\ x * y < 1) /\ (ySNo_recipaux x g k 1, SNo y /\ 1 < x * y)
Axiom. (SNo_recipaux_lem2) We take the following as an axiom:
∀x, SNo x0 < x∀g : setset, (x'SNoS_ (SNoLev x), 0 < x'SNo (g x') /\ x' * g x' = 1)SNoCutP (\/_ komega, SNo_recipaux x g k 0) (\/_ komega, SNo_recipaux x g k 1)
Axiom. (SNo_recipaux_ext) We take the following as an axiom:
∀x, SNo x∀g h : setset, (x'SNoS_ (SNoLev x), g x' = h x')∀k, nat_p kSNo_recipaux x g k = SNo_recipaux x h k
Beginning of Section recip_SNo_pos
Let G : set(setset)setλx g ⇒ SNoCut (\/_ komega, SNo_recipaux x g k 0) (\/_ komega, SNo_recipaux x g k 1)
Definition. We define recip_SNo_pos to be SNo_rec_i G of type setset.
Axiom. (recip_SNo_pos_eq) We take the following as an axiom:
∀x, SNo xrecip_SNo_pos x = G x recip_SNo_pos
Axiom. (recip_SNo_pos_prop1) We take the following as an axiom:
∀x, SNo x0 < xSNo (recip_SNo_pos x) /\ x * recip_SNo_pos x = 1
Axiom. (SNo_recip_SNo_pos) We take the following as an axiom:
∀x, SNo x0 < xSNo (recip_SNo_pos x)
Axiom. (recip_SNo_pos_invR) We take the following as an axiom:
∀x, SNo x0 < xx * recip_SNo_pos x = 1
Axiom. (recip_SNo_pos_1) We take the following as an axiom:
Axiom. (recip_SNo_pos_is_pos) We take the following as an axiom:
∀x, SNo x0 < x0 < recip_SNo_pos x
Axiom. (recip_SNo_pos_invol) We take the following as an axiom:
∀x, SNo x0 < xrecip_SNo_pos (recip_SNo_pos x) = x
Axiom. (recip_SNo_pos_eps_) We take the following as an axiom:
∀n, nat_p nrecip_SNo_pos (eps_ n) = 2 ^ n
Axiom. (recip_SNo_pos_pow_2) We take the following as an axiom:
∀n, nat_p nrecip_SNo_pos (2 ^ n) = eps_ n
Axiom. (recip_SNo_pos_2) We take the following as an axiom:
End of Section recip_SNo_pos
Definition. We define recip_SNo to be λx ⇒ if 0 < x then recip_SNo_pos x else if x < 0 then - recip_SNo_pos (- x) else 0 of type setset.
Axiom. (recip_SNo_poscase) We take the following as an axiom:
∀x, 0 < xrecip_SNo x = recip_SNo_pos x
Axiom. (recip_SNo_negcase) We take the following as an axiom:
∀x, SNo xx < 0recip_SNo x = - recip_SNo_pos (- x)
Axiom. (recip_SNo_0) We take the following as an axiom:
Axiom. (recip_SNo_1) We take the following as an axiom:
Axiom. (SNo_recip_SNo) We take the following as an axiom:
∀x, SNo xSNo (recip_SNo x)
Axiom. (recip_SNo_invR) We take the following as an axiom:
∀x, SNo xx <> 0x * recip_SNo x = 1
Axiom. (recip_SNo_invL) We take the following as an axiom:
∀x, SNo xx <> 0recip_SNo x * x = 1
Axiom. (recip_SNo_eps_) We take the following as an axiom:
∀n, nat_p nrecip_SNo (eps_ n) = 2 ^ n
Axiom. (recip_SNo_pow_2) We take the following as an axiom:
∀n, nat_p nrecip_SNo (2 ^ n) = eps_ n
Axiom. (recip_SNo_2) We take the following as an axiom:
Axiom. (recip_SNo_invol) We take the following as an axiom:
∀x, SNo xrecip_SNo (recip_SNo x) = x
Axiom. (recip_SNo_of_pos_is_pos) We take the following as an axiom:
∀x, SNo x0 < x0 < recip_SNo x
Axiom. (recip_SNo_neg') We take the following as an axiom:
∀x, SNo xx < 0recip_SNo x < 0
Definition. We define div_SNo to be λx y ⇒ x * recip_SNo y of type setsetset.
Notation. We use :/: as an infix operator with priority 353 and no associativity corresponding to applying term div_SNo.
Axiom. (SNo_div_SNo) We take the following as an axiom:
∀x y, SNo xSNo ySNo (x :/: y)
Axiom. (div_SNo_0_num) We take the following as an axiom:
∀x, SNo x0 :/: x = 0
Axiom. (div_SNo_0_denum) We take the following as an axiom:
∀x, SNo xx :/: 0 = 0
Axiom. (mul_div_SNo_invL) We take the following as an axiom:
∀x y, SNo xSNo yy <> 0(x :/: y) * y = x
Axiom. (mul_div_SNo_invR) We take the following as an axiom:
∀x y, SNo xSNo yy <> 0y * (x :/: y) = x
Axiom. (mul_div_SNo_R) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(x :/: y) * z = (x * z) :/: y
Axiom. (mul_div_SNo_L) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zz * (x :/: y) = (z * x) :/: y
Axiom. (div_mul_SNo_invL) We take the following as an axiom:
∀x y, SNo xSNo yy <> 0(x * y) :/: y = x
Axiom. (div_div_SNo) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z(x :/: y) :/: z = x :/: (y * z)
Axiom. (mul_div_SNo_both) We take the following as an axiom:
∀x y z w, SNo xSNo ySNo zSNo w(x :/: y) * (z :/: w) = (x * z) :/: (y * w)
Axiom. (recip_SNo_pos_pos) We take the following as an axiom:
∀x, SNo x0 < x0 < recip_SNo_pos x
Axiom. (recip_SNo_of_neg_is_neg) We take the following as an axiom:
∀x, SNo xx < 0recip_SNo x < 0
Axiom. (div_SNo_pos_pos) We take the following as an axiom:
∀x y, SNo xSNo y0 < x0 < y0 < x :/: y
Axiom. (div_SNo_neg_neg) We take the following as an axiom:
∀x y, SNo xSNo yx < 0y < 00 < x :/: y
Axiom. (div_SNo_pos_neg) We take the following as an axiom:
∀x y, SNo xSNo y0 < xy < 0x :/: y < 0
Axiom. (div_SNo_neg_pos) We take the following as an axiom:
∀x y, SNo xSNo yx < 00 < yx :/: y < 0
Axiom. (div_SNo_pos_LtL) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z0 < yx < z * yx :/: y < z
Axiom. (div_SNo_pos_LtR) We take the following as an axiom:
∀x y z, SNo xSNo ySNo z0 < yz * y < xz < x :/: y
Axiom. (div_SNo_pos_LtL') We take the following as an axiom:
∀x y z, SNo xSNo ySNo z0 < yx :/: y < zx < z * y
Axiom. (div_SNo_pos_LtR') We take the following as an axiom:
∀x y z, SNo xSNo ySNo z0 < yz < x :/: yz * y < x
Axiom. (mul_div_SNo_nonzero_eq) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zy <> 0x = y * zx :/: y = z
End of Section SurrealDiv
Beginning of Section SurrealSqrt
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Notation. We use :/: as an infix operator with priority 353 and no associativity corresponding to applying term div_SNo.
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 an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
Definition. We define SNoL_nonneg to be λx ⇒ {wSNoL x|0 <= w} of type setset.
Axiom. (SNoL_nonneg_0) We take the following as an axiom:
Axiom. (SNoL_nonneg_1) We take the following as an axiom:
Definition. We define SNo_sqrtauxset to be λY Z x ⇒ \/_ yY, {(x + y * z) :/: (y + z)|zZ, 0 < y + z} of type setsetsetset.
Axiom. (SNo_sqrtauxset_I) We take the following as an axiom:
∀Y Z x, yY, zZ, 0 < y + z(x + y * z) :/: (y + z) SNo_sqrtauxset Y Z x
Axiom. (SNo_sqrtauxset_E) We take the following as an axiom:
∀Y Z x, uSNo_sqrtauxset Y Z x, ∀p : prop, (yY, zZ, 0 < y + zu = (x + y * z) :/: (y + z)p)p
Axiom. (SNo_sqrtauxset_0) We take the following as an axiom:
∀Z x, SNo_sqrtauxset 0 Z x = 0
Axiom. (SNo_sqrtauxset_0') We take the following as an axiom:
∀Y x, SNo_sqrtauxset Y 0 x = 0
Definition. We define SNo_sqrtaux to be λx g ⇒ nat_primrec ({g w|wSNoL_nonneg x},{g z|zSNoR x}) (λk p ⇒ (p 0 :\/: SNo_sqrtauxset (p 0) (p 1) x,p 1 :\/: SNo_sqrtauxset (p 0) (p 0) x :\/: SNo_sqrtauxset (p 1) (p 1) x)) of type set(setset)setset.
Axiom. (SNo_sqrtaux_0) We take the following as an axiom:
∀x, ∀g : setset, SNo_sqrtaux x g 0 = ({g w|wSNoL_nonneg x},{g z|zSNoR x})
Axiom. (SNo_sqrtaux_S) We take the following as an axiom:
∀x, ∀g : setset, ∀n, nat_p nSNo_sqrtaux x g (ordsucc n) = (SNo_sqrtaux x g n 0 :\/: SNo_sqrtauxset (SNo_sqrtaux x g n 0) (SNo_sqrtaux x g n 1) x,SNo_sqrtaux x g n 1 :\/: SNo_sqrtauxset (SNo_sqrtaux x g n 0) (SNo_sqrtaux x g n 0) x :\/: SNo_sqrtauxset (SNo_sqrtaux x g n 1) (SNo_sqrtaux x g n 1) x)
Axiom. (SNo_sqrtaux_mon_lem) We take the following as an axiom:
∀x, ∀g : setset, ∀m, nat_p m∀n, nat_p nSNo_sqrtaux x g m 0 SNo_sqrtaux x g (add_nat m n) 0 /\ SNo_sqrtaux x g m 1 SNo_sqrtaux x g (add_nat m n) 1
Axiom. (SNo_sqrtaux_mon) We take the following as an axiom:
∀x, ∀g : setset, ∀m, nat_p m∀n, nat_p nm nSNo_sqrtaux x g m 0 SNo_sqrtaux x g n 0 /\ SNo_sqrtaux x g m 1 SNo_sqrtaux x g n 1
Axiom. (SNo_sqrtaux_ext) We take the following as an axiom:
∀x, SNo x∀g h : setset, (x'SNoS_ (SNoLev x), g x' = h x')∀k, nat_p kSNo_sqrtaux x g k = SNo_sqrtaux x h k
Beginning of Section sqrt_SNo_nonneg
Let G : set(setset)setλx g ⇒ SNoCut (\/_ komega, SNo_sqrtaux x g k 0) (\/_ komega, SNo_sqrtaux x g k 1)
Axiom. (sqrt_SNo_nonneg_eq) We take the following as an axiom:
Axiom. (sqrt_SNo_nonneg_prop1a) We take the following as an axiom:
Axiom. (sqrt_SNo_nonneg_prop1c) We take the following as an axiom:
∀x, SNo x0 <= xSNoCutP (\/_ komega, SNo_sqrtaux x sqrt_SNo_nonneg k 0) (\/_ komega, SNo_sqrtaux x sqrt_SNo_nonneg k 1)(z(\/_ komega, SNo_sqrtaux x sqrt_SNo_nonneg k 1), ∀p : prop, (SNo z0 <= zx < z * zp)p)0 <= G x sqrt_SNo_nonneg
Axiom. (sqrt_SNo_nonneg_prop1) We take the following as an axiom:
End of Section sqrt_SNo_nonneg
Axiom. (SNo_sqrtaux_0_1_prop) We take the following as an axiom:
∀x, SNo x0 <= x∀k, nat_p k(ySNo_sqrtaux x sqrt_SNo_nonneg k 0, SNo y /\ 0 <= y /\ y * y < x) /\ (ySNo_sqrtaux x sqrt_SNo_nonneg k 1, SNo y /\ 0 <= y /\ x < y * y)
Axiom. (SNo_sqrtaux_0_prop) We take the following as an axiom:
∀x, SNo x0 <= x∀k, nat_p kySNo_sqrtaux x sqrt_SNo_nonneg k 0, SNo y /\ 0 <= y /\ y * y < x
Axiom. (SNo_sqrtaux_1_prop) We take the following as an axiom:
∀x, SNo x0 <= x∀k, nat_p kySNo_sqrtaux x sqrt_SNo_nonneg k 1, SNo y /\ 0 <= y /\ x < y * y
Axiom. (SNo_sqrt_SNo_SNoCutP) We take the following as an axiom:
Axiom. (SNo_sqrt_SNo_nonneg) We take the following as an axiom:
∀x, SNo x0 <= xSNo (sqrt_SNo_nonneg x)
Axiom. (sqrt_SNo_nonneg_nonneg) We take the following as an axiom:
∀x, SNo x0 <= x0 <= sqrt_SNo_nonneg x
Axiom. (sqrt_SNo_nonneg_sqr) We take the following as an axiom:
∀x, SNo x0 <= xsqrt_SNo_nonneg x * sqrt_SNo_nonneg x = x
Axiom. (sqrt_SNo_nonneg_0) We take the following as an axiom:
Axiom. (sqrt_SNo_nonneg_1) We take the following as an axiom:
End of Section SurrealSqrt
Beginning of Section Reals
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Notation. We use :/: as an infix operator with priority 353 and no associativity corresponding to applying term div_SNo.
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 an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
Axiom. (SNoS_omega_drat_intvl) We take the following as an axiom:
Axiom. (SNoS_ordsucc_omega_bdd_above) We take the following as an axiom:
Axiom. (SNoS_ordsucc_omega_bdd_below) We take the following as an axiom:
Axiom. (SNoS_ordsucc_omega_bdd_drat_intvl) We take the following as an axiom:
Definition. We define real to be {xSNoS_ (ordsucc omega)|x <> omega /\ x <> - omega /\ (qSNoS_ omega, (komega, abs_SNo (q + - x) < eps_ k)q = x)} of type set.
Definition. We define rational to be {xreal|exists mint, exists nomega :\: {0}, x = m :/: n} of type set.
Axiom. (real_I) We take the following as an axiom:
Axiom. (real_E) We take the following as an axiom:
xreal, ∀p : prop, (SNo xSNoLev x ordsucc omegax SNoS_ (ordsucc omega)- omega < xx < omega(qSNoS_ omega, (komega, abs_SNo (q + - x) < eps_ k)q = x)(komega, exists qSNoS_ omega, q < x /\ x < q + eps_ k)p)p
Axiom. (real_SNo) We take the following as an axiom:
Axiom. (real_SNoS_omega_prop) We take the following as an axiom:
Axiom. (SNoS_omega_real) We take the following as an axiom:
Axiom. (real_0) We take the following as an axiom:
Axiom. (real_1) We take the following as an axiom:
Axiom. (SNoLev_In_real_SNoS_omega) We take the following as an axiom:
Axiom. (real_SNoCut_SNoS_omega) We take the following as an axiom:
L RSNoS_ omega, SNoCutP L RL <> 0R <> 0(wL, exists w'L, w < w')(zR, exists z'R, z' < z)SNoCut L R real
Axiom. (real_SNoCut) We take the following as an axiom:
L Rreal, SNoCutP L RL <> 0R <> 0(wL, exists w'L, w < w')(zR, exists z'R, z' < z)SNoCut L R real
Axiom. (minus_SNo_prereal_1) We take the following as an axiom:
∀x, SNo x(qSNoS_ omega, (komega, abs_SNo (q + - x) < eps_ k)q = x)(qSNoS_ omega, (komega, abs_SNo (q + - - x) < eps_ k)q = - x)
Axiom. (minus_SNo_prereal_2) We take the following as an axiom:
Axiom. (SNo_prereal_incr_lower_pos) We take the following as an axiom:
∀x, SNo x0 < x(qSNoS_ omega, (komega, abs_SNo (q + - x) < eps_ k)q = x)(komega, exists qSNoS_ omega, q < x /\ x < q + eps_ k)komega, ∀p : prop, (qSNoS_ omega, 0 < qq < xx < q + eps_ kp)p
Axiom. (real_minus_SNo) We take the following as an axiom:
Axiom. (SNo_prereal_incr_lower_approx) We take the following as an axiom:
Axiom. (SNo_prereal_decr_upper_approx) We take the following as an axiom:
Axiom. (SNoCutP_SNoCut_lim) We take the following as an axiom:
∀lambda, ordinal lambda(alphalambda, ordsucc alpha lambda)L RSNoS_ lambda, SNoCutP L RSNoLev (SNoCut L R) ordsucc lambda
Axiom. (SNoCutP_SNoCut_omega) We take the following as an axiom:
Axiom. (SNo_approx_real_lem) We take the following as an axiom:
Axiom. (SNo_approx_real) We take the following as an axiom:
∀x, SNo xf gSNoS_ omega :^: omega, (nomega, f n < x)(nomega, x < f n + eps_ n)(nomega, in, f i < f n)(nomega, x < g n)(nomega, in, g n < g i)x = SNoCut {f n|nomega} {g n|nomega}x real
Axiom. (SNo_approx_real_rep) We take the following as an axiom:
xreal, ∀p : prop, (f gSNoS_ omega :^: omega, (nomega, f n < x)(nomega, x < f n + eps_ n)(nomega, in, f i < f n)(nomega, g n + - eps_ n < x)(nomega, x < g n)(nomega, in, g n < g i)SNoCutP {f n|nomega} {g n|nomega}x = SNoCut {f n|nomega} {g n|nomega}p)p
Axiom. (real_add_SNo) We take the following as an axiom:
Axiom. (SNoS_ordsucc_omega_bdd_eps_pos) We take the following as an axiom:
Axiom. (real_mul_SNo_pos) We take the following as an axiom:
x yreal, 0 < x0 < yx * y real
Axiom. (real_mul_SNo) We take the following as an axiom:
Axiom. (abs_SNo_intvl_bd) We take the following as an axiom:
∀x y z, SNo xSNo ySNo zx <= yy < x + zabs_SNo (y + - x) < z
Axiom. (nonneg_real_nat_interval) We take the following as an axiom:
Axiom. (pos_real_left_approx_double) We take the following as an axiom:
Axiom. (real_recip_SNo_lem1) We take the following as an axiom:
Axiom. (real_recip_SNo_pos) We take the following as an axiom:
Axiom. (real_recip_SNo) We take the following as an axiom:
Axiom. (real_div_SNo) We take the following as an axiom:
Axiom. (sqrt_SNo_nonneg_0inL0) We take the following as an axiom:
∀x, SNo x0 <= x0 SNoLev x0 SNo_sqrtaux x sqrt_SNo_nonneg 0 0
Axiom. (sqrt_SNo_nonneg_Lnonempty) We take the following as an axiom:
∀x, SNo x0 <= x0 SNoLev x(\/_ komega, SNo_sqrtaux x sqrt_SNo_nonneg k 0) <> 0
Axiom. (sqrt_SNo_nonneg_Rnonempty) We take the following as an axiom:
∀x, SNo x0 <= x1 SNoLev x(\/_ komega, SNo_sqrtaux x sqrt_SNo_nonneg k 1) <> 0
Axiom. (SNo_sqrtauxset_real) We take the following as an axiom:
∀Y Z x, Y realZ realx realSNo_sqrtauxset Y Z x real
Axiom. (SNo_sqrtauxset_real_nonneg) We take the following as an axiom:
∀Y Z x, Y {wreal|0 <= w}Z {zreal|0 <= z}x real0 <= xSNo_sqrtauxset Y Z x {wreal|0 <= w}
Axiom. (sqrt_SNo_nonneg_SNoS_omega) We take the following as an axiom:
Axiom. (sqrt_SNo_nonneg_real) We take the following as an axiom:
Axiom. (real_Archimedean) We take the following as an axiom:
x yreal, 0 < x0 <= yexists nomega, y <= n * x
Axiom. (real_complete1) We take the following as an axiom:
Axiom. (real_complete2) We take the following as an axiom:
a breal :^: omega, (nomega, a n <= b n /\ a n <= a (n + 1) /\ b (n + 1) <= b n)exists xreal, nomega, a n <= x /\ x <= b n
End of Section Reals
Axiom. (mul_nat_1R) We take the following as an axiom:
∀x0, mul_nat x0 1 = x0
Axiom. (mul_nat_asso) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1(∀x2, nat_p x2mul_nat (mul_nat x0 x1) x2 = mul_nat x0 (mul_nat x1 x2))))
Axiom. (mul_nat_com) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1mul_nat x0 x1 = mul_nat x1 x0))
Axiom. (mul_nat_SL) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1mul_nat (ordsucc x0) x1 = add_nat (mul_nat x0 x1) x1))
Axiom. (eps_1_half_eq3) We take the following as an axiom:
mul_SNo (eps_ 1) 2 = 1
Axiom. (double_nat_cancel) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1mul_nat 2 x0 = mul_nat 2 x1x0 = x1))
Axiom. (add_nat_Subq_L) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1x0 add_nat x0 x1))
Axiom. (square_nat_Subq) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1x0 x1mul_nat x0 x0 mul_nat x1 x1))
Axiom. (ordsucc_in_double_nat_ordsucc) We take the following as an axiom:
(∀x0, nat_p x0ordsucc x0 mul_nat 2 (ordsucc x0))
Axiom. (double_nat_Subq_0) We take the following as an axiom:
(∀x0, nat_p x0mul_nat 2 x0 x0x0 = 0)
Definition. We define even_nat to be (λx0 : setand (x0 omega) (∀x1 : prop, (∀x2, and (x2 omega) (x0 = mul_nat 2 x2)x1)x1)) of type setprop.
Definition. We define odd_nat to be (λx0 : setand (x0 omega) (∀x1, x1 omegax0 = mul_nat 2 x1(∀x2 : prop, x2))) of type setprop.
Axiom. (even_nat_0) We take the following as an axiom:
even_nat 0
Axiom. (even_nat_not_odd_nat) We take the following as an axiom:
(∀x0, even_nat x0not (odd_nat x0))
Axiom. (odd_nat_1) We take the following as an axiom:
odd_nat 1
Axiom. (even_nat_double) We take the following as an axiom:
(∀x0, nat_p x0even_nat (mul_nat 2 x0))
Axiom. (even_nat_S_S) We take the following as an axiom:
(∀x0, even_nat x0even_nat (ordsucc (ordsucc x0)))
Axiom. (even_nat_S_S_inv) We take the following as an axiom:
(∀x0, nat_p x0even_nat (ordsucc (ordsucc x0))even_nat x0)
Axiom. (even_nat_xor_S) We take the following as an axiom:
(∀x0, nat_p x0exactly1of2 (even_nat x0) (even_nat (ordsucc x0)))
Axiom. (even_nat_or_odd_nat) We take the following as an axiom:
(∀x0, nat_p x0or (even_nat x0) (odd_nat x0))
Axiom. (not_odd_nat_0) We take the following as an axiom:
not (odd_nat 0)
Axiom. (even_nat_odd_nat_S) We take the following as an axiom:
(∀x0, even_nat x0odd_nat (ordsucc x0))
Axiom. (odd_nat_even_nat_S) We take the following as an axiom:
(∀x0, odd_nat x0even_nat (ordsucc x0))
Axiom. (odd_nat_xor_odd_sum) We take the following as an axiom:
(∀x0, odd_nat x0(∀x1, nat_p x1exactly1of2 (odd_nat x1) (odd_nat (add_nat x0 x1))))
Axiom. (odd_nat_iff_odd_mul_nat) We take the following as an axiom:
(∀x0, odd_nat x0(∀x1, nat_p x1iff (odd_nat x1) (odd_nat (mul_nat x0 x1))))
Axiom. (odd_nat_mul_nat) We take the following as an axiom:
(∀x0 x1, odd_nat x0odd_nat x1odd_nat (mul_nat x0 x1))
Axiom. (add_nat_0_inv) We take the following as an axiom:
(∀x0, x0 omega(∀x1, x1 omegaadd_nat x0 x1 = 0and (x0 = 0) (x1 = 0)))
Axiom. (mul_nat_0_inv) We take the following as an axiom:
(∀x0, x0 omega(∀x1, x1 omegamul_nat x0 x1 = 0or (x0 = 0) (x1 = 0)))
Axiom. (form100_1_v1_lem) We take the following as an axiom:
(∀x0, nat_p x0(∀x1, nat_p x1mul_nat x0 x0 = mul_nat 2 (mul_nat x1 x1)x1 = 0))
Axiom. (form100_1_v1) We take the following as an axiom:
(∀x0, x0 setminus omega 1(∀x1, x1 setminus omega 1mul_nat x0 x0 = mul_nat 2 (mul_nat x1 x1)(∀x2 : prop, x2)))
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Notation. We use :/: as an infix operator with priority 353 and no associativity corresponding to applying term div_SNo.
Axiom. (sqrt_2_irrational) We take the following as an axiom:
sqrt_SNo_nonneg 2 real :\: rational
Beginning of Section Alg
Variable extension_tag : set
Let ctag : setsetλalpha ⇒ SetAdjoin alpha extension_tag
Notation. We use '' as a postfix operator with priority 100 corresponding to applying term ctag.
Definition. We define pair_tag to be λx y ⇒ x :\/: {u ''|uy} of type setsetset.
Variable F : setprop
Hypothesis extension_tag_fresh : ∀x, F xux, extension_tag /:e u
Axiom. (ctagged_notin_F) We take the following as an axiom:
∀x y, F x(y '') /:e x
Axiom. (ctagged_eqE_Subq) We take the following as an axiom:
∀x y, F xux, ∀v, u '' = v ''u v
Axiom. (ctagged_eqE_eq) We take the following as an axiom:
∀x y, F xF yux, vy, u '' = v ''u = v
Axiom. (pair_tag_prop_1_Subq) We take the following as an axiom:
∀x1 y1 x2 y2, F x1pair_tag x1 y1 = pair_tag x2 y2x1 x2
Axiom. (pair_tag_prop_1) We take the following as an axiom:
∀x1 y1 x2 y2, F x1F x2pair_tag x1 y1 = pair_tag x2 y2x1 = x2
Axiom. (pair_tag_prop_2_Subq) We take the following as an axiom:
∀x1 y1 x2 y2, F y1F x2F y2pair_tag x1 y1 = pair_tag x2 y2y1 y2
Axiom. (pair_tag_prop_2) We take the following as an axiom:
∀x1 y1 x2 y2, F x1F y1F x2F y2pair_tag x1 y1 = pair_tag x2 y2y1 = y2
Axiom. (pair_tag_0) We take the following as an axiom:
∀x, pair_tag x 0 = x
Definition. We define CD_carr to be λz ⇒ exists x, F x /\ exists y, F y /\ z = pair_tag x y of type setprop.
Axiom. (CD_carr_I) We take the following as an axiom:
∀x y, F xF yCD_carr (pair_tag x y)
Axiom. (CD_carr_E) We take the following as an axiom:
∀z, CD_carr z∀p : setprop, (∀x y, F xF yz = pair_tag x yp (pair_tag x y))p z
Axiom. (CD_carr_0ext) We take the following as an axiom:
F 0∀x, F xCD_carr x
Definition. We define CD_proj0 to be λz ⇒ Eps_i (λx ⇒ F x /\ exists y, F y /\ z = pair_tag x y) of type setset.
Definition. We define CD_proj1 to be λz ⇒ Eps_i (λy ⇒ F y /\ z = pair_tag (CD_proj0 z) y) of type setset.
Let proj0 ≝ CD_proj0
Let proj1 ≝ CD_proj1
Let pa : setsetsetpair_tag
Axiom. (CD_proj0_1) We take the following as an axiom:
∀z, CD_carr zF (proj0 z) /\ exists y, F y /\ z = pa (proj0 z) y
Axiom. (CD_proj0_2) We take the following as an axiom:
∀x y, F xF yproj0 (pa x y) = x
Axiom. (CD_proj1_1) We take the following as an axiom:
∀z, CD_carr zF (proj1 z) /\ z = pa (proj0 z) (proj1 z)
Axiom. (CD_proj1_2) We take the following as an axiom:
∀x y, F xF yproj1 (pa x y) = y
Axiom. (CD_proj0R) We take the following as an axiom:
∀z, CD_carr zF (proj0 z)
Axiom. (CD_proj1R) We take the following as an axiom:
∀z, CD_carr zF (proj1 z)
Axiom. (CD_proj0proj1_eta) We take the following as an axiom:
∀z, CD_carr zz = pa (proj0 z) (proj1 z)
Axiom. (CD_proj0proj1_split) We take the following as an axiom:
∀z w, CD_carr zCD_carr wproj0 z = proj0 wproj1 z = proj1 wz = w
Axiom. (CD_proj0_F) We take the following as an axiom:
F 0∀x, F xCD_proj0 x = x
Axiom. (CD_proj1_F) We take the following as an axiom:
F 0∀x, F xCD_proj1 x = 0
Beginning of Section CD_minus_conj
Variable minus : setset
Definition. We define CD_minus to be λz ⇒ pa (- proj0 z) (- proj1 z) of type setset.
Variable conj : setset
Definition. We define CD_conj to be λz ⇒ pa (conj (proj0 z)) (- proj1 z) of type setset.
End of Section CD_minus_conj
Beginning of Section CD_add
Variable add : setsetset
Definition. We define CD_add to be λz w ⇒ pa (proj0 z + proj0 w) (proj1 z + proj1 w) of type setsetset.
End of Section CD_add
Beginning of Section CD_mul
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Definition. We define CD_mul to be λz w ⇒ pa (proj0 z * proj0 w + - conj (proj1 w) * proj1 z) (proj1 w * proj0 z + proj1 z * conj (proj0 w)) of type setsetset.
Definition. We define CD_exp_nat to be λz m ⇒ nat_primrec 1 (λ_ r ⇒ z :*: r) m of type setsetset.
End of Section CD_mul
Beginning of Section CD_minus_conj_clos
Variable minus : setset
Hypothesis F_minus : ∀x, F xF (- x)
Axiom. (CD_minus_CD) We take the following as an axiom:
∀z, CD_carr zCD_carr (:-: z)
Axiom. (CD_minus_proj0) We take the following as an axiom:
∀z, CD_carr zproj0 (:-: z) = - proj0 z
Axiom. (CD_minus_proj1) We take the following as an axiom:
∀z, CD_carr zproj1 (:-: z) = - proj1 z
Variable conj : setset
Hypothesis F_conj : ∀x, F xF (conj x)
Axiom. (CD_conj_CD) We take the following as an axiom:
∀z, CD_carr zCD_carr (z ')
Axiom. (CD_conj_proj0) We take the following as an axiom:
∀z, CD_carr zproj0 (z ') = conj (proj0 z)
Axiom. (CD_conj_proj1) We take the following as an axiom:
∀z, CD_carr zproj1 (z ') = - proj1 z
End of Section CD_minus_conj_clos
Beginning of Section CD_add_clos
Variable add : setsetset
Hypothesis F_add : ∀x y, F xF yF (x + y)
Axiom. (CD_add_CD) We take the following as an axiom:
∀z w, CD_carr zCD_carr wCD_carr (z :+: w)
Axiom. (CD_add_proj0) We take the following as an axiom:
∀z w, CD_carr zCD_carr wproj0 (z :+: w) = proj0 z + proj0 w
Axiom. (CD_add_proj1) We take the following as an axiom:
∀z w, CD_carr zCD_carr wproj1 (z :+: w) = proj1 z + proj1 w
End of Section CD_add_clos
Beginning of Section CD_mul_clos
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Axiom. (CD_mul_CD) We take the following as an axiom:
∀z w, CD_carr zCD_carr wCD_carr (z :*: w)
Axiom. (CD_mul_proj0) We take the following as an axiom:
∀z w, CD_carr zCD_carr wproj0 (z :*: w) = proj0 z * proj0 w + - conj (proj1 w) * proj1 z
Axiom. (CD_mul_proj1) We take the following as an axiom:
∀z w, CD_carr zCD_carr wproj1 (z :*: w) = proj1 w * proj0 z + proj1 z * conj (proj0 w)
End of Section CD_mul_clos
Beginning of Section CD_minus_conj_F
Variable minus : setset
Hypothesis F_0 : F 0
Hypothesis F_minus_0 : - 0 = 0
Axiom. (CD_minus_F_eq) We take the following as an axiom:
∀x, F x:-: x = - x
Variable conj : setset
Axiom. (CD_conj_F_eq) We take the following as an axiom:
∀x, F xx ' = conj x
End of Section CD_minus_conj_F
Beginning of Section CD_add_F
Variable add : setsetset
Hypothesis F_0 : F 0
Hypothesis F_add_0_0 : 0 + 0 = 0
Axiom. (CD_add_F_eq) We take the following as an axiom:
∀x y, F xF yx :+: y = x + y
End of Section CD_add_F
Beginning of Section CD_mul_F
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_0 : F 0
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_minus_0 : - 0 = 0
Hypothesis F_add_0R : ∀x, F xx + 0 = x
Hypothesis F_mul_0L : ∀x, F x0 * x = 0
Hypothesis F_mul_0R : ∀x, F xx * 0 = 0
Axiom. (CD_mul_F_eq) We take the following as an axiom:
∀x y, F xF yx :*: y = x * y
End of Section CD_mul_F
Beginning of Section CD_minus_invol
Variable minus : setset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_minus_invol : ∀x, F x- - x = x
Axiom. (CD_minus_invol) We take the following as an axiom:
∀z, CD_carr z:-: :-: z = z
End of Section CD_minus_invol
Beginning of Section CD_conj_invol
Variable minus : setset
Variable conj : setset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_minus_invol : ∀x, F x- - x = x
Hypothesis F_conj_invol : ∀x, F xconj (conj x) = x
Axiom. (CD_conj_invol) We take the following as an axiom:
∀z, CD_carr zz ' ' = z
End of Section CD_conj_invol
Beginning of Section CD_conj_minus
Variable minus : setset
Variable conj : setset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_conj_minus : ∀x, F xconj (- x) = - conj x
Axiom. (CD_conj_minus) We take the following as an axiom:
∀z, CD_carr z(:-: z) ' = :-: (z ')
End of Section CD_conj_minus
Beginning of Section CD_minus_add
Variable minus : setset
Variable add : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Axiom. (CD_minus_add) We take the following as an axiom:
∀z w, CD_carr zCD_carr w:-: (z :+: w) = :-: z :+: :-: w
End of Section CD_minus_add
Beginning of Section CD_conj_add
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Hypothesis F_conj_add : ∀x y, F xF yconj (x + y) = conj x + conj y
Axiom. (CD_conj_add) We take the following as an axiom:
∀z w, CD_carr zCD_carr w(z :+: w) ' = z ' :+: w '
End of Section CD_conj_add
Beginning of Section CD_add_com
Variable add : setsetset
Hypothesis F_add_com : ∀x y, F xF yx + y = y + x
Axiom. (CD_add_com) We take the following as an axiom:
∀z w, CD_carr zCD_carr wz :+: w = w :+: z
End of Section CD_add_com
Beginning of Section CD_add_assoc
Variable add : setsetset
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_add_assoc : ∀x y z, F xF yF z(x + y) + z = x + (y + z)
Axiom. (CD_add_assoc) We take the following as an axiom:
∀z w u, CD_carr zCD_carr wCD_carr u(z :+: w) :+: u = z :+: (w :+: u)
End of Section CD_add_assoc
Beginning of Section CD_add_0R
Variable add : setsetset
Hypothesis F_0 : F 0
Hypothesis F_add_0R : ∀x, F xx + 0 = x
Axiom. (CD_add_0R) We take the following as an axiom:
∀z, CD_carr zz :+: 0 = z
End of Section CD_add_0R
Beginning of Section CD_add_0L
Variable add : setsetset
Hypothesis F_0 : F 0
Hypothesis F_add_0L : ∀x, F x0 + x = x
Axiom. (CD_add_0L) We take the following as an axiom:
∀z, CD_carr z0 :+: z = z
End of Section CD_add_0L
Beginning of Section CD_add_minus_linv
Variable minus : setset
Variable add : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_add_minus_linv : ∀x, F x- x + x = 0
Axiom. (CD_add_minus_linv) We take the following as an axiom:
∀z, CD_carr z:-: z :+: z = 0
End of Section CD_add_minus_linv
Beginning of Section CD_add_minus_rinv
Variable minus : setset
Variable add : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_add_minus_rinv : ∀x, F xx + - x = 0
Axiom. (CD_add_minus_rinv) We take the following as an axiom:
∀z, CD_carr zz :+: :-: z = 0
End of Section CD_add_minus_rinv
Beginning of Section CD_mul_0R
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_0 : F 0
Hypothesis F_minus_0 : - 0 = 0
Hypothesis F_conj_0 : conj 0 = 0
Hypothesis F_add_0_0 : 0 + 0 = 0
Hypothesis F_mul_0L : ∀x, F x0 * x = 0
Hypothesis F_mul_0R : ∀x, F xx * 0 = 0
Axiom. (CD_mul_0R) We take the following as an axiom:
∀z, CD_carr zz :*: 0 = 0
End of Section CD_mul_0R
Beginning of Section CD_mul_0L
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_0 : F 0
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_minus_0 : - 0 = 0
Hypothesis F_add_0_0 : 0 + 0 = 0
Hypothesis F_mul_0L : ∀x, F x0 * x = 0
Hypothesis F_mul_0R : ∀x, F xx * 0 = 0
Axiom. (CD_mul_0L) We take the following as an axiom:
∀z, CD_carr z0 :*: z = 0
End of Section CD_mul_0L
Beginning of Section CD_mul_1R
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_0 : F 0
Hypothesis F_1 : F 1
Hypothesis F_minus_0 : - 0 = 0
Hypothesis F_conj_0 : conj 0 = 0
Hypothesis F_conj_1 : conj 1 = 1
Hypothesis F_add_0L : ∀x, F x0 + x = x
Hypothesis F_add_0R : ∀x, F xx + 0 = x
Hypothesis F_mul_0L : ∀x, F x0 * x = 0
Hypothesis F_mul_1R : ∀x, F xx * 1 = x
Axiom. (CD_mul_1R) We take the following as an axiom:
∀z, CD_carr zz :*: 1 = z
End of Section CD_mul_1R
Beginning of Section CD_mul_1L
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_0 : F 0
Hypothesis F_1 : F 1
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_minus_0 : - 0 = 0
Hypothesis F_add_0R : ∀x, F xx + 0 = x
Hypothesis F_mul_0L : ∀x, F x0 * x = 0
Hypothesis F_mul_0R : ∀x, F xx * 0 = 0
Hypothesis F_mul_1L : ∀x, F x1 * x = x
Hypothesis F_mul_1R : ∀x, F xx * 1 = x
Axiom. (CD_mul_1L) We take the following as an axiom:
∀z, CD_carr z1 :*: z = z
End of Section CD_mul_1L
Beginning of Section CD_conj_mul
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_minus_invol : ∀x, F x- - x = x
Hypothesis F_conj_invol : ∀x, F xconj (conj x) = x
Hypothesis F_conj_minus : ∀x, F xconj (- x) = - conj x
Hypothesis F_conj_add : ∀x y, F xF yconj (x + y) = conj x + conj y
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Hypothesis F_add_com : ∀x y, F xF yx + y = y + x
Hypothesis F_conj_mul : ∀x y, F xF yconj (x * y) = conj y * conj x
Hypothesis F_minus_mul_distrR : ∀x y, F xF yx * (- y) = - (x * y)
Hypothesis F_minus_mul_distrL : ∀x y, F xF y(- x) * y = - (x * y)
Axiom. (CD_conj_mul) We take the following as an axiom:
∀z w, CD_carr zCD_carr w(z :*: w) ' = w ' :*: z '
End of Section CD_conj_mul
Beginning of Section CD_add_mul_distrR
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Hypothesis F_add_assoc : ∀x y z, F xF yF z(x + y) + z = x + (y + z)
Hypothesis F_add_com : ∀x y, F xF yx + y = y + x
Hypothesis F_add_mul_distrL : ∀x y z, F xF yF zx * (y + z) = x * y + x * z
Hypothesis F_add_mul_distrR : ∀x y z, F xF yF z(x + y) * z = x * z + y * z
Axiom. (CD_add_mul_distrR) We take the following as an axiom:
∀z w u, CD_carr zCD_carr wCD_carr u(z :+: w) :*: u = z :*: u :+: w :*: u
End of Section CD_add_mul_distrR
Beginning of Section CD_add_mul_distrL
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Hypothesis F_conj_add : ∀x y, F xF yconj (x + y) = conj x + conj y
Hypothesis F_add_assoc : ∀x y z, F xF yF z(x + y) + z = x + (y + z)
Hypothesis F_add_com : ∀x y, F xF yx + y = y + x
Hypothesis F_add_mul_distrL : ∀x y z, F xF yF zx * (y + z) = x * y + x * z
Hypothesis F_add_mul_distrR : ∀x y z, F xF yF z(x + y) * z = x * z + y * z
Axiom. (CD_add_mul_distrL) We take the following as an axiom:
∀z w u, CD_carr zCD_carr wCD_carr uz :*: (w :+: u) = z :*: w :+: z :*: u
End of Section CD_add_mul_distrL
Beginning of Section CD_minus_mul_distrR
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_conj_minus : ∀x, F xconj (- x) = - conj x
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Hypothesis F_minus_mul_distrR : ∀x y, F xF yx * (- y) = - (x * y)
Hypothesis F_minus_mul_distrL : ∀x y, F xF y(- x) * y = - (x * y)
Axiom. (CD_minus_mul_distrR) We take the following as an axiom:
∀z w, CD_carr zCD_carr wz :*: (:-: w) = :-: z :*: w
End of Section CD_minus_mul_distrR
Beginning of Section CD_minus_mul_distrL
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_minus_add : ∀x y, F xF y- (x + y) = - x + - y
Hypothesis F_minus_mul_distrR : ∀x y, F xF yx * (- y) = - (x * y)
Hypothesis F_minus_mul_distrL : ∀x y, F xF y(- x) * y = - (x * y)
Axiom. (CD_minus_mul_distrL) We take the following as an axiom:
∀z w, CD_carr zCD_carr w(:-: z) :*: w = :-: z :*: w
End of Section CD_minus_mul_distrL
Beginning of Section CD_exp_nat
Variable minus : setset
Variable conj : setset
Variable add : setsetset
Variable mul : setsetset
Axiom. (CD_exp_nat_0) We take the following as an axiom:
∀z, z ^ 0 = 1
Axiom. (CD_exp_nat_S) We take the following as an axiom:
∀z n, nat_p nz ^ (ordsucc n) = z :*: z ^ n
Beginning of Section CD_exp_nat_1_2
Hypothesis F_0 : F 0
Hypothesis F_1 : F 1
Hypothesis F_minus_0 : - 0 = 0
Hypothesis F_conj_0 : conj 0 = 0
Hypothesis F_conj_1 : conj 1 = 1
Hypothesis F_add_0L : ∀x, F x0 + x = x
Hypothesis F_add_0R : ∀x, F xx + 0 = x
Hypothesis F_mul_0L : ∀x, F x0 * x = 0
Hypothesis F_mul_1R : ∀x, F xx * 1 = x
Axiom. (CD_exp_nat_1) We take the following as an axiom:
∀z, CD_carr zz ^ 1 = z
Axiom. (CD_exp_nat_2) We take the following as an axiom:
∀z, CD_carr zz ^ 2 = z :*: z
End of Section CD_exp_nat_1_2
Hypothesis F_minus : ∀x, F xF (- x)
Hypothesis F_conj : ∀x, F xF (conj x)
Hypothesis F_add : ∀x y, F xF yF (x + y)
Hypothesis F_mul : ∀x y, F xF yF (x * y)
Hypothesis F_0 : F 0
Hypothesis F_1 : F 1
Axiom. (CD_exp_nat_CD) We take the following as an axiom:
∀z, CD_carr z∀n, nat_p nCD_carr (z ^ n)
End of Section CD_exp_nat
End of Section Alg
Beginning of Section Tags
Variable tagn : set
Hypothesis tagn_nat : nat_p tagn
Hypothesis tagn_1 : 1 tagn
Theorem. (not_TransSet_Sing_tagn) The following is provable:
Proof:
Assume H1: TransSet {tagn}.
We prove the intermediate claim L1: 0 {tagn}.
Apply H1 tagn (SingI tagn) to the current goal.
We will prove 0 tagn.
An exact proof term for the current goal is nat_trans tagn tagn_nat 1 tagn_1 0 In_0_1.
Apply In_no2cycle 0 1 In_0_1 to the current goal.
We will prove 1 0.
rewrite the current goal using SingE tagn 0 L1 (from left to right) at position 2.
We will prove 1 tagn.
An exact proof term for the current goal is tagn_1.
Theorem. (not_ordinal_Sing_tagn) The following is provable:
Proof:
Assume H1.
Apply H1 to the current goal.
Assume H2 _.
An exact proof term for the current goal is not_TransSet_Sing_tagn H2.
End of Section Tags
Beginning of Section ExtendedSNo
Let tag : setsetλalpha ⇒ SetAdjoin alpha {1}
Notation. We use ' as a postfix operator with priority 100 corresponding to applying term tag.
Definition. We define ExtendedSNoElt_ to be λn x ⇒ vUnion x, ordinal v \/ exists in, v = {i} of type setsetprop.
Theorem. (extension_SNoElt_mon) The following is provable:
∀M N, M N∀x, ExtendedSNoElt_ M xExtendedSNoElt_ N x
Proof:
Let M and N be given.
Assume HMN.
Let x be given.
Assume Hx.
Let v be given.
Assume Hv.
Apply Hx v Hv to the current goal.
Assume H1: ordinal v.
We will prove ordinal v \/ exists iN, v = {i}.
Apply orIL to the current goal.
An exact proof term for the current goal is H1.
Assume H.
Apply H to the current goal.
Let i be given.
Assume H.
Apply H to the current goal.
Assume Hi: i M.
Assume H1: v = {i}.
We will prove ordinal v \/ exists iN, v = {i}.
Apply orIR to the current goal.
We use i to witness the existential quantifier.
Apply andI to the current goal.
We will prove i N.
An exact proof term for the current goal is HMN i Hi.
An exact proof term for the current goal is H1.
Theorem. (Sing_nat_fresh_extension) The following is provable:
∀n, nat_p n1 n∀x, ExtendedSNoElt_ n xux, {n} /:e u
Proof:
Let n be given.
Assume Hn.
Assume Hn1: 1 n.
Let x be given.
Assume Hx.
Let u be given.
Assume Hu.
Assume H1: {n} u.
We prove the intermediate claim L1: {n} Union x.
An exact proof term for the current goal is UnionI x {n} u H1 Hu.
Apply Hx {n} L1 to the current goal.
An exact proof term for the current goal is not_ordinal_Sing_tagn n Hn Hn1.
Assume H.
Apply H to the current goal.
Let i be given.
Assume H.
Apply H to the current goal.
Assume Hi: i n.
Assume H2: {n} = {i}.
Apply In_irref i to the current goal.
rewrite the current goal using Sing_inj n i H2 (from right to left) at position 2.
An exact proof term for the current goal is Hi.
Theorem. (SNo_ExtendedSNoElt_2) The following is provable:
∀x, SNo xExtendedSNoElt_ 2 x
Proof:
Let x be given.
Assume Hx.
Let v be given.
Assume Hv.
We will prove ordinal v \/ exists i2, v = {i}.
Apply UnionE_impred x v Hv to the current goal.
Let u be given.
Assume H1: v u.
Assume H2: u x.
Apply SNoLev_ x Hx to the current goal.
Assume H3: x SNoElts_ (SNoLev x).
Assume _.
Apply binunionE (SNoLev x) {beta '|betaSNoLev x} u (H3 u H2) to the current goal.
Assume H4: u SNoLev x.
We prove the intermediate claim Luo: ordinal u.
An exact proof term for the current goal is ordinal_Hered (SNoLev x) (SNoLev_ordinal x Hx) u H4.
We will prove ordinal v \/ exists i2, v = {i}.
Apply orIL to the current goal.
An exact proof term for the current goal is ordinal_Hered u Luo v H1.
Assume H4: u {beta '|betaSNoLev x}.
Apply ReplE_impred (SNoLev x) tag u H4 to the current goal.
Let beta be given.
Assume Hb: beta SNoLev x.
Assume Hub: u = beta '.
We prove the intermediate claim Lv: v beta '.
rewrite the current goal using Hub (from right to left).
An exact proof term for the current goal is H1.
Apply binunionE beta {{1}} v Lv to the current goal.
Assume H5: v beta.
We prove the intermediate claim Lbo: ordinal beta.
An exact proof term for the current goal is ordinal_Hered (SNoLev x) (SNoLev_ordinal x Hx) beta Hb.
We will prove ordinal v \/ exists i2, v = {i}.
Apply orIL to the current goal.
An exact proof term for the current goal is ordinal_Hered beta Lbo v H5.
Assume H5: v {{1}}.
We will prove ordinal v \/ exists i2, v = {i}.
Apply orIR to the current goal.
We use 1 to witness the existential quantifier.
Apply andI to the current goal.
An exact proof term for the current goal is In_1_2.
We will prove v = {1}.
An exact proof term for the current goal is SingE {1} v H5.
End of Section ExtendedSNo
Beginning of Section SurComplex
Let tag : setsetλalpha ⇒ SetAdjoin alpha {1}
Notation. We use ' as a postfix operator with priority 100 corresponding to applying term tag.
Theorem. (complex_tag_fresh) The following is provable:
∀x, SNo xux, {2} /:e u
Proof:
Let x be given.
Assume Hx.
Apply Sing_nat_fresh_extension 2 nat_2 In_1_2 x to the current goal.
We will prove ExtendedSNoElt_ 2 x.
An exact proof term for the current goal is SNo_ExtendedSNoElt_2 x Hx.
Definition. We define SNo_pair to be pair_tag {2} of type setsetset.
Theorem. (SNo_pair_0) The following is provable:
∀x, SNo_pair x 0 = x
Proof:
An exact proof term for the current goal is pair_tag_0 {2} SNo complex_tag_fresh.
Theorem. (SNo_pair_prop_1) The following is provable:
∀x1 y1 x2 y2, SNo x1SNo x2SNo_pair x1 y1 = SNo_pair x2 y2x1 = x2
Proof:
An exact proof term for the current goal is pair_tag_prop_1 {2} SNo complex_tag_fresh.
Theorem. (SNo_pair_prop_2) The following is provable:
∀x1 y1 x2 y2, SNo x1SNo y1SNo x2SNo y2SNo_pair x1 y1 = SNo_pair x2 y2y1 = y2
Proof:
An exact proof term for the current goal is pair_tag_prop_2 {2} SNo complex_tag_fresh.
Definition. We define CSNo to be CD_carr {2} SNo of type setprop.
Theorem. (CSNo_I) The following is provable:
∀x y, SNo xSNo yCSNo (SNo_pair x y)
Proof:
An exact proof term for the current goal is CD_carr_I {2} SNo complex_tag_fresh.
Theorem. (CSNo_E) The following is provable:
∀z, CSNo z∀p : setprop, (∀x y, SNo xSNo yz = SNo_pair x yp (SNo_pair x y))p z
Proof:
An exact proof term for the current goal is CD_carr_E {2} SNo complex_tag_fresh.
Theorem. (SNo_CSNo) The following is provable:
∀x, SNo xCSNo x
Proof:
An exact proof term for the current goal is CD_carr_0ext {2} SNo complex_tag_fresh SNo_0.
Theorem. (CSNo_0) The following is provable:
Proof:
Apply SNo_CSNo to the current goal.
An exact proof term for the current goal is SNo_0.
Theorem. (CSNo_1) The following is provable:
Proof:
Apply SNo_CSNo to the current goal.
An exact proof term for the current goal is SNo_1.
Let ctag : setsetλalpha ⇒ SetAdjoin alpha {2}
Notation. We use '' as a postfix operator with priority 100 corresponding to applying term ctag.
Theorem. (CSNo_ExtendedSNoElt_3) The following is provable:
∀z, CSNo zExtendedSNoElt_ 3 z
Proof:
Let z be given.
Assume Hz.
Apply CSNo_E z Hz to the current goal.
Let x and y be given.
Assume Hx: SNo x.
Assume Hy: SNo y.
Assume Hzxy: z = SNo_pair x y.
Let v be given.
Assume Hv: v Union (SNo_pair x y).
Apply UnionE_impred (SNo_pair x y) v Hv to the current goal.
Let u be given.
Assume H1: v u.
Assume H2: u SNo_pair x y.
Apply binunionE x {w ''|wy} u H2 to the current goal.
Assume H3: u x.
We prove the intermediate claim L1: v Union x.
An exact proof term for the current goal is UnionI x v u H1 H3.
We will prove ordinal v \/ exists i3, v = {i}.
An exact proof term for the current goal is extension_SNoElt_mon 2 3 (ordsuccI1 2) x (SNo_ExtendedSNoElt_2 x Hx) v L1.
Assume H3: u {w ''|wy}.
Apply ReplE_impred y ctag u H3 to the current goal.
Let w be given.
Assume Hw: w y.
Assume H4: u = w ''.
We prove the intermediate claim L2: v w ''.
rewrite the current goal using H4 (from right to left).
An exact proof term for the current goal is H1.
Apply binunionE w {{2}} v L2 to the current goal.
Assume H5: v w.
We prove the intermediate claim L3: v Union y.
An exact proof term for the current goal is UnionI y v w H5 Hw.
An exact proof term for the current goal is extension_SNoElt_mon 2 3 (ordsuccI1 2) y (SNo_ExtendedSNoElt_2 y Hy) v L3.
Assume H5: v {{2}}.
We will prove ordinal v \/ exists i3, v = {i}.
Apply orIR to the current goal.
We use 2 to witness the existential quantifier.
Apply andI to the current goal.
We will prove 2 3.
An exact proof term for the current goal is In_2_3.
We will prove v = {2}.
An exact proof term for the current goal is SingE {2} v H5.
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.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_SNo.
Notation. We use :/: as an infix operator with priority 353 and no associativity corresponding to applying term div_SNo.
Notation. We use ^ as an infix operator with priority 342 and which associates to the right corresponding to applying term exp_SNo_nat.
Definition. We define Complex_i to be SNo_pair 0 1 of type set.
Definition. We define CSNo_Re to be CD_proj0 {2} SNo of type setset.
Definition. We define CSNo_Im to be CD_proj1 {2} SNo of type setset.
Let i ≝ Complex_i
Let Re : setsetCSNo_Re
Let Im : setsetCSNo_Im
Let pa : setsetsetSNo_pair
Theorem. (CSNo_Re1) The following is provable:
∀z, CSNo zSNo (Re z) /\ exists y, SNo y /\ z = pa (Re z) y
Proof:
An exact proof term for the current goal is CD_proj0_1 {2} SNo complex_tag_fresh.
Theorem. (CSNo_Re2) The following is provable:
∀x y, SNo xSNo yRe (pa x y) = x
Proof:
An exact proof term for the current goal is CD_proj0_2 {2} SNo complex_tag_fresh.
Theorem. (CSNo_Im1) The following is provable:
∀z, CSNo zSNo (Im z) /\ z = pa (Re z) (Im z)
Proof:
An exact proof term for the current goal is CD_proj1_1 {2} SNo complex_tag_fresh.
Theorem. (CSNo_Im2) The following is provable:
∀x y, SNo xSNo yIm (pa x y) = y
Proof:
An exact proof term for the current goal is CD_proj1_2 {2} SNo complex_tag_fresh.
Theorem. (CSNo_ReR) The following is provable:
∀z, CSNo zSNo (Re z)
Proof:
An exact proof term for the current goal is CD_proj0R {2} SNo complex_tag_fresh.
Theorem. (CSNo_ImR) The following is provable:
∀z, CSNo zSNo (Im z)
Proof:
An exact proof term for the current goal is CD_proj1R {2} SNo complex_tag_fresh.
Theorem. (CSNo_ReIm) The following is provable:
∀z, CSNo zz = pa (Re z) (Im z)
Proof:
An exact proof term for the current goal is CD_proj0proj1_eta {2} SNo complex_tag_fresh.
Theorem. (CSNo_ReIm_split) The following is provable:
∀z w, CSNo zCSNo wRe z = Re wIm z = Im wz = w
Proof:
An exact proof term for the current goal is CD_proj0proj1_split {2} SNo complex_tag_fresh.
Definition. We define CSNoLev to be λz ⇒ SNoLev (Re z) :\/: SNoLev (Im z) of type setset.
Theorem. (CSNoLev_ordinal) The following is provable:
∀z, CSNo zordinal (CSNoLev z)
Proof:
Let z be given.
Assume Hz.
Apply CSNo_E z Hz to the current goal.
Let x and y be given.
Assume Hx Hy.
Assume Hzxy: z = pa x y.
We will prove ordinal (SNoLev (Re (pa x y)) :\/: SNoLev (Im (pa x y))).
rewrite the current goal using CSNo_Re2 x y Hx Hy (from left to right).
rewrite the current goal using CSNo_Im2 x y Hx Hy (from left to right).
We will prove ordinal (SNoLev x :\/: SNoLev y).
An exact proof term for the current goal is ordinal_binunion (SNoLev x) (SNoLev y) (SNoLev_ordinal x Hx) (SNoLev_ordinal y Hy).
Let conj : setsetλx ⇒ x
Definition. We define minus_CSNo to be CD_minus {2} SNo minus_SNo of type setset.
Definition. We define conj_CSNo to be CD_conj {2} SNo minus_SNo conj of type setset.
Definition. We define add_CSNo to be CD_add {2} SNo add_SNo of type setsetset.
Definition. We define mul_CSNo to be CD_mul {2} SNo minus_SNo conj add_SNo mul_SNo of type setsetset.
Definition. We define exp_CSNo_nat to be CD_exp_nat {2} SNo minus_SNo conj add_SNo mul_SNo of type setsetset.
Definition. We define abs_sqr_CSNo to be λz ⇒ Re z ^ 2 + Im z ^ 2 of type setset.
Definition. We define recip_CSNo to be λz ⇒ pa (Re z :/: abs_sqr_CSNo z) (- (Im z :/: abs_sqr_CSNo z)) of type setset.
Let plus' ≝ add_CSNo
Let mult' ≝ mul_CSNo
Notation. We use :-: as a prefix operator with priority 358 corresponding to applying term minus_CSNo.
Notation. We use ' as a postfix operator with priority 100 corresponding to applying term conj_CSNo.
Notation. We use :+: as an infix operator with priority 360 and which associates to the right corresponding to applying term add_CSNo.
Notation. We use :*: as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_CSNo.
Notation. We use :^: as an infix operator with priority 355 and which associates to the right corresponding to applying term exp_CSNo_nat.
Definition. We define div_CSNo to be λz w ⇒ z :*: recip_CSNo w of type setsetset.
Theorem. (CSNo_Complex_i) The following is provable:
Proof:
We will prove CSNo (pa 0 1).
Apply CSNo_I to the current goal.
An exact proof term for the current goal is SNo_0.
An exact proof term for the current goal is SNo_1.
Theorem. (CSNo_minus_CSNo) The following is provable:
∀z, CSNo zCSNo (minus_CSNo z)
Proof:
An exact proof term for the current goal is CD_minus_CD {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo.
Theorem. (minus_CSNo_CRe) The following is provable:
∀z, CSNo zRe (:-: z) = - Re z
Proof:
An exact proof term for the current goal is CD_minus_proj0 {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo.
Theorem. (minus_CSNo_CIm) The following is provable:
∀z, CSNo zIm (:-: z) = - Im z
Proof:
An exact proof term for the current goal is CD_minus_proj1 {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo.
Theorem. (CSNo_conj_CSNo) The following is provable:
∀z, CSNo zCSNo (conj_CSNo z)
Proof:
An exact proof term for the current goal is CD_conj_CD {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo conj (λx H ⇒ H).
Theorem. (conj_CSNo_CRe) The following is provable:
∀z, CSNo zRe (z ') = Re z
Proof:
An exact proof term for the current goal is CD_conj_proj0 {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo conj (λx H ⇒ H).
Theorem. (conj_CSNo_CIm) The following is provable:
∀z, CSNo zIm (z ') = - Im z
Proof:
An exact proof term for the current goal is CD_conj_proj1 {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo conj (λx H ⇒ H).
Theorem. (CSNo_add_CSNo) The following is provable:
∀z w, CSNo zCSNo wCSNo (add_CSNo z w)
Proof:
An exact proof term for the current goal is CD_add_CD {2} SNo complex_tag_fresh add_SNo SNo_add_SNo.
Theorem. (CSNo_add_CSNo_3) The following is provable:
∀z w v, CSNo zCSNo wCSNo vCSNo (z :+: w :+: v)
Proof:
Let z, w and v be given.
Assume Hz Hw Hv.
Apply CSNo_add_CSNo to the current goal.
An exact proof term for the current goal is ??.
Apply CSNo_add_CSNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Theorem. (add_CSNo_CRe) The following is provable:
∀z w, CSNo zCSNo wRe (plus' z w) = Re z + Re w
Proof:
An exact proof term for the current goal is CD_add_proj0 {2} SNo complex_tag_fresh add_SNo SNo_add_SNo.
Theorem. (add_CSNo_CIm) The following is provable:
∀z w, CSNo zCSNo wIm (plus' z w) = Im z + Im w
Proof:
An exact proof term for the current goal is CD_add_proj1 {2} SNo complex_tag_fresh add_SNo SNo_add_SNo.
Theorem. (CSNo_mul_CSNo) The following is provable:
∀z w, CSNo zCSNo wCSNo (z :*: w)
Proof:
An exact proof term for the current goal is CD_mul_CD {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_minus_SNo (λx H ⇒ H) SNo_add_SNo SNo_mul_SNo.
Theorem. (CSNo_mul_CSNo_3) The following is provable:
∀z w v, CSNo zCSNo wCSNo vCSNo (z :*: w :*: v)
Proof:
Let z, w and v be given.
Assume Hz Hw Hv.
Apply CSNo_mul_CSNo to the current goal.
An exact proof term for the current goal is ??.
Apply CSNo_mul_CSNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Theorem. (mul_CSNo_CRe) The following is provable:
∀z w, CSNo zCSNo wRe (mult' z w) = Re z * Re w + - (Im w * Im z)
Proof:
An exact proof term for the current goal is CD_mul_proj0 {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_minus_SNo (λx H ⇒ H) SNo_add_SNo SNo_mul_SNo.
Theorem. (mul_CSNo_CIm) The following is provable:
∀z w, CSNo zCSNo wIm (mult' z w) = Im w * Re z + Im z * Re w
Proof:
An exact proof term for the current goal is CD_mul_proj1 {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_minus_SNo (λx H ⇒ H) SNo_add_SNo SNo_mul_SNo.
Theorem. (SNo_Re) The following is provable:
∀x, SNo xRe x = x
Proof:
An exact proof term for the current goal is CD_proj0_F {2} SNo complex_tag_fresh SNo_0.
Theorem. (SNo_Im) The following is provable:
∀x, SNo xIm x = 0
Proof:
An exact proof term for the current goal is CD_proj1_F {2} SNo complex_tag_fresh SNo_0.
Theorem. (Re_0) The following is provable:
Re 0 = 0
Proof:
An exact proof term for the current goal is SNo_Re 0 SNo_0.
Theorem. (Im_0) The following is provable:
Im 0 = 0
Proof:
An exact proof term for the current goal is SNo_Im 0 SNo_0.
Theorem. (Re_1) The following is provable:
Re 1 = 1
Proof:
An exact proof term for the current goal is SNo_Re 1 SNo_1.
Theorem. (Im_1) The following is provable:
Im 1 = 0
Proof:
An exact proof term for the current goal is SNo_Im 1 SNo_1.
Theorem. (Re_i) The following is provable:
Re i = 0
Proof:
An exact proof term for the current goal is CSNo_Re2 0 1 SNo_0 SNo_1.
Theorem. (Im_i) The following is provable:
Im i = 1
Proof:
An exact proof term for the current goal is CSNo_Im2 0 1 SNo_0 SNo_1.
Theorem. (conj_CSNo_id_SNo) The following is provable:
∀x, SNo xx ' = x
Proof:
An exact proof term for the current goal is CD_conj_F_eq {2} SNo complex_tag_fresh minus_SNo SNo_0 minus_SNo_0 conj.
Theorem. (conj_CSNo_0) The following is provable:
0 ' = 0
Proof:
An exact proof term for the current goal is conj_CSNo_id_SNo 0 SNo_0.
Theorem. (conj_CSNo_1) The following is provable:
1 ' = 1
Proof:
An exact proof term for the current goal is conj_CSNo_id_SNo 1 SNo_1.
Theorem. (conj_CSNo_i) The following is provable:
i ' = :-: i
Proof:
We will prove Re (i ') = Re (:-: i).
rewrite the current goal using conj_CSNo_CRe i CSNo_Complex_i (from left to right).
rewrite the current goal using minus_CSNo_CRe i CSNo_Complex_i (from left to right).
We will prove Re i = - Re i.
rewrite the current goal using Re_i (from left to right).
Use symmetry.
An exact proof term for the current goal is minus_SNo_0.
We will prove Im (i ') = Im (:-: i).
rewrite the current goal using minus_CSNo_CIm i CSNo_Complex_i (from left to right).
An exact proof term for the current goal is conj_CSNo_CIm i CSNo_Complex_i.
Theorem. (minus_CSNo_minus_SNo) The following is provable:
∀x, SNo x:-: x = - x
Proof:
An exact proof term for the current goal is CD_minus_F_eq {2} SNo complex_tag_fresh minus_SNo SNo_0 minus_SNo_0.
Theorem. (minus_CSNo_0) The following is provable:
Proof:
rewrite the current goal using minus_CSNo_minus_SNo 0 SNo_0 (from left to right).
An exact proof term for the current goal is minus_SNo_0.
Theorem. (add_CSNo_add_SNo) The following is provable:
∀x y, SNo xSNo yx :+: y = x + y
Proof:
An exact proof term for the current goal is CD_add_F_eq {2} SNo complex_tag_fresh add_SNo SNo_0 (add_SNo_0L 0 SNo_0).
Theorem. (mul_CSNo_mul_SNo) The following is provable:
∀x y, SNo xSNo yx :*: y = x * y
Proof:
Theorem. (minus_CSNo_invol) The following is provable:
∀z, CSNo z:-: :-: z = z
Proof:
An exact proof term for the current goal is CD_minus_invol {2} SNo complex_tag_fresh minus_SNo SNo_minus_SNo minus_SNo_invol.
Theorem. (conj_CSNo_invol) The following is provable:
∀z, CSNo zz ' ' = z
Proof:
An exact proof term for the current goal is CD_conj_invol {2} SNo complex_tag_fresh minus_SNo conj SNo_minus_SNo (λx H ⇒ H) minus_SNo_invol (λx _ q H ⇒ H).
Theorem. (conj_minus_CSNo) The following is provable:
∀z, CSNo z(:-: z) ' = :-: (z ')
Proof:
An exact proof term for the current goal is CD_conj_minus {2} SNo complex_tag_fresh minus_SNo conj SNo_minus_SNo (λx H ⇒ H) (λx _ q H ⇒ H).
Theorem. (minus_add_CSNo) The following is provable:
∀z w, CSNo zCSNo w:-: (z :+: w) = :-: z :+: :-: w
Proof:
Theorem. (conj_add_CSNo) The following is provable:
∀z w, CSNo zCSNo w(z :+: w) ' = z ' :+: w '
Proof:
An exact proof term for the current goal is CD_conj_add {2} SNo complex_tag_fresh minus_SNo conj add_SNo SNo_minus_SNo (λx H ⇒ H) SNo_add_SNo minus_add_SNo_distr (λx y _ _ q H ⇒ H).
Theorem. (add_CSNo_com) The following is provable:
∀z w, CSNo zCSNo wz :+: w = w :+: z
Proof:
An exact proof term for the current goal is CD_add_com {2} SNo complex_tag_fresh add_SNo add_SNo_com.
Theorem. (add_CSNo_assoc) The following is provable:
∀z w v, CSNo zCSNo wCSNo v(z :+: w) :+: v = z :+: (w :+: v)
Proof:
We prove the intermediate claim L1: ∀x y z, SNo xSNo ySNo z(x + y) + z = x + (y + z).
Let x, y and z be given.
Assume Hx Hy Hz.
Use symmetry.
An exact proof term for the current goal is add_SNo_assoc x y z Hx Hy Hz.
Theorem. (add_CSNo_0L) The following is provable:
∀z, CSNo zadd_CSNo 0 z = z
Proof:
An exact proof term for the current goal is CD_add_0L {2} SNo complex_tag_fresh add_SNo SNo_0 add_SNo_0L.
Theorem. (add_CSNo_0R) The following is provable:
∀z, CSNo zadd_CSNo z 0 = z
Proof:
An exact proof term for the current goal is CD_add_0R {2} SNo complex_tag_fresh add_SNo SNo_0 add_SNo_0R.
Theorem. (add_CSNo_minus_CSNo_linv) The following is provable:
∀z, CSNo zadd_CSNo (minus_CSNo z) z = 0
Proof:
Theorem. (add_CSNo_minus_CSNo_rinv) The following is provable:
∀z, CSNo zadd_CSNo z (minus_CSNo z) = 0
Proof:
Theorem. (mul_CSNo_0R) The following is provable:
∀z, CSNo zz :*: 0 = 0
Proof:
An exact proof term for the current goal is CD_mul_0R {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_0 minus_SNo_0 (λq H ⇒ H) (add_SNo_0L 0 SNo_0) mul_SNo_zeroL mul_SNo_zeroR.
Theorem. (mul_CSNo_0L) The following is provable:
∀z, CSNo z0 :*: z = 0
Proof:
An exact proof term for the current goal is CD_mul_0L {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_0 (λx H ⇒ H) minus_SNo_0 (add_SNo_0L 0 SNo_0) mul_SNo_zeroL mul_SNo_zeroR.
Theorem. (mul_CSNo_1R) The following is provable:
∀z, CSNo zz :*: 1 = z
Proof:
An exact proof term for the current goal is CD_mul_1R {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_0 SNo_1 minus_SNo_0 (λq H ⇒ H) (λq H ⇒ H) add_SNo_0L add_SNo_0R mul_SNo_zeroL mul_SNo_oneR.
Theorem. (mul_CSNo_1L) The following is provable:
∀z, CSNo z1 :*: z = z
Theorem. (conj_mul_CSNo) The following is provable:
∀z w, CSNo zCSNo w(z :*: w) ' = w ' :*: z '
Proof:
An exact proof term for the current goal is CD_conj_mul {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_minus_SNo (λz H ⇒ H) SNo_add_SNo SNo_mul_SNo minus_SNo_invol (λx _ q H ⇒ H) (λx _ q H ⇒ H) (λx y _ _ q H ⇒ H) minus_add_SNo_distr add_SNo_com mul_SNo_com mul_SNo_minus_distrR mul_SNo_minus_distrL.
Theorem. (mul_CSNo_distrL) The following is provable:
∀z w u, CSNo zCSNo wCSNo uz :*: (w :+: u) = z :*: w :+: z :*: u
Proof:
We prove the intermediate claim L1: ∀x y z, SNo xSNo ySNo z(x + y) + z = x + (y + z).
Let x, y and z be given.
Assume Hx Hy Hz.
Use symmetry.
An exact proof term for the current goal is add_SNo_assoc x y z Hx Hy Hz.
Theorem. (mul_CSNo_distrR) The following is provable:
∀z w u, CSNo zCSNo wCSNo u(z :+: w) :*: u = z :*: u :+: w :*: u
Proof:
We prove the intermediate claim L1: ∀x y z, SNo xSNo ySNo z(x + y) + z = x + (y + z).
Let x, y and z be given.
Assume Hx Hy Hz.
Use symmetry.
An exact proof term for the current goal is add_SNo_assoc x y z Hx Hy Hz.
Theorem. (minus_mul_CSNo_distrR) The following is provable:
∀z w, CSNo zCSNo wz :*: (:-: w) = :-: z :*: w
Theorem. (minus_mul_CSNo_distrL) The following is provable:
∀z w, CSNo zCSNo w(:-: z) :*: w = :-: z :*: w
Theorem. (exp_CSNo_nat_0) The following is provable:
∀z, z :^: 0 = 1
Proof:
An exact proof term for the current goal is CD_exp_nat_0 {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo.
Theorem. (exp_CSNo_nat_S) The following is provable:
∀z n, nat_p nz :^: (ordsucc n) = z :*: z :^: n
Proof:
An exact proof term for the current goal is CD_exp_nat_S {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo.
Theorem. (exp_CSNo_nat_1) The following is provable:
∀z, CSNo zz :^: 1 = z
Proof:
An exact proof term for the current goal is CD_exp_nat_1 {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_0 SNo_1 minus_SNo_0 (λq H ⇒ H) (λq H ⇒ H) add_SNo_0L add_SNo_0R mul_SNo_zeroL mul_SNo_oneR.
Theorem. (exp_CSNo_nat_2) The following is provable:
∀z, CSNo zz :^: 2 = z :*: z
Proof:
An exact proof term for the current goal is CD_exp_nat_2 {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_0 SNo_1 minus_SNo_0 (λq H ⇒ H) (λq H ⇒ H) add_SNo_0L add_SNo_0R mul_SNo_zeroL mul_SNo_oneR.
Theorem. (CSNo_exp_CSNo_nat) The following is provable:
∀z, CSNo z∀n, nat_p nCSNo (z :^: n)
Proof:
An exact proof term for the current goal is CD_exp_nat_CD {2} SNo complex_tag_fresh minus_SNo conj add_SNo mul_SNo SNo_minus_SNo (λx H ⇒ H) SNo_add_SNo SNo_mul_SNo SNo_0 SNo_1.
Theorem. (add_SNo_rotate_4_0312) The following is provable:
∀x y z w, SNo xSNo ySNo zSNo w(x + y) + (z + w) = (x + w) + (y + z)
Proof:
Let x, y, z and w be given.
Assume Hx Hy Hz Hw.
rewrite the current goal using add_SNo_com z w Hz Hw (from left to right).
We will prove (x + y) + (w + z) = (x + w) + (y + z).
An exact proof term for the current goal is add_SNo_com_4_inner_mid x y w z Hx Hy Hw Hz.
Theorem. (mul_CSNo_com) The following is provable:
∀z w, CSNo zCSNo wz :*: w = w :*: z
Proof:
Let z and w be given.
Assume Hz Hw.
We prove the intermediate claim Lzw: CSNo (mult' z w).
An exact proof term for the current goal is CSNo_mul_CSNo z w Hz Hw.
We prove the intermediate claim Lwz: CSNo (mult' w z).
An exact proof term for the current goal is CSNo_mul_CSNo w z Hw Hz.
We prove the intermediate claim LRezR: SNo (Re z).
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim LRewR: SNo (Re w).
An exact proof term for the current goal is CSNo_ReR w Hw.
We prove the intermediate claim LImzR: SNo (Im z).
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim LImwR: SNo (Im w).
An exact proof term for the current goal is CSNo_ImR w Hw.
Apply CSNo_ReIm_split (mult' z w) (mult' w z) Lzw Lwz to the current goal.
We will prove Re (mult' z w) = Re (mult' w z).
Use transitivity with Re z * Re w + - (Im w * Im z), and Re w * Re z + - (Im z * Im w).
An exact proof term for the current goal is mul_CSNo_CRe z w Hz Hw.
Use f_equal.
An exact proof term for the current goal is mul_SNo_com (Re z) (Re w) LRezR LRewR.
Use f_equal.
An exact proof term for the current goal is mul_SNo_com (Im w) (Im z) LImwR LImzR.
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CRe w z Hw Hz.
We will prove Im (mult' z w) = Im (mult' w z).
Use transitivity with Im w * Re z + Im z * Re w, and Im z * Re w + Im w * Re z.
An exact proof term for the current goal is mul_CSNo_CIm z w Hz Hw.
An exact proof term for the current goal is add_SNo_com (Im w * Re z) (Im z * Re w) (SNo_mul_SNo (Im w) (Re z) LImwR LRezR) (SNo_mul_SNo (Im z) (Re w) LImzR LRewR).
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CIm w z Hw Hz.
Theorem. (mul_CSNo_assoc) The following is provable:
∀z w v, CSNo zCSNo wCSNo vz :*: (w :*: v) = (z :*: w) :*: v
Proof:
Let z, w and v be given.
Assume Hz Hw Hv.
We prove the intermediate claim Lwv: CSNo (mult' w v).
An exact proof term for the current goal is CSNo_mul_CSNo w v Hw Hv.
We prove the intermediate claim Lzw: CSNo (mult' z w).
An exact proof term for the current goal is CSNo_mul_CSNo z w Hz Hw.
We prove the intermediate claim Lzwv1: CSNo (mult' z (mult' w v)).
An exact proof term for the current goal is CSNo_mul_CSNo z (mult' w v) Hz Lwv.
We prove the intermediate claim Lzwv2: CSNo (mult' (mult' z w) v).
An exact proof term for the current goal is CSNo_mul_CSNo (mult' z w) v Lzw Hv.
We prove the intermediate claim LRezR: SNo (Re z).
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim LRewR: SNo (Re w).
An exact proof term for the current goal is CSNo_ReR w Hw.
We prove the intermediate claim LRevR: SNo (Re v).
An exact proof term for the current goal is CSNo_ReR v Hv.
We prove the intermediate claim LImzR: SNo (Im z).
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim LImwR: SNo (Im w).
An exact proof term for the current goal is CSNo_ImR w Hw.
We prove the intermediate claim LImvR: SNo (Im v).
An exact proof term for the current goal is CSNo_ImR v Hv.
Apply CSNo_ReIm_split (mult' z (mult' w v)) (mult' (mult' z w) v) Lzwv1 Lzwv2 to the current goal.
We will prove Re (mult' z (mult' w v)) = Re (mult' (mult' z w) v).
Use transitivity with Re z * Re (mult' w v) + - (Im (mult' w v) * Im z), (Re z * Re w * Re v + - (Re z * Im v * Im w)) + (- Im v * Re w * Im z + - Im w * Re v * Im z), (Re z * Re w * Re v + - Im w * Re v * Im z) + (- (Re z * Im v * Im w) + - Im v * Re w * Im z), and Re (mult' z w) * Re v + - (Im v * Im (mult' z w)).
An exact proof term for the current goal is mul_CSNo_CRe z (mult' w v) Hz Lwv.
Use f_equal.
We will prove Re z * Re (mult' w v) = Re z * Re w * Re v + - (Re z * Im v * Im w).
Use transitivity with Re z * (Re w * Re v + - (Im v * Im w)), and Re z * Re w * Re v + Re z * (- (Im v * Im w)).
Use f_equal.
An exact proof term for the current goal is mul_CSNo_CRe w v Hw Hv.
Apply mul_SNo_distrL (Re z) (Re w * Re v) (- (Im v * Im w)) LRezR (SNo_mul_SNo (Re w) (Re v) LRewR LRevR) to the current goal.
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is SNo_mul_SNo (Im v) (Im w) LImvR LImwR.
Use f_equal.
We will prove Re z * (- (Im v * Im w)) = - (Re z * Im v * Im w).
An exact proof term for the current goal is mul_SNo_minus_distrR (Re z) (Im v * Im w) LRezR (SNo_mul_SNo (Im v) (Im w) LImvR LImwR).
We will prove - (Im (mult' w v) * Im z) = - Im v * Re w * Im z + - Im w * Re v * Im z.
Use transitivity with and - (Im v * Re w * Im z + Im w * Re v * Im z).
Use f_equal.
We will prove Im (mult' w v) * Im z = Im v * Re w * Im z + Im w * Re v * Im z.
Use transitivity with (Im v * Re w + Im w * Re v) * Im z, and (Im v * Re w) * Im z + (Im w * Re v) * Im z.
Use f_equal.
An exact proof term for the current goal is mul_CSNo_CIm w v Hw Hv.
We will prove (Im v * Re w + Im w * Re v) * Im z = (Im v * Re w) * Im z + (Im w * Re v) * Im z.
An exact proof term for the current goal is mul_SNo_distrR (Im v * Re w) (Im w * Re v) (Im z) (SNo_mul_SNo (Im v) (Re w) LImvR LRewR) (SNo_mul_SNo (Im w) (Re v) LImwR LRevR) LImzR.
Use f_equal.
Use symmetry.
An exact proof term for the current goal is mul_SNo_assoc (Im v) (Re w) (Im z) ?? ?? ??.
Use symmetry.
An exact proof term for the current goal is mul_SNo_assoc (Im w) (Re v) (Im z) ?? ?? ??.
We will prove - (Im v * Re w * Im z + Im w * Re v * Im z) = - Im v * Re w * Im z + - Im w * Re v * Im z.
Apply minus_add_SNo_distr to the current goal.
An exact proof term for the current goal is SNo_mul_SNo_3 (Im v) (Re w) (Im z) LImvR LRewR LImzR.
An exact proof term for the current goal is SNo_mul_SNo_3 (Im w) (Re v) (Im z) LImwR LRevR LImzR.
Apply add_SNo_rotate_4_0312 to the current goal.
An exact proof term for the current goal is SNo_mul_SNo_3 (Re z) (Re w) (Re v) LRezR LRewR LRevR.
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is SNo_mul_SNo_3 (Re z) (Im v) (Im w) LRezR LImvR LImwR.
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is SNo_mul_SNo_3 (Im v) (Re w) (Im z) LImvR LRewR LImzR.
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is SNo_mul_SNo_3 (Im w) (Re v) (Im z) LImwR LRevR LImzR.
We will prove (Re z * Re w * Re v + - Im w * Re v * Im z) + (- (Re z * Im v * Im w) + - Im v * Re w * Im z) = (Re (mult' z w) * Re v) + - (Im v * Im (mult' z w)).
Use f_equal.
We will prove Re z * Re w * Re v + - Im w * Re v * Im z = Re (mult' z w) * Re v.
Use transitivity with (Re z * Re w) * Re v + (- (Im w * Im z)) * Re v, and (Re z * Re w + - (Im w * Im z)) * Re v.
Use f_equal.
We will prove Re z * Re w * Re v = (Re z * Re w) * Re v.
An exact proof term for the current goal is mul_SNo_assoc (Re z) (Re w) (Re v) LRezR LRewR LRevR.
We will prove - (Im w * Re v * Im z) = (- (Im w * Im z)) * Re v.
Use transitivity with and - ((Im w * Im z) * Re v).
Use f_equal.
Use transitivity with and (Im w * Im z * Re v).
Use f_equal.
An exact proof term for the current goal is mul_SNo_com (Re v) (Im z) ?? ??.
An exact proof term for the current goal is mul_SNo_assoc (Im w) (Im z) (Re v) ?? ?? ??.
Use symmetry.
We will prove (- (Im w * Im z)) * Re v = - ((Im w * Im z) * Re v).
An exact proof term for the current goal is mul_SNo_minus_distrL (Im w * Im z) (Re v) (SNo_mul_SNo (Im w) (Im z) LImwR LImzR) LRevR.
Use symmetry.
An exact proof term for the current goal is mul_SNo_distrR (Re z * Re w) (- (Im w * Im z)) (Re v) (SNo_mul_SNo (Re z) (Re w) LRezR LRewR) (SNo_minus_SNo (Im w * Im z) (SNo_mul_SNo (Im w) (Im z) LImwR LImzR)) LRevR.
Use f_equal.
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CRe z w Hz Hw.
We will prove - (Re z * Im v * Im w) + - Im v * Re w * Im z = - (Im v * Im (mult' z w)).
Use transitivity with and - (Re z * Im v * Im w + Im v * Re w * Im z).
Use symmetry.
Apply minus_add_SNo_distr to the current goal.
An exact proof term for the current goal is SNo_mul_SNo_3 (Re z) (Im v) (Im w) ?? ?? ??.
An exact proof term for the current goal is SNo_mul_SNo_3 (Im v) (Re w) (Im z) ?? ?? ??.
Use f_equal.
We will prove Re z * Im v * Im w + Im v * Re w * Im z = Im v * Im (mult' z w).
rewrite the current goal using mul_SNo_com_3_0_1 (Re z) (Im v) (Im w) ?? ?? ?? (from left to right).
Use transitivity with and Im v * (Re z * Im w + Re w * Im z).
Use symmetry.
An exact proof term for the current goal is mul_SNo_distrL (Im v) (Re z * Im w) (Re w * Im z) ?? (SNo_mul_SNo (Re z) (Im w) ?? ??) (SNo_mul_SNo (Re w) (Im z) ?? ??).
We will prove Im v * (Re z * Im w + Re w * Im z) = Im v * Im (mult' z w).
Use f_equal.
Use symmetry.
We will prove Im (mult' z w) = Re z * Im w + Re w * Im z.
rewrite the current goal using mul_SNo_com (Re z) (Im w) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_com (Re w) (Im z) ?? ?? (from left to right).
An exact proof term for the current goal is mul_CSNo_CIm z w Hz Hw.
We will prove (Re (mult' z w) * Re v) + - (Im v * Im (mult' z w)) = Re (mult' (mult' z w) v).
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CRe (mult' z w) v Lzw Hv.
We will prove Im (mult' z (mult' w v)) = Im (mult' (mult' z w) v).
Use transitivity with Im (mult' w v) * Re z + Im z * Re (mult' w v), (Im v * Re w + Im w * Re v) * Re z + Im z * (Re w * Re v + - (Im v * Im w)), (Im v * Re w * Re z + Im w * Re v * Re z) + (Im z * Re w * Re v + - (Im z * Im v * Im w)), (Im v * Re w * Re z + - (Im z * Im v * Im w)) + (Im w * Re v * Re z + Im z * Re w * Re v), Im v * (Re z * Re w + - (Im w * Im z)) + (Im w * Re z + Im z * Re w) * Re v, and Im v * Re (mult' z w) + Im (mult' z w) * Re v.
We will prove Im (mult' z (mult' w v)) = Im (mult' w v) * Re z + Im z * Re (mult' w v).
An exact proof term for the current goal is mul_CSNo_CIm z (mult' w v) Hz Lwv.
We will prove Im (mult' w v) * Re z + Im z * Re (mult' w v) = (Im v * Re w + Im w * Re v) * Re z + Im z * (Re w * Re v + - (Im v * Im w)).
Use f_equal.
Use f_equal.
An exact proof term for the current goal is mul_CSNo_CIm w v ?? ??.
Use f_equal.
An exact proof term for the current goal is mul_CSNo_CRe w v ?? ??.
We will prove (Im v * Re w + Im w * Re v) * Re z + Im z * (Re w * Re v + - (Im v * Im w)) = (Im v * Re w * Re z + Im w * Re v * Re z) + (Im z * Re w * Re v + - (Im z * Im v * Im w)).
Use f_equal.
Use transitivity with and (Im v * Re w) * Re z + (Im w * Re v) * Re z.
An exact proof term for the current goal is mul_SNo_distrR (Im v * Re w) (Im w * Re v) (Re z) (SNo_mul_SNo (Im v) (Re w) ?? ??) (SNo_mul_SNo (Im w) (Re v) ?? ??) ??.
Use f_equal.
Use symmetry.
An exact proof term for the current goal is mul_SNo_assoc (Im v) (Re w) (Re z) ?? ?? ??.
Use symmetry.
An exact proof term for the current goal is mul_SNo_assoc (Im w) (Re v) (Re z) ?? ?? ??.
Use transitivity with and Im z * Re w * Re v + Im z * (- (Im v * Im w)).
Apply mul_SNo_distrL (Im z) (Re w * Re v) (- (Im v * Im w)) ?? (SNo_mul_SNo (Re w) (Re v) ?? ??) to the current goal.
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is SNo_mul_SNo (Im v) (Im w) ?? ??.
Use f_equal.
We will prove Im z * (- (Im v * Im w)) = - Im z * Im v * Im w.
An exact proof term for the current goal is mul_SNo_minus_distrR (Im z) (Im v * Im w) ?? (SNo_mul_SNo (Im v) (Im w) ?? ??).
We will prove (Im v * Re w * Re z + Im w * Re v * Re z) + (Im z * Re w * Re v + - (Im z * Im v * Im w)) = (Im v * Re w * Re z + - (Im z * Im v * Im w)) + (Im w * Re v * Re z + Im z * Re w * Re v).
Apply add_SNo_rotate_4_0312 to the current goal.
Apply SNo_mul_SNo_3 to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply SNo_mul_SNo_3 to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply SNo_mul_SNo_3 to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply SNo_minus_SNo to the current goal.
Apply SNo_mul_SNo_3 to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Use f_equal.
We will prove Im v * Re w * Re z + - (Im z * Im v * Im w) = Im v * (Re z * Re w + - (Im w * Im z)).
rewrite the current goal using mul_SNo_com (Re w) (Re z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_com (Im w) (Im z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_com_3_0_1 (Im z) (Im v) (Im w) ?? ?? ?? (from left to right).
We will prove Im v * Re z * Re w + - (Im v * Im z * Im w) = Im v * (Re z * Re w + - (Im z * Im w)).
rewrite the current goal using mul_SNo_minus_distrR (Im v) (Im z * Im w) ?? (SNo_mul_SNo (Im z) (Im w) ?? ??) (from right to left).
Use symmetry.
We will prove Im v * (Re z * Re w + - (Im z * Im w)) = Im v * Re z * Re w + Im v * (- Im z * Im w).
An exact proof term for the current goal is mul_SNo_distrL (Im v) (Re z * Re w) (- (Im z * Im w)) ?? (SNo_mul_SNo (Re z) (Re w) ?? ??) (SNo_minus_SNo (Im z * Im w) (SNo_mul_SNo (Im z) (Im w) ?? ??)).
We will prove Im w * Re v * Re z + Im z * Re w * Re v = (Im w * Re z + Im z * Re w) * Re v.
rewrite the current goal using mul_SNo_com (Re v) (Re z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_assoc (Im w) (Re z) (Re v) ?? ?? ?? (from left to right).
rewrite the current goal using mul_SNo_assoc (Im z) (Re w) (Re v) ?? ?? ?? (from left to right).
Use symmetry.
An exact proof term for the current goal is mul_SNo_distrR (Im w * Re z) (Im z * Re w) (Re v) (SNo_mul_SNo (Im w) (Re z) ?? ??) (SNo_mul_SNo (Im z) (Re w) ?? ??) ??.
We will prove Im v * (Re z * Re w + - (Im w * Im z)) + (Im w * Re z + Im z * Re w) * Re v = Im v * Re (mult' z w) + Im (mult' z w) * Re v.
Use f_equal.
Use f_equal.
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CRe z w Hz Hw.
Use f_equal.
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CIm z w Hz Hw.
We will prove Im v * Re (mult' z w) + Im (mult' z w) * Re v = Im (mult' (mult' z w) v).
Use symmetry.
An exact proof term for the current goal is mul_CSNo_CIm (mult' z w) v Lzw Hv.
Theorem. (Complex_i_sqr) The following is provable:
i :*: i = :-: 1
Proof:
We prove the intermediate claim Lii: CSNo (i :*: i).
An exact proof term for the current goal is CSNo_mul_CSNo i i CSNo_Complex_i CSNo_Complex_i.
We prove the intermediate claim Lm1: CSNo (:-: 1).
An exact proof term for the current goal is CSNo_minus_CSNo 1 CSNo_1.
Apply CSNo_ReIm_split (i :*: i) (:-: 1) Lii Lm1 to the current goal.
We will prove Re (i :*: i) = Re (:-: 1).
rewrite the current goal using mul_CSNo_CRe i i CSNo_Complex_i CSNo_Complex_i (from left to right).
rewrite the current goal using minus_CSNo_CRe 1 CSNo_1 (from left to right).
We will prove Re i * Re i + - Im i * Im i = - Re 1.
rewrite the current goal using Re_i (from left to right).
rewrite the current goal using Im_i (from left to right).
rewrite the current goal using Re_1 (from left to right).
We will prove 0 * 0 + - 1 * 1 = - 1.
rewrite the current goal using mul_SNo_zeroL 0 SNo_0 (from left to right).
rewrite the current goal using mul_SNo_oneL 1 SNo_1 (from left to right).
We will prove 0 + - 1 = - 1.
An exact proof term for the current goal is add_SNo_0L (- 1) (SNo_minus_SNo 1 SNo_1).
We will prove Im (i :*: i) = Im (:-: 1).
rewrite the current goal using mul_CSNo_CIm i i CSNo_Complex_i CSNo_Complex_i (from left to right).
rewrite the current goal using minus_CSNo_CIm 1 CSNo_1 (from left to right).
We will prove Im i * Re i + Im i * Re i = - Im 1.
rewrite the current goal using Re_i (from left to right).
rewrite the current goal using Im_i (from left to right).
rewrite the current goal using Im_1 (from left to right).
We will prove 1 * 0 + 1 * 0 = - 0.
rewrite the current goal using minus_SNo_0 (from left to right).
rewrite the current goal using mul_SNo_zeroR 1 SNo_1 (from left to right).
We will prove 0 + 0 = 0.
An exact proof term for the current goal is add_SNo_0L 0 SNo_0.
Theorem. (SNo_abs_sqr_CSNo) The following is provable:
∀z, CSNo zSNo (abs_sqr_CSNo z)
Proof:
Let z be given.
Assume Hz.
We will prove SNo (Re z ^ 2 + Im z ^ 2).
Apply SNo_add_SNo to the current goal.
Apply SNo_exp_SNo_nat to the current goal.
An exact proof term for the current goal is CSNo_ReR z Hz.
An exact proof term for the current goal is nat_2.
Apply SNo_exp_SNo_nat to the current goal.
An exact proof term for the current goal is CSNo_ImR z Hz.
An exact proof term for the current goal is nat_2.
Theorem. (abs_sqr_CSNo_nonneg) The following is provable:
∀z, CSNo z0 <= abs_sqr_CSNo z
Proof:
Let z be given.
Assume Hz.
Set x to be the term Re z.
Set y to be the term Im z.
We prove the intermediate claim Lx: SNo x.
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim Ly: SNo y.
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim Lxx: SNo (x ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat x Lx 2 nat_2.
We prove the intermediate claim Lyy: SNo (y ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat y Ly 2 nat_2.
We will prove 0 <= x ^ 2 + y ^ 2.
rewrite the current goal using add_SNo_0L 0 SNo_0 (from right to left) at position 1.
We will prove 0 + 0 <= x ^ 2 + y ^ 2.
Apply add_SNo_Le3 0 0 (x ^ 2) (y ^ 2) SNo_0 SNo_0 Lxx Lyy to the current goal.
rewrite the current goal using exp_SNo_nat_2 x Lx (from left to right).
An exact proof term for the current goal is SNo_sqr_nonneg x Lx.
rewrite the current goal using exp_SNo_nat_2 y Ly (from left to right).
An exact proof term for the current goal is SNo_sqr_nonneg y Ly.
Theorem. (abs_sqr_CSNo_zero) The following is provable:
∀z, CSNo zabs_sqr_CSNo z = 0z = 0
Proof:
Let z be given.
Assume Hz.
Set x to be the term Re z.
Set y to be the term Im z.
Set s to be the term x ^ 2 + y ^ 2.
Assume H1: s = 0.
We prove the intermediate claim Lx: SNo x.
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim Ly: SNo y.
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim Lxx: SNo (x ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat x Lx 2 nat_2.
We prove the intermediate claim Lyy: SNo (y ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat y Ly 2 nat_2.
We prove the intermediate claim Ls: SNo s.
An exact proof term for the current goal is SNo_add_SNo (x ^ 2) (y ^ 2) Lxx Lyy.
We will prove z = 0.
Apply CSNo_ReIm_split z 0 Hz CSNo_0 to the current goal.
We will prove Re z = Re 0.
rewrite the current goal using Re_0 (from left to right).
We will prove x = 0.
Apply SNo_zero_or_sqr_pos' x Lx to the current goal.
Assume H2: x = 0.
An exact proof term for the current goal is H2.
Assume H2: 0 < x ^ 2.
We will prove False.
Apply SNoLt_irref 0 to the current goal.
We will prove 0 < 0.
rewrite the current goal using H1 (from right to left) at position 2.
We will prove 0 < s.
Apply SNoLtLe_tra 0 (x ^ 2) s SNo_0 ?? ?? H2 to the current goal.
We will prove x ^ 2 <= s.
rewrite the current goal using add_SNo_0R (x ^ 2) ?? (from right to left) at position 1.
We will prove x ^ 2 + 0 <= s.
Apply add_SNo_Le2 (x ^ 2) 0 (y ^ 2) ?? SNo_0 ?? to the current goal.
We will prove 0 <= y ^ 2.
Apply SNo_sqr_nonneg' y Ly to the current goal.
We will prove Im z = Im 0.
rewrite the current goal using Im_0 (from left to right).
We will prove y = 0.
Apply SNo_zero_or_sqr_pos' y Ly to the current goal.
Assume H2: y = 0.
An exact proof term for the current goal is H2.
Assume H2: 0 < y ^ 2.
We will prove False.
Apply SNoLt_irref 0 to the current goal.
We will prove 0 < 0.
rewrite the current goal using H1 (from right to left) at position 2.
We will prove 0 < s.
Apply SNoLtLe_tra 0 (y ^ 2) s SNo_0 ?? ?? H2 to the current goal.
We will prove y ^ 2 <= s.
rewrite the current goal using add_SNo_0L (y ^ 2) ?? (from right to left) at position 1.
We will prove 0 + y ^ 2 <= s.
Apply add_SNo_Le1 0 (y ^ 2) (x ^ 2) SNo_0 ?? ?? to the current goal.
We will prove 0 <= x ^ 2.
Apply SNo_sqr_nonneg' x Lx to the current goal.
Theorem. (CSNo_recip_CSNo) The following is provable:
∀z, CSNo zCSNo (recip_CSNo z)
Proof:
Let z be given.
Assume Hz.
Set s to be the term Re z ^ 2 + Im z ^ 2.
We prove the intermediate claim LRezR: SNo (Re z).
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim LImzR: SNo (Im z).
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim Ls: SNo s.
An exact proof term for the current goal is SNo_abs_sqr_CSNo z Hz.
We will prove CSNo (pa (Re z :/: s) (- (Im z :/: s))).
Apply CSNo_I to the current goal.
We will prove SNo (Re z :/: s).
Apply SNo_div_SNo to the current goal.
An exact proof term for the current goal is LRezR.
An exact proof term for the current goal is Ls.
We will prove SNo (- (Im z :/: s)).
Apply SNo_minus_SNo to the current goal.
Apply SNo_div_SNo to the current goal.
An exact proof term for the current goal is LImzR.
An exact proof term for the current goal is Ls.
Theorem. (CSNo_relative_recip) The following is provable:
∀z, CSNo z∀u, SNo u(Re z ^ 2 + Im z ^ 2) * u = 1z :*: (u :*: Re z :+: :-: i :*: u :*: Im z) = 1
Proof:
Let z be given.
Assume Hz.
Let u be given.
Assume Hu.
Assume Hur: (Re z ^ 2 + Im z ^ 2) * u = 1.
We will prove z :*: (u :*: Re z :+: :-: i :*: u :*: Im z) = 1.
We prove the intermediate claim LRezR: SNo (Re z).
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim LImzR: SNo (Im z).
An exact proof term for the current goal is CSNo_ImR z Hz.
We will prove z :*: (u :*: Re z :+: :-: i :*: u :*: Im z) = 1.
rewrite the current goal using mul_CSNo_mul_SNo u (Re z) Hu LRezR (from left to right).
rewrite the current goal using mul_CSNo_mul_SNo u (Im z) Hu LImzR (from left to right).
We will prove z :*: (u * Re z :+: :-: i :*: u * Im z) = 1.
We prove the intermediate claim LuRez: SNo (u * Re z).
An exact proof term for the current goal is SNo_mul_SNo u (Re z) ?? ??.
We prove the intermediate claim LuRez': CSNo (u * Re z).
Apply SNo_CSNo to the current goal.
An exact proof term for the current goal is LuRez.
We prove the intermediate claim LuImz: SNo (u * Im z).
An exact proof term for the current goal is SNo_mul_SNo u (Im z) ?? ??.
We prove the intermediate claim LuImz': CSNo (u * Im z).
Apply SNo_CSNo to the current goal.
An exact proof term for the current goal is LuImz.
We prove the intermediate claim LiuImz: CSNo (i :*: u * Im z).
Apply CSNo_mul_CSNo to the current goal.
An exact proof term for the current goal is CSNo_Complex_i.
An exact proof term for the current goal is LuImz'.
We prove the intermediate claim LmiuImz: CSNo (:-: i :*: u * Im z).
Apply CSNo_minus_CSNo to the current goal.
An exact proof term for the current goal is LiuImz.
We prove the intermediate claim L1: CSNo (u * Re z :+: :-: i :*: u * Im z).
Apply CSNo_add_CSNo to the current goal.
We will prove CSNo (u * Re z).
An exact proof term for the current goal is LuRez'.
We will prove CSNo (:-: i :*: u * Im z).
An exact proof term for the current goal is LmiuImz.
We prove the intermediate claim LRezRez: SNo (Re z * Re z).
An exact proof term for the current goal is SNo_mul_SNo (Re z) (Re z) ?? ??.
We prove the intermediate claim LImzImz: SNo (Im z * Im z).
An exact proof term for the current goal is SNo_mul_SNo (Im z) (Im z) ?? ??.
Apply CSNo_ReIm_split (z :*: (u * Re z :+: :-: i :*: u * Im z)) 1 (CSNo_mul_CSNo z (u * Re z :+: :-: i :*: u * Im z) Hz L1) CSNo_1 to the current goal.
We will prove Re (z :*: (u * Re z :+: :-: i :*: u * Im z)) = Re 1.
rewrite the current goal using Re_1 (from left to right).
rewrite the current goal using mul_CSNo_CRe z (u * Re z :+: :-: i :*: u * Im z) Hz L1 (from left to right).
We will prove Re z * Re (u * Re z :+: :-: i :*: u * Im z) + - Im (u * Re z :+: :-: i :*: u * Im z) * Im z = 1.
rewrite the current goal using add_CSNo_CRe (u * Re z) (:-: i :*: u * Im z) LuRez' LmiuImz (from left to right).
rewrite the current goal using add_CSNo_CIm (u * Re z) (:-: i :*: u * Im z) LuRez' LmiuImz (from left to right).
We will prove Re z * (Re (u * Re z) + Re (:-: i :*: u * Im z)) + - (Im (u * Re z) + Im (:-: i :*: u * Im z)) * Im z = 1.
rewrite the current goal using minus_CSNo_CRe (i :*: u * Im z) LiuImz (from left to right).
rewrite the current goal using minus_CSNo_CIm (i :*: u * Im z) LiuImz (from left to right).
rewrite the current goal using SNo_Re (u * Re z) LuRez (from left to right).
rewrite the current goal using SNo_Im (u * Re z) LuRez (from left to right).
We will prove Re z * (u * Re z + - Re (i :*: u * Im z)) + - (0 + - Im (i :*: u * Im z)) * Im z = 1.
rewrite the current goal using mul_CSNo_CRe i (u * Im z) CSNo_Complex_i LuImz' (from left to right).
We will prove Re z * (u * Re z + - (Re i * Re (u * Im z) + - Im (u * Im z) * Im i)) + - (0 + - Im (i :*: u * Im z)) * Im z = 1.
rewrite the current goal using mul_CSNo_CIm i (u * Im z) CSNo_Complex_i LuImz' (from left to right).
We will prove Re z * (u * Re z + - (Re i * Re (u * Im z) + - Im (u * Im z) * Im i)) + - (0 + - (Im (u * Im z) * Re i + Im i * Re (u * Im z))) * Im z = 1.
rewrite the current goal using Re_i (from left to right).
rewrite the current goal using Im_i (from left to right).
We will prove Re z * (u * Re z + - (0 * Re (u * Im z) + - Im (u * Im z) * 1)) + - (0 + - (Im (u * Im z) * 0 + 1 * Re (u * Im z))) * Im z = 1.
rewrite the current goal using SNo_Re (u * Im z) LuImz (from left to right).
rewrite the current goal using SNo_Im (u * Im z) LuImz (from left to right).
We will prove Re z * (u * Re z + - (0 * (u * Im z) + - 0 * 1)) + - (0 + - (0 * 0 + 1 * (u * Im z))) * Im z = 1.
rewrite the current goal using mul_SNo_zeroR 0 SNo_0 (from left to right).
rewrite the current goal using mul_SNo_zeroL (u * Im z) LuImz (from left to right).
rewrite the current goal using mul_SNo_zeroL 1 SNo_1 (from left to right).
We will prove Re z * (u * Re z + - (0 + - 0)) + - (0 + - (0 + 1 * (u * Im z))) * Im z = 1.
rewrite the current goal using minus_SNo_0 (from left to right).
rewrite the current goal using add_SNo_0L 0 SNo_0 (from left to right).
rewrite the current goal using minus_SNo_0 (from left to right).
rewrite the current goal using add_SNo_0R (u * Re z) LuRez (from left to right).
We will prove Re z * (u * Re z) + - (0 + - (0 + 1 * (u * Im z))) * Im z = 1.
rewrite the current goal using mul_SNo_oneL (u * Im z) LuImz (from left to right).
We will prove Re z * (u * Re z) + - (0 + - (0 + (u * Im z))) * Im z = 1.
rewrite the current goal using add_SNo_0L (u * Im z) LuImz (from left to right).
rewrite the current goal using add_SNo_0L (- u * Im z) (SNo_minus_SNo (u * Im z) LuImz) (from left to right).
We will prove Re z * (u * Re z) + - (- (u * Im z)) * Im z = 1.
rewrite the current goal using mul_SNo_minus_distrL (- u * Im z) (Im z) (SNo_minus_SNo (u * Im z) LuImz) LImzR (from right to left).
rewrite the current goal using minus_SNo_invol (u * Im z) LuImz (from left to right).
We will prove Re z * (u * Re z) + (u * Im z) * Im z = 1.
rewrite the current goal using mul_SNo_com_3_0_1 (Re z) u (Re z) ?? ?? ?? (from left to right).
rewrite the current goal using mul_SNo_assoc u (Im z) (Im z) ?? ?? ?? (from right to left).
We will prove u * (Re z * Re z) + u * (Im z * Im z) = 1.
rewrite the current goal using mul_SNo_com u (Re z * Re z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_com u (Im z * Im z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_distrR (Re z * Re z) (Im z * Im z) u ?? ?? ?? (from right to left).
rewrite the current goal using exp_SNo_nat_2 (Re z) ?? (from right to left).
rewrite the current goal using exp_SNo_nat_2 (Im z) ?? (from right to left).
An exact proof term for the current goal is Hur.
We will prove Im (z :*: (u * Re z :+: :-: i :*: u * Im z)) = Im 1.
rewrite the current goal using mul_CSNo_CIm z (u * Re z :+: :-: i :*: u * Im z) Hz L1 (from left to right).
rewrite the current goal using Im_1 (from left to right).
We will prove Im (u * Re z :+: :-: i :*: u * Im z) * Re z + Im z * Re (u * Re z :+: :-: i :*: u * Im z) = 0.
rewrite the current goal using add_CSNo_CRe (u * Re z) (:-: i :*: u * Im z) LuRez' LmiuImz (from left to right).
rewrite the current goal using add_CSNo_CIm (u * Re z) (:-: i :*: u * Im z) LuRez' LmiuImz (from left to right).
We will prove (Im (u * Re z) + Im (:-: i :*: u * Im z)) * Re z + Im z * (Re (u * Re z) + Re (:-: i :*: u * Im z)) = 0.
rewrite the current goal using minus_CSNo_CRe (i :*: u * Im z) LiuImz (from left to right).
rewrite the current goal using minus_CSNo_CIm (i :*: u * Im z) LiuImz (from left to right).
We will prove (Im (u * Re z) + - Im (i :*: u * Im z)) * Re z + Im z * (Re (u * Re z) + - Re (i :*: u * Im z)) = 0.
rewrite the current goal using SNo_Re (u * Re z) LuRez (from left to right).
rewrite the current goal using SNo_Im (u * Re z) LuRez (from left to right).
We will prove (0 + - Im (i :*: u * Im z)) * Re z + Im z * ((u * Re z) + - Re (i :*: u * Im z)) = 0.
rewrite the current goal using mul_CSNo_CRe i (u * Im z) CSNo_Complex_i LuImz' (from left to right).
We will prove (0 + - Im (i :*: u * Im z)) * Re z + Im z * ((u * Re z) + - (Re i * Re (u * Im z) + - Im (u * Im z) * Im i)) = 0.
rewrite the current goal using mul_CSNo_CIm i (u * Im z) CSNo_Complex_i LuImz' (from left to right).
We will prove (0 + - (Im (u * Im z) * Re i + Im i * Re (u * Im z))) * Re z + Im z * ((u * Re z) + - (Re i * Re (u * Im z) + - Im (u * Im z) * Im i)) = 0.
rewrite the current goal using Re_i (from left to right).
rewrite the current goal using Im_i (from left to right).
We will prove (0 + - (Im (u * Im z) * 0 + 1 * Re (u * Im z))) * Re z + Im z * ((u * Re z) + - (0 * Re (u * Im z) + - Im (u * Im z) * 1)) = 0.
rewrite the current goal using SNo_Re (u * Im z) LuImz (from left to right).
rewrite the current goal using SNo_Im (u * Im z) LuImz (from left to right).
We will prove (0 + - (0 * 0 + 1 * (u * Im z))) * Re z + Im z * ((u * Re z) + - (0 * (u * Im z) + - 0 * 1)) = 0.
rewrite the current goal using mul_SNo_zeroL 0 SNo_0 (from left to right).
rewrite the current goal using mul_SNo_zeroL (u * Im z) ?? (from left to right).
rewrite the current goal using mul_SNo_zeroL 1 SNo_1 (from left to right).
rewrite the current goal using mul_SNo_oneL (u * Im z) ?? (from left to right).
We will prove (0 + - (0 + u * Im z)) * Re z + Im z * ((u * Re z) + - (0 + - 0)) = 0.
rewrite the current goal using minus_SNo_0 (from left to right).
rewrite the current goal using add_SNo_0L 0 SNo_0 (from left to right).
rewrite the current goal using minus_SNo_0 (from left to right).
rewrite the current goal using add_SNo_0R (u * Re z) ?? (from left to right).
rewrite the current goal using add_SNo_0L (u * Im z) ?? (from left to right).
We will prove (0 + - (u * Im z)) * Re z + Im z * (u * Re z) = 0.
rewrite the current goal using add_SNo_0L (- (u * Im z)) (SNo_minus_SNo (u * Im z) ??) (from left to right).
We will prove (- (u * Im z)) * Re z + Im z * (u * Re z) = 0.
rewrite the current goal using mul_SNo_minus_distrL (u * Im z) (Re z) ?? ?? (from left to right).
We will prove - (u * Im z) * Re z + Im z * u * Re z = 0.
rewrite the current goal using mul_SNo_assoc u (Im z) (Re z) ?? ?? ?? (from right to left).
rewrite the current goal using mul_SNo_com (Im z) (Re z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_com_3_0_1 (Im z) u (Re z) ?? ?? ?? (from left to right).
We will prove - u * Re z * Im z + u * Im z * Re z = 0.
rewrite the current goal using mul_SNo_com (Re z) (Im z) ?? ?? (from left to right).
We will prove - u * Im z * Re z + u * Im z * Re z = 0.
An exact proof term for the current goal is add_SNo_minus_SNo_linv (u * Im z * Re z) (SNo_mul_SNo_3 u (Im z) (Re z) ?? ?? ??).
Theorem. (recip_CSNo_invR) The following is provable:
∀z, CSNo zz <> 0z :*: recip_CSNo z = 1
Proof:
Let z be given.
Assume Hz Hznz.
Set x to be the term Re z.
Set y to be the term Im z.
Set s to be the term x ^ 2 + y ^ 2.
Set u to be the term recip_SNo s.
We prove the intermediate claim Lx: SNo x.
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim Ly: SNo y.
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim Ls: SNo s.
An exact proof term for the current goal is SNo_abs_sqr_CSNo z Hz.
We prove the intermediate claim LsC: CSNo s.
An exact proof term for the current goal is SNo_CSNo s Ls.
We prove the intermediate claim Lu: SNo u.
An exact proof term for the current goal is SNo_recip_SNo s Ls.
We prove the intermediate claim LuC: CSNo u.
An exact proof term for the current goal is SNo_CSNo u Lu.
We prove the intermediate claim LReuS: SNo (Re u).
An exact proof term for the current goal is CSNo_ReR u LuC.
We prove the intermediate claim LImuS: SNo (Im u).
An exact proof term for the current goal is CSNo_ImR u LuC.
We prove the intermediate claim Luy: CSNo (u :*: y).
Apply CSNo_mul_CSNo to the current goal.
An exact proof term for the current goal is LuC.
Apply SNo_CSNo to the current goal.
An exact proof term for the current goal is Ly.
We prove the intermediate claim Lsnz: s <> 0.
Assume H1: s = 0.
Apply Hznz to the current goal.
We will prove z = 0.
An exact proof term for the current goal is abs_sqr_CSNo_zero z Hz H1.
We prove the intermediate claim L1: Re (i :*: u :*: y) = 0.
rewrite the current goal using mul_CSNo_CRe i (u :*: y) CSNo_Complex_i ?? (from left to right).
We will prove Re i * Re (u :*: y) + - (Im (u :*: y) * Im i) = 0.
rewrite the current goal using Re_i (from left to right).
rewrite the current goal using Im_i (from left to right).
We will prove 0 * Re (u :*: y) + - (Im (u :*: y) * 1) = 0.
rewrite the current goal using mul_SNo_zeroL (Re (u :*: y)) (CSNo_ReR (u :*: y) (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly))) (from left to right).
rewrite the current goal using mul_SNo_oneR (Im (u :*: y)) (CSNo_ImR (u :*: y) (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly))) (from left to right).
We will prove 0 + - Im (u :*: y) = 0.
rewrite the current goal using mul_CSNo_CIm u y LuC (SNo_CSNo y Ly) (from left to right).
We will prove 0 + - (Im y * Re u + Im u * Re y) = 0.
rewrite the current goal using SNo_Im y Ly (from left to right).
rewrite the current goal using SNo_Im u Lu (from left to right).
We will prove 0 + - (0 * Re u + 0 * Re y) = 0.
rewrite the current goal using mul_SNo_zeroL (Re u) LReuS (from left to right).
rewrite the current goal using mul_SNo_zeroL (Re y) (CSNo_ReR y (SNo_CSNo y Ly)) (from left to right).
We will prove 0 + - (0 + 0) = 0.
rewrite the current goal using add_SNo_0L 0 SNo_0 (from left to right).
rewrite the current goal using minus_SNo_0 (from left to right).
An exact proof term for the current goal is add_SNo_0L 0 SNo_0.
We prove the intermediate claim L2: Im (i :*: u :*: y) = u * y.
rewrite the current goal using mul_CSNo_CIm i (u :*: y) CSNo_Complex_i ?? (from left to right).
We will prove Im (u :*: y) * Re i + Im i * Re (u :*: y) = u * y.
rewrite the current goal using Re_i (from left to right).
rewrite the current goal using Im_i (from left to right).
We will prove Im (u :*: y) * 0 + 1 * Re (u :*: y) = u * y.
rewrite the current goal using mul_SNo_zeroR (Im (u :*: y)) (CSNo_ImR (u :*: y) (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly))) (from left to right).
rewrite the current goal using mul_SNo_oneL (Re (u :*: y)) (CSNo_ReR (u :*: y) (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly))) (from left to right).
We will prove 0 + Re (u :*: y) = u * y.
rewrite the current goal using mul_CSNo_mul_SNo u y Lu Ly (from left to right).
rewrite the current goal using SNo_Re (u * y) (SNo_mul_SNo u y ?? ??) (from left to right).
We will prove 0 + u * y = u * y.
An exact proof term for the current goal is add_SNo_0L (u * y) (SNo_mul_SNo u y ?? ??).
We will prove z :*: pa (x :/: s) (- (y :/: s)) = 1.
Use transitivity with and (z :*: (u :*: x :+: :-: i :*: u :*: y)).
We will prove z :*: pa (x :/: s) (- (y :/: s)) = z :*: (u :*: x :+: :-: i :*: u :*: y).
Use f_equal.
We will prove pa (x :/: s) (- (y :/: s)) = u :*: x :+: :-: i :*: u :*: y.
Apply CSNo_ReIm_split (pa (x :/: s) (- (y :/: s))) (u :*: x :+: :-: i :*: u :*: y) to the current goal.
We will prove CSNo (pa (x :/: s) (- (y :/: s))).
Apply CSNo_I to the current goal.
We will prove SNo (x :/: s).
An exact proof term for the current goal is SNo_div_SNo x s ?? ??.
Apply SNo_minus_SNo to the current goal.
We will prove SNo (y :/: s).
An exact proof term for the current goal is SNo_div_SNo y s ?? ??.
We will prove CSNo (u :*: x :+: :-: i :*: u :*: y).
Apply CSNo_add_CSNo to the current goal.
An exact proof term for the current goal is CSNo_mul_CSNo u x LuC (SNo_CSNo x Lx).
Apply CSNo_minus_CSNo to the current goal.
Apply CSNo_mul_CSNo to the current goal.
An exact proof term for the current goal is CSNo_Complex_i.
An exact proof term for the current goal is CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly).
We will prove Re (pa (x :/: s) (- (y :/: s))) = Re (u :*: x :+: :-: i :*: u :*: y).
rewrite the current goal using CSNo_Re2 (x :/: s) (- (y :/: s)) (SNo_div_SNo x s Lx Ls) (SNo_minus_SNo (y :/: s) (SNo_div_SNo y s Ly Ls)) (from left to right).
We will prove x :/: s = Re (u :*: x :+: :-: i :*: u :*: y).
rewrite the current goal using add_CSNo_CRe (u :*: x) (:-: i :*: u :*: y) (CSNo_mul_CSNo u x LuC (SNo_CSNo x Lx)) (CSNo_minus_CSNo (i :*: u :*: y) (CSNo_mul_CSNo i (u :*: y) CSNo_Complex_i (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly)))) (from left to right).
We will prove x :/: s = Re (u :*: x) + Re (:-: i :*: u :*: y).
rewrite the current goal using mul_CSNo_mul_SNo u x Lu Lx (from left to right).
We will prove x :/: s = Re (u * x) + Re (:-: i :*: u :*: y).
rewrite the current goal using SNo_Re (u * x) (SNo_mul_SNo u x ?? ??) (from left to right).
We will prove x :/: s = u * x + Re (:-: i :*: u :*: y).
rewrite the current goal using minus_CSNo_CRe (i :*: u :*: y) (CSNo_mul_CSNo i (u :*: y) CSNo_Complex_i (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly))) (from left to right).
We will prove x :/: s = u * x + - Re (i :*: u :*: y).
rewrite the current goal using L1 (from left to right).
We will prove x :/: s = u * x + - 0.
rewrite the current goal using minus_SNo_0 (from left to right).
We will prove x :/: s = u * x + 0.
rewrite the current goal using add_SNo_0R (u * x) (SNo_mul_SNo u x ?? ??) (from left to right).
We will prove x * u = u * x.
An exact proof term for the current goal is mul_SNo_com x u ?? ??.
We will prove Im (pa (x :/: s) (- (y :/: s))) = Im (u :*: x :+: :-: i :*: u :*: y).
rewrite the current goal using CSNo_Im2 (x :/: s) (- (y :/: s)) (SNo_div_SNo x s Lx Ls) (SNo_minus_SNo (y :/: s) (SNo_div_SNo y s Ly Ls)) (from left to right).
rewrite the current goal using add_CSNo_CIm (u :*: x) (:-: i :*: u :*: y) (CSNo_mul_CSNo u x LuC (SNo_CSNo x Lx)) (CSNo_minus_CSNo (i :*: u :*: y) (CSNo_mul_CSNo i (u :*: y) CSNo_Complex_i (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly)))) (from left to right).
We will prove - (y :/: s) = Im (u :*: x) + Im (:-: i :*: u :*: y).
rewrite the current goal using minus_CSNo_CIm (i :*: u :*: y) (CSNo_mul_CSNo i (u :*: y) CSNo_Complex_i (CSNo_mul_CSNo u y LuC (SNo_CSNo y Ly))) (from left to right).
We will prove - (y :/: s) = Im (u :*: x) + - Im (i :*: u :*: y).
rewrite the current goal using mul_CSNo_mul_SNo u x Lu Lx (from left to right).
rewrite the current goal using SNo_Im (u * x) (SNo_mul_SNo u x ?? ??) (from left to right).
We will prove - (y :/: s) = 0 + - Im (i :*: u :*: y).
rewrite the current goal using L2 (from left to right).
We will prove - (y :/: s) = 0 + - (u * y).
We will prove - (y * u) = 0 + - (u * y).
rewrite the current goal using add_SNo_0L (- u * y) (SNo_minus_SNo (u * y) (SNo_mul_SNo u y ?? ??)) (from left to right).
Use f_equal.
An exact proof term for the current goal is mul_SNo_com y u ?? ??.
We will prove z :*: (u :*: x :+: :-: i :*: u :*: y) = 1.
Apply CSNo_relative_recip z Hz u Lu to the current goal.
We will prove (x ^ 2 + y ^ 2) * u = 1.
We will prove s * u = 1.
An exact proof term for the current goal is recip_SNo_invR s Ls Lsnz.
Theorem. (recip_CSNo_invL) The following is provable:
∀z, CSNo zz <> 0recip_CSNo z :*: z = 1
Proof:
Let z be given.
Assume Hz Hznz.
rewrite the current goal using mul_CSNo_com (recip_CSNo z) z (CSNo_recip_CSNo z Hz) Hz (from left to right).
An exact proof term for the current goal is recip_CSNo_invR z Hz Hznz.
Theorem. (CSNo_div_CSNo) The following is provable:
∀z w, CSNo zCSNo wCSNo (div_CSNo z w)
Proof:
Let z and w be given.
Assume Hz Hw.
An exact proof term for the current goal is CSNo_mul_CSNo z (recip_CSNo w) Hz (CSNo_recip_CSNo w Hw).
Theorem. (mul_div_CSNo_invL) The following is provable:
∀z w, CSNo zCSNo ww <> 0(div_CSNo z w) :*: w = z
Proof:
Let z and w be given.
Assume Hz Hw Hw0.
We will prove (z :*: recip_CSNo w) :*: w = z.
rewrite the current goal using mul_CSNo_assoc z (recip_CSNo w) w Hz (CSNo_recip_CSNo w Hw) Hw (from right to left).
We will prove z :*: (recip_CSNo w :*: w) = z.
rewrite the current goal using recip_CSNo_invL w Hw Hw0 (from left to right).
We will prove z :*: 1 = z.
An exact proof term for the current goal is mul_CSNo_1R z Hz.
Theorem. (mul_div_CSNo_invR) The following is provable:
∀z w, CSNo zCSNo ww <> 0w :*: (div_CSNo z w) = z
Proof:
Let z and w be given.
Assume Hz Hw Hw0.
rewrite the current goal using mul_CSNo_com w (div_CSNo z w) Hw (CSNo_div_CSNo z w Hz Hw) (from left to right).
An exact proof term for the current goal is mul_div_CSNo_invL z w Hz Hw Hw0.
Theorem. (sqrt_SNo_nonneg_sqr_id) The following is provable:
∀x, SNo x0 <= xsqrt_SNo_nonneg (x ^ 2) = x
Proof:
Let x be given.
Assume Hx Hxnn.
We prove the intermediate claim Lx2S: SNo (x ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat x Hx 2 nat_2.
We prove the intermediate claim Lx2nn: 0 <= x ^ 2.
rewrite the current goal using exp_SNo_nat_2 x Hx (from left to right).
An exact proof term for the current goal is SNo_sqr_nonneg x Hx.
We prove the intermediate claim Lsx2S: SNo (sqrt_SNo_nonneg (x ^ 2)).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg (x ^ 2) ?? ??.
We prove the intermediate claim Lsx2nn: 0 <= sqrt_SNo_nonneg (x ^ 2).
An exact proof term for the current goal is sqrt_SNo_nonneg_nonneg (x ^ 2) ?? ??.
We prove the intermediate claim Lsx22xx: sqrt_SNo_nonneg (x ^ 2) * sqrt_SNo_nonneg (x ^ 2) = x * x.
rewrite the current goal using exp_SNo_nat_2 x Hx (from right to left).
An exact proof term for the current goal is sqrt_SNo_nonneg_sqr (x ^ 2) ?? ??.
Apply SNoLeE 0 x SNo_0 Hx Hxnn to the current goal.
Assume H1: 0 < x.
We prove the intermediate claim L1: 0 < sqrt_SNo_nonneg (x ^ 2).
Apply SNoLeE 0 (sqrt_SNo_nonneg (x ^ 2)) SNo_0 ?? ?? to the current goal.
Assume H2: 0 < sqrt_SNo_nonneg (x ^ 2).
An exact proof term for the current goal is H2.
Assume H2: 0 = sqrt_SNo_nonneg (x ^ 2).
We will prove False.
Apply SNoLt_irref 0 to the current goal.
rewrite the current goal using mul_SNo_zeroR 0 SNo_0 (from right to left) at position 2.
We will prove 0 < 0 * 0.
rewrite the current goal using H2 (from left to right) at positions 2 and 3.
rewrite the current goal using Lsx22xx (from left to right).
We will prove 0 < x * x.
An exact proof term for the current goal is mul_SNo_pos_pos x x ?? ?? ?? ??.
Apply SNoLt_trichotomy_or_impred (sqrt_SNo_nonneg (x ^ 2)) x Lsx2S Hx to the current goal.
Assume H2: sqrt_SNo_nonneg (x ^ 2) < x.
We will prove False.
Apply SNoLt_irref (x * x) to the current goal.
We will prove x * x < x * x.
rewrite the current goal using Lsx22xx (from right to left) at position 1.
We will prove sqrt_SNo_nonneg (x ^ 2) * sqrt_SNo_nonneg (x ^ 2) < x * x.
An exact proof term for the current goal is pos_mul_SNo_Lt2 (sqrt_SNo_nonneg (x ^ 2)) (sqrt_SNo_nonneg (x ^ 2)) x x ?? ?? ?? ?? L1 L1 H2 H2.
Assume H2: sqrt_SNo_nonneg (x ^ 2) = x.
An exact proof term for the current goal is H2.
Assume H2: x < sqrt_SNo_nonneg (x ^ 2).
We will prove False.
Apply SNoLt_irref (x * x) to the current goal.
We will prove x * x < x * x.
rewrite the current goal using Lsx22xx (from right to left) at position 2.
We will prove x * x < sqrt_SNo_nonneg (x ^ 2) * sqrt_SNo_nonneg (x ^ 2).
An exact proof term for the current goal is pos_mul_SNo_Lt2 x x (sqrt_SNo_nonneg (x ^ 2)) (sqrt_SNo_nonneg (x ^ 2)) ?? ?? ?? ?? H1 H1 H2 H2.
Assume H1: 0 = x.
rewrite the current goal using exp_SNo_nat_2 x Hx (from left to right).
rewrite the current goal using H1 (from right to left).
We will prove sqrt_SNo_nonneg (0 * 0) = 0.
rewrite the current goal using mul_SNo_zeroL 0 SNo_0 (from left to right).
We will prove sqrt_SNo_nonneg 0 = 0.
An exact proof term for the current goal is sqrt_SNo_nonneg_0.
Theorem. (sqrt_SNo_nonneg_mon_strict) The following is provable:
∀x y, SNo xSNo y0 <= xx < ysqrt_SNo_nonneg x < sqrt_SNo_nonneg y
Proof:
Let x and y be given.
Assume Hx Hy Hxnn Hxy.
We prove the intermediate claim LsxS: SNo (sqrt_SNo_nonneg x).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg x ?? ??.
We prove the intermediate claim Lsxnn: 0 <= sqrt_SNo_nonneg x.
An exact proof term for the current goal is sqrt_SNo_nonneg_nonneg x ?? ??.
We prove the intermediate claim Lynn: 0 <= y.
Apply SNoLe_tra 0 x y SNo_0 ?? ?? ?? to the current goal.
We will prove x <= y.
Apply SNoLtLe to the current goal.
An exact proof term for the current goal is Hxy.
We prove the intermediate claim LsyS: SNo (sqrt_SNo_nonneg y).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg y ?? ??.
We prove the intermediate claim Lsynn: 0 <= sqrt_SNo_nonneg y.
An exact proof term for the current goal is sqrt_SNo_nonneg_nonneg y ?? ??.
Apply SNoLtLe_or (sqrt_SNo_nonneg x) (sqrt_SNo_nonneg y) ?? ?? to the current goal.
Assume H2.
An exact proof term for the current goal is H2.
We will prove False.
Apply SNoLt_irref x to the current goal.
We will prove x < x.
Apply SNoLtLe_tra x y x Hx Hy Hx Hxy to the current goal.
We will prove y <= x.
rewrite the current goal using sqrt_SNo_nonneg_sqr y ?? ?? (from right to left).
rewrite the current goal using sqrt_SNo_nonneg_sqr x ?? ?? (from right to left).
Apply nonneg_mul_SNo_Le2 (sqrt_SNo_nonneg y) (sqrt_SNo_nonneg y) (sqrt_SNo_nonneg x) (sqrt_SNo_nonneg x) ?? ?? ?? ?? ?? ?? ?? ?? to the current goal.
Theorem. (sqrt_SNo_nonneg_mon) The following is provable:
∀x y, SNo xSNo y0 <= xx <= ysqrt_SNo_nonneg x <= sqrt_SNo_nonneg y
Proof:
Let x and y be given.
Assume Hx Hy Hxnn Hxy.
Apply SNoLeE x y Hx Hy Hxy to the current goal.
Assume H1: x < y.
Apply SNoLtLe to the current goal.
We will prove sqrt_SNo_nonneg x < sqrt_SNo_nonneg y.
An exact proof term for the current goal is sqrt_SNo_nonneg_mon_strict x y Hx Hy Hxnn H1.
Assume H1: x = y.
rewrite the current goal using H1 (from left to right).
Apply SNoLe_ref to the current goal.
Theorem. (sqrt_SNo_nonneg_mul_SNo) The following is provable:
∀x y, SNo xSNo y0 <= x0 <= ysqrt_SNo_nonneg (x * y) = sqrt_SNo_nonneg x * sqrt_SNo_nonneg y
Proof:
Let x and y be given.
Assume Hx Hy Hxnn Hynn.
We prove the intermediate claim LsxS: SNo (sqrt_SNo_nonneg x).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg x ?? ??.
We prove the intermediate claim Lsxnn: 0 <= sqrt_SNo_nonneg x.
An exact proof term for the current goal is sqrt_SNo_nonneg_nonneg x ?? ??.
We prove the intermediate claim LsyS: SNo (sqrt_SNo_nonneg y).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg y ?? ??.
We prove the intermediate claim Lsynn: 0 <= sqrt_SNo_nonneg y.
An exact proof term for the current goal is sqrt_SNo_nonneg_nonneg y ?? ??.
We prove the intermediate claim LsxsyS: SNo (sqrt_SNo_nonneg x * sqrt_SNo_nonneg y).
Apply SNo_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim L1: (sqrt_SNo_nonneg x * sqrt_SNo_nonneg y) ^ 2 = x * y.
rewrite the current goal using exp_SNo_nat_2 (sqrt_SNo_nonneg x * sqrt_SNo_nonneg y) ?? (from left to right).
rewrite the current goal using mul_SNo_com_4_inner_mid (sqrt_SNo_nonneg x) (sqrt_SNo_nonneg y) (sqrt_SNo_nonneg x) (sqrt_SNo_nonneg y) ?? ?? ?? ?? (from left to right).
Use f_equal.
An exact proof term for the current goal is sqrt_SNo_nonneg_sqr x ?? ??.
An exact proof term for the current goal is sqrt_SNo_nonneg_sqr y ?? ??.
rewrite the current goal using L1 (from right to left).
Apply sqrt_SNo_nonneg_sqr_id to the current goal.
We will prove SNo (sqrt_SNo_nonneg x * sqrt_SNo_nonneg y).
An exact proof term for the current goal is LsxsyS.
We will prove 0 <= sqrt_SNo_nonneg x * sqrt_SNo_nonneg y.
Apply mul_SNo_nonneg_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Definition. We define modulus_CSNo to be λz ⇒ sqrt_SNo_nonneg (abs_sqr_CSNo z) of type setset.
Theorem. (SNo_modulus_CSNo) The following is provable:
∀z, CSNo zSNo (modulus_CSNo z)
Proof:
Let z be given.
Assume Hz.
We will prove SNo (sqrt_SNo_nonneg (abs_sqr_CSNo z)).
Apply SNo_sqrt_SNo_nonneg to the current goal.
An exact proof term for the current goal is SNo_abs_sqr_CSNo z Hz.
An exact proof term for the current goal is abs_sqr_CSNo_nonneg z Hz.
Theorem. (modulus_CSNo_nonneg) The following is provable:
∀z, CSNo z0 <= modulus_CSNo z
Proof:
Let z be given.
Assume Hz.
We will prove 0 <= sqrt_SNo_nonneg (abs_sqr_CSNo z).
Apply sqrt_SNo_nonneg_nonneg to the current goal.
An exact proof term for the current goal is SNo_abs_sqr_CSNo z Hz.
An exact proof term for the current goal is abs_sqr_CSNo_nonneg z Hz.
Definition. We define sqrt_CSNo to be λz ⇒ if Im z < 0 \/ Im z = 0 /\ Re z < 0 then pa (sqrt_SNo_nonneg (eps_ 1 * (Re z + modulus_CSNo z))) (- sqrt_SNo_nonneg (eps_ 1 * (- Re z + modulus_CSNo z))) else pa (sqrt_SNo_nonneg (eps_ 1 * (Re z + modulus_CSNo z))) (sqrt_SNo_nonneg (eps_ 1 * (- Re z + modulus_CSNo z))) of type setset.
Theorem. (sqrt_CSNo_sqrt) The following is provable:
∀z, CSNo zsqrt_CSNo z :^: 2 = z
Proof:
Let z be given.
Assume Hz.
Set x to be the term Re z.
Set y to be the term Im z.
Set gamma to be the term (sqrt_SNo_nonneg (eps_ 1 * (x + modulus_CSNo z))).
Set delta to be the term (sqrt_SNo_nonneg (eps_ 1 * (- x + modulus_CSNo z))).
We will prove (if y < 0 \/ y = 0 /\ x < 0 then pa gamma (- delta) else pa gamma delta) :^: 2 = z.
We prove the intermediate claim Lx: SNo x.
An exact proof term for the current goal is CSNo_ReR z Hz.
We prove the intermediate claim Ly: SNo y.
An exact proof term for the current goal is CSNo_ImR z Hz.
We prove the intermediate claim Lmx: SNo (- x).
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is Lx.
We prove the intermediate claim Lmy: SNo (- y).
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is Ly.
We prove the intermediate claim LmS: SNo (modulus_CSNo z).
An exact proof term for the current goal is SNo_modulus_CSNo z Hz.
We prove the intermediate claim Lmnn: 0 <= modulus_CSNo z.
An exact proof term for the current goal is modulus_CSNo_nonneg z Hz.
We prove the intermediate claim Lx2S: SNo (x ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat x Lx 2 nat_2.
We prove the intermediate claim Ly2S: SNo (y ^ 2).
An exact proof term for the current goal is SNo_exp_SNo_nat y Ly 2 nat_2.
We prove the intermediate claim Lx2nn: 0 <= x ^ 2.
rewrite the current goal using exp_SNo_nat_2 x Lx (from left to right).
An exact proof term for the current goal is SNo_sqr_nonneg x Lx.
We prove the intermediate claim Ly2nn: 0 <= y ^ 2.
rewrite the current goal using exp_SNo_nat_2 y Ly (from left to right).
An exact proof term for the current goal is SNo_sqr_nonneg y Ly.
We prove the intermediate claim Lx2mx2: x ^ 2 = (- x) ^ 2.
rewrite the current goal using exp_SNo_nat_2 x Lx (from left to right).
rewrite the current goal using exp_SNo_nat_2 (- x) Lmx (from left to right).
We will prove x * x = (- x) * (- x).
Use symmetry.
An exact proof term for the current goal is mul_SNo_minus_minus x x Lx Lx.
We prove the intermediate claim LazS: SNo (abs_sqr_CSNo z).
An exact proof term for the current goal is SNo_abs_sqr_CSNo z Hz.
We prove the intermediate claim Laznn: 0 <= abs_sqr_CSNo z.
An exact proof term for the current goal is abs_sqr_CSNo_nonneg z Hz.
We prove the intermediate claim Lsx2S: SNo (sqrt_SNo_nonneg (x ^ 2)).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg (x ^ 2) ?? ??.
We prove the intermediate claim Lsx2nn: 0 <= sqrt_SNo_nonneg (x ^ 2).
An exact proof term for the current goal is sqrt_SNo_nonneg_nonneg (x ^ 2) ?? ??.
We prove the intermediate claim Lsy2S: SNo (sqrt_SNo_nonneg (y ^ 2)).
An exact proof term for the current goal is SNo_sqrt_SNo_nonneg (y ^ 2) ?? ??.
We prove the intermediate claim Lmgtx: x <= modulus_CSNo z.
We will prove x <= sqrt_SNo_nonneg (x ^ 2 + y ^ 2).
Apply SNoLe_tra x (sqrt_SNo_nonneg (x ^ 2)) (sqrt_SNo_nonneg (x ^ 2 + y ^ 2)) Lx ?? ?? to the current goal.
We will prove x <= sqrt_SNo_nonneg (x ^ 2).
Apply SNoLtLe_or x 0 Lx SNo_0 to the current goal.
Assume H1: x < 0.
Apply SNoLe_tra x 0 (sqrt_SNo_nonneg (x ^ 2)) Lx SNo_0 ?? to the current goal.
Apply SNoLtLe to the current goal.
An exact proof term for the current goal is H1.
We will prove 0 <= sqrt_SNo_nonneg (x ^ 2).
An exact proof term for the current goal is Lsx2nn.
Assume H1: 0 <= x.
rewrite the current goal using sqrt_SNo_nonneg_sqr_id x Lx H1 (from left to right).
Apply SNoLe_ref to the current goal.
We will prove sqrt_SNo_nonneg (x ^ 2) <= sqrt_SNo_nonneg (x ^ 2 + y ^ 2).
Apply sqrt_SNo_nonneg_mon to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We will prove x ^ 2 <= x ^ 2 + y ^ 2.
rewrite the current goal using add_SNo_0R (x ^ 2) ?? (from right to left) at position 1.
We will prove x ^ 2 + 0 <= x ^ 2 + y ^ 2.
Apply add_SNo_Le2 to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is SNo_0.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lmgtnx: - x <= modulus_CSNo z.
We will prove - x <= sqrt_SNo_nonneg (x ^ 2 + y ^ 2).
Apply SNoLe_tra (- x) (sqrt_SNo_nonneg (x ^ 2)) (sqrt_SNo_nonneg (x ^ 2 + y ^ 2)) Lmx ?? ?? to the current goal.
We will prove - x <= sqrt_SNo_nonneg (x ^ 2).
Apply SNoLtLe_or (- x) 0 Lmx SNo_0 to the current goal.
Assume H1: - x < 0.
Apply SNoLe_tra (- x) 0 (sqrt_SNo_nonneg (x ^ 2)) Lmx SNo_0 ?? to the current goal.
Apply SNoLtLe to the current goal.
An exact proof term for the current goal is H1.
We will prove 0 <= sqrt_SNo_nonneg (x ^ 2).
An exact proof term for the current goal is Lsx2nn.
Assume H1: 0 <= - x.
rewrite the current goal using Lx2mx2 (from left to right).
rewrite the current goal using sqrt_SNo_nonneg_sqr_id (- x) Lmx H1 (from left to right).
Apply SNoLe_ref to the current goal.
We will prove sqrt_SNo_nonneg (x ^ 2) <= sqrt_SNo_nonneg (x ^ 2 + y ^ 2).
Apply sqrt_SNo_nonneg_mon to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We will prove x ^ 2 <= x ^ 2 + y ^ 2.
rewrite the current goal using add_SNo_0R (x ^ 2) ?? (from right to left) at position 1.
We will prove x ^ 2 + 0 <= x ^ 2 + y ^ 2.
Apply add_SNo_Le2 to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is SNo_0.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LaS: SNo (x + modulus_CSNo z).
Apply SNo_add_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LmaS: SNo (- x + modulus_CSNo z).
Apply SNo_add_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LmmS: SNo (- modulus_CSNo z).
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is ??.
We prove the intermediate claim LammS: SNo (x + - modulus_CSNo z).
Apply SNo_add_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Le1S: SNo (eps_ 1).
An exact proof term for the current goal is SNo_eps_ 1 (nat_p_omega 1 nat_1).
We prove the intermediate claim Le1nn: 0 <= eps_ 1.
Apply SNoLtLe to the current goal.
An exact proof term for the current goal is SNo_eps_pos 1 (nat_p_omega 1 nat_1).
We prove the intermediate claim Le12S: SNo (eps_ 1 ^ 2).
Apply SNo_exp_SNo_nat to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is nat_2.
We prove the intermediate claim Le12nn: 0 <= eps_ 1 ^ 2.
rewrite the current goal using exp_SNo_nat_2 (eps_ 1) ?? (from left to right).
Apply mul_SNo_nonneg_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Le1aS: SNo (eps_ 1 * (x + modulus_CSNo z)).
Apply SNo_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lann: 0 <= x + modulus_CSNo z.
rewrite the current goal using add_SNo_com x (modulus_CSNo z) ?? ?? (from left to right).
We will prove 0 <= modulus_CSNo z + x.
rewrite the current goal using minus_SNo_invol x Lx (from right to left).
We will prove 0 <= modulus_CSNo z + - - x.
Apply add_SNo_minus_Le2b (modulus_CSNo z) (- x) 0 ?? Lmx SNo_0 to the current goal.
We will prove 0 + - x <= modulus_CSNo z.
rewrite the current goal using add_SNo_0L (- x) Lmx (from left to right).
We will prove - x <= modulus_CSNo z.
An exact proof term for the current goal is Lmgtnx.
We prove the intermediate claim Le1ann: 0 <= eps_ 1 * (x + modulus_CSNo z).
Apply mul_SNo_nonneg_nonneg (eps_ 1) (x + modulus_CSNo z) to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Le1maS: SNo (eps_ 1 * (- x + modulus_CSNo z)).
Apply SNo_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lmann: 0 <= - x + modulus_CSNo z.
rewrite the current goal using add_SNo_com (- x) (modulus_CSNo z) ?? ?? (from left to right).
We will prove 0 <= modulus_CSNo z + - x.
Apply add_SNo_minus_Le2b (modulus_CSNo z) x 0 ?? Lx SNo_0 to the current goal.
We will prove 0 + x <= modulus_CSNo z.
rewrite the current goal using add_SNo_0L x Lx (from left to right).
We will prove x <= modulus_CSNo z.
An exact proof term for the current goal is Lmgtx.
We prove the intermediate claim Le1mann: 0 <= eps_ 1 * (- x + modulus_CSNo z).
Apply mul_SNo_nonneg_nonneg (eps_ 1) (- x + modulus_CSNo z) to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LmxmzxmzS: SNo ((- x + modulus_CSNo z) * (x + modulus_CSNo z)).
Apply SNo_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lmxmzxmznn: 0 <= (- x + modulus_CSNo z) * (x + modulus_CSNo z).
Apply mul_SNo_nonneg_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LgammaS: SNo gamma.
Apply SNo_sqrt_SNo_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lgammann: 0 <= gamma.
Apply sqrt_SNo_nonneg_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LdeltaS: SNo delta.
Apply SNo_sqrt_SNo_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Ldeltann: 0 <= delta.
Apply sqrt_SNo_nonneg_nonneg to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim LmdeltaS: SNo (- delta).
Apply SNo_minus_SNo to the current goal.
An exact proof term for the current goal is ??.
We prove the intermediate claim LdeltagammaS: SNo (delta * gamma).
Apply SNo_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lpa1: CSNo (pa gamma (- delta)).
Apply CSNo_I to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lpa2: CSNo (pa gamma delta).
Apply CSNo_I to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
We prove the intermediate claim Lpa1s: CSNo (pa gamma (- delta) :^: 2).
Apply CSNo_exp_CSNo_nat to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is nat_2.
We prove the intermediate claim Lpa2s: CSNo (pa gamma delta :^: 2).
Apply CSNo_exp_CSNo_nat to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is nat_2.
We prove the intermediate claim Lgamma2eq: gamma * gamma = eps_ 1 * (x + modulus_CSNo z).
An exact proof term for the current goal is sqrt_SNo_nonneg_sqr (eps_ 1 * (x + modulus_CSNo z)) ?? ??.
We prove the intermediate claim Ldelta2eq: delta * delta = eps_ 1 * (- x + modulus_CSNo z).
An exact proof term for the current goal is sqrt_SNo_nonneg_sqr (eps_ 1 * (- x + modulus_CSNo z)) ?? ??.
We prove the intermediate claim Ldeltagamma: delta * gamma = eps_ 1 * sqrt_SNo_nonneg (y ^ 2).
Apply sqrt_SNo_nonneg_mul_SNo (eps_ 1 * (- x + modulus_CSNo z)) (eps_ 1 * (x + modulus_CSNo z)) ?? ?? ?? ?? (λu _ ⇒ u = eps_ 1 * sqrt_SNo_nonneg (y ^ 2)) to the current goal.
We will prove sqrt_SNo_nonneg ((eps_ 1 * (- x + modulus_CSNo z)) * (eps_ 1 * (x + modulus_CSNo z))) = eps_ 1 * sqrt_SNo_nonneg (y ^ 2).
rewrite the current goal using mul_SNo_com_4_inner_mid (eps_ 1) (- x + modulus_CSNo z) (eps_ 1) (x + modulus_CSNo z) ?? ?? ?? ?? (from left to right).
We will prove sqrt_SNo_nonneg ((eps_ 1 * eps_ 1) * ((- x + modulus_CSNo z) * (x + modulus_CSNo z))) = eps_ 1 * sqrt_SNo_nonneg (y ^ 2).
rewrite the current goal using exp_SNo_nat_2 (eps_ 1) ?? (from right to left).
Apply sqrt_SNo_nonneg_mul_SNo (eps_ 1 ^ 2) ((- x + modulus_CSNo z) * (x + modulus_CSNo z)) ?? ?? ?? ?? (λ_ v ⇒ v = eps_ 1 * sqrt_SNo_nonneg (y ^ 2)) to the current goal.
rewrite the current goal using sqrt_SNo_nonneg_sqr_id (eps_ 1) ?? ?? (from left to right).
We will prove (eps_ 1) * sqrt_SNo_nonneg ((- x + modulus_CSNo z) * (x + modulus_CSNo z)) = eps_ 1 * sqrt_SNo_nonneg (y ^ 2).
Use f_equal.
Use f_equal.
We will prove (- x + modulus_CSNo z) * (x + modulus_CSNo z) = y ^ 2.
rewrite the current goal using SNo_foil (- x) (modulus_CSNo z) x (modulus_CSNo z) ?? ?? ?? ?? (from left to right).
We will prove (- x) * x + (- x) * modulus_CSNo z + modulus_CSNo z * x + modulus_CSNo z * modulus_CSNo z = y ^ 2.
rewrite the current goal using mul_SNo_minus_distrL x (modulus_CSNo z) ?? ?? (from left to right).
rewrite the current goal using mul_SNo_com (modulus_CSNo z) x ?? ?? (from left to right).
rewrite the current goal using add_SNo_minus_L2 (x * modulus_CSNo z) (modulus_CSNo z * modulus_CSNo z) (SNo_mul_SNo x (modulus_CSNo z) ?? ??) (SNo_mul_SNo (modulus_CSNo z) (modulus_CSNo z) ?? ??) (from left to right).
We will prove (- x) * x + modulus_CSNo z * modulus_CSNo z = y ^ 2.
We will prove (- x) * x + sqrt_SNo_nonneg (abs_sqr_CSNo z) * sqrt_SNo_nonneg (abs_sqr_CSNo z) = y ^ 2.
rewrite the current goal using sqrt_SNo_nonneg_sqr (abs_sqr_CSNo z) ?? ?? (from left to right).
We will prove (- x) * x + x ^ 2 + y ^ 2 = y ^ 2.
Apply mul_SNo_minus_distrL x x ?? ?? (λ_ v ⇒ v + x ^ 2 + y ^ 2 = y ^ 2) to the current goal.
rewrite the current goal using exp_SNo_nat_2 x ?? (from right to left).
We will prove - x ^ 2 + x ^ 2 + y ^ 2 = y ^ 2.
An exact proof term for the current goal is add_SNo_minus_L2 (x ^ 2) (y ^ 2) ?? ??.
We prove the intermediate claim Lgamma2mdelta2: gamma * gamma + - (delta * delta) = x.
rewrite the current goal using Lgamma2eq (from left to right).
rewrite the current goal using Ldelta2eq (from left to right).
We will prove eps_ 1 * (x + modulus_CSNo z) + - eps_ 1 * (- x + modulus_CSNo z) = x.
rewrite the current goal using mul_SNo_minus_distrR (eps_ 1) (- x + modulus_CSNo z) ?? ?? (from right to left).
We will prove eps_ 1 * (x + modulus_CSNo z) + eps_ 1 * (- (- x + modulus_CSNo z)) = x.
rewrite the current goal using minus_add_SNo_distr (- x) (modulus_CSNo z) ?? ?? (from left to right).
rewrite the current goal using minus_SNo_invol x ?? (from left to right).
We will prove eps_ 1 * (x + modulus_CSNo z) + eps_ 1 * (x + - modulus_CSNo z) = x.
rewrite the current goal using mul_SNo_distrL (eps_ 1) (x + modulus_CSNo z) (x + - modulus_CSNo z) ?? ?? ?? (from right to left).
We will prove eps_ 1 * ((x + modulus_CSNo z) + (x + - modulus_CSNo z)) = x.
rewrite the current goal using add_SNo_com_4_inner_mid x (modulus_CSNo z) x (- modulus_CSNo z) ?? ?? ?? ?? (from left to right).
We will prove eps_ 1 * ((x + x) + (modulus_CSNo z + - modulus_CSNo z)) = x.
rewrite the current goal using add_SNo_minus_SNo_rinv (modulus_CSNo z) ?? (from left to right).
We will prove eps_ 1 * ((x + x) + 0) = x.
rewrite the current goal using add_SNo_0R (x + x) (SNo_add_SNo x x ?? ??) (from left to right).
We will prove eps_ 1 * (x + x) = x.
rewrite the current goal using mul_SNo_distrL (eps_ 1) x x ?? ?? ?? (from left to right).
We will prove eps_ 1 * x + eps_ 1 * x = x.
rewrite the current goal using mul_SNo_distrR (eps_ 1) (eps_ 1) x ?? ?? ?? (from right to left).
We will prove (eps_ 1 + eps_ 1) * x = x.
rewrite the current goal using eps_1_half_eq1 (from left to right).
An exact proof term for the current goal is mul_SNo_oneL x ??.
Apply SNoLt_trichotomy_or_impred y 0 Ly SNo_0 to the current goal.
Assume H1: y < 0.
We prove the intermediate claim Lcase1cond: y < 0 \/ y = 0 /\ x < 0.
Apply orIL to the current goal.
An exact proof term for the current goal is H1.
rewrite the current goal using If_i_1 (y < 0 \/ y = 0 /\ x < 0) (pa gamma (- delta)) (pa gamma delta) Lcase1cond (from left to right).
We will prove pa gamma (- delta) :^: 2 = z.
Apply CSNo_ReIm_split (pa gamma (- delta) :^: 2) z ?? Hz to the current goal.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma (- delta)) ?? (from left to right).
We will prove Re (pa gamma (- delta) :*: pa gamma (- delta)) = x.
rewrite the current goal using mul_CSNo_CRe (pa gamma (- delta)) (pa gamma (- delta)) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma (- delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma (- delta) ?? ?? (from left to right).
We will prove gamma * gamma + - ((- delta) * (- delta)) = x.
rewrite the current goal using mul_SNo_minus_minus delta delta ?? ?? (from left to right).
We will prove gamma * gamma + - (delta * delta) = x.
An exact proof term for the current goal is Lgamma2mdelta2.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma (- delta)) ?? (from left to right).
We will prove Im (pa gamma (- delta) :*: pa gamma (- delta)) = y.
rewrite the current goal using mul_CSNo_CIm (pa gamma (- delta)) (pa gamma (- delta)) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma (- delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma (- delta) ?? ?? (from left to right).
We will prove (- delta) * gamma + (- delta) * gamma = y.
rewrite the current goal using mul_SNo_minus_distrL delta gamma ?? ?? (from left to right).
We will prove - delta * gamma + - delta * gamma = y.
rewrite the current goal using minus_add_SNo_distr (delta * gamma) (delta * gamma) ?? ?? (from right to left).
We will prove - (delta * gamma + delta * gamma) = y.
rewrite the current goal using Ldeltagamma (from left to right).
We will prove - (eps_ 1 * sqrt_SNo_nonneg (y ^ 2) + eps_ 1 * sqrt_SNo_nonneg (y ^ 2)) = y.
rewrite the current goal using mul_SNo_distrR (eps_ 1) (eps_ 1) (sqrt_SNo_nonneg (y ^ 2)) ?? ?? ?? (from right to left).
rewrite the current goal using eps_1_half_eq1 (from left to right).
rewrite the current goal using mul_SNo_oneL (sqrt_SNo_nonneg (y ^ 2)) ?? (from left to right).
We will prove - sqrt_SNo_nonneg (y ^ 2) = y.
rewrite the current goal using exp_SNo_nat_2 y ?? (from left to right).
We will prove - sqrt_SNo_nonneg (y * y) = y.
rewrite the current goal using mul_SNo_minus_minus y y ?? ?? (from right to left).
We will prove - sqrt_SNo_nonneg ((- y) * (- y)) = y.
rewrite the current goal using exp_SNo_nat_2 (- y) ?? (from right to left).
We will prove - sqrt_SNo_nonneg ((- y) ^ 2) = y.
We prove the intermediate claim L1: 0 <= - y.
Apply SNoLtLe to the current goal.
We will prove 0 < - y.
Apply minus_SNo_Lt_contra2 y 0 ?? SNo_0 to the current goal.
We will prove y < - 0.
rewrite the current goal using minus_SNo_0 (from left to right).
An exact proof term for the current goal is H1.
rewrite the current goal using sqrt_SNo_nonneg_sqr_id (- y) ?? ?? (from left to right).
An exact proof term for the current goal is minus_SNo_invol y ??.
Assume H1: y = 0.
Apply SNoLtLe_or x 0 Lx SNo_0 to the current goal.
Assume H2: x < 0.
We prove the intermediate claim Lcase1cond: y < 0 \/ y = 0 /\ x < 0.
Apply orIR to the current goal.
Apply andI to the current goal.
An exact proof term for the current goal is H1.
An exact proof term for the current goal is H2.
rewrite the current goal using If_i_1 (y < 0 \/ y = 0 /\ x < 0) (pa gamma (- delta)) (pa gamma delta) Lcase1cond (from left to right).
We will prove pa gamma (- delta) :^: 2 = z.
Apply CSNo_ReIm_split (pa gamma (- delta) :^: 2) z ?? Hz to the current goal.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma (- delta)) ?? (from left to right).
We will prove Re (pa gamma (- delta) :*: pa gamma (- delta)) = x.
rewrite the current goal using mul_CSNo_CRe (pa gamma (- delta)) (pa gamma (- delta)) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma (- delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma (- delta) ?? ?? (from left to right).
We will prove gamma * gamma + - ((- delta) * (- delta)) = x.
rewrite the current goal using mul_SNo_minus_minus delta delta ?? ?? (from left to right).
We will prove gamma * gamma + - (delta * delta) = x.
An exact proof term for the current goal is Lgamma2mdelta2.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma (- delta)) ?? (from left to right).
We will prove Im (pa gamma (- delta) :*: pa gamma (- delta)) = y.
rewrite the current goal using mul_CSNo_CIm (pa gamma (- delta)) (pa gamma (- delta)) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma (- delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma (- delta) ?? ?? (from left to right).
We will prove (- delta) * gamma + (- delta) * gamma = y.
rewrite the current goal using mul_SNo_minus_distrL delta gamma ?? ?? (from left to right).
We will prove - delta * gamma + - delta * gamma = y.
rewrite the current goal using Ldeltagamma (from left to right).
We will prove - eps_ 1 * sqrt_SNo_nonneg (y ^ 2) + - eps_ 1 * sqrt_SNo_nonneg (y ^ 2) = y.
rewrite the current goal using exp_SNo_nat_2 y ?? (from left to right).
rewrite the current goal using H1 (from left to right).
We will prove - eps_ 1 * sqrt_SNo_nonneg (0 * 0) + - eps_ 1 * sqrt_SNo_nonneg (0 * 0) = 0.
rewrite the current goal using mul_SNo_zeroL 0 SNo_0 (from left to right).
rewrite the current goal using sqrt_SNo_nonneg_0 (from left to right).
We will prove - eps_ 1 * 0 + - eps_ 1 * 0 = 0.
rewrite the current goal using mul_SNo_zeroR (eps_ 1) ?? (from left to right).
We will prove - 0 + - 0 = 0.
rewrite the current goal using minus_SNo_0 (from left to right).
We will prove 0 + 0 = 0.
An exact proof term for the current goal is add_SNo_0L 0 SNo_0.
Assume H2: 0 <= x.
We prove the intermediate claim Lcase2cond: ~ (y < 0 \/ y = 0 /\ x < 0).
Assume H.
Apply H to the current goal.
Assume H3: y < 0.
Apply SNoLt_irref y to the current goal.
We will prove y < y.
rewrite the current goal using H1 (from left to right) at position 2.
An exact proof term for the current goal is H3.
Assume H.
Apply H to the current goal.
Assume H3: y = 0.
Assume H4: x < 0.
Apply SNoLt_irref x to the current goal.
We will prove x < x.
An exact proof term for the current goal is SNoLtLe_tra x 0 x ?? SNo_0 ?? H4 H2.
rewrite the current goal using If_i_0 (y < 0 \/ y = 0 /\ x < 0) (pa gamma (- delta)) (pa gamma delta) Lcase2cond (from left to right).
We will prove pa gamma delta :^: 2 = z.
Apply CSNo_ReIm_split (pa gamma delta :^: 2) z ?? Hz to the current goal.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma delta) ?? (from left to right).
We will prove Re (pa gamma delta :*: pa gamma delta) = x.
rewrite the current goal using mul_CSNo_CRe (pa gamma delta) (pa gamma delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma delta ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma delta ?? ?? (from left to right).
We will prove gamma * gamma + - (delta * delta) = x.
An exact proof term for the current goal is Lgamma2mdelta2.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma delta) ?? (from left to right).
We will prove Im (pa gamma delta :*: pa gamma delta) = y.
rewrite the current goal using mul_CSNo_CIm (pa gamma delta) (pa gamma delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma delta ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma delta ?? ?? (from left to right).
We will prove delta * gamma + delta * gamma = y.
rewrite the current goal using Ldeltagamma (from left to right).
We will prove eps_ 1 * sqrt_SNo_nonneg (y ^ 2) + eps_ 1 * sqrt_SNo_nonneg (y ^ 2) = y.
rewrite the current goal using exp_SNo_nat_2 y ?? (from left to right).
rewrite the current goal using H1 (from left to right).
We will prove eps_ 1 * sqrt_SNo_nonneg (0 * 0) + eps_ 1 * sqrt_SNo_nonneg (0 * 0) = 0.
rewrite the current goal using mul_SNo_zeroL 0 SNo_0 (from left to right).
rewrite the current goal using sqrt_SNo_nonneg_0 (from left to right).
We will prove eps_ 1 * 0 + eps_ 1 * 0 = 0.
rewrite the current goal using mul_SNo_zeroR (eps_ 1) ?? (from left to right).
We will prove 0 + 0 = 0.
An exact proof term for the current goal is add_SNo_0L 0 SNo_0.
Assume H1: 0 < y.
We prove the intermediate claim Lcase2cond: ~ (y < 0 \/ y = 0 /\ x < 0).
Assume H.
Apply H to the current goal.
Assume H2: y < 0.
Apply SNoLt_irref y to the current goal.
We will prove y < y.
An exact proof term for the current goal is SNoLt_tra y 0 y ?? SNo_0 ?? H2 H1.
Assume H.
Apply H to the current goal.
Assume H2: y = 0.
Assume H3: x < 0.
Apply SNoLt_irref y to the current goal.
rewrite the current goal using H2 (from left to right) at position 1.
An exact proof term for the current goal is H1.
rewrite the current goal using If_i_0 (y < 0 \/ y = 0 /\ x < 0) (pa gamma (- delta)) (pa gamma delta) Lcase2cond (from left to right).
We will prove pa gamma delta :^: 2 = z.
Apply CSNo_ReIm_split (pa gamma delta :^: 2) z ?? Hz to the current goal.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma delta) ?? (from left to right).
We will prove Re (pa gamma delta :*: pa gamma delta) = x.
rewrite the current goal using mul_CSNo_CRe (pa gamma delta) (pa gamma delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma delta ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma delta ?? ?? (from left to right).
We will prove gamma * gamma + - (delta * delta) = x.
An exact proof term for the current goal is Lgamma2mdelta2.
rewrite the current goal using exp_CSNo_nat_2 (pa gamma delta) ?? (from left to right).
We will prove Im (pa gamma delta :*: pa gamma delta) = y.
rewrite the current goal using mul_CSNo_CIm (pa gamma delta) (pa gamma delta) ?? ?? (from left to right).
rewrite the current goal using CSNo_Re2 gamma delta ?? ?? (from left to right).
rewrite the current goal using CSNo_Im2 gamma delta ?? ?? (from left to right).
We will prove delta * gamma + delta * gamma = y.
rewrite the current goal using Ldeltagamma (from left to right).
We will prove eps_ 1 * sqrt_SNo_nonneg (y ^ 2) + eps_ 1 * sqrt_SNo_nonneg (y ^ 2) = y.
rewrite the current goal using mul_SNo_distrR (eps_ 1) (eps_ 1) (sqrt_SNo_nonneg (y ^ 2)) ?? ?? ?? (from right to left).
rewrite the current goal using eps_1_half_eq1 (from left to right).
rewrite the current goal using mul_SNo_oneL (sqrt_SNo_nonneg (y ^ 2)) ?? (from left to right).
We will prove sqrt_SNo_nonneg (y ^ 2) = y.
Apply sqrt_SNo_nonneg_sqr_id y ?? to the current goal.
We will prove 0 <= y.
Apply SNoLtLe to the current goal.
An exact proof term for the current goal is H1.
End of Section SurComplex
Beginning of Section Complex
Notation. We use - as a prefix operator with priority 358 corresponding to applying term minus_CSNo.
Notation. We use + as an infix operator with priority 360 and which associates to the right corresponding to applying term add_CSNo.
Notation. We use * as an infix operator with priority 355 and which associates to the right corresponding to applying term mul_CSNo.
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.
Let i ≝ Complex_i
Let Re : setsetCSNo_Re
Let Im : setsetCSNo_Im
Let pa : setsetsetSNo_pair
Definition. We define complex to be {pa (u 0) (u 1)|ureal :*: real} of type set.
Theorem. (complex_I) The following is provable:
Proof:
Let x be given.
Assume Hx.
Let y be given.
Assume Hy.
We will prove pa x y complex.
rewrite the current goal using tuple_2_0_eq x y (from right to left).
rewrite the current goal using tuple_2_1_eq x y (from right to left) at position 2.
We will prove pa ((x,y) 0) ((x,y) 1) complex.
Apply ReplI (real :*: real) (λu ⇒ pa (u 0) (u 1)) to the current goal.
We will prove (x,y) real :*: real.
An exact proof term for the current goal is tuple_2_setprod real real x Hx y Hy.
Theorem. (complex_E) The following is provable:
zcomplex, ∀p : prop, (x yreal, z = pa x yp)p
Proof:
Let z be given.
Assume Hz.
Let p be given.
Assume Hp.
Apply ReplE_impred (real :*: real) (λu ⇒ pa (u 0) (u 1)) z Hz to the current goal.
Let u be given.
Assume Hu: u real :*: real.
Assume Hzu: z = pa (u 0) (u 1).
An exact proof term for the current goal is Hp (u 0) (ap0_Sigma real (λ_ ⇒ real) u Hu) (u 1) (ap1_Sigma real (λ_ ⇒ real) u Hu) Hzu.
Theorem. (complex_CSNo) The following is provable:
Proof:
Let z be given.
Assume Hz.
Apply complex_E z Hz to the current goal.
Let x be given.
Assume Hx.
Let y be given.
Assume Hy.
Assume Hzxy: z = pa x y.
We will prove CSNo z.
rewrite the current goal using Hzxy (from left to right).
Apply CSNo_I to the current goal.
An exact proof term for the current goal is real_SNo x Hx.
An exact proof term for the current goal is real_SNo y Hy.
Theorem. (real_complex) The following is provable:
Proof:
Let x be given.
Assume Hx: x real.
We will prove x complex.
rewrite the current goal using SNo_pair_0 x (from right to left).
We will prove pa x 0 complex.
Apply complex_I to the current goal.
An exact proof term for the current goal is Hx.
An exact proof term for the current goal is real_0.
Theorem. (complex_0) The following is provable:
Proof:
An exact proof term for the current goal is real_complex 0 real_0.
Theorem. (complex_1) The following is provable:
Proof:
An exact proof term for the current goal is real_complex 1 real_1.
Theorem. (complex_i) The following is provable:
Proof:
We will prove pa 0 1 complex.
Apply complex_I to the current goal.
An exact proof term for the current goal is real_0.
An exact proof term for the current goal is real_1.
Theorem. (complex_Re_eq) The following is provable:
x yreal, Re (pa x y) = x
Proof:
Let x be given.
Assume Hx.
Let y be given.
Assume Hy.
An exact proof term for the current goal is CSNo_Re2 x y (real_SNo x Hx) (real_SNo y Hy).
Theorem. (complex_Im_eq) The following is provable:
x yreal, Im (pa x y) = y
Proof:
Let x be given.
Assume Hx.
Let y be given.
Assume Hy.
An exact proof term for the current goal is CSNo_Im2 x y (real_SNo x Hx) (real_SNo y Hy).
Theorem. (complex_Re_real) The following is provable:
Proof:
Let z be given.
Assume Hz.
Apply complex_E z Hz to the current goal.
Let x be given.
Assume Hx.
Let y be given.
Assume Hy Hzxy.
rewrite the current goal using Hzxy (from left to right).
We will prove Re (pa x y) real.
rewrite the current goal using complex_Re_eq x Hx y Hy (from left to right).
We will prove x real.
An exact proof term for the current goal is Hx.
Theorem. (complex_Im_real) The following is provable:
Proof:
Let z be given.
Assume Hz.
Apply complex_E z Hz to the current goal.
Let x be given.
Assume Hx.
Let y be given.
Assume Hy Hzxy.
rewrite the current goal using Hzxy (from left to right).
We will prove Im (pa x y) real.
rewrite the current goal using complex_Im_eq x Hx y Hy (from left to right).
We will prove y real.
An exact proof term for the current goal is Hy.
Theorem. (complex_ReIm_split) The following is provable:
z wcomplex, Re z = Re wIm z = Im wz = w
Proof:
Let z be given.
Assume Hz.
Let w be given.
Assume Hw.
An exact proof term for the current goal is CSNo_ReIm_split z w (complex_CSNo z Hz) (complex_CSNo w Hw).
Proof:
Let z be given.
Assume Hz.
We will prove pa (minus_SNo (Re z)) (minus_SNo (Im z)) complex.
Apply complex_I to the current goal.
Apply real_minus_SNo to the current goal.
An exact proof term for the current goal is complex_Re_real z Hz.
Apply real_minus_SNo to the current goal.
An exact proof term for the current goal is complex_Im_real z Hz.
Proof:
Let z be given.
Assume Hz.
We will prove pa (Re z) (minus_SNo (Im z)) complex.
Apply complex_I to the current goal.
An exact proof term for the current goal is complex_Re_real z Hz.
Apply real_minus_SNo to the current goal.
An exact proof term for the current goal is complex_Im_real z Hz.
Theorem. (complex_add_CSNo) The following is provable:
Proof:
Let z be given.
Assume Hz.
Let w be given.
Assume Hw.
We will prove pa (add_SNo (Re z) (Re w)) (add_SNo (Im z) (Im w)) complex.
Apply complex_I to the current goal.
Apply real_add_SNo to the current goal.
An exact proof term for the current goal is complex_Re_real z Hz.
An exact proof term for the current goal is complex_Re_real w Hw.
Apply real_add_SNo to the current goal.
An exact proof term for the current goal is complex_Im_real z Hz.
An exact proof term for the current goal is complex_Im_real w Hw.
Theorem. (complex_mul_CSNo) The following is provable:
Proof:
Let z be given.
Assume Hz.
Let w be given.
Assume Hw.
We will prove pa (add_SNo (mul_SNo (Re z) (Re w)) (minus_SNo (mul_SNo (Im w) (Im z)))) (add_SNo (mul_SNo (Im w) (Re z)) (mul_SNo (Im z) (Re w))) complex.
We prove the intermediate claim Lz0: Re z real.
An exact proof term for the current goal is complex_Re_real z Hz.
We prove the intermediate claim Lz1: Im z real.
An exact proof term for the current goal is complex_Im_real z Hz.
We prove the intermediate claim Lw0: Re w real.
An exact proof term for the current goal is complex_Re_real w Hw.
We prove the intermediate claim Lw1: Im w real.
An exact proof term for the current goal is complex_Im_real w Hw.
Apply complex_I to the current goal.
Apply real_add_SNo to the current goal.
Apply real_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply real_minus_SNo to the current goal.
Apply real_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply real_add_SNo to the current goal.
Apply real_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply real_mul_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Theorem. (real_Re_eq) The following is provable:
Proof:
Let x be given.
Assume Hx.
rewrite the current goal using SNo_pair_0 x (from right to left) at position 1.
An exact proof term for the current goal is complex_Re_eq x Hx 0 real_0.
Theorem. (real_Im_eq) The following is provable:
Proof:
Let x be given.
Assume Hx.
rewrite the current goal using SNo_pair_0 x (from right to left).
An exact proof term for the current goal is complex_Im_eq x Hx 0 real_0.
Theorem. (mul_i_real_eq) The following is provable:
xreal, i * x = pa 0 x
Proof:
Let x be given.
Assume Hx.
We will prove pa (add_SNo (mul_SNo (Re (pa 0 1)) (Re x)) (minus_SNo (mul_SNo (Im x) (Im (pa 0 1))))) (add_SNo (mul_SNo (Im x) (Re (pa 0 1))) (mul_SNo (Im (pa 0 1)) (Re x))) = pa 0 x.
rewrite the current goal using real_Re_eq x Hx (from left to right).
rewrite the current goal using real_Im_eq x Hx (from left to right).
rewrite the current goal using complex_Re_eq 0 real_0 1 real_1 (from left to right).
rewrite the current goal using complex_Im_eq 0 real_0 1 real_1 (from left to right).
We will prove pa (add_SNo (mul_SNo 0 x) (minus_SNo (mul_SNo 0 1))) (add_SNo (mul_SNo 0 0) (mul_SNo 1 x)) = pa 0 x.
rewrite the current goal using mul_SNo_zeroL x (real_SNo x Hx) (from left to right).
rewrite the current goal using mul_SNo_zeroL 1 SNo_1 (from left to right).
rewrite the current goal using minus_SNo_0 (from left to right).
rewrite the current goal using mul_SNo_zeroL 0 SNo_0 (from left to right).
rewrite the current goal using mul_SNo_oneL x (real_SNo x Hx) (from left to right).
We will prove pa (add_SNo 0 0) (add_SNo 0 x) = pa 0 x.
rewrite the current goal using add_SNo_0L 0 SNo_0 (from left to right).
rewrite the current goal using add_SNo_0L x (real_SNo x Hx) (from left to right).
Use reflexivity.
Theorem. (real_Re_i_eq) The following is provable:
xreal, Re (i * x) = 0
Proof:
Let x be given.
Assume Hx.
rewrite the current goal using mul_i_real_eq x Hx (from left to right).
We will prove Re (pa 0 x) = 0.
An exact proof term for the current goal is complex_Re_eq 0 real_0 x Hx.
Theorem. (real_Im_i_eq) The following is provable:
xreal, Im (i * x) = x
Proof:
Let x be given.
Assume Hx.
rewrite the current goal using mul_i_real_eq x Hx (from left to right).
We will prove Im (pa 0 x) = x.
An exact proof term for the current goal is complex_Im_eq 0 real_0 x Hx.
Theorem. (complex_eta) The following is provable:
zcomplex, z = Re z + i * Im z
Proof:
Let z be given.
Assume Hz.
Apply complex_E z Hz to the current goal.
Let x be given.
Assume Hx.
Let y be given.
Assume Hy Hzxy.
rewrite the current goal using Hzxy (from left to right).
rewrite the current goal using complex_Re_eq x Hx y Hy (from left to right).
rewrite the current goal using complex_Im_eq x Hx y Hy (from left to right).
We will prove pa x y = x + i * y.
We will prove pa x y = pa (add_SNo (Re x) (Re (i * y))) (add_SNo (Im x) (Im (i * y))).
rewrite the current goal using real_Re_eq x Hx (from left to right).
rewrite the current goal using real_Im_eq x Hx (from left to right).
rewrite the current goal using real_Re_i_eq y Hy (from left to right).
rewrite the current goal using real_Im_i_eq y Hy (from left to right).
We will prove pa x y = pa (add_SNo x 0) (add_SNo 0 y).
rewrite the current goal using add_SNo_0R x (real_SNo x Hx) (from left to right).
rewrite the current goal using add_SNo_0L y (real_SNo y Hy) (from left to right).
Use reflexivity.
Beginning of Section ComplexDiv
Proof:
Let z be given.
Assume Hz.
We prove the intermediate claim Lz: CSNo z.
An exact proof term for the current goal is complex_CSNo z Hz.
Apply complex_E z Hz to the current goal.
Let x be given.
Assume Hx.
Let y be given.
Assume Hy.
Assume Hzxy: z = pa x y.
We will prove recip_CSNo z complex.
We will prove pa (Re z :/: (Re z ^ 2 + Im z ^ 2)) (- (Im z :/: (Re z ^ 2 + Im z ^ 2))) complex.
We prove the intermediate claim LRez: Re z real.
rewrite the current goal using Hzxy (from left to right).
rewrite the current goal using complex_Re_eq x Hx y Hy (from left to right).
An exact proof term for the current goal is Hx.
We prove the intermediate claim LImz: Im z real.
rewrite the current goal using Hzxy (from left to right).
rewrite the current goal using complex_Im_eq x Hx y Hy (from left to right).
An exact proof term for the current goal is Hy.
We prove the intermediate claim LRez2: Re z ^ 2 real.
rewrite the current goal using exp_SNo_nat_2 (Re z) (CSNo_ReR z Lz) (from left to right).
An exact proof term for the current goal is real_mul_SNo (Re z) ?? (Re z) ??.
We prove the intermediate claim LImz2: Im z ^ 2 real.
rewrite the current goal using exp_SNo_nat_2 (Im z) (CSNo_ImR z Lz) (from left to right).
An exact proof term for the current goal is real_mul_SNo (Im z) ?? (Im z) ??.
We prove the intermediate claim LRez2Imz2: Re z ^ 2 + Im z ^ 2 real.
Apply real_add_SNo to the current goal.
An exact proof term for the current goal is ??.
An exact proof term for the current goal is ??.
Apply complex_I to the current goal.
We will prove Re z :/: (Re z ^ 2 + Im z ^ 2) real.
Apply real_div_SNo to the current goal.
An exact proof term for the current goal is LRez.
An exact proof term for the current goal is LRez2Imz2.
We will prove - (Im z :/: (Re z ^ 2 + Im z ^ 2)) real.
Apply real_minus_SNo to the current goal.
Apply real_div_SNo to the current goal.
An exact proof term for the current goal is LImz.
An exact proof term for the current goal is LRez2Imz2.
Proof:
Let z be given.
Assume Hz.
Let w be given.
Assume Hw.
An exact proof term for the current goal is complex_mul_CSNo z Hz (recip_CSNo w) (complex_recip_CSNo w Hw).
End of Section ComplexDiv
Theorem. (complex_real_set_eq) The following is provable:
Proof:
Apply set_ext to the current goal.
Let x be given.
Assume Hx: x real.
Apply SepI to the current goal.
An exact proof term for the current goal is real_complex x Hx.
An exact proof term for the current goal is real_Re_eq x Hx.
Let z be given.
Assume Hz: z {zcomplex|Re z = z}.
Apply SepE complex (λz ⇒ Re z = z) z Hz to the current goal.
Assume Hz1: z complex.
Assume Hz2: Re z = z.
We will prove z real.
rewrite the current goal using Hz2 (from right to left).
An exact proof term for the current goal is complex_Re_real z Hz1.
End of Section Complex