:: The Ordinal Numbers. Transfinite Induction and Defining by Transfinite Induction
:: by Grzegorz Bancerek
::
:: Copyright (c) 1990-2011 Association of Mizar Users

begin

theorem :: ORDINAL1:1
canceled;

theorem :: ORDINAL1:2
canceled;

theorem Th3: :: ORDINAL1:3
for X, Y, Z being set holds
( not X in Y or not Y in Z or not Z in X )
proof end;

theorem :: ORDINAL1:4
for X1, X2, X3, X4 being set holds
( not X1 in X2 or not X2 in X3 or not X3 in X4 or not X4 in X1 )
proof end;

theorem :: ORDINAL1:5
for X1, X2, X3, X4, X5 being set holds
( not X1 in X2 or not X2 in X3 or not X3 in X4 or not X4 in X5 or not X5 in X1 )
proof end;

theorem :: ORDINAL1:6
for X1, X2, X3, X4, X5, X6 being set holds
( not X1 in X2 or not X2 in X3 or not X3 in X4 or not X4 in X5 or not X5 in X6 or not X6 in X1 )
proof end;

theorem Th7: :: ORDINAL1:7
for Y, X being set st Y in X holds
not X c= Y
proof end;

definition
let X be set ;
func succ X -> set equals :: ORDINAL1:def 1
X \/ {X};
coherence
X \/ {X} is set
;
end;

:: deftheorem defines succ ORDINAL1:def 1 :
for X being set holds succ X = X \/ {X};

registration
let X be set ;
cluster succ X -> non empty ;
coherence
not succ X is empty
;
end;

theorem :: ORDINAL1:8
canceled;

theorem :: ORDINAL1:9
canceled;

theorem Th10: :: ORDINAL1:10
for X being set holds X in succ X
proof end;

theorem :: ORDINAL1:11
canceled;

theorem :: ORDINAL1:12
for X, Y being set st succ X = succ Y holds
X = Y
proof end;

theorem Th13: :: ORDINAL1:13
for x, X being set holds
( x in succ X iff ( x in X or x = X ) )
proof end;

theorem Th14: :: ORDINAL1:14
for X being set holds X <> succ X
proof end;

definition
let X be set ;
attr X is epsilon-transitive means :Def2: :: ORDINAL1:def 2
for x being set st x in X holds
x c= X;
attr X is epsilon-connected means :Def3: :: ORDINAL1:def 3
for x, y being set st x in X & y in X & not x in y & not x = y holds
y in x;
end;

:: deftheorem Def2 defines epsilon-transitive ORDINAL1:def 2 :
for X being set holds
( X is epsilon-transitive iff for x being set st x in X holds
x c= X );

:: deftheorem Def3 defines epsilon-connected ORDINAL1:def 3 :
for X being set holds
( X is epsilon-connected iff for x, y being set st x in X & y in X & not x in y & not x = y holds
y in x );

Lm1: ( {} is epsilon-transitive & {} is epsilon-connected )
proof end;

definition
let IT be set ;
attr IT is ordinal means :Def4: :: ORDINAL1:def 4
( IT is epsilon-transitive & IT is epsilon-connected );
end;

:: deftheorem Def4 defines ordinal ORDINAL1:def 4 :
for IT being set holds
( IT is ordinal iff ( IT is epsilon-transitive & IT is epsilon-connected ) );

registration
cluster ordinal -> epsilon-transitive epsilon-connected number ;
coherence
for b1 being set st b1 is ordinal holds
( b1 is epsilon-transitive & b1 is epsilon-connected )
by Def4;
cluster epsilon-transitive epsilon-connected -> ordinal number ;
coherence
for b1 being set st b1 is epsilon-transitive & b1 is epsilon-connected holds
b1 is ordinal
by Def4;
end;

notation
synonym number for set ;
end;

registration
cluster ordinal number ;
existence
ex b1 being number st b1 is ordinal
by Lm1;
end;

definition end;

theorem :: ORDINAL1:15
canceled;

theorem :: ORDINAL1:16
canceled;

theorem :: ORDINAL1:17
canceled;

theorem :: ORDINAL1:18
canceled;

theorem Th19: :: ORDINAL1:19
for A, B being set
for C being epsilon-transitive set st A in B & B in C holds
A in C
proof end;

theorem :: ORDINAL1:20
canceled;

theorem Th21: :: ORDINAL1:21
for x being epsilon-transitive set
for A being Ordinal st x c< A holds
x in A
proof end;

