:: ORDINAL2 semantic presentation

scheme :: ORDINAL2:sch 1
s1{ P1[ Ordinal] } :
for b1 being Ordinal holds P1[b1]
provided
E1: P1[ {} ] and
E2: for b1 being Ordinal st P1[b1] holds
P1[ succ b1] and
E3: for b1 being Ordinal st b1 <> {} & b1 is_limit_ordinal & ( for b2 being Ordinal st b2 in b1 holds
P1[b2] ) holds
P1[b1]
proof end;

theorem Th1: :: ORDINAL2:1
for b1, b2 being Ordinal holds
( b1 c= b2 iff succ b1 c= succ b2 )
proof end;

theorem Th2: :: ORDINAL2:2
for b1 being Ordinal holds union (succ b1) = b1
proof end;

theorem Th3: :: ORDINAL2:3
for b1 being Ordinal holds succ b1 c= bool b1
proof end;

theorem Th4: :: ORDINAL2:4
{} is_limit_ordinal
proof end;

theorem Th5: :: ORDINAL2:5
for b1 being Ordinal holds union b1 c= b1
proof end;

definition
let c1 be T-Sequence;
func last c1 -> set equals :: ORDINAL2:def 1
a1 . (union (dom a1));
coherence
c1 . (union (dom c1)) is set
;
end;

:: deftheorem Def1 defines last ORDINAL2:def 1 :
for b1 being T-Sequence holds last b1 = b1 . (union (dom b1));

theorem Th6: :: ORDINAL2:6
canceled;

theorem Th7: :: ORDINAL2:7
for b1 being Ordinal
for b2 being T-Sequence st dom b2 = succ b1 holds
last b2 = b2 . b1 by Th2;

