:: PRGCOR_2 semantic presentation

Lemma1: for b1 being set
for b2 being Nat st b1 in b2 holds
b1 is Nat
proof end;

theorem Th1: :: PRGCOR_2:1
for b1, b2 being Nat holds
( b1 in b2 iff b1 < b2 )
proof end;

Lemma3: for b1 being XFinSequence
for b2 being set holds
( rng b1 c= b2 iff b1 is XFinSequence of b2 )
by ORDINAL1:def 8;

registration
let c1 be non empty set ;
cluster non empty T-Sequence of a1;
existence
not for b1 being XFinSequence of c1 holds b1 is empty
proof end;
end;

theorem Th2: :: PRGCOR_2:2
for b1 being non empty set
for b2 being non empty XFinSequence of b1 holds len b2 > 0
proof end;

definition
let c1 be set ;
let c2 be FinSequence of c1;
func FS2XFS c2 -> XFinSequence of a1 means :Def1: :: PRGCOR_2:def 1
( len a3 = len a2 & ( for b1 being Nat st b1 < len a2 holds
a2 . (b1 + 1) = a3 . b1 ) );
existence
ex b1 being XFinSequence of c1 st
( len b1 = len c2 & ( for b2 being Nat st b2 < len c2 holds
c2 . (b2 + 1) = b1 . b2 ) )
proof end;
uniqueness
for b1, b2 being XFinSequence of c1 st len b1 = len c2 & ( for b3 being Nat st b3 < len c2 holds
c2 . (b3 + 1) = b1 . b3 ) & len b2 = len c2 & ( for b3 being Nat st b3 < len c2 holds
c2 . (b3 + 1) = b2 . b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines FS2XFS PRGCOR_2:def 1 :
for b1 being set
for b2 being FinSequence of b1
for b3 being XFinSequence of b1 holds
( b3 = FS2XFS b2 iff ( len b3 = len b2 & ( for b4 being Nat st b4 < len b2 holds
b2 . (b4 + 1) = b3 . b4 ) ) );

definition
let c1 be set ;
let c2 be XFinSequence of c1;
func XFS2FS c2 -> FinSequence of a1 means :: PRGCOR_2:def 2
( len a3 = len a2 & ( for b1 being Nat st 1 <= b1 & b1 <= len a2 holds
a2 . (b1 -' 1) = a3 . b1 ) );
existence
ex b1 being FinSequence of c1 st
( len b1 = len c2 & ( for b2 being Nat st 1 <= b2 & b2 <= len c2 holds
c2 . (b2 -' 1) = b1 . b2 ) )
proof end;
uniqueness
for b1, b2 being FinSequence of c1 st len b1 = len c2 & ( for b3 being Nat st 1 <= b3 & b3 <= len c2 holds
c2 . (b3 -' 1) = b1 . b3 ) & len b2 = len c2 & ( for b3 being Nat st 1 <= b3 & b3 <= len c2 holds
c2 . (b3 -' 1) = b2 . b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines XFS2FS PRGCOR_2:def 2 :
for b1 being set
for b2 being XFinSequence of b1
for b3 being FinSequence of b1 holds
( b3 = XFS2FS b2 iff ( len b3 = len b2 & ( for b4 being Nat st 1 <= b4 & b4 <= len b2 holds
b2 . (b4 -' 1) = b3 . b4 ) ) );

theorem Th3: :: PRGCOR_2:3
for b1 being Nat
for b2 being set holds b1 --> b2 is XFinSequence
proof end;

theorem Th4: :: PRGCOR_2:4
for b1 being set
for b2 being Nat
for b3 being set st b3 in b1 holds
( b2 --> b3 is XFinSequence of b1 & ( for b4 being XFinSequence st b4 = b2 --> b3 holds
len b4 = b2 ) )
proof end;

definition
let c1 be non empty set ;
let c2 be FinSequence of c1;
let c3 be Nat;
assume E8: ( c3 > len c2 & NAT c= c1 ) ;
func FS2XFS* c2,c3 -> non empty XFinSequence of a1 means :Def3: :: PRGCOR_2:def 3
( len a2 = a4 . 0 & len a4 = a3 & ( for b1 being Nat st 1 <= b1 & b1 <= len a2 holds
a4 . b1 = a2 . b1 ) & ( for b1 being Nat st len a2 < b1 & b1 < a3 holds
a4 . b1 = 0 ) );
existence
ex b1 being non empty XFinSequence of c1 st
( len c2 = b1 . 0 & len b1 = c3 & ( for b2 being Nat st 1 <= b2 & b2 <= len c2 holds
b1 . b2 = c2 . b2 ) & ( for b2 being Nat st len c2 < b2 & b2 < c3 holds
b1 . b2 = 0 ) )
proof end;
uniqueness
for b1, b2 being non empty XFinSequence of c1 st len c2 = b1 . 0 & len b1 = c3 & ( for b3 being Nat st 1 <= b3 & b3 <= len c2 holds
b1 . b3 = c2 . b3 ) & ( for b3 being Nat st len c2 < b3 & b3 < c3 holds
b1 . b3 = 0 ) & len c2 = b2 . 0 & len b2 = c3 & ( for b3 being Nat st 1 <= b3 & b3 <= len c2 holds
b2 . b3 = c2 . b3 ) & ( for b3 being Nat st len c2 < b3 & b3 < c3 holds
b2 . b3 = 0 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines FS2XFS* PRGCOR_2:def 3 :
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Nat st b3 > len b2 & NAT c= b1 holds
for b4 being non empty XFinSequence of b1 holds
( b4 = FS2XFS* b2,b3 iff ( len b2 = b4 . 0 & len b4 = b3 & ( for b5 being Nat st 1 <= b5 & b5 <= len b2 holds
b4 . b5 = b2 . b5 ) & ( for b5 being Nat st len b2 < b5 & b5 < b3 holds
b4 . b5 = 0 ) ) );

definition
let c1 be non empty set ;
let c2 be non empty XFinSequence of c1;
assume E9: ( NAT c= c1 & c2 . 0 is Nat & c2 . 0 in len c2 ) ;
func XFS2FS* c2 -> FinSequence of a1 means :Def4: :: PRGCOR_2:def 4
for b1 being Nat st b1 = a2 . 0 holds
( len a3 = b1 & ( for b2 being Nat st 1 <= b2 & b2 <= b1 holds
a3 . b2 = a2 . b2 ) );
existence
ex b1 being FinSequence of c1 st
for b2 being Nat st b2 = c2 . 0 holds
( len b1 = b2 & ( for b3 being Nat st 1 <= b3 & b3 <= b2 holds
b1 . b3 = c2 . b3 ) )
proof end;
uniqueness
for b1, b2 being FinSequence of c1 st ( for b3 being Nat st b3 = c2 . 0 holds
( len b1 = b3 & ( for b4 being Nat st 1 <= b4 & b4 <= b3 holds
b1 . b4 = c2 . b4 ) ) ) & ( for b3 being Nat st b3 = c2 . 0 holds
( len b2 = b3 & ( for b4 being Nat st 1 <= b4 & b4 <= b3 holds
b2 . b4 = c2 . b4 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines XFS2FS* PRGCOR_2:def 4 :
for b1 being non empty set
for b2 being non empty XFinSequence of b1 st NAT c= b1 & b2 . 0 is Nat & b2 . 0 in len b2 holds
for b3 being FinSequence of b1 holds
( b3 = XFS2FS* b2 iff for b4 being Nat st b4 = b2 . 0 holds
( len b3 = b4 & ( for b5 being Nat st 1 <= b5 & b5 <= b4 holds
b3 . b5 = b2 . b5 ) ) );

theorem Th5: :: PRGCOR_2:5
for b1 being non empty set
for b2 being non empty XFinSequence of b1 st NAT c= b1 & b2 . 0 = 0 & 0 < len b2 holds
XFS2FS* b2 = {}
proof end;

definition
let c1 be non empty set ;
let c2 be XFinSequence of c1;
let c3 be FinSequence of c1;
pred c2 is_an_xrep_of c3 means :Def5: :: PRGCOR_2:def 5
( NAT c= a1 & a2 . 0 = len a3 & len a3 < len a2 & ( for b1 being Nat st 1 <= b1 & b1 <= len a3 holds
a2 . b1 = a3 . b1 ) );
end;

:: deftheorem Def5 defines is_an_xrep_of PRGCOR_2:def 5 :
for b1 being non empty set
for b2 being XFinSequence of b1
for b3 being FinSequence of b1 holds
( b2 is_an_xrep_of b3 iff ( NAT c= b1 & b2 . 0 = len b3 & len b3 < len b2 & ( for b4 being Nat st 1 <= b4 & b4 <= len b3 holds
b2 . b4 = b3 . b4 ) ) );

theorem Th6: :: PRGCOR_2:6
for b1 being non empty set
for b2 being non empty XFinSequence of b1 st NAT c= b1 & b2 . 0 is Nat & b2 . 0 in len b2 holds
b2 is_an_xrep_of XFS2FS* b2
proof end;

definition
let c1, c2, c3, c4, c5 be set ;
func IFLGT c1,c2,c3,c4,c5 -> set equals :Def6: :: PRGCOR_2:def 6
a3 if a1 in a2
a4 if a1 = a2
otherwise a5;
correctness
coherence
( ( c1 in c2 implies c3 is set ) & ( c1 = c2 implies c4 is set ) & ( not c1 in c2 & not c1 = c2 implies c5 is set ) )
;
consistency
for b1 being set st c1 in c2 & c1 = c2 holds
( b1 = c3 iff b1 = c4 )
;
;
end;

:: deftheorem Def6 defines IFLGT PRGCOR_2:def 6 :
for b1, b2, b3, b4, b5 being set holds
( ( b1 in b2 implies IFLGT b1,b2,b3,b4,b5 = b3 ) & ( b1 = b2 implies IFLGT b1,b2,b3,b4,b5 = b4 ) & ( not b1 in b2 & not b1 = b2 implies IFLGT b1,b2,b3,b4,b5 = b5 ) );

theorem Th7: :: PRGCOR_2:7
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Nat st NAT c= b1 & b3 > len b2 holds
ex b4 being XFinSequence of b1 st
( len b4 = b3 & b4 is_an_xrep_of b2 )
proof end;

definition
let c1 be XFinSequence of REAL ;
let c2 be Nat;
redefine func . as c1 . c2 -> Real;
coherence
c1 . c2 is Real
proof end;
end;

definition
let c1, c2 be XFinSequence of REAL ;
assume E14: ( c2 . 0 is Nat & 0 <= c2 . 0 & c2 . 0 < len c1 ) ;
func inner_prd_prg c1,c2 -> Real means :Def7: :: PRGCOR_2:def 7
ex b1 being XFinSequence of REAL ex b2 being Integer st
( len b1 = len a1 & b1 . 0 = 0 & b2 = a2 . 0 & ( b2 <> 0 implies for b3 being Nat st b3 < b2 holds
b1 . (b3 + 1) = (b1 . b3) + ((a1 . (b3 + 1)) * (a2 . (b3 + 1))) ) & a3 = b1 . b2 );
existence
ex b1 being Realex b2 being XFinSequence of REAL ex b3 being Integer st
( len b2 = len c1 & b2 . 0 = 0 & b3 = c2 . 0 & ( b3 <> 0 implies for b4 being Nat st b4 < b3 holds
b2 . (b4 + 1) = (b2 . b4) + ((c1 . (b4 + 1)) * (c2 . (b4 + 1))) ) & b1 = b2 . b3 )
proof end;
uniqueness
for b1, b2 being Real st ex b3 being XFinSequence of REAL ex b4 being Integer st
( len b3 = len c1 & b3 . 0 = 0 & b4 = c2 . 0 & ( b4 <> 0 implies for b5 being Nat st b5 < b4 holds
b3 . (b5 + 1) = (b3 . b5) + ((c1 . (b5 + 1)) * (c2 . (b5 + 1))) ) & b1 = b3 . b4 ) & ex b3 being XFinSequence of REAL ex b4 being Integer st
( len b3 = len c1 & b3 . 0 = 0 & b4 = c2 . 0 & ( b4 <> 0 implies for b5 being Nat st b5 < b4 holds
b3 . (b5 + 1) = (b3 . b5) + ((c1 . (b5 + 1)) * (c2 . (b5 + 1))) ) & b2 = b3 . b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def7 defines inner_prd_prg PRGCOR_2:def 7 :
for b1, b2 being XFinSequence of REAL st b2 . 0 is Nat & 0 <= b2 . 0 & b2 . 0 < len b1 holds
for b3 being Real holds
( b3 = inner_prd_prg b1,b2 iff ex b4 being XFinSequence of REAL ex b5 being Integer st
( len b4 = len b1 & b4 . 0 = 0 & b5 = b2 . 0 & ( b5 <> 0 implies for b6 being Nat st b6 < b5 holds
b4 . (b6 + 1) = (b4 . b6) + ((b1 . (b6 + 1)) * (b2 . (b6 + 1))) ) & b3 = b4 . b5 ) );

theorem Th8: :: PRGCOR_2:8
for b1 being FinSequence of REAL
for b2 being XFinSequence of REAL st len b2 > len b1 & b2 . 0 = 0 & ( for b3 being Nat st b3 < len b1 holds
b2 . (b3 + 1) = (b2 . b3) + (b1 . (b3 + 1)) ) holds
Sum b1 = b2 . (len b1)
proof end;

theorem Th9: :: PRGCOR_2:9
for b1 being FinSequence of REAL ex b2 being XFinSequence of REAL st
( len b2 = (len b1) + 1 & b2 . 0 = 0 & ( for b3 being Nat st b3 < len b1 holds
b2 . (b3 + 1) = (b2 . b3) + (b1 . (b3 + 1)) ) & Sum b1 = b2 . (len b1) )
proof end;

theorem Th10: :: PRGCOR_2:10
for b1, b2 being FinSequence of REAL
for b3 being Nat st len b1 = len b2 & b3 > len b1 holds
|(b1,b2)| = inner_prd_prg (FS2XFS* b1,b3),(FS2XFS* b2,b3)
proof end;

definition
let c1, c2 be XFinSequence of REAL ;
let c3 be Real;
let c4 be Integer;
pred c4 scalar_prd_prg c2,c3,c1 means :Def8: :: PRGCOR_2:def 8
( len a2 = a4 & len a1 = a4 & ex b1 being Integer st
( a2 . 0 = a1 . 0 & b1 = a1 . 0 & ( b1 <> 0 implies for b2 being Nat st 1 <= b2 & b2 <= b1 holds
a2 . b2 = a3 * (a1 . b2) ) ) );
end;

:: deftheorem Def8 defines scalar_prd_prg PRGCOR_2:def 8 :
for b1, b2 being XFinSequence of REAL
for b3 being Real
for b4 being Integer holds
( b4 scalar_prd_prg b2,b3,b1 iff ( len b2 = b4 & len b1 = b4 & ex b5 being Integer st
( b2 . 0 = b1 . 0 & b5 = b1 . 0 & ( b5 <> 0 implies for b6 being Nat st 1 <= b6 & b6 <= b5 holds
b2 . b6 = b3 * (b1 . b6) ) ) ) );

theorem Th11: :: PRGCOR_2:11
for b1 being non empty XFinSequence of REAL
for b2 being Real
for b3 being Nat st b1 . 0 is Nat & len b1 = b3 & 0 <= b1 . 0 & b1 . 0 < b3 holds
( ex b4 being XFinSequence of REAL st b3 scalar_prd_prg b4,b2,b1 & ( for b4 being non empty XFinSequence of REAL st b3 scalar_prd_prg b4,b2,b1 holds
XFS2FS* b4 = b2 * (XFS2FS* b1) ) )
proof end;

definition
let c1, c2 be XFinSequence of REAL ;
let c3 be Integer;
pred c3 vector_minus_prg c2,c1 means :Def9: :: PRGCOR_2:def 9
( len a2 = a3 & len a1 = a3 & ex b1 being Integer st
( a2 . 0 = a1 . 0 & b1 = a1 . 0 & ( b1 <> 0 implies for b2 being Nat st 1 <= b2 & b2 <= b1 holds
a2 . b2 = - (a1 . b2) ) ) );
end;

:: deftheorem Def9 defines vector_minus_prg PRGCOR_2:def 9 :
for b1, b2 being XFinSequence of REAL
for b3 being Integer holds
( b3 vector_minus_prg b2,b1 iff ( len b2 = b3 & len b1 = b3 & ex b4 being Integer st
( b2 . 0 = b1 . 0 & b4 = b1 . 0 & ( b4 <> 0 implies for b5 being Nat st 1 <= b5 & b5 <= b4 holds
b2 . b5 = - (b1 . b5) ) ) ) );

theorem Th12: :: PRGCOR_2:12
for b1 being non empty XFinSequence of REAL
for b2 being Nat st b1 . 0 is Nat & len b1 = b2 & 0 <= b1 . 0 & b1 . 0 < b2 holds
( ex b3 being XFinSequence of REAL st b2 vector_minus_prg b3,b1 & ( for b3 being non empty XFinSequence of REAL st b2 vector_minus_prg b3,b1 holds
XFS2FS* b3 = - (XFS2FS* b1) ) )
proof end;

definition
let c1, c2, c3 be XFinSequence of REAL ;
let c4 be Integer;
pred c4 vector_add_prg c3,c1,c2 means :Def10: :: PRGCOR_2:def 10
( len a3 = a4 & len a1 = a4 & len a2 = a4 & ex b1 being Integer st
( a3 . 0 = a2 . 0 & b1 = a2 . 0 & ( b1 <> 0 implies for b2 being Nat st 1 <= b2 & b2 <= b1 holds
a3 . b2 = (a1 . b2) + (a2 . b2) ) ) );
end;

:: deftheorem Def10 defines vector_add_prg PRGCOR_2:def 10 :
for b1, b2, b3 being XFinSequence of REAL
for b4 being Integer holds
( b4 vector_add_prg b3,b1,b2 iff ( len b3 = b4 & len b1 = b4 & len b2 = b4 & ex b5 being Integer st
( b3 . 0 = b2 . 0 & b5 = b2 . 0 & ( b5 <> 0 implies for b6 being Nat st 1 <= b6 & b6 <= b5 holds
b3 . b6 = (b1 . b6) + (b2 . b6) ) ) ) );

theorem Th13: :: PRGCOR_2:13
for b1, b2 being non empty XFinSequence of REAL
for b3 being Nat st b2 . 0 is Nat & len b1 = b3 & len b2 = b3 & b1 . 0 = b2 . 0 & 0 <= b2 . 0 & b2 . 0 < b3 holds
( ex b4 being XFinSequence of REAL st b3 vector_add_prg b4,b1,b2 & ( for b4 being non empty XFinSequence of REAL st b3 vector_add_prg b4,b1,b2 holds
XFS2FS* b4 = (XFS2FS* b1) + (XFS2FS* b2) ) )
proof end;

definition
let c1, c2, c3 be XFinSequence of REAL ;
let c4 be Integer;
pred c4 vector_sub_prg c3,c1,c2 means :Def11: :: PRGCOR_2:def 11
( len a3 = a4 & len a1 = a4 & len a2 = a4 & ex b1 being Integer st
( a3 . 0 = a2 . 0 & b1 = a2 . 0 & ( b1 <> 0 implies for b2 being Nat st 1 <= b2 & b2 <= b1 holds
a3 . b2 = (a1 . b2) - (a2 . b2) ) ) );
end;

:: deftheorem Def11 defines vector_sub_prg PRGCOR_2:def 11 :
for b1, b2, b3 being XFinSequence of REAL
for b4 being Integer holds
( b4 vector_sub_prg b3,b1,b2 iff ( len b3 = b4 & len b1 = b4 & len b2 = b4 & ex b5 being Integer st
( b3 . 0 = b2 . 0 & b5 = b2 . 0 & ( b5 <> 0 implies for b6 being Nat st 1 <= b6 & b6 <= b5 holds
b3 . b6 = (b1 . b6) - (b2 . b6) ) ) ) );

theorem Th14: :: PRGCOR_2:14
for b1, b2 being non empty XFinSequence of REAL
for b3 being Nat st b2 . 0 is Nat & len b1 = b3 & len b2 = b3 & b1 . 0 = b2 . 0 & 0 <= b2 . 0 & b2 . 0 < b3 holds
( ex b4 being XFinSequence of REAL st b3 vector_sub_prg b4,b1,b2 & ( for b4 being non empty XFinSequence of REAL st b3 vector_sub_prg b4,b1,b2 holds
XFS2FS* b4 = (XFS2FS* b1) - (XFS2FS* b2) ) )
proof end;