theorem :: ORDINAL1:22
for A being epsilon-transitive set
for B, C being Ordinal st A c= B & B in C holds
A in C
proof end;

theorem Th23: :: ORDINAL1:23
for a being set
for A being Ordinal st a in A holds
a is Ordinal
proof end;

theorem Th24: :: ORDINAL1:24
for A, B being Ordinal holds
( A in B or A = B or B in A )
proof end;

definition
let A, B be Ordinal;
:: original: c=
redefine pred A c= B means :: ORDINAL1:def 5
for C being Ordinal st C in A holds
C in B;
compatibility
( A c= B iff for C being Ordinal st C in A holds
C in B )
proof end;
connectedness
for A, B being Ordinal st ex C being Ordinal st
( C in A & not C in B ) holds
for C being Ordinal st C in B holds
C in A
proof end;
end;

:: deftheorem defines c= ORDINAL1:def 5 :
for A, B being Ordinal holds
( A c= B iff for C being Ordinal st C in A holds
C in B );

theorem :: ORDINAL1:25
for A, B being Ordinal holds A,B are_c=-comparable
proof end;

theorem Th26: :: ORDINAL1:26
for A, B being Ordinal holds
( A c= B or B in A )
proof end;

registration
cluster empty -> ordinal number ;
coherence
for b1 being number st b1 is empty holds
b1 is ordinal
by Lm1;
end;

theorem :: ORDINAL1:27
canceled;

theorem :: ORDINAL1:28
canceled;

theorem Th29: :: ORDINAL1:29
for x being set st x is Ordinal holds
succ x is Ordinal
proof end;

theorem Th30: :: ORDINAL1:30
for x being set st x is ordinal holds
union x is ordinal
proof end;

registration
cluster non empty epsilon-transitive epsilon-connected ordinal number ;
existence
not for b1 being Ordinal holds b1 is empty
proof end;
end;

registration
let A be Ordinal;
cluster succ A -> non empty ordinal ;
coherence
( not succ A is empty & succ A is ordinal )
by Th29;
cluster union A -> ordinal ;
coherence
union A is ordinal
by Th30;
end;

theorem Th31: :: ORDINAL1:31
for X being set st ( for x being set st x in X holds
( x is Ordinal & x c= X ) ) holds
X is ordinal
proof end;

theorem Th32: :: ORDINAL1:32
for X being set
for A being Ordinal st X c= A & X <> {} holds
ex C being Ordinal st
( C in X & ( for B being Ordinal st B in X holds
C c= B ) )
proof end;

theorem Th33: :: ORDINAL1:33
for A, B being Ordinal holds
( A in B iff succ A c= B )
proof end;

theorem Th34: :: ORDINAL1:34
for A, C being Ordinal holds
( A in succ C iff A c= C )
proof end;

scheme :: ORDINAL1:sch 1
OrdinalMin{ P1[ Ordinal] } :
ex A being Ordinal st
( P1[A] & ( for B being Ordinal st P1[B] holds
A c= B ) )
provided
A1: ex A being Ordinal st P1[A]
proof end;

scheme :: ORDINAL1:sch 2
TransfiniteInd{ P1[ Ordinal] } :
for A being Ordinal holds P1[A]
provided
A1: for A being Ordinal st ( for C being Ordinal st C in A holds
P1[C] ) holds
P1[A]
proof end;

theorem Th35: :: ORDINAL1:35
for X being set st ( for a being set st a in X holds
a is Ordinal ) holds
union X is ordinal
proof end;

theorem Th36: :: ORDINAL1:36
for X being set st ( for a being set st a in X holds
a is Ordinal ) holds
ex A being Ordinal st X c= A
proof end;

theorem Th37: :: ORDINAL1:37
for X being set holds
not for x being set holds
( x in X iff x is Ordinal )
proof end;

theorem Th38: :: ORDINAL1:38
for X being set holds
not for A being Ordinal holds A in X
proof end;

theorem :: ORDINAL1:39
for X being set ex A being Ordinal st
( not A in X & ( for B being Ordinal st not B in X holds
A c= B ) )
proof end;

definition
let A be set ;
attr A is limit_ordinal means :Def6: :: ORDINAL1:def 6
A = union A;
end;

:: deftheorem Def6 defines limit_ordinal ORDINAL1:def 6 :
for A being set holds
( A is limit_ordinal iff A = union A );

theorem :: ORDINAL1:40
canceled;