definition
let c1 be set ;
func On c1 -> set means :Def2: :: ORDINAL2:def 2
for b1 being set holds
( b1 in a2 iff ( b1 in a1 & b1 is Ordinal ) );
existence
ex b1 being set st
for b2 being set holds
( b2 in b1 iff ( b2 in c1 & b2 is Ordinal ) )
proof end;
uniqueness
for b1, b2 being set st ( for b3 being set holds
( b3 in b1 iff ( b3 in c1 & b3 is Ordinal ) ) ) & ( for b3 being set holds
( b3 in b2 iff ( b3 in c1 & b3 is Ordinal ) ) ) holds
b1 = b2
proof end;
func Lim c1 -> set means :Def3: :: ORDINAL2:def 3
for b1 being set holds
( b1 in a2 iff ( b1 in a1 & ex b2 being Ordinal st
( b1 = b2 & b2 is_limit_ordinal ) ) );
existence
ex b1 being set st
for b2 being set holds
( b2 in b1 iff ( b2 in c1 & ex b3 being Ordinal st
( b2 = b3 & b3 is_limit_ordinal ) ) )
proof end;
uniqueness
for b1, b2 being set st ( for b3 being set holds
( b3 in b1 iff ( b3 in c1 & ex b4 being Ordinal st
( b3 = b4 & b4 is_limit_ordinal ) ) ) ) & ( for b3 being set holds
( b3 in b2 iff ( b3 in c1 & ex b4 being Ordinal st
( b3 = b4 & b4 is_limit_ordinal ) ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines On ORDINAL2:def 2 :
for b1, b2 being set holds
( b2 = On b1 iff for b3 being set holds
( b3 in b2 iff ( b3 in b1 & b3 is Ordinal ) ) );

:: deftheorem Def3 defines Lim ORDINAL2:def 3 :
for b1, b2 being set holds
( b2 = Lim b1 iff for b3 being set holds
( b3 in b2 iff ( b3 in b1 & ex b4 being Ordinal st
( b3 = b4 & b4 is_limit_ordinal ) ) ) );

theorem Th8: :: ORDINAL2:8
canceled;

theorem Th9: :: ORDINAL2:9
for b1 being set holds On b1 c= b1
proof end;

theorem Th10: :: ORDINAL2:10
for b1 being Ordinal holds On b1 = b1
proof end;

theorem Th11: :: ORDINAL2:11
for b1, b2 being set st b1 c= b2 holds
On b1 c= On b2
proof end;

theorem Th12: :: ORDINAL2:12
canceled;

theorem Th13: :: ORDINAL2:13
for b1 being set holds Lim b1 c= b1
proof end;

theorem Th14: :: ORDINAL2:14
for b1, b2 being set st b1 c= b2 holds
Lim b1 c= Lim b2
proof end;

theorem Th15: :: ORDINAL2:15
for b1 being set holds Lim b1 c= On b1
proof end;

theorem Th16: :: ORDINAL2:16
for b1 being Ordinal ex b2 being Ordinal st
( b1 in b2 & b2 is_limit_ordinal )
proof end;

theorem Th17: :: ORDINAL2:17
for b1 being set st ( for b2 being set st b2 in b1 holds
b2 is Ordinal ) holds
meet b1 is Ordinal
proof end;

definition
func one -> non empty Ordinal equals :: ORDINAL2:def 4
succ {} ;
correctness
coherence
succ {} is non empty Ordinal
;
;
end;

:: deftheorem Def4 defines one ORDINAL2:def 4 :
one = succ {} ;

definition
func omega -> set means :Def5: :: ORDINAL2:def 5
( {} in a1 & a1 is_limit_ordinal & a1 is ordinal & ( for b1 being Ordinal st {} in b1 & b1 is_limit_ordinal holds
a1 c= b1 ) );
existence
ex b1 being set st
( {} in b1 & b1 is_limit_ordinal & b1 is ordinal & ( for b2 being Ordinal st {} in b2 & b2 is_limit_ordinal holds
b1 c= b2 ) )
proof end;
uniqueness
for b1, b2 being set st {} in b1 & b1 is_limit_ordinal & b1 is ordinal & ( for b3 being Ordinal st {} in b3 & b3 is_limit_ordinal holds
b1 c= b3 ) & {} in b2 & b2 is_limit_ordinal & b2 is ordinal & ( for b3 being Ordinal st {} in b3 & b3 is_limit_ordinal holds
b2 c= b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines omega ORDINAL2:def 5 :
for b1 being set holds
( b1 = omega iff ( {} in b1 & b1 is_limit_ordinal & b1 is ordinal & ( for b2 being Ordinal st {} in b2 & b2 is_limit_ordinal holds
b1 c= b2 ) ) );

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

registration
cluster being_limit_ordinal set ;
existence
ex b1 being Ordinal st b1 is being_limit_ordinal
proof end;
end;

definition
let c1 be set ;
func inf c1 -> Ordinal equals :: ORDINAL2:def 6
meet (On a1);
coherence
meet (On c1) is Ordinal
proof end;
func sup c1 -> Ordinal means :Def7: :: ORDINAL2:def 7
( On a1 c= a2 & ( for b1 being Ordinal st On a1 c= b1 holds
a2 c= b1 ) );
existence
ex b1 being Ordinal st
( On c1 c= b1 & ( for b2 being Ordinal st On c1 c= b2 holds
b1 c= b2 ) )
proof end;
uniqueness
for b1, b2 being Ordinal st On c1 c= b1 & ( for b3 being Ordinal st On c1 c= b3 holds
b1 c= b3 ) & On c1 c= b2 & ( for b3 being Ordinal st On c1 c= b3 holds
b2 c= b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines inf ORDINAL2:def 6 :
for b1 being set holds inf b1 = meet (On b1);

:: deftheorem Def7 defines sup ORDINAL2:def 7 :
for b1 being set
for b2 being Ordinal holds
( b2 = sup b1 iff ( On b1 c= b2 & ( for b3 being Ordinal st On b1 c= b3 holds
b2 c= b3 ) ) );

theorem Th18: :: ORDINAL2:18
canceled;

theorem Th19: :: ORDINAL2:19
( {} in omega & omega is_limit_ordinal & ( for b1 being Ordinal st {} in b1 & b1 is_limit_ordinal holds
omega c= b1 ) ) by Def5;

theorem Th20: :: ORDINAL2:20
canceled;

theorem Th21: :: ORDINAL2:21
canceled;

theorem Th22: :: ORDINAL2:22
for b1 being Ordinal
for b2 being set st b1 in b2 holds
inf b2 c= b1
proof end;

theorem Th23: :: ORDINAL2:23
for b1 being Ordinal
for b2 being set st On b2 <> {} & ( for b3 being Ordinal st b3 in b2 holds
b1 c= b3 ) holds
b1 c= inf b2
proof end;

theorem Th24: :: ORDINAL2:24
for b1 being Ordinal
for b2, b3 being set st b1 in b2 & b2 c= b3 holds
inf b3 c= inf b2
proof end;

theorem Th25: :: ORDINAL2:25
for b1 being Ordinal
for b2 being set st b1 in b2 holds
inf b2 in b2
proof end;

theorem Th26: :: ORDINAL2:26
for b1 being Ordinal holds sup b1 = b1
proof end;

theorem Th27: :: ORDINAL2:27
for b1 being Ordinal
for b2 being set st b1 in b2 holds
b1 in sup b2
proof end;

theorem Th28: :: ORDINAL2:28
for b1 being Ordinal
for b2 being set st ( for b3 being Ordinal st b3 in b2 holds
b3 in b1 ) holds
sup b2 c= b1
proof end;

theorem Th29: :: ORDINAL2:29
for b1 being Ordinal
for b2 being set st b1 in sup b2 holds
ex b3 being Ordinal st
( b3 in b2 & b1 c= b3 )
proof end;

theorem Th30: :: ORDINAL2:30
for b1, b2 being set st b1 c= b2 holds
sup b1 c= sup b2
proof end;

theorem Th31: :: ORDINAL2:31
for b1 being Ordinal holds sup {b1} = succ b1
proof end;

theorem Th32: :: ORDINAL2:32
for b1 being set holds inf b1 c= sup b1
proof end;

scheme :: ORDINAL2:sch 2
s2{ F1() -> Ordinal, F2( Ordinal) -> set } :
ex b1 being T-Sequence st
( dom b1 = F1() & ( for b2 being Ordinal st b2 in F1() holds
b1 . b2 = F2(b2) ) )
proof end;

definition
let c1 be Function;
attr a1 is Ordinal-yielding means :Def8: :: ORDINAL2:def 8
ex b1 being Ordinal st rng a1 c= b1;
end;

:: deftheorem Def8 defines Ordinal-yielding ORDINAL2:def 8 :
for b1 being Function holds
( b1 is Ordinal-yielding iff ex b2 being Ordinal st rng b1 c= b2 );

registration
cluster Ordinal-yielding set ;
existence
ex b1 being T-Sequence st b1 is Ordinal-yielding
proof end;
end;

definition
mode Ordinal-Sequence is Ordinal-yielding T-Sequence;
end;

registration
let c1 be Ordinal;
cluster -> Ordinal-yielding T-Sequence of a1;
coherence
for b1 being T-Sequence of c1 holds b1 is Ordinal-yielding
proof end;
end;

registration
let c1 be Ordinal-Sequence;
let c2 be Ordinal;
cluster a1 | a2 -> Ordinal-yielding ;
coherence
c1 | c2 is Ordinal-yielding
proof end;
end;

theorem Th33: :: ORDINAL2:33
canceled;

theorem Th34: :: ORDINAL2:34
for b1 being Ordinal
for b2 being Ordinal-Sequence st b1 in dom b2 holds
b2 . b1 is Ordinal
proof end;

registration
let c1 be Ordinal-Sequence;
let c2 be Ordinal;
cluster a1 . a2 -> ordinal ;
coherence
c1 . c2 is ordinal
proof end;
end;

scheme :: ORDINAL2:sch 3
s3{ F1() -> Ordinal, F2( Ordinal) -> Ordinal } :
ex b1 being Ordinal-Sequence st
( dom b1 = F1() & ( for b2 being Ordinal st b2 in F1() holds
b1 . b2 = F2(b2) ) )
proof end;

scheme :: ORDINAL2:sch 4
s4{ F1() -> Ordinal, F2() -> set , F3( Ordinal, set ) -> set , F4( Ordinal, T-Sequence) -> set , F5() -> T-Sequence, F6() -> T-Sequence } :
F5() = F6()
provided
E18: dom F5() = F1() and
E19: ( {} in F1() implies F5() . {} = F2() ) and
E20: for b1 being Ordinal st succ b1 in F1() holds
F5() . (succ b1) = F3(b1,(F5() . b1)) and
E21: for b1 being Ordinal st b1 in F1() & b1 <> {} & b1 is_limit_ordinal holds
F5() . b1 = F4(b1,(F5() | b1)) and
E22: dom F6() = F1() and
E23: ( {} in F1() implies F6() . {} = F2() ) and
E24: for b1 being Ordinal st succ b1 in F1() holds
F6() . (succ b1) = F3(b1,(F6() . b1)) and
E25: for b1 being Ordinal st b1 in F1() & b1 <> {} & b1 is_limit_ordinal holds
F6() . b1 = F4(b1,(F6() | b1))
proof end;

scheme :: ORDINAL2:sch 5
s5{ F1() -> Ordinal, F2() -> set , F3( Ordinal, set ) -> set , F4( Ordinal, T-Sequence) -> set } :
ex b1 being T-Sequence st
( dom b1 = F1() & ( {} in F1() implies b1 . {} = F2() ) & ( for b2 being Ordinal st succ b2 in F1() holds
b1 . (succ b2) = F3(b2,(b1 . b2)) ) & ( for b2 being Ordinal st b2 in F1() & b2 <> {} & b2 is_limit_ordinal holds
b1 . b2 = F4(b2,(b1 | b2)) ) )
proof end;

scheme :: ORDINAL2:sch 6
s6{ F1() -> T-Sequence, F2( Ordinal) -> set , F3() -> Ordinal, F4() -> set , F5( Ordinal, set ) -> set , F6( Ordinal, T-Sequence) -> set } :
for b1 being Ordinal st b1 in dom F1() holds
F1() . b1 = F2(b1)
provided
E18: for b1 being Ordinal
for b2 being set holds
( b2 = F2(b1) iff ex b3 being T-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F4() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F5(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F6(b4,(b3 | b4)) ) ) ) and
E19: dom F1() = F3() and
E20: ( {} in F3() implies F1() . {} = F4() ) and
E21: for b1 being Ordinal st succ b1 in F3() holds
F1() . (succ b1) = F5(b1,(F1() . b1)) and
E22: for b1 being Ordinal st b1 in F3() & b1 <> {} & b1 is_limit_ordinal holds
F1() . b1 = F6(b1,(F1() | b1))
proof end;

scheme :: ORDINAL2:sch 7
s7{ F1() -> Ordinal, F2() -> set , F3( Ordinal, set ) -> set , F4( Ordinal, T-Sequence) -> set } :
( ex b1 being set ex b2 being T-Sequence st
( b1 = last b2 & dom b2 = succ F1() & b2 . {} = F2() & ( for b3 being Ordinal st succ b3 in succ F1() holds
b2 . (succ b3) = F3(b3,(b2 . b3)) ) & ( for b3 being Ordinal st b3 in succ F1() & b3 <> {} & b3 is_limit_ordinal holds
b2 . b3 = F4(b3,(b2 | b3)) ) ) & ( for b1, b2 being set st ex b3 being T-Sequence st
( b1 = last b3 & dom b3 = succ F1() & b3 . {} = F2() & ( for b4 being Ordinal st succ b4 in succ F1() holds
b3 . (succ b4) = F3(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ F1() & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F4(b4,(b3 | b4)) ) ) & ex b3 being T-Sequence st
( b2 = last b3 & dom b3 = succ F1() & b3 . {} = F2() & ( for b4 being Ordinal st succ b4 in succ F1() holds
b3 . (succ b4) = F3(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ F1() & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F4(b4,(b3 | b4)) ) ) holds
b1 = b2 ) )
proof end;

scheme :: ORDINAL2:sch 8
s8{ F1( Ordinal) -> set , F2() -> set , F3( Ordinal, set ) -> set , F4( Ordinal, T-Sequence) -> set } :
F1({} ) = F2()
provided
E18: for b1 being Ordinal
for b2 being set holds
( b2 = F1(b1) iff ex b3 being T-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F2() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F3(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F4(b4,(b3 | b4)) ) ) )
proof end;

scheme :: ORDINAL2:sch 9
s9{ F1() -> set , F2( Ordinal, set ) -> set , F3( Ordinal, T-Sequence) -> set , F4( Ordinal) -> set } :
for b1 being Ordinal holds F4((succ b1)) = F2(b1,F4(b1))
provided
E18: for b1 being Ordinal
for b2 being set holds
( b2 = F4(b1) iff ex b3 being T-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F1() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F2(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F3(b4,(b3 | b4)) ) ) )
proof end;

scheme :: ORDINAL2:sch 10
s10{ F1() -> T-Sequence, F2() -> Ordinal, F3( Ordinal) -> set , F4() -> set , F5( Ordinal, set ) -> set , F6( Ordinal, T-Sequence) -> set } :
F3(F2()) = F6(F2(),F1())
provided
E18: for b1 being Ordinal
for b2 being set holds
( b2 = F3(b1) iff ex b3 being T-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F4() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F5(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F6(b4,(b3 | b4)) ) ) ) and
E19: ( F2() <> {} & F2() is_limit_ordinal ) and
E20: dom F1() = F2() and
E21: for b1 being Ordinal st b1 in F2() holds
F1() . b1 = F3(b1)
proof end;

scheme :: ORDINAL2:sch 11
s11{ F1() -> Ordinal, F2() -> Ordinal, F3( Ordinal, Ordinal) -> Ordinal, F4( Ordinal, T-Sequence) -> Ordinal } :
ex b1 being Ordinal-Sequence st
( dom b1 = F1() & ( {} in F1() implies b1 . {} = F2() ) & ( for b2 being Ordinal st succ b2 in F1() holds
b1 . (succ b2) = F3(b2,(b1 . b2)) ) & ( for b2 being Ordinal st b2 in F1() & b2 <> {} & b2 is_limit_ordinal holds
b1 . b2 = F4(b2,(b1 | b2)) ) )
proof end;

scheme :: ORDINAL2:sch 12
s12{ F1() -> Ordinal-Sequence, F2( Ordinal) -> Ordinal, F3() -> Ordinal, F4() -> Ordinal, F5( Ordinal, Ordinal) -> Ordinal, F6( Ordinal, T-Sequence) -> Ordinal } :
for b1 being Ordinal st b1 in dom F1() holds
F1() . b1 = F2(b1)
provided
E18: for b1, b2 being Ordinal holds
( b2 = F2(b1) iff ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F4() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F5(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F6(b4,(b3 | b4)) ) ) ) and
E19: dom F1() = F3() and
E20: ( {} in F3() implies F1() . {} = F4() ) and
E21: for b1 being Ordinal st succ b1 in F3() holds
F1() . (succ b1) = F5(b1,(F1() . b1)) and
E22: for b1 being Ordinal st b1 in F3() & b1 <> {} & b1 is_limit_ordinal holds
F1() . b1 = F6(b1,(F1() | b1))
proof end;

scheme :: ORDINAL2:sch 13
s13{ F1() -> Ordinal, F2() -> Ordinal, F3( Ordinal, Ordinal) -> Ordinal, F4( Ordinal, T-Sequence) -> Ordinal } :
( ex b1 being Ordinalex b2 being Ordinal-Sequence st
( b1 = last b2 & dom b2 = succ F1() & b2 . {} = F2() & ( for b3 being Ordinal st succ b3 in succ F1() holds
b2 . (succ b3) = F3(b3,(b2 . b3)) ) & ( for b3 being Ordinal st b3 in succ F1() & b3 <> {} & b3 is_limit_ordinal holds
b2 . b3 = F4(b3,(b2 | b3)) ) ) & ( for b1, b2 being Ordinal st ex b3 being Ordinal-Sequence st
( b1 = last b3 & dom b3 = succ F1() & b3 . {} = F2() & ( for b4 being Ordinal st succ b4 in succ F1() holds
b3 . (succ b4) = F3(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ F1() & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F4(b4,(b3 | b4)) ) ) & ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ F1() & b3 . {} = F2() & ( for b4 being Ordinal st succ b4 in succ F1() holds
b3 . (succ b4) = F3(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ F1() & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F4(b4,(b3 | b4)) ) ) holds
b1 = b2 ) )
proof end;

scheme :: ORDINAL2:sch 14
s14{ F1( Ordinal) -> Ordinal, F2() -> Ordinal, F3( Ordinal, Ordinal) -> Ordinal, F4( Ordinal, T-Sequence) -> Ordinal } :
F1({} ) = F2()
provided
E18: for b1, b2 being Ordinal holds
( b2 = F1(b1) iff ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F2() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F3(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F4(b4,(b3 | b4)) ) ) )
proof end;

scheme :: ORDINAL2:sch 15
s15{ F1() -> Ordinal, F2( Ordinal, Ordinal) -> Ordinal, F3( Ordinal, T-Sequence) -> Ordinal, F4( Ordinal) -> Ordinal } :
for b1 being Ordinal holds F4((succ b1)) = F2(b1,F4(b1))
provided
E18: for b1, b2 being Ordinal holds
( b2 = F4(b1) iff ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F1() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F2(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F3(b4,(b3 | b4)) ) ) )
proof end;

scheme :: ORDINAL2:sch 16
s16{ F1() -> Ordinal-Sequence, F2() -> Ordinal, F3( Ordinal) -> Ordinal, F4() -> Ordinal, F5( Ordinal, Ordinal) -> Ordinal, F6( Ordinal, T-Sequence) -> Ordinal } :
F3(F2()) = F6(F2(),F1())
provided
E18: for b1, b2 being Ordinal holds
( b2 = F3(b1) iff ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ b1 & b3 . {} = F4() & ( for b4 being Ordinal st succ b4 in succ b1 holds
b3 . (succ b4) = F5(b4,(b3 . b4)) ) & ( for b4 being Ordinal st b4 in succ b1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = F6(b4,(b3 | b4)) ) ) ) and
E19: ( F2() <> {} & F2() is_limit_ordinal ) and
E20: dom F1() = F2() and
E21: for b1 being Ordinal st b1 in F2() holds
F1() . b1 = F3(b1)
proof end;

