set NN = Funcs (NAT,NAT);
defpred S1[ Nat, object , object ] means for h being Function of (Segm ($1 + 1)),(Funcs (NAT,NAT)) st h = $2 holds
( $3 is Function of (Segm (($1 + 1) + 1)),(Funcs (NAT,NAT)) & ( for t being Function of (Segm (($1 + 1) + 1)),(Funcs (NAT,NAT)) st t = $3 holds
( t | (Segm ($1 + 1)) = h & ( for ti being Function of NAT,NAT st ti = t . ($1 + 1) holds
( ti . 0 = (h . $1) . 1 & ( for n being Nat holds ti . (n + 1) = (h . $1) . (ti . n) ) ) ) ) ) );
defpred S2[ object , object ] means for i being Nat st i = $1 holds
( $2 is Function of (Funcs ((Segm (i + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((i + 1) + 1)),(Funcs (NAT,NAT)))) & ( for g being Function of (Funcs ((Segm (i + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((i + 1) + 1)),(Funcs (NAT,NAT)))) st g = $2 holds
for h being Function of (Segm (i + 1)),(Funcs (NAT,NAT)) holds S1[i,h,g . h] ) );
A1:
for i being object st i in NAT holds
ex H being object st S2[i,H]
proof
let x be
object ;
( x in NAT implies ex H being object st S2[x,H] )
assume
x in NAT
;
ex H being object st S2[x,H]
then reconsider i =
x as
Element of
NAT ;
defpred S3[
object ,
object ]
means S1[
i,$1,$2];
A2:
for
x being
object st
x in Funcs (
(Segm (i + 1)),
(Funcs (NAT,NAT))) holds
ex
y being
object st
(
y in Funcs (
(Segm ((i + 1) + 1)),
(Funcs (NAT,NAT))) &
S3[
x,
y] )
proof
let x be
object ;
( x in Funcs ((Segm (i + 1)),(Funcs (NAT,NAT))) implies ex y being object st
( y in Funcs ((Segm ((i + 1) + 1)),(Funcs (NAT,NAT))) & S3[x,y] ) )
assume A3:
x in Funcs (
(Segm (i + 1)),
(Funcs (NAT,NAT)))
;
ex y being object st
( y in Funcs ((Segm ((i + 1) + 1)),(Funcs (NAT,NAT))) & S3[x,y] )
reconsider h =
x as
Function of
(Segm (i + 1)),
(Funcs (NAT,NAT)) by A3, FUNCT_2:66;
defpred S4[
object ,
object ]
means for
n being
Nat st
n = $1 holds
( (
n <= i implies $2
= h . $1 ) & (
n = i + 1 implies ( $2 is
Function of
NAT,
NAT & ( for
ti being
Function of
NAT,
NAT st
ti = $2 holds
(
ti . 0 = (h . i) . 1 & ( for
n being
Nat holds
ti . (n + 1) = (h . i) . (ti . n) ) ) ) ) ) );
A4:
for
z being
object st
z in Segm ((i + 1) + 1) holds
ex
t being
object st
(
t in Funcs (
NAT,
NAT) &
S4[
z,
t] )
proof
let c be
object ;
( c in Segm ((i + 1) + 1) implies ex t being object st
( t in Funcs (NAT,NAT) & S4[c,t] ) )
assume A5:
c in Segm ((i + 1) + 1)
;
ex t being object st
( t in Funcs (NAT,NAT) & S4[c,t] )
reconsider z =
c as
Nat by A5;
z < (i + 1) + 1
by A5, NAT_1:44;
then
z <= i + 1
by NAT_1:13;
per cases then
( z < i + 1 or z = i + 1 )
by XXREAL_0:1;
suppose A7:
z = i + 1
;
ex t being object st
( t in Funcs (NAT,NAT) & S4[c,t] )deffunc H1(
object ,
object )
-> set =
(h . i) . $2;
consider t being
Function such that A8:
(
dom t = NAT &
t . 0 = (h . i) . 1 )
and A9:
for
n being
Nat holds
t . (n + 1) = H1(
n,
t . n)
from NAT_1:sch 11();
take
t
;
( t in Funcs (NAT,NAT) & S4[c,t] )
rng t c= NAT
then
t is
Function of
NAT,
NAT
by A8, FUNCT_2:2;
hence
(
t in Funcs (
NAT,
NAT) &
S4[
c,
t] )
by A7, NAT_1:13, A8, A9, FUNCT_2:9;
verum end; end;
end;
consider P being
Function such that A15:
(
dom P = Segm ((i + 1) + 1) &
rng P c= Funcs (
NAT,
NAT) & ( for
z being
object st
z in Segm ((i + 1) + 1) holds
S4[
z,
P . z] ) )
from FUNCT_1:sch 6(A4);
take
P
;
( P in Funcs ((Segm ((i + 1) + 1)),(Funcs (NAT,NAT))) & S3[x,P] )
thus A16:
P in Funcs (
(Segm ((i + 1) + 1)),
(Funcs (NAT,NAT)))
by A15, FUNCT_2:def 2;
S3[x,P]
thus
S1[
i,
x,
P]
verumproof
let h1 be
Function of
(Segm (i + 1)),
(Funcs (NAT,NAT));
( h1 = x implies ( P is Function of (Segm ((i + 1) + 1)),(Funcs (NAT,NAT)) & ( for t being Function of (Segm ((i + 1) + 1)),(Funcs (NAT,NAT)) st t = P holds
( t | (Segm (i + 1)) = h1 & ( for ti being Function of NAT,NAT st ti = t . (i + 1) holds
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) ) ) ) ) ) )
assume A17:
h1 = x
;
( P is Function of (Segm ((i + 1) + 1)),(Funcs (NAT,NAT)) & ( for t being Function of (Segm ((i + 1) + 1)),(Funcs (NAT,NAT)) st t = P holds
( t | (Segm (i + 1)) = h1 & ( for ti being Function of NAT,NAT st ti = t . (i + 1) holds
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) ) ) ) ) )
thus
P is
Function of
(Segm ((i + 1) + 1)),
(Funcs (NAT,NAT))
by A16, FUNCT_2:66;
for t being Function of (Segm ((i + 1) + 1)),(Funcs (NAT,NAT)) st t = P holds
( t | (Segm (i + 1)) = h1 & ( for ti being Function of NAT,NAT st ti = t . (i + 1) holds
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) ) ) )
let t be
Function of
(Segm ((i + 1) + 1)),
(Funcs (NAT,NAT));
( t = P implies ( t | (Segm (i + 1)) = h1 & ( for ti being Function of NAT,NAT st ti = t . (i + 1) holds
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) ) ) ) )
assume A18:
t = P
;
( t | (Segm (i + 1)) = h1 & ( for ti being Function of NAT,NAT st ti = t . (i + 1) holds
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) ) ) )
A19:
dom h1 = Segm (i + 1)
by FUNCT_2:def 1;
A20:
i + 1
< (i + 1) + 1
by NAT_1:13;
then A21:
(
Segm (i + 1) c= Segm ((i + 1) + 1) &
Segm ((i + 1) + 1) = dom t )
by NAT_1:39, FUNCT_2:def 1;
then A22:
dom (t | (Segm (i + 1))) = Segm (i + 1)
by RELAT_1:62;
for
z being
object st
z in Segm (i + 1) holds
(t | (Segm (i + 1))) . z = h1 . z
hence
t | (Segm (i + 1)) = h1
by A19, A22, FUNCT_1:2;
for ti being Function of NAT,NAT st ti = t . (i + 1) holds
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) )
let ti be
Function of
NAT,
NAT;
( ti = t . (i + 1) implies ( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) ) )
assume A24:
ti = t . (i + 1)
;
( ti . 0 = (h1 . i) . 1 & ( for n being Nat holds ti . (n + 1) = (h1 . i) . (ti . n) ) )
i + 1
in Segm ((i + 1) + 1)
by A20, NAT_1:44;
hence
(
ti . 0 = (h1 . i) . 1 & ( for
n being
Nat holds
ti . (n + 1) = (h1 . i) . (ti . n) ) )
by A24, A17, A18, A15;
verum
end;
end;
consider H being
Function such that A25:
(
dom H = Funcs (
(Segm (i + 1)),
(Funcs (NAT,NAT))) &
rng H c= Funcs (
(Segm ((i + 1) + 1)),
(Funcs (NAT,NAT))) & ( for
x being
object st
x in Funcs (
(Segm (i + 1)),
(Funcs (NAT,NAT))) holds
S3[
x,
H . x] ) )
from FUNCT_1:sch 6(A2);
take
H
;
S2[x,H]
let j be
Nat;
( j = x implies ( H is Function of (Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT)))) & ( for g being Function of (Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT)))) st g = H holds
for h being Function of (Segm (j + 1)),(Funcs (NAT,NAT)) holds S1[j,h,g . h] ) ) )
assume A26:
j = x
;
( H is Function of (Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT)))) & ( for g being Function of (Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT)))) st g = H holds
for h being Function of (Segm (j + 1)),(Funcs (NAT,NAT)) holds S1[j,h,g . h] ) )
thus
H is
Function of
(Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),
(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT))))
by A26, A25, FUNCT_2:2;
for g being Function of (Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT)))) st g = H holds
for h being Function of (Segm (j + 1)),(Funcs (NAT,NAT)) holds S1[j,h,g . h]
let g be
Function of
(Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),
(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT))));
( g = H implies for h being Function of (Segm (j + 1)),(Funcs (NAT,NAT)) holds S1[j,h,g . h] )
assume A27:
g = H
;
for h being Function of (Segm (j + 1)),(Funcs (NAT,NAT)) holds S1[j,h,g . h]
let h be
Function of
(Segm (j + 1)),
(Funcs (NAT,NAT));
S1[j,h,g . h]
h in Funcs (
(Segm (i + 1)),
(Funcs (NAT,NAT)))
by A26, FUNCT_2:8;
hence
S1[
j,
h,
g . h]
by A25, A27, A26;
verum
end;
consider GG being Function such that
A28:
( dom GG = NAT & ( for i being object st i in NAT holds
S2[i,GG . i] ) )
from CLASSES1:sch 1(A1);
for x being object st x in dom GG holds
GG . x is Function
by A28;
then reconsider GG = GG as Function-yielding Function by FUNCOP_1:def 6;
deffunc H1( object , object ) -> set = (GG . $1) . $2;
deffunc H2( Element of NAT ) -> Element of omega = $1 + 1;
consider a0 being Function of NAT,NAT such that
A29:
for x being Element of NAT holds a0 . x = H2(x)
from FUNCT_2:sch 4();
set f0 = (Segm 1) --> a0;
a0 in Funcs (NAT,NAT)
by FUNCT_2:8;
then A30:
{a0} c= Funcs (NAT,NAT)
by ZFMISC_1:31;
A31:
( rng ((Segm 1) --> a0) = {a0} & dom ((Segm 1) --> a0) = Segm 1 )
by FUNCOP_1:8;
consider Ack being Function such that
A32:
( dom Ack = NAT & Ack . 0 = (Segm 1) --> a0 )
and
A33:
for n being Nat holds Ack . (n + 1) = H1(n,Ack . n)
from NAT_1:sch 11();
defpred S3[ Nat] means Ack . $1 in Funcs ((Segm ($1 + 1)),(Funcs (NAT,NAT)));
A34:
S3[ 0 ]
by A32, A31, A30, FUNCT_2:def 2;
A35:
for j being Nat st S3[j] holds
S3[j + 1]
proof
let j be
Nat;
( S3[j] implies S3[j + 1] )
assume A36:
S3[
j]
;
S3[j + 1]
j in NAT
by ORDINAL1:def 12;
then reconsider GGj =
GG . j as
Function of
(Funcs ((Segm (j + 1)),(Funcs (NAT,NAT)))),
(Funcs ((Segm ((j + 1) + 1)),(Funcs (NAT,NAT)))) by A28;
A37:
Ack . (j + 1) = GGj . (Ack . j)
by A33;
Funcs (
(Segm (j + 1)),
(Funcs (NAT,NAT)))
= dom GGj
by FUNCT_2:def 1;
then
(
GGj . (Ack . j) in rng GGj &
rng GGj c= Funcs (
(Segm ((j + 1) + 1)),
(Funcs (NAT,NAT))) )
by A36, FUNCT_1:def 3;
hence
S3[
j + 1]
by A37;
verum
end;
A38:
for j being Nat holds S3[j]
from NAT_1:sch 2(A34, A35);
for x being object st x in dom Ack holds
Ack . x is Function
then reconsider Ack = Ack as Function-yielding Function by FUNCOP_1:def 6;
defpred S4[ object , object , object ] means for A being Function of NAT,NAT st A = (Ack . $1) . $1 holds
$3 = A . $2;
A39:
for x, y being object st x in NAT & y in NAT holds
ex z being object st
( z in NAT & S4[x,y,z] )
proof
let x,
y be
object ;
( x in NAT & y in NAT implies ex z being object st
( z in NAT & S4[x,y,z] ) )
assume A40:
(
x in NAT &
y in NAT )
;
ex z being object st
( z in NAT & S4[x,y,z] )
reconsider x =
x as
Nat by A40;
Ack . x in Funcs (
(Segm (x + 1)),
(Funcs (NAT,NAT)))
by A38;
then reconsider Ackx =
Ack . x as
Function of
(Segm (x + 1)),
(Funcs (NAT,NAT)) by FUNCT_2:66;
x < x + 1
by NAT_1:13;
then
(
x in Segm (x + 1) &
Segm (x + 1) = dom Ackx )
by NAT_1:44, FUNCT_2:def 1;
then
(
Ackx . x in rng Ackx &
rng Ackx c= Funcs (
NAT,
NAT) )
by FUNCT_1:def 3;
then reconsider Ackxx =
Ackx . x as
Function of
NAT,
NAT by FUNCT_2:66;
take z =
Ackxx . y;
( z in NAT & S4[x,y,z] )
dom Ackxx = NAT
by FUNCT_2:def 1;
then
(
z in rng Ackxx &
rng Ackxx c= NAT )
by A40, FUNCT_1:def 3;
hence
(
z in NAT &
S4[
x,
y,
z] )
;
verum
end;
consider IT being BinOp of NAT such that
A41:
for x, y being object st x in NAT & y in NAT holds
S4[x,y,IT . (x,y)]
from BINOP_1:sch 1(A39);
take
IT
; for m, n being Nat holds
( IT . (0,n) = n + 1 & ( m > 0 implies IT . (m,0) = IT . ((m - 1),1) ) & ( m > 0 & n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) ) )
let m, n be Nat; ( IT . (0,n) = n + 1 & ( m > 0 implies IT . (m,0) = IT . ((m - 1),1) ) & ( m > 0 & n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) ) )
A42:
n in NAT
by ORDINAL1:def 12;
reconsider m = m as Element of NAT by ORDINAL1:def 12;
((Segm 1) --> a0) . 0 = a0
by NAT_1:44, FUNCOP_1:7;
then
IT . (0,n) = a0 . n
by A32, A41, A42;
hence
IT . (0,n) = n + 1
by A42, A29; ( ( m > 0 implies IT . (m,0) = IT . ((m - 1),1) ) & ( m > 0 & n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) ) )
( m > 0 implies ( IT . (m,0) = IT . ((m - 1),1) & ( n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) ) ) )
proof
assume
m > 0
;
( IT . (m,0) = IT . ((m - 1),1) & ( n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) ) )
then reconsider m1 =
m - 1 as
Element of
NAT by NAT_1:20;
Ack . m in Funcs (
(Segm (m + 1)),
(Funcs (NAT,NAT)))
by A38;
then reconsider Ackm =
Ack . m as
Function of
(Segm (m + 1)),
(Funcs (NAT,NAT)) by FUNCT_2:66;
m < m + 1
by NAT_1:13;
then
(
m in Segm (m + 1) &
Segm (m + 1) = dom Ackm )
by NAT_1:44, FUNCT_2:def 1;
then
(
Ackm . m in rng Ackm &
rng Ackm c= Funcs (
NAT,
NAT) )
by FUNCT_1:def 3;
then reconsider Ackmm =
Ackm . m as
Function of
NAT,
NAT by FUNCT_2:66;
Ack . m1 in Funcs (
(Segm (m1 + 1)),
(Funcs (NAT,NAT)))
by A38;
then reconsider Ackm1 =
Ack . m1 as
Function of
(Segm (m1 + 1)),
(Funcs (NAT,NAT)) by FUNCT_2:66;
m1 < m1 + 1
by NAT_1:13;
then
(
m1 in Segm (m1 + 1) &
Segm (m1 + 1) = dom Ackm1 )
by NAT_1:44, FUNCT_2:def 1;
then
(
Ackm1 . m1 in rng Ackm1 &
rng Ackm1 c= Funcs (
NAT,
NAT) )
by FUNCT_1:def 3;
then reconsider Ackm1m1 =
Ackm1 . m1 as
Function of
NAT,
NAT by FUNCT_2:66;
reconsider GGm =
GG . m as
Function of
(Funcs ((Segm (m + 1)),(Funcs (NAT,NAT)))),
(Funcs ((Segm ((m + 1) + 1)),(Funcs (NAT,NAT)))) by A28;
reconsider GGmA =
GGm . Ackm as
Function of
(Segm ((m + 1) + 1)),
(Funcs (NAT,NAT)) by A28;
m + 1
< (m + 1) + 1
by NAT_1:13;
then
(
m + 1
in Segm ((m + 1) + 1) &
Segm ((m + 1) + 1) = dom GGmA )
by NAT_1:44, FUNCT_2:def 1;
then
(
GGmA . (m + 1) in rng GGmA &
rng GGmA c= Funcs (
NAT,
NAT) )
by FUNCT_1:def 3;
then reconsider GGmAm =
GGmA . (m + 1) as
Function of
NAT,
NAT by FUNCT_2:66;
reconsider GGm1 =
GG . m1 as
Function of
(Funcs ((Segm (m1 + 1)),(Funcs (NAT,NAT)))),
(Funcs ((Segm ((m1 + 1) + 1)),(Funcs (NAT,NAT)))) by A28;
reconsider GGm1A =
GGm1 . Ackm1 as
Function of
(Segm ((m1 + 1) + 1)),
(Funcs (NAT,NAT)) by A28;
m1 + 1
< (m1 + 1) + 1
by NAT_1:13;
then
(
m1 + 1
in Segm ((m1 + 1) + 1) &
Segm ((m1 + 1) + 1) = dom GGm1A )
by NAT_1:44, FUNCT_2:def 1;
then
(
GGm1A . (m1 + 1) in rng GGm1A &
rng GGm1A c= Funcs (
NAT,
NAT) )
by FUNCT_1:def 3;
then reconsider GGm1Am =
GGm1A . (m1 + 1) as
Function of
NAT,
NAT by FUNCT_2:66;
A43:
Ackmm = GGm1A . m
by A33;
then A44:
Ackmm . 0 = (Ackm1 . m1) . 1
by A28;
IT . (
m1,1)
= Ackm1m1 . 1
by A41;
hence
IT . (
m,
0)
= IT . (
(m - 1),1)
by A44, A41;
( n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) )
assume
n > 0
;
IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1))))
then reconsider n1 =
n - 1 as
Element of
NAT by NAT_1:20;
IT . (
m,
n)
= Ackmm . (n1 + 1)
by A41;
then A45:
IT . (
m,
n)
= (Ackm1 . m1) . (GGm1Am . n1)
by A28, A43;
IT . (
m1,
(IT . (m,n1)))
= Ackm1m1 . (IT . (m,n1))
by A41;
hence
IT . (
m,
n)
= IT . (
(m - 1),
(IT . (m,(n - 1))))
by A45, A43, A41;
verum
end;
hence
( ( m > 0 implies IT . (m,0) = IT . ((m - 1),1) ) & ( m > 0 & n > 0 implies IT . (m,n) = IT . ((m - 1),(IT . (m,(n - 1)))) ) )
; verum