theorem Th41: :: ORDINAL1:41
for A being Ordinal holds
( A is limit_ordinal iff for C being Ordinal st C in A holds
succ C in A )
proof end;

theorem :: ORDINAL1:42
for A being Ordinal holds
( not A is limit_ordinal iff ex B being Ordinal st A = succ B )
proof end;

definition
let IT be set ;
attr IT is T-Sequence-like means :Def7: :: ORDINAL1:def 7
proj1 IT is ordinal ;
end;

:: deftheorem Def7 defines T-Sequence-like ORDINAL1:def 7 :
for IT being set holds
( IT is T-Sequence-like iff proj1 IT is ordinal );

registration
cluster empty -> T-Sequence-like number ;
coherence
for b1 being set st b1 is empty holds
b1 is T-Sequence-like
proof end;
end;

definition end;

registration
let Z be set ;
cluster Relation-like Z -valued Function-like T-Sequence-like number ;
existence
ex b1 being T-Sequence st b1 is Z -valued
proof end;
end;

definition end;

theorem :: ORDINAL1:43
canceled;

theorem :: ORDINAL1:44
canceled;

theorem :: ORDINAL1:45
for Z being set holds {} is T-Sequence of Z
proof end;

theorem :: ORDINAL1:46
for F being Function st dom F is Ordinal holds
F is T-Sequence of rng F by ;

registration
let L be T-Sequence;
cluster proj1 L -> ordinal ;
coherence
dom L is ordinal
by Def7;
end;

theorem :: ORDINAL1:47
for X, Y being set st X c= Y holds
for L being T-Sequence of X holds L is T-Sequence of Y
proof end;

registration
let L be T-Sequence;
let A be Ordinal;
cluster L | A -> rng L -valued T-Sequence-like ;
coherence
( L | A is rng L -valued & L | A is T-Sequence-like )
proof end;
end;

theorem :: ORDINAL1:48
for X being set
for L being T-Sequence of X
for A being Ordinal holds L | A is T-Sequence of X ;

definition
canceled;
let IT be set ;
attr IT is c=-linear means :Def9: :: ORDINAL1:def 9
for x, y being set st x in IT & y in IT holds
x,y are_c=-comparable ;
end;

:: deftheorem ORDINAL1:def 8 :
canceled;

:: deftheorem Def9 defines c=-linear ORDINAL1:def 9 :
for IT being set holds
( IT is c=-linear iff for x, y being set st x in IT & y in IT holds
x,y are_c=-comparable );

theorem :: ORDINAL1:49
for X being set st ( for a being set st a in X holds
a is T-Sequence ) & X is c=-linear holds
union X is T-Sequence
proof end;

scheme :: ORDINAL1:sch 3
TSUniq{ F1() -> Ordinal, F2( T-Sequence) -> set , F3() -> T-Sequence, F4() -> T-Sequence } :
F3() = F4()
provided
A1: ( dom F3() = F1() & ( for B being Ordinal
for L being T-Sequence st B in F1() & L = F3() | B holds
F3() . B = F2(L) ) ) and
A2: ( dom F4() = F1() & ( for B being Ordinal
for L being T-Sequence st B in F1() & L = F4() | B holds
F4() . B = F2(L) ) )
proof end;

scheme :: ORDINAL1:sch 4
TSExist{ F1() -> Ordinal, F2( T-Sequence) -> set } :
ex L being T-Sequence st
( dom L = F1() & ( for B being Ordinal
for L1 being T-Sequence st B in F1() & L1 = L | B holds
L . B = F2(L1) ) )
proof end;

scheme :: ORDINAL1:sch 5
FuncTS{ F1() -> T-Sequence, F2( Ordinal) -> set , F3( T-Sequence) -> set } :
for B being Ordinal st B in dom F1() holds
F1() . B = F3((F1() | B))
provided
A1: for A being Ordinal
for a being set holds
( a = F2(A) iff ex L being T-Sequence st
( a = F3(L) & dom L = A & ( for B being Ordinal st B in A holds
L . B = F3((L | B)) ) ) ) and
A2: for A being Ordinal st A in dom F1() holds
F1() . A = F2(A)
proof end;

theorem :: ORDINAL1:50
for A, B being Ordinal holds
( A c< B or A = B or B c< A )
proof end;

begin