definition
let c1 be T-Sequence;
func sup c1 -> Ordinal equals :: ORDINAL2:def 9
sup (rng a1);
correctness
coherence
sup (rng c1) is Ordinal
;
;
func inf c1 -> Ordinal equals :: ORDINAL2:def 10
inf (rng a1);
correctness
coherence
inf (rng c1) is Ordinal
;
;
end;

:: deftheorem Def9 defines sup ORDINAL2:def 9 :
for b1 being T-Sequence holds sup b1 = sup (rng b1);

:: deftheorem Def10 defines inf ORDINAL2:def 10 :
for b1 being T-Sequence holds inf b1 = inf (rng b1);

theorem Th35: :: ORDINAL2:35
for b1 being T-Sequence holds
( sup b1 = sup (rng b1) & inf b1 = inf (rng b1) ) ;

definition
let c1 be T-Sequence;
func lim_sup c1 -> Ordinal means :: ORDINAL2:def 11
ex b1 being Ordinal-Sequence st
( a2 = inf b1 & dom b1 = dom a1 & ( for b2 being Ordinal st b2 in dom a1 holds
b1 . b2 = sup (rng (a1 | ((dom a1) \ b2))) ) );
existence
ex b1 being Ordinalex b2 being Ordinal-Sequence st
( b1 = inf b2 & dom b2 = dom c1 & ( for b3 being Ordinal st b3 in dom c1 holds
b2 . b3 = sup (rng (c1 | ((dom c1) \ b3))) ) )
proof end;
uniqueness
for b1, b2 being Ordinal st ex b3 being Ordinal-Sequence st
( b1 = inf b3 & dom b3 = dom c1 & ( for b4 being Ordinal st b4 in dom c1 holds
b3 . b4 = sup (rng (c1 | ((dom c1) \ b4))) ) ) & ex b3 being Ordinal-Sequence st
( b2 = inf b3 & dom b3 = dom c1 & ( for b4 being Ordinal st b4 in dom c1 holds
b3 . b4 = sup (rng (c1 | ((dom c1) \ b4))) ) ) holds
b1 = b2
proof end;
func lim_inf c1 -> Ordinal means :: ORDINAL2:def 12
ex b1 being Ordinal-Sequence st
( a2 = sup b1 & dom b1 = dom a1 & ( for b2 being Ordinal st b2 in dom a1 holds
b1 . b2 = inf (rng (a1 | ((dom a1) \ b2))) ) );
existence
ex b1 being Ordinalex b2 being Ordinal-Sequence st
( b1 = sup b2 & dom b2 = dom c1 & ( for b3 being Ordinal st b3 in dom c1 holds
b2 . b3 = inf (rng (c1 | ((dom c1) \ b3))) ) )
proof end;
uniqueness
for b1, b2 being Ordinal st ex b3 being Ordinal-Sequence st
( b1 = sup b3 & dom b3 = dom c1 & ( for b4 being Ordinal st b4 in dom c1 holds
b3 . b4 = inf (rng (c1 | ((dom c1) \ b4))) ) ) & ex b3 being Ordinal-Sequence st
( b2 = sup b3 & dom b3 = dom c1 & ( for b4 being Ordinal st b4 in dom c1 holds
b3 . b4 = inf (rng (c1 | ((dom c1) \ b4))) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def11 defines lim_sup ORDINAL2:def 11 :
for b1 being T-Sequence
for b2 being Ordinal holds
( b2 = lim_sup b1 iff ex b3 being Ordinal-Sequence st
( b2 = inf b3 & dom b3 = dom b1 & ( for b4 being Ordinal st b4 in dom b1 holds
b3 . b4 = sup (rng (b1 | ((dom b1) \ b4))) ) ) );

:: deftheorem Def12 defines lim_inf ORDINAL2:def 12 :
for b1 being T-Sequence
for b2 being Ordinal holds
( b2 = lim_inf b1 iff ex b3 being Ordinal-Sequence st
( b2 = sup b3 & dom b3 = dom b1 & ( for b4 being Ordinal st b4 in dom b1 holds
b3 . b4 = inf (rng (b1 | ((dom b1) \ b4))) ) ) );

definition
let c1 be Ordinal;
let c2 be Ordinal-Sequence;
pred c1 is_limes_of c2 means :Def13: :: ORDINAL2:def 13
ex b1 being Ordinal st
( b1 in dom a2 & ( for b2 being Ordinal st b1 c= b2 & b2 in dom a2 holds
a2 . b2 = {} ) ) if a1 = {}
otherwise for b1, b2 being Ordinal st b1 in a1 & a1 in b2 holds
ex b3 being Ordinal st
( b3 in dom a2 & ( for b4 being Ordinal st b3 c= b4 & b4 in dom a2 holds
( b1 in a2 . b4 & a2 . b4 in b2 ) ) );
consistency
verum
;
end;

:: deftheorem Def13 defines is_limes_of ORDINAL2:def 13 :
for b1 being Ordinal
for b2 being Ordinal-Sequence holds
( ( b1 = {} implies ( b1 is_limes_of b2 iff ex b3 being Ordinal st
( b3 in dom b2 & ( for b4 being Ordinal st b3 c= b4 & b4 in dom b2 holds
b2 . b4 = {} ) ) ) ) & ( not b1 = {} implies ( b1 is_limes_of b2 iff for b3, b4 being Ordinal st b3 in b1 & b1 in b4 holds
ex b5 being Ordinal st
( b5 in dom b2 & ( for b6 being Ordinal st b5 c= b6 & b6 in dom b2 holds
( b3 in b2 . b6 & b2 . b6 in b4 ) ) ) ) ) );

definition
let c1 be Ordinal-Sequence;
given c2 being Ordinal such that E19: c2 is_limes_of c1 ;
func lim c1 -> Ordinal means :Def14: :: ORDINAL2:def 14
a2 is_limes_of a1;
existence
ex b1 being Ordinal st b1 is_limes_of c1
by E19;
uniqueness
for b1, b2 being Ordinal st b1 is_limes_of c1 & b2 is_limes_of c1 holds
b1 = b2
proof end;
end;

:: deftheorem Def14 defines lim ORDINAL2:def 14 :
for b1 being Ordinal-Sequence st ex b2 being Ordinal st b2 is_limes_of b1 holds
for b2 being Ordinal holds
( b2 = lim b1 iff b2 is_limes_of b1 );

definition
let c1 be Ordinal;
let c2 be Ordinal-Sequence;
func lim c1,c2 -> Ordinal equals :: ORDINAL2:def 15
lim (a2 | a1);
correctness
coherence
lim (c2 | c1) is Ordinal
;
;
end;

:: deftheorem Def15 defines lim ORDINAL2:def 15 :
for b1 being Ordinal
for b2 being Ordinal-Sequence holds lim b1,b2 = lim (b2 | b1);

definition
let c1 be Ordinal-Sequence;
attr a1 is increasing means :: ORDINAL2:def 16
for b1, b2 being Ordinal st b1 in b2 & b2 in dom a1 holds
a1 . b1 in a1 . b2;
attr a1 is continuous means :: ORDINAL2:def 17
for b1, b2 being Ordinal st b1 in dom a1 & b1 <> {} & b1 is_limit_ordinal & b2 = a1 . b1 holds
b2 is_limes_of a1 | b1;
end;

:: deftheorem Def16 defines increasing ORDINAL2:def 16 :
for b1 being Ordinal-Sequence holds
( b1 is increasing iff for b2, b3 being Ordinal st b2 in b3 & b3 in dom b1 holds
b1 . b2 in b1 . b3 );

:: deftheorem Def17 defines continuous ORDINAL2:def 17 :
for b1 being Ordinal-Sequence holds
( b1 is continuous iff for b2, b3 being Ordinal st b2 in dom b1 & b2 <> {} & b2 is_limit_ordinal & b3 = b1 . b2 holds
b3 is_limes_of b1 | b2 );

definition
let c1, c2 be Ordinal;
func c1 +^ c2 -> Ordinal means :Def18: :: ORDINAL2:def 18
ex b1 being Ordinal-Sequence st
( a3 = last b1 & dom b1 = succ a2 & b1 . {} = a1 & ( for b2 being Ordinal st succ b2 in succ a2 holds
b1 . (succ b2) = succ (b1 . b2) ) & ( for b2 being Ordinal st b2 in succ a2 & b2 <> {} & b2 is_limit_ordinal holds
b1 . b2 = sup (b1 | b2) ) );
correctness
existence
ex b1 being Ordinalex b2 being Ordinal-Sequence st
( b1 = last b2 & dom b2 = succ c2 & b2 . {} = c1 & ( for b3 being Ordinal st succ b3 in succ c2 holds
b2 . (succ b3) = succ (b2 . b3) ) & ( for b3 being Ordinal st b3 in succ c2 & b3 <> {} & b3 is_limit_ordinal holds
b2 . b3 = sup (b2 | b3) ) )
;
uniqueness
for b1, b2 being Ordinal st ex b3 being Ordinal-Sequence st
( b1 = last b3 & dom b3 = succ c2 & b3 . {} = c1 & ( for b4 being Ordinal st succ b4 in succ c2 holds
b3 . (succ b4) = succ (b3 . b4) ) & ( for b4 being Ordinal st b4 in succ c2 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = sup (b3 | b4) ) ) & ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ c2 & b3 . {} = c1 & ( for b4 being Ordinal st succ b4 in succ c2 holds
b3 . (succ b4) = succ (b3 . b4) ) & ( for b4 being Ordinal st b4 in succ c2 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = sup (b3 | b4) ) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def18 defines +^ ORDINAL2:def 18 :
for b1, b2, b3 being Ordinal holds
( b3 = b1 +^ b2 iff ex b4 being Ordinal-Sequence st
( b3 = last b4 & dom b4 = succ b2 & b4 . {} = b1 & ( for b5 being Ordinal st succ b5 in succ b2 holds
b4 . (succ b5) = succ (b4 . b5) ) & ( for b5 being Ordinal st b5 in succ b2 & b5 <> {} & b5 is_limit_ordinal holds
b4 . b5 = sup (b4 | b5) ) ) );

definition
let c1, c2 be Ordinal;
func c1 *^ c2 -> Ordinal means :Def19: :: ORDINAL2:def 19
ex b1 being Ordinal-Sequence st
( a3 = last b1 & dom b1 = succ a1 & b1 . {} = {} & ( for b2 being Ordinal st succ b2 in succ a1 holds
b1 . (succ b2) = (b1 . b2) +^ a2 ) & ( for b2 being Ordinal st b2 in succ a1 & b2 <> {} & b2 is_limit_ordinal holds
b1 . b2 = union (sup (b1 | b2)) ) );
correctness
existence
ex b1 being Ordinalex b2 being Ordinal-Sequence st
( b1 = last b2 & dom b2 = succ c1 & b2 . {} = {} & ( for b3 being Ordinal st succ b3 in succ c1 holds
b2 . (succ b3) = (b2 . b3) +^ c2 ) & ( for b3 being Ordinal st b3 in succ c1 & b3 <> {} & b3 is_limit_ordinal holds
b2 . b3 = union (sup (b2 | b3)) ) )
;
uniqueness
for b1, b2 being Ordinal st ex b3 being Ordinal-Sequence st
( b1 = last b3 & dom b3 = succ c1 & b3 . {} = {} & ( for b4 being Ordinal st succ b4 in succ c1 holds
b3 . (succ b4) = (b3 . b4) +^ c2 ) & ( for b4 being Ordinal st b4 in succ c1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = union (sup (b3 | b4)) ) ) & ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ c1 & b3 . {} = {} & ( for b4 being Ordinal st succ b4 in succ c1 holds
b3 . (succ b4) = (b3 . b4) +^ c2 ) & ( for b4 being Ordinal st b4 in succ c1 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = union (sup (b3 | b4)) ) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def19 defines *^ ORDINAL2:def 19 :
for b1, b2, b3 being Ordinal holds
( b3 = b1 *^ b2 iff ex b4 being Ordinal-Sequence st
( b3 = last b4 & dom b4 = succ b1 & b4 . {} = {} & ( for b5 being Ordinal st succ b5 in succ b1 holds
b4 . (succ b5) = (b4 . b5) +^ b2 ) & ( for b5 being Ordinal st b5 in succ b1 & b5 <> {} & b5 is_limit_ordinal holds
b4 . b5 = union (sup (b4 | b5)) ) ) );

definition
let c1, c2 be Ordinal;
func exp c1,c2 -> Ordinal means :Def20: :: ORDINAL2:def 20
ex b1 being Ordinal-Sequence st
( a3 = last b1 & dom b1 = succ a2 & b1 . {} = one & ( for b2 being Ordinal st succ b2 in succ a2 holds
b1 . (succ b2) = a1 *^ (b1 . b2) ) & ( for b2 being Ordinal st b2 in succ a2 & b2 <> {} & b2 is_limit_ordinal holds
b1 . b2 = lim (b1 | b2) ) );
correctness
existence
ex b1 being Ordinalex b2 being Ordinal-Sequence st
( b1 = last b2 & dom b2 = succ c2 & b2 . {} = one & ( for b3 being Ordinal st succ b3 in succ c2 holds
b2 . (succ b3) = c1 *^ (b2 . b3) ) & ( for b3 being Ordinal st b3 in succ c2 & b3 <> {} & b3 is_limit_ordinal holds
b2 . b3 = lim (b2 | b3) ) )
;
uniqueness
for b1, b2 being Ordinal st ex b3 being Ordinal-Sequence st
( b1 = last b3 & dom b3 = succ c2 & b3 . {} = one & ( for b4 being Ordinal st succ b4 in succ c2 holds
b3 . (succ b4) = c1 *^ (b3 . b4) ) & ( for b4 being Ordinal st b4 in succ c2 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = lim (b3 | b4) ) ) & ex b3 being Ordinal-Sequence st
( b2 = last b3 & dom b3 = succ c2 & b3 . {} = one & ( for b4 being Ordinal st succ b4 in succ c2 holds
b3 . (succ b4) = c1 *^ (b3 . b4) ) & ( for b4 being Ordinal st b4 in succ c2 & b4 <> {} & b4 is_limit_ordinal holds
b3 . b4 = lim (b3 | b4) ) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def20 defines exp ORDINAL2:def 20 :
for b1, b2, b3 being Ordinal holds
( b3 = exp b1,b2 iff ex b4 being Ordinal-Sequence st
( b3 = last b4 & dom b4 = succ b2 & b4 . {} = one & ( for b5 being Ordinal st succ b5 in succ b2 holds
b4 . (succ b5) = b1 *^ (b4 . b5) ) & ( for b5 being Ordinal st b5 in succ b2 & b5 <> {} & b5 is_limit_ordinal holds
b4 . b5 = lim (b4 | b5) ) ) );

theorem Th36: :: ORDINAL2:36
canceled;

theorem Th37: :: ORDINAL2:37
canceled;

theorem Th38: :: ORDINAL2:38
canceled;

theorem Th39: :: ORDINAL2:39
canceled;

theorem Th40: :: ORDINAL2:40
canceled;

theorem Th41: :: ORDINAL2:41
canceled;

theorem Th42: :: ORDINAL2:42
canceled;

theorem Th43: :: ORDINAL2:43
canceled;

theorem Th44: :: ORDINAL2:44
for b1 being Ordinal holds b1 +^ {} = b1
proof end;

theorem Th45: :: ORDINAL2:45
for b1, b2 being Ordinal holds b1 +^ (succ b2) = succ (b1 +^ b2)
proof end;

theorem Th46: :: ORDINAL2:46
for b1, b2 being Ordinal st b1 <> {} & b1 is_limit_ordinal holds
for b3 being Ordinal-Sequence st dom b3 = b1 & ( for b4 being Ordinal st b4 in b1 holds
b3 . b4 = b2 +^ b4 ) holds
b2 +^ b1 = sup b3
proof end;

theorem Th47: :: ORDINAL2:47
for b1 being Ordinal holds {} +^ b1 = b1
proof end;

theorem Th48: :: ORDINAL2:48
for b1 being Ordinal holds b1 +^ one = succ b1
proof end;

theorem Th49: :: ORDINAL2:49
for b1, b2, b3 being Ordinal st b1 in b2 holds
b3 +^ b1 in b3 +^ b2
proof end;

theorem Th50: :: ORDINAL2:50
for b1, b2, b3 being Ordinal st b1 c= b2 holds
b3 +^ b1 c= b3 +^ b2
proof end;

theorem Th51: :: ORDINAL2:51
for b1, b2, b3 being Ordinal st b1 c= b2 holds
b1 +^ b3 c= b2 +^ b3
proof end;

theorem Th52: :: ORDINAL2:52
for b1 being Ordinal holds {} *^ b1 = {}
proof end;

theorem Th53: :: ORDINAL2:53
for b1, b2 being Ordinal holds (succ b1) *^ b2 = (b1 *^ b2) +^ b2
proof end;

theorem Th54: :: ORDINAL2:54
for b1, b2 being Ordinal st b1 <> {} & b1 is_limit_ordinal holds
for b3 being Ordinal-Sequence st dom b3 = b1 & ( for b4 being Ordinal st b4 in b1 holds
b3 . b4 = b4 *^ b2 ) holds
b1 *^ b2 = union (sup b3)
proof end;

theorem Th55: :: ORDINAL2:55
for b1 being Ordinal holds b1 *^ {} = {}
proof end;

theorem Th56: :: ORDINAL2:56
for b1 being Ordinal holds
( one *^ b1 = b1 & b1 *^ one = b1 )
proof end;

theorem Th57: :: ORDINAL2:57
for b1, b2, b3 being Ordinal st b1 <> {} & b2 in b3 holds
b2 *^ b1 in b3 *^ b1
proof end;

theorem Th58: :: ORDINAL2:58
for b1, b2, b3 being Ordinal st b1 c= b2 holds
b1 *^ b3 c= b2 *^ b3
proof end;

theorem Th59: :: ORDINAL2:59
for b1, b2, b3 being Ordinal st b1 c= b2 holds
b3 *^ b1 c= b3 *^ b2
proof end;

theorem Th60: :: ORDINAL2:60
for b1 being Ordinal holds exp b1,{} = one
proof end;

theorem Th61: :: ORDINAL2:61
for b1, b2 being Ordinal holds exp b1,(succ b2) = b1 *^ (exp b1,b2)
proof end;

theorem Th62: :: ORDINAL2:62
for b1, b2 being Ordinal st b1 <> {} & b1 is_limit_ordinal holds
for b3 being Ordinal-Sequence st dom b3 = b1 & ( for b4 being Ordinal st b4 in b1 holds
b3 . b4 = exp b2,b4 ) holds
exp b2,b1 = lim b3
proof end;

theorem Th63: :: ORDINAL2:63
for b1 being Ordinal holds
( exp b1,one = b1 & exp one ,b1 = one )
proof end;

definition
let c1 be set ;
attr a1 is natural means :Def21: :: ORDINAL2:def 21
a1 in omega ;
end;

:: deftheorem Def21 defines natural ORDINAL2:def 21 :
for b1 being set holds
( b1 is natural iff b1 in omega );

theorem Th64: :: ORDINAL2:64
canceled;

theorem Th65: :: ORDINAL2:65
for b1 being Ordinal ex b2, b3 being Ordinal st
( b2 is_limit_ordinal & b3 is natural & b1 = b2 +^ b3 )
proof end;

registration
let c1 be set ;
let c2 be Ordinal;
cluster a1 --> a2 -> Ordinal-yielding ;
coherence
c1 --> c2 is Ordinal-yielding
proof end;
end;