definition
let X be set ;
func On X -> set means :Def10: :: ORDINAL1:def 10
for x being set holds
( x in it iff ( x in X & x is Ordinal ) );
existence
ex b1 being set st
for x being set holds
( x in b1 iff ( x in X & x is Ordinal ) )
proof end;
uniqueness
for b1, b2 being set st ( for x being set holds
( x in b1 iff ( x in X & x is Ordinal ) ) ) & ( for x being set holds
( x in b2 iff ( x in X & x is Ordinal ) ) ) holds
b1 = b2
proof end;
func Lim X -> set means :: ORDINAL1:def 11
for x being set holds
( x in it iff ( x in X & ex A being Ordinal st
( x = A & A is limit_ordinal ) ) );
existence
ex b1 being set st
for x being set holds
( x in b1 iff ( x in X & ex A being Ordinal st
( x = A & A is limit_ordinal ) ) )
proof end;
uniqueness
for b1, b2 being set st ( for x being set holds
( x in b1 iff ( x in X & ex A being Ordinal st
( x = A & A is limit_ordinal ) ) ) ) & ( for x being set holds
( x in b2 iff ( x in X & ex A being Ordinal st
( x = A & A is limit_ordinal ) ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def10 defines On ORDINAL1:def 10 :
for X, b2 being set holds
( b2 = On X iff for x being set holds
( x in b2 iff ( x in X & x is Ordinal ) ) );

:: deftheorem defines Lim ORDINAL1:def 11 :
for X, b2 being set holds
( b2 = Lim X iff for x being set holds
( x in b2 iff ( x in X & ex A being Ordinal st
( x = A & A is limit_ordinal ) ) ) );

theorem Th51: :: ORDINAL1:51
for D being Ordinal ex A being Ordinal st
( D in A & A is limit_ordinal )
proof end;

definition
func omega -> set means :Def12: :: ORDINAL1:def 12
( {} in it & it is limit_ordinal & it is ordinal & ( for A being Ordinal st {} in A & A is limit_ordinal holds
it c= A ) );
existence
ex b1 being set st
( {} in b1 & b1 is limit_ordinal & b1 is ordinal & ( for A being Ordinal st {} in A & A is limit_ordinal holds
b1 c= A ) )
proof end;
uniqueness
for b1, b2 being set st {} in b1 & b1 is limit_ordinal & b1 is ordinal & ( for A being Ordinal st {} in A & A is limit_ordinal holds
b1 c= A ) & {} in b2 & b2 is limit_ordinal & b2 is ordinal & ( for A being Ordinal st {} in A & A is limit_ordinal holds
b2 c= A ) holds
b1 = b2
proof end;
end;

:: deftheorem Def12 defines omega ORDINAL1:def 12 :
for b1 being set holds
( b1 = omega iff ( {} in b1 & b1 is limit_ordinal & b1 is ordinal & ( for A being Ordinal st {} in A & A is limit_ordinal holds
b1 c= A ) ) );

registration
cluster omega -> non empty ordinal ;
coherence
( not omega is empty & omega is ordinal )
by Def12;
end;

definition
let A be set ;
attr A is natural means :Def13: :: ORDINAL1:def 13
A in omega ;
end;

:: deftheorem Def13 defines natural ORDINAL1:def 13 :
for A being set holds
( A is natural iff A in omega );

registration
cluster natural number ;
existence
ex b1 being number st b1 is natural
proof end;
end;

registration
let A be Ordinal;
cluster -> ordinal Element of A;
coherence
for b1 being Element of A holds b1 is ordinal
proof end;
end;

registration
cluster natural -> ordinal number ;
coherence
for b1 being number st b1 is natural holds
b1 is ordinal
proof end;
end;

scheme :: ORDINAL1:sch 6
ALFA{ F1() -> non empty set , P1[ set , set ] } :
ex F being Function st
( dom F = F1() & ( for d being Element of F1() ex A being Ordinal st
( A = F . d & P1[d,A] & ( for B being Ordinal st P1[d,B] holds
A c= B ) ) ) )
provided
A1: for d being Element of F1() ex A being Ordinal st P1[d,A]
proof end;

theorem :: ORDINAL1:52
for X being set holds (succ X) \ {X} = X
proof end;

registration
cluster empty -> natural number ;
coherence
for b1 being number st b1 is empty holds
b1 is natural
proof end;
cluster -> natural Element of omega ;
coherence
for b1 being Element of omega holds b1 is natural
by Def13;
end;

registration
cluster non empty natural number ;
existence
ex b1 being number st
( not b1 is empty & b1 is natural )
proof end;
end;

registration
let a be natural Ordinal;
cluster succ a -> natural ;
coherence
succ a is natural
proof end;
end;