:: SIN_COS semantic presentation

definition
let m be Element of NAT , k be Element of NAT ;
canceled;
func CHK c1,c2 -> Element of COMPLEX equals :Def2: :: SIN_COS:def 2
1 if m <= k
otherwise 0;
correctness
coherence
( ( m <= k implies 1 is Element of COMPLEX ) & ( not m <= k implies 0 is Element of COMPLEX ) )
;
consistency
for b1 being Element of COMPLEX holds verum
;
by COMPLEX1:def 6, COMPLEX1:def 7;
end;

:: deftheorem Def1 SIN_COS:def 1 :
canceled;

:: deftheorem Def2 defines CHK SIN_COS:def 2 :
for m, k being Element of NAT holds
( ( m <= k implies CHK m,k = 1 ) & ( not m <= k implies CHK m,k = 0 ) );

registration
let m be Element of NAT , k be Element of NAT ;
cluster CHK a1,a2 -> real ;
coherence
CHK m,k is real
proof end;
end;

scheme :: SIN_COS:sch 50
s50{ F1( Element of NAT , Element of NAT ) -> Element of COMPLEX } :
for k being Element of NAT ex seq being Complex_Sequence st
for n being Element of NAT holds
( ( n <= k implies seq . n = F1(k,n) ) & ( n > k implies seq . n = 0 ) )
proof end;

scheme :: SIN_COS:sch 63
s63{ F1( Element of NAT , Element of NAT ) -> real number } :
for k being Element of NAT ex rseq being Real_Sequence st
for n being Element of NAT holds
( ( n <= k implies rseq . n = F1(k,n) ) & ( n > k implies rseq . n = 0 ) )
proof end;

definition
canceled;
func Prod_complex_n -> Complex_Sequence means :Def4: :: SIN_COS:def 4
( it . 0 = 1 & ( for n being Element of NAT holds it . (n + 1) = (it . n) * (n + 1) ) );
existence
ex b1 being Complex_Sequence st
( b1 . 0 = 1 & ( for n being Element of NAT holds b1 . (n + 1) = (b1 . n) * (n + 1) ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st b1 . 0 = 1 & ( for n being Element of NAT holds b1 . (n + 1) = (b1 . n) * (n + 1) ) & b2 . 0 = 1 & ( for n being Element of NAT holds b2 . (n + 1) = (b2 . n) * (n + 1) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 SIN_COS:def 3 :
canceled;

:: deftheorem Def4 defines Prod_complex_n SIN_COS:def 4 :
for b1 being Complex_Sequence holds
( b1 = Prod_complex_n iff ( b1 . 0 = 1 & ( for n being Element of NAT holds b1 . (n + 1) = (b1 . n) * (n + 1) ) ) );

definition
func Prod_real_n -> Real_Sequence means :Def5: :: SIN_COS:def 5
( it . 0 = 1 & ( for n being Element of NAT holds it . (n + 1) = (it . n) * (n + 1) ) );
existence
ex b1 being Real_Sequence st
( b1 . 0 = 1 & ( for n being Element of NAT holds b1 . (n + 1) = (b1 . n) * (n + 1) ) )
proof end;
uniqueness
for b1, b2 being Real_Sequence st b1 . 0 = 1 & ( for n being Element of NAT holds b1 . (n + 1) = (b1 . n) * (n + 1) ) & b2 . 0 = 1 & ( for n being Element of NAT holds b2 . (n + 1) = (b2 . n) * (n + 1) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines Prod_real_n SIN_COS:def 5 :
for b1 being Real_Sequence holds
( b1 = Prod_real_n iff ( b1 . 0 = 1 & ( for n being Element of NAT holds b1 . (n + 1) = (b1 . n) * (n + 1) ) ) );

definition
let n be Element of NAT ;
func c1 !c -> Element of COMPLEX equals :: SIN_COS:def 6
Prod_complex_n . n;
coherence
Prod_complex_n . n is Element of COMPLEX
;
end;

:: deftheorem Def6 defines !c SIN_COS:def 6 :
for n being Element of NAT holds n !c = Prod_complex_n . n;

definition
let n be Element of NAT ;
redefine func ! as c1 ! -> Real equals :: SIN_COS:def 7
Prod_real_n . n;
coherence
n ! is Real
;
compatibility
for b1 being Real holds
( b1 = n ! iff b1 = Prod_real_n . n )
proof end;
end;

:: deftheorem Def7 defines ! SIN_COS:def 7 :
for n being Element of NAT holds n ! = Prod_real_n . n;

definition
let z be complex number ;
deffunc H1( Element of NAT ) -> Element of COMPLEX = (z #N a1) / (a1 !c );
func c1 ExpSeq -> Complex_Sequence means :Def8: :: SIN_COS:def 8
for n being Element of NAT holds it . n = (z #N n) / (n !c );
existence
ex b1 being Complex_Sequence st
for n being Element of NAT holds b1 . n = (z #N n) / (n !c )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for n being Element of NAT holds b1 . n = (z #N n) / (n !c ) ) & ( for n being Element of NAT holds b2 . n = (z #N n) / (n !c ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines ExpSeq SIN_COS:def 8 :
for z being complex number
for b2 being Complex_Sequence holds
( b2 = z ExpSeq iff for n being Element of NAT holds b2 . n = (z #N n) / (n !c ) );

definition
let a be real number ;
deffunc H1( Element of NAT ) -> set = (a |^ a1) / (a1 ! );
func c1 ExpSeq -> Real_Sequence means :Def9: :: SIN_COS:def 9
for n being Element of NAT holds it . n = (a |^ n) / (n ! );
existence
ex b1 being Real_Sequence st
for n being Element of NAT holds b1 . n = (a |^ n) / (n ! )
proof end;
uniqueness
for b1, b2 being Real_Sequence st ( for n being Element of NAT holds b1 . n = (a |^ n) / (n ! ) ) & ( for n being Element of NAT holds b2 . n = (a |^ n) / (n ! ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def9 defines ExpSeq SIN_COS:def 9 :
for a being real number
for b2 being Real_Sequence holds
( b2 = a ExpSeq iff for n being Element of NAT holds b2 . n = (a |^ n) / (n ! ) );

theorem Th1: :: SIN_COS:1
for n being Element of NAT holds
( 0 !c = 1 & n !c <> 0 & (n + 1) !c = (n !c ) * (n + 1) )
proof end;

theorem Th2: :: SIN_COS:2
for n being Element of NAT holds
( n ! <> 0 & (n + 1) ! = (n ! ) * (n + 1) ) by NEWTON:21, NEWTON:23;

theorem Th3: :: SIN_COS:3
( ( for k being Element of NAT st 0 < k holds
((k -' 1) !c ) * k = k !c ) & ( for m, k being Element of NAT st k <= m holds
((m -' k) !c ) * ((m + 1) - k) = ((m + 1) -' k) !c ) )
proof end;

definition
let n be Element of NAT ;
func Coef c1 -> Complex_Sequence means :Def10: :: SIN_COS:def 10
for k being Element of NAT holds
( ( k <= n implies it . k = (n !c ) / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies it . k = 0 ) );
existence
ex b1 being Complex_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = (n !c ) / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = (n !c ) / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = (n !c ) / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def10 defines Coef SIN_COS:def 10 :
for n being Element of NAT
for b2 being Complex_Sequence holds
( b2 = Coef n iff for k being Element of NAT holds
( ( k <= n implies b2 . k = (n !c ) / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b2 . k = 0 ) ) );

definition
let n be Element of NAT ;
func Coef_e c1 -> Complex_Sequence means :Def11: :: SIN_COS:def 11
for k being Element of NAT holds
( ( k <= n implies it . k = 1r / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies it . k = 0 ) );
existence
ex b1 being Complex_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = 1r / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = 1r / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = 1r / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def11 defines Coef_e SIN_COS:def 11 :
for n being Element of NAT
for b2 being Complex_Sequence holds
( b2 = Coef_e n iff for k being Element of NAT holds
( ( k <= n implies b2 . k = 1r / ((k !c ) * ((n -' k) !c )) ) & ( k > n implies b2 . k = 0 ) ) );

definition
let seq be Complex_Sequence;
func Sift c1 -> Complex_Sequence means :Def12: :: SIN_COS:def 12
( it . 0 = 0 & ( for k being Element of NAT holds it . (k + 1) = seq . k ) );
existence
ex b1 being Complex_Sequence st
( b1 . 0 = 0 & ( for k being Element of NAT holds b1 . (k + 1) = seq . k ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st b1 . 0 = 0 & ( for k being Element of NAT holds b1 . (k + 1) = seq . k ) & b2 . 0 = 0 & ( for k being Element of NAT holds b2 . (k + 1) = seq . k ) holds
b1 = b2
proof end;
end;

:: deftheorem Def12 defines Sift SIN_COS:def 12 :
for seq, b2 being Complex_Sequence holds
( b2 = Sift seq iff ( b2 . 0 = 0 & ( for k being Element of NAT holds b2 . (k + 1) = seq . k ) ) );

definition
let n be Element of NAT ;
let z be Element of COMPLEX , w be Element of COMPLEX ;
func Expan c1,c2,c3 -> Complex_Sequence means :Def13: :: SIN_COS:def 13
for k being Element of NAT holds
( ( k <= n implies it . k = (((Coef n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies it . k = 0 ) );
existence
ex b1 being Complex_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = (((Coef n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = (((Coef n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = (((Coef n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def13 defines Expan SIN_COS:def 13 :
for n being Element of NAT
for z, w being Element of COMPLEX
for b4 being Complex_Sequence holds
( b4 = Expan n,z,w iff for k being Element of NAT holds
( ( k <= n implies b4 . k = (((Coef n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b4 . k = 0 ) ) );

definition
let n be Element of NAT ;
let z be Element of COMPLEX , w be Element of COMPLEX ;
func Expan_e c1,c2,c3 -> Complex_Sequence means :Def14: :: SIN_COS:def 14
for k being Element of NAT holds
( ( k <= n implies it . k = (((Coef_e n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies it . k = 0 ) );
existence
ex b1 being Complex_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = (((Coef_e n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = (((Coef_e n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = (((Coef_e n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def14 defines Expan_e SIN_COS:def 14 :
for n being Element of NAT
for z, w being Element of COMPLEX
for b4 being Complex_Sequence holds
( b4 = Expan_e n,z,w iff for k being Element of NAT holds
( ( k <= n implies b4 . k = (((Coef_e n) . k) * (z |^ k)) * (w |^ (n -' k)) ) & ( n < k implies b4 . k = 0 ) ) );

definition
let n be Element of NAT ;
let z be Element of COMPLEX , w be Element of COMPLEX ;
func Alfa c1,c2,c3 -> Complex_Sequence means :Def15: :: SIN_COS:def 15
for k being Element of NAT holds
( ( k <= n implies it . k = ((z ExpSeq ) . k) * ((Partial_Sums (w ExpSeq )) . (n -' k)) ) & ( n < k implies it . k = 0 ) );
existence
ex b1 being Complex_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = ((z ExpSeq ) . k) * ((Partial_Sums (w ExpSeq )) . (n -' k)) ) & ( n < k implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = ((z ExpSeq ) . k) * ((Partial_Sums (w ExpSeq )) . (n -' k)) ) & ( n < k implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = ((z ExpSeq ) . k) * ((Partial_Sums (w ExpSeq )) . (n -' k)) ) & ( n < k implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def15 defines Alfa SIN_COS:def 15 :
for n being Element of NAT
for z, w being Element of COMPLEX
for b4 being Complex_Sequence holds
( b4 = Alfa n,z,w iff for k being Element of NAT holds
( ( k <= n implies b4 . k = ((z ExpSeq ) . k) * ((Partial_Sums (w ExpSeq )) . (n -' k)) ) & ( n < k implies b4 . k = 0 ) ) );

definition
let a be real number , b be real number ;
let n be Element of NAT ;
func Conj c3,c1,c2 -> Real_Sequence means :: SIN_COS:def 16
for k being Element of NAT holds
( ( k <= n implies it . k = ((a ExpSeq ) . k) * (((Partial_Sums (b ExpSeq )) . n) - ((Partial_Sums (b ExpSeq )) . (n -' k))) ) & ( n < k implies it . k = 0 ) );
existence
ex b1 being Real_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = ((a ExpSeq ) . k) * (((Partial_Sums (b ExpSeq )) . n) - ((Partial_Sums (b ExpSeq )) . (n -' k))) ) & ( n < k implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Real_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = ((a ExpSeq ) . k) * (((Partial_Sums (b ExpSeq )) . n) - ((Partial_Sums (b ExpSeq )) . (n -' k))) ) & ( n < k implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = ((a ExpSeq ) . k) * (((Partial_Sums (b ExpSeq )) . n) - ((Partial_Sums (b ExpSeq )) . (n -' k))) ) & ( n < k implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def16 defines Conj SIN_COS:def 16 :
for a, b being real number
for n being Element of NAT
for b4 being Real_Sequence holds
( b4 = Conj n,a,b iff for k being Element of NAT holds
( ( k <= n implies b4 . k = ((a ExpSeq ) . k) * (((Partial_Sums (b ExpSeq )) . n) - ((Partial_Sums (b ExpSeq )) . (n -' k))) ) & ( n < k implies b4 . k = 0 ) ) );

definition
let z be Element of COMPLEX , w be Element of COMPLEX ;
let n be Element of NAT ;
func Conj c3,c1,c2 -> Complex_Sequence means :Def17: :: SIN_COS:def 17
for k being Element of NAT holds
( ( k <= n implies it . k = ((z ExpSeq ) . k) * (((Partial_Sums (w ExpSeq )) . n) - ((Partial_Sums (w ExpSeq )) . (n -' k))) ) & ( n < k implies it . k = 0 ) );
existence
ex b1 being Complex_Sequence st
for k being Element of NAT holds
( ( k <= n implies b1 . k = ((z ExpSeq ) . k) * (((Partial_Sums (w ExpSeq )) . n) - ((Partial_Sums (w ExpSeq )) . (n -' k))) ) & ( n < k implies b1 . k = 0 ) )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for k being Element of NAT holds
( ( k <= n implies b1 . k = ((z ExpSeq ) . k) * (((Partial_Sums (w ExpSeq )) . n) - ((Partial_Sums (w ExpSeq )) . (n -' k))) ) & ( n < k implies b1 . k = 0 ) ) ) & ( for k being Element of NAT holds
( ( k <= n implies b2 . k = ((z ExpSeq ) . k) * (((Partial_Sums (w ExpSeq )) . n) - ((Partial_Sums (w ExpSeq )) . (n -' k))) ) & ( n < k implies b2 . k = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def17 defines Conj SIN_COS:def 17 :
for z, w being Element of COMPLEX
for n being Element of NAT
for b4 being Complex_Sequence holds
( b4 = Conj n,z,w iff for k being Element of NAT holds
( ( k <= n implies b4 . k = ((z ExpSeq ) . k) * (((Partial_Sums (w ExpSeq )) . n) - ((Partial_Sums (w ExpSeq )) . (n -' k))) ) & ( n < k implies b4 . k = 0 ) ) );

Lemma82: for p1, p2, g1, g2 being Element of REAL holds
( (p1 + (g1 * <i> )) * (p2 + (g2 * <i> )) = ((p1 * p2) - (g1 * g2)) + (((p1 * g2) + (p2 * g1)) * <i> ) & (p2 + (g2 * <i> )) *' = p2 + ((- g2) * <i> ) )
proof end;

theorem Th4: :: SIN_COS:4
for z being Element of COMPLEX
for n being Element of NAT holds
( (z ExpSeq ) . (n + 1) = (((z ExpSeq ) . n) * z) / ((n + 1) + (0 * <i> )) & (z ExpSeq ) . 0 = 1 & |.((z ExpSeq ) . n).| = (|.z.| ExpSeq ) . n )
proof end;

theorem Th5: :: SIN_COS:5
for k being Element of NAT
for seq being Complex_Sequence st 0 < k holds
(Sift seq) . k = seq . (k -' 1)
proof end;

theorem Th6: :: SIN_COS:6
for k being Element of NAT
for seq being Complex_Sequence holds (Partial_Sums seq) . k = ((Partial_Sums (Sift seq)) . k) + (seq . k)
proof end;

theorem Th7: :: SIN_COS:7
for z, w being Element of COMPLEX
for n being Element of NAT holds (z + w) |^ n = (Partial_Sums (Expan n,z,w)) . n
proof end;

theorem Th8: :: SIN_COS:8
for z, w being Element of COMPLEX
for n being Element of NAT holds Expan_e n,z,w = (1r / (n !c )) (#) (Expan n,z,w)
proof end;

theorem Th9: :: SIN_COS:9
for z, w being Element of COMPLEX
for n being Element of NAT holds ((z + w) |^ n) / (n !c ) = (Partial_Sums (Expan_e n,z,w)) . n
proof end;

theorem Th10: :: SIN_COS:10
( 0c ExpSeq is absolutely_summable & Sum (0c ExpSeq ) = 1r )
proof end;

registration
let z be Element of COMPLEX ;
cluster a1 ExpSeq -> absolutely_summable ;
coherence
z ExpSeq is absolutely_summable
proof end;
end;

theorem Th11: :: SIN_COS:11
for z, w being Element of COMPLEX holds
( (z ExpSeq ) . 0 = 1 & (Expan 0,z,w) . 0 = 1 )
proof end;

theorem Th12: :: SIN_COS:12
for z, w being Element of COMPLEX
for l, k being Element of NAT st l <= k holds
(Alfa (k + 1),z,w) . l = ((Alfa k,z,w) . l) + ((Expan_e (k + 1),z,w) . l)
proof end;

theorem Th13: :: SIN_COS:13
for z, w being Element of COMPLEX
for k being Element of NAT holds (Partial_Sums (Alfa (k + 1),z,w)) . k = ((Partial_Sums (Alfa k,z,w)) . k) + ((Partial_Sums (Expan_e (k + 1),z,w)) . k)
proof end;

theorem Th14: :: SIN_COS:14
for z, w being Element of COMPLEX
for k being Element of NAT holds (z ExpSeq ) . k = (Expan_e k,z,w) . k
proof end;

theorem Th15: :: SIN_COS:15
for z, w being Element of COMPLEX
for n being Element of NAT holds (Partial_Sums ((z + w) ExpSeq )) . n = (Partial_Sums (Alfa n,z,w)) . n
proof end;

theorem Th16: :: SIN_COS:16
for z, w being Element of COMPLEX
for k being Element of NAT holds (((Partial_Sums (z ExpSeq )) . k) * ((Partial_Sums (w ExpSeq )) . k)) - ((Partial_Sums ((z + w) ExpSeq )) . k) = (Partial_Sums (Conj k,z,w)) . k
proof end;

theorem Th17: :: SIN_COS:17
for z being Element of COMPLEX
for k being Element of NAT holds
( |.((Partial_Sums (z ExpSeq )) . k).| <= (Partial_Sums (|.z.| ExpSeq )) . k & (Partial_Sums (|.z.| ExpSeq )) . k <= Sum (|.z.| ExpSeq ) & |.((Partial_Sums (z ExpSeq )) . k).| <= Sum (|.z.| ExpSeq ) )
proof end;

theorem Th18: :: SIN_COS:18
for z being Element of COMPLEX holds 1 <= Sum (|.z.| ExpSeq )
proof end;

theorem Th19: :: SIN_COS:19
for z being Element of COMPLEX
for n being Element of NAT holds 0 <= (|.z.| ExpSeq ) . n
proof end;

theorem Th20: :: SIN_COS:20
for z being Element of COMPLEX
for n, m being Element of NAT holds
( abs ((Partial_Sums (|.z.| ExpSeq )) . n) = (Partial_Sums (|.z.| ExpSeq )) . n & ( n <= m implies abs (((Partial_Sums (|.z.| ExpSeq )) . m) - ((Partial_Sums (|.z.| ExpSeq )) . n)) = ((Partial_Sums (|.z.| ExpSeq )) . m) - ((Partial_Sums (|.z.| ExpSeq )) . n) ) )
proof end;

theorem Th21: :: SIN_COS:21
for z, w being Element of COMPLEX
for k, n being Element of NAT holds abs ((Partial_Sums |.(Conj k,z,w).|) . n) = (Partial_Sums |.(Conj k,z,w).|) . n
proof end;

theorem Th22: :: SIN_COS:22
for z, w being Element of COMPLEX
for p being real number st p > 0 holds
ex n being Element of NAT st
for k being Element of NAT st n <= k holds
abs ((Partial_Sums |.(Conj k,z,w).|) . k) < p
proof end;

theorem Th23: :: SIN_COS:23
for z, w being Element of COMPLEX
for seq being Complex_Sequence st ( for k being Element of NAT holds seq . k = (Partial_Sums (Conj k,z,w)) . k ) holds
( seq is convergent & lim seq = 0 )
proof end;

Lemma156: for z, w being Element of COMPLEX holds (Sum (z ExpSeq )) * (Sum (w ExpSeq )) = Sum ((z + w) ExpSeq )
proof end;

definition
func exp -> PartFunc of COMPLEX , COMPLEX means :Def18: :: SIN_COS:def 18
( dom it = COMPLEX & ( for z being Element of COMPLEX holds it . z = Sum (z ExpSeq ) ) );
existence
ex b1 being PartFunc of COMPLEX , COMPLEX st
( dom b1 = COMPLEX & ( for z being Element of COMPLEX holds b1 . z = Sum (z ExpSeq ) ) )
proof end;
uniqueness
for b1, b2 being PartFunc of COMPLEX , COMPLEX st dom b1 = COMPLEX & ( for z being Element of COMPLEX holds b1 . z = Sum (z ExpSeq ) ) & dom b2 = COMPLEX & ( for z being Element of COMPLEX holds b2 . z = Sum (z ExpSeq ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def18 defines exp SIN_COS:def 18 :
for b1 being PartFunc of COMPLEX , COMPLEX holds
( b1 = exp iff ( dom b1 = COMPLEX & ( for z being Element of COMPLEX holds b1 . z = Sum (z ExpSeq ) ) ) );

definition
let z be complex number ;
func exp c1 -> complex number equals :: SIN_COS:def 19
exp . z;
coherence
exp . z is complex number
proof end;
end;

:: deftheorem Def19 defines exp SIN_COS:def 19 :
for z being complex number holds exp z = exp . z;

definition
let z be complex number ;
redefine func exp as exp c1 -> Element of COMPLEX ;
coherence
exp z is Element of COMPLEX
by XCMPLX_0:def 2;
end;

Lemma161: for z being Element of COMPLEX holds exp z = Sum (z ExpSeq )
by ;

theorem Th24: :: SIN_COS:24
for z1, z2 being Element of COMPLEX holds exp (z1 + z2) = (exp z1) * (exp z2)
proof end;

definition
func sin -> PartFunc of REAL , REAL means :Def20: :: SIN_COS:def 20
( dom it = REAL & ( for d being Element of REAL holds it . d = Im (Sum ([*0,d*] ExpSeq )) ) );
existence
ex b1 being PartFunc of REAL , REAL st
( dom b1 = REAL & ( for d being Element of REAL holds b1 . d = Im (Sum ([*0,d*] ExpSeq )) ) )
proof end;
uniqueness
for b1, b2 being PartFunc of REAL , REAL st dom b1 = REAL & ( for d being Element of REAL holds b1 . d = Im (Sum ([*0,d*] ExpSeq )) ) & dom b2 = REAL & ( for d being Element of REAL holds b2 . d = Im (Sum ([*0,d*] ExpSeq )) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def20 defines sin SIN_COS:def 20 :
for b1 being PartFunc of REAL , REAL holds
( b1 = sin iff ( dom b1 = REAL & ( for d being Element of REAL holds b1 . d = Im (Sum ([*0,d*] ExpSeq )) ) ) );

definition
let th be real number ;
func sin c1 -> set equals :: SIN_COS:def 21
sin . th;
coherence
sin . th is set
;
end;

:: deftheorem Def21 defines sin SIN_COS:def 21 :
for th being real number holds sin th = sin . th;

registration
let th be real number ;
cluster sin a1 -> real ;
coherence
sin th is real
;
end;

definition
let th be Real;
redefine func sin as sin c1 -> Real;
coherence
sin th is Real
;
end;

theorem Th25: :: SIN_COS:25
sin is Function of REAL , REAL
proof end;

definition
func cos -> PartFunc of REAL , REAL means :Def22: :: SIN_COS:def 22
( dom it = REAL & ( for d being Real holds it . d = Re (Sum ([*0,d*] ExpSeq )) ) );
existence
ex b1 being PartFunc of REAL , REAL st
( dom b1 = REAL & ( for d being Real holds b1 . d = Re (Sum ([*0,d*] ExpSeq )) ) )
proof end;
uniqueness
for b1, b2 being PartFunc of REAL , REAL st dom b1 = REAL & ( for d being Real holds b1 . d = Re (Sum ([*0,d*] ExpSeq )) ) & dom b2 = REAL & ( for d being Real holds b2 . d = Re (Sum ([*0,d*] ExpSeq )) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def22 defines cos SIN_COS:def 22 :
for b1 being PartFunc of REAL , REAL holds
( b1 = cos iff ( dom b1 = REAL & ( for d being Real holds b1 . d = Re (Sum ([*0,d*] ExpSeq )) ) ) );

definition
let th be real number ;
func cos c1 -> set equals :: SIN_COS:def 23
cos . th;
coherence
cos . th is set
;
end;

:: deftheorem Def23 defines cos SIN_COS:def 23 :
for th being real number holds cos th = cos . th;

registration
let th be real number ;
cluster cos a1 -> real ;
coherence
cos th is real
;
end;

definition
let th be Real;
redefine func cos as cos c1 -> Real;
coherence
cos th is Real
;
end;

theorem Th26: :: SIN_COS:26
cos is Function of REAL , REAL
proof end;

theorem Th27: :: SIN_COS:27
( dom sin = REAL & dom cos = REAL ) by , ;

Lemma166: for th being Real holds Sum ([*0,th*] ExpSeq ) = (cos . th) + ((sin . th) * <i> )
proof end;

theorem Th28: :: SIN_COS:28
for th being Real holds exp [*0,th*] = (cos th) + ((sin th) * <i> )
proof end;

Lemma167: for th being Real holds (Sum ([*0,th*] ExpSeq )) *' = Sum ((- [*0,th*]) ExpSeq )
proof end;

theorem Th29: :: SIN_COS:29
for th being Real holds (exp [*0,th*]) *' = exp (- [*0,th*])
proof end;

Lemma168: for th being Real
for th1 being real number st th = th1 holds
( |.(Sum ([*0,th*] ExpSeq )).| = 1 & abs (sin . th1) <= 1 & abs (cos . th1) <= 1 )
proof end;

theorem Th30: :: SIN_COS:30
for th being Real holds
( |.(exp [*0,th*]).| = 1 & ( for th being real number holds
( abs (sin th) <= 1 & abs (cos th) <= 1 ) ) )
proof end;

theorem Th31: :: SIN_COS:31
for th being real number holds
( ((cos . th) ^2 ) + ((sin . th) ^2 ) = 1 & ((cos . th) * (cos . th)) + ((sin . th) * (sin . th)) = 1 )
proof end;

theorem Th32: :: SIN_COS:32
for th being real number holds
( ((cos th) ^2 ) + ((sin th) ^2 ) = 1 & ((cos th) * (cos th)) + ((sin th) * (sin th)) = 1 ) by ;

Lemma172: 0c = [*0,0*]
by ARYTM_0:def 7;

theorem Th33: :: SIN_COS:33
for th being real number holds
( cos . 0 = 1 & sin . 0 = 0 & cos . (- th) = cos . th & sin . (- th) = - (sin . th) )
proof end;

theorem Th34: :: SIN_COS:34
for th being real number holds
( cos 0 = 1 & sin 0 = 0 & cos (- th) = cos th & sin (- th) = - (sin th) ) by ;

definition
let th be real number ;
deffunc H1( Element of NAT ) -> set = (((- 1) |^ a1) * (th |^ ((2 * a1) + 1))) / (((2 * a1) + 1) ! );
func c1 P_sin -> Real_Sequence means :Def24: :: SIN_COS:def 24
for n being Element of NAT holds it . n = (((- 1) |^ n) * (th |^ ((2 * n) + 1))) / (((2 * n) + 1) ! );
existence
ex b1 being Real_Sequence st
for n being Element of NAT holds b1 . n = (((- 1) |^ n) * (th |^ ((2 * n) + 1))) / (((2 * n) + 1) ! )
proof end;
uniqueness
for b1, b2 being Real_Sequence st ( for n being Element of NAT holds b1 . n = (((- 1) |^ n) * (th |^ ((2 * n) + 1))) / (((2 * n) + 1) ! ) ) & ( for n being Element of NAT holds b2 . n = (((- 1) |^ n) * (th |^ ((2 * n) + 1))) / (((2 * n) + 1) ! ) ) holds
b1 = b2
proof end;
deffunc H2( Element of NAT ) -> set = (((- 1) |^ a1) * (th |^ (2 * a1))) / ((2 * a1) ! );
func c1 P_cos -> Real_Sequence means :Def25: :: SIN_COS:def 25
for n being Element of NAT holds it . n = (((- 1) |^ n) * (th |^ (2 * n))) / ((2 * n) ! );
existence
ex b1 being Real_Sequence st
for n being Element of NAT holds b1 . n = (((- 1) |^ n) * (th |^ (2 * n))) / ((2 * n) ! )
proof end;
uniqueness
for b1, b2 being Real_Sequence st ( for n being Element of NAT holds b1 . n = (((- 1) |^ n) * (th |^ (2 * n))) / ((2 * n) ! ) ) & ( for n being Element of NAT holds b2 . n = (((- 1) |^ n) * (th |^ (2 * n))) / ((2 * n) ! ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def24 defines P_sin SIN_COS:def 24 :
for th being real number
for b2 being Real_Sequence holds
( b2 = th P_sin iff for n being Element of NAT holds b2 . n = (((- 1) |^ n) * (th |^ ((2 * n) + 1))) / (((2 * n) + 1) ! ) );

:: deftheorem Def25 defines P_cos SIN_COS:def 25 :
for th being real number
for b2 being Real_Sequence holds
( b2 = th P_cos iff for n being Element of NAT holds b2 . n = (((- 1) |^ n) * (th |^ (2 * n))) / ((2 * n) ! ) );

Lemma176: for p, q, r being Real st r <> 0 holds
( [*p,q*] / [*r,0*] = [*(p / r),(q / r)*] & [*p,q*] / [*0,r*] = [*(q / r),(- (p / r))*] )
proof end;

Lemma177: for p, q, r being Real holds
( [*p,q*] * [*r,0*] = [*(p * r),(q * r)*] & [*p,q*] * [*0,r*] = [*(- (q * r)),(p * r)*] )
proof end;

theorem Th35: :: SIN_COS:35
for z being Element of COMPLEX
for k being Element of NAT holds
( z |^ (2 * k) = (z |^ k) |^ 2 & z |^ (2 * k) = (z |^ 2) |^ k )
proof end;

Lemma179: 1r = [*1,0*]
by ARYTM_0:def 7, COMPLEX1:def 7;

theorem Th36: :: SIN_COS:36
for k being Element of NAT
for th being Real holds
( [*0,th*] |^ (2 * k) = [*(((- 1) |^ k) * (th |^ (2 * k))),0*] & [*0,th*] |^ ((2 * k) + 1) = [*0,(((- 1) |^ k) * (th |^ ((2 * k) + 1)))*] )
proof end;

theorem Th37: :: SIN_COS:37
for n being Element of NAT holds n !c = [*(n ! ),0*]
proof end;

theorem Th38: :: SIN_COS:38
for n being Element of NAT
for th being Real holds
( (Partial_Sums (th P_sin )) . n = (Partial_Sums (Im ([*0,th*] ExpSeq ))) . ((2 * n) + 1) & (Partial_Sums (th P_cos )) . n = (Partial_Sums (Re ([*0,th*] ExpSeq ))) . (2 * n) )
proof end;

theorem Th39: :: SIN_COS:39
for th being Real holds
( Partial_Sums (th P_sin ) is convergent & Sum (th P_sin ) = Im (Sum ([*0,th*] ExpSeq )) & Partial_Sums (th P_cos ) is convergent & Sum (th P_cos ) = Re (Sum ([*0,th*] ExpSeq )) )
proof end;

theorem Th40: :: SIN_COS:40
for th being real number holds
( cos . th = Sum (th P_cos ) & sin . th = Sum (th P_sin ) )
proof end;

theorem Th41: :: SIN_COS:41
for p, th being real number
for rseq being Real_Sequence st rseq is convergent & lim rseq = th & ( for n being Element of NAT holds rseq . n >= p ) holds
th >= p
proof end;

deffunc H1( Real) -> Element of REAL = (2 * a1) + 1;

consider bq being Real_Sequence such that
Lemma187: for n being Element of NAT holds bq . n = H1(n) from SEQ_1:sch 1();

bq is increasing Seq_of_Nat
proof end;

then reconsider bq = bq as increasing Seq_of_Nat ;

Lemma188: for n being Element of NAT
for th, th1, th2, th3 being real number holds
( th |^ 0 = 1 & th |^ (2 * n) = (th |^ n) |^ 2 & th |^ 1 = th & th |^ 2 = th * th & (- 1) |^ (2 * n) = 1 & (- 1) |^ ((2 * n) + 1) = - 1 )
proof end;

Lemma190: for th, th1, th2, th3 being Real holds
( [*th,th1*] + [*th2,th3*] = [*(th + th2),(th1 + th3)*] & (5 / 6) ^2 = 25 / 36 )
proof end;

theorem Th42: :: SIN_COS:42
for n, k, m being Element of NAT st n < k holds
( m ! > 0 & n ! <= k ! )
proof end;

theorem Th43: :: SIN_COS:43
for th being real number
for n, k being Element of NAT st 0 <= th & th <= 1 & n <= k holds
th |^ k <= th |^ n
proof end;

theorem Th44: :: SIN_COS:44
for n being Element of NAT
for th being Real holds [*th,0*] |^ n = [*(th |^ n),0*]
proof end;

theorem Th45: :: SIN_COS:45
for n being Element of NAT
for th being Real holds ([*th,0*] |^ n) / (n !c ) = [*((th |^ n) / (n ! )),0*]
proof end;

theorem Th46: :: SIN_COS:46
for p being Real holds Im (Sum ([*p,0*] ExpSeq )) = 0
proof end;

theorem Th47: :: SIN_COS:47
( cos . 1 > 0 & sin . 1 > 0 & cos . 1 < sin . 1 )
proof end;

theorem Th48: :: SIN_COS:48
for th being Real holds th ExpSeq = Re ([*th,0*] ExpSeq )
proof end;

theorem Th49: :: SIN_COS:49
for th being Real holds
( th ExpSeq is summable & Sum (th ExpSeq ) = Re (Sum ([*th,0*] ExpSeq )) )
proof end;

Lemma199: for z being Element of COMPLEX
for n being Element of NAT holds
( z * (z |^ n) = z |^ (n + 1) & (z ExpSeq ) . 1 = z & (z ExpSeq ) . 0 = 1r & z |^ 1 = z & |.(z |^ n).| = |.z.| |^ n )
proof end;

Lemma200: for th being Real holds Sum ([*th,0*] ExpSeq ) = [*(Sum (th ExpSeq )),0*]
proof end;

theorem Th50: :: SIN_COS:50
for p, q being real number holds Sum ((p + q) ExpSeq ) = (Sum (p ExpSeq )) * (Sum (q ExpSeq ))
proof end;

definition
func exp_R -> PartFunc of REAL , REAL means :Def26: :: SIN_COS:def 26
( dom it = REAL & ( for d being real number holds it . d = Sum (d ExpSeq ) ) );
existence
ex b1 being PartFunc of REAL , REAL st
( dom b1 = REAL & ( for d being real number holds b1 . d = Sum (d ExpSeq ) ) )
proof end;
uniqueness
for b1, b2 being PartFunc of REAL , REAL st dom b1 = REAL & ( for d being real number holds b1 . d = Sum (d ExpSeq ) ) & dom b2 = REAL & ( for d being real number holds b2 . d = Sum (d ExpSeq ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def26 defines exp_R SIN_COS:def 26 :
for b1 being PartFunc of REAL , REAL holds
( b1 = exp_R iff ( dom b1 = REAL & ( for d being real number holds b1 . d = Sum (d ExpSeq ) ) ) );

definition
let th be real number ;
func exp_R c1 -> set equals :: SIN_COS:def 27
exp_R . bq;
coherence
exp_R . th is set
;
end;

:: deftheorem Def27 defines exp_R SIN_COS:def 27 :
for th being real number holds exp_R th = exp_R . th;

registration
let th be real number ;
cluster exp_R a1 -> real ;
coherence
exp_R th is real
;
end;

definition
let th be Real;
redefine func exp_R as exp_R c1 -> Real;
coherence
exp_R th is Real
;
end;

theorem Th51: :: SIN_COS:51
dom exp_R = REAL by Th3;

theorem Th52: :: SIN_COS:52
canceled;

theorem Th53: :: SIN_COS:53
for th being Real holds exp_R . th = Re (Sum ([*th,0*] ExpSeq ))
proof end;

theorem Th54: :: SIN_COS:54
for th being Real holds exp [*th,0*] = [*(exp_R th),0*]
proof end;

Lemma205: for p, q being real number holds exp_R . (p + q) = (exp_R . p) * (exp_R . q)
proof end;

theorem Th55: :: SIN_COS:55
for p, q being real number holds exp_R (p + q) = (exp_R p) * (exp_R q) by Def12;

Lemma206: exp_R . 0 = 1
proof end;

theorem Th56: :: SIN_COS:56
exp_R 0 = 1 by Def13;

theorem Th57: :: SIN_COS:57
for th being real number st th > 0 holds
exp_R . th >= 1
proof end;

theorem Th58: :: SIN_COS:58
for th being real number st th < 0 holds
( 0 < exp_R . th & exp_R . th <= 1 )
proof end;

theorem Th59: :: SIN_COS:59
for th being real number holds exp_R . th > 0
proof end;

theorem Th60: :: SIN_COS:60
for th being real number holds exp_R th > 0 by Def17;

definition
let z be Element of COMPLEX ;
deffunc H2( Element of NAT ) -> Element of COMPLEX = (z #N (a1 + 1)) / ((a1 + 2) !c );
func c1 P_dt -> Complex_Sequence means :Def28: :: SIN_COS:def 28
for n being Element of NAT holds it . n = (bq |^ (n + 1)) / ((n + 2) !c );
existence
ex b1 being Complex_Sequence st
for n being Element of NAT holds b1 . n = (z |^ (n + 1)) / ((n + 2) !c )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for n being Element of NAT holds b1 . n = (z |^ (n + 1)) / ((n + 2) !c ) ) & ( for n being Element of NAT holds b2 . n = (z |^ (n + 1)) / ((n + 2) !c ) ) holds
b1 = b2
proof end;
deffunc H3( Element of NAT ) -> Element of COMPLEX = (z #N a1) / ((a1 + 2) !c );
func c1 P_t -> Complex_Sequence means :: SIN_COS:def 29
for n being Element of NAT holds it . n = (bq #N n) / ((n + 2) !c );
existence
ex b1 being Complex_Sequence st
for n being Element of NAT holds b1 . n = (z #N n) / ((n + 2) !c )
proof end;
uniqueness
for b1, b2 being Complex_Sequence st ( for n being Element of NAT holds b1 . n = (z #N n) / ((n + 2) !c ) ) & ( for n being Element of NAT holds b2 . n = (z #N n) / ((n + 2) !c ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def28 defines P_dt SIN_COS:def 28 :
for z being Element of COMPLEX
for b2 being Complex_Sequence holds
( b2 = z P_dt iff for n being Element of NAT holds b2 . n = (z |^ (n + 1)) / ((n + 2) !c ) );

:: deftheorem Def29 defines P_t SIN_COS:def 29 :
for z being Element of COMPLEX
for b2 being Complex_Sequence holds
( b2 = z P_t iff for n being Element of NAT holds b2 . n = (z #N n) / ((n + 2) !c ) );

Lemma211: for z being Element of COMPLEX
for p being Real holds
( Re ([*0,p*] * z) = - (p * (Im z)) & Im ([*0,p*] * z) = p * (Re z) & Re ([*p,0*] * z) = p * (Re z) & Im ([*p,0*] * z) = p * (Im z) )
proof end;

Lemma212: for z being Element of COMPLEX
for p being Real st p > 0 holds
( Re (z / [*0,p*]) = (Im z) / p & Im (z / [*0,p*]) = - ((Re z) / p) & |.(z / [*p,0*]).| = |.z.| / p )
proof end;

theorem Th61: :: SIN_COS:61
for z being Element of COMPLEX holds z P_dt is absolutely_summable
proof end;

theorem Th62: :: SIN_COS:62
for z being Element of COMPLEX holds z * (Sum (z P_dt )) = ((Sum (z ExpSeq )) - 1r ) - z
proof end;

theorem Th63: :: SIN_COS:63
for p being real number st p > 0 holds
ex q being Real st
( q > 0 & ( for z being Element of COMPLEX st |.z.| < q holds
|.(Sum (z P_dt )).| < p ) )
proof end;

theorem Th64: :: SIN_COS:64
for z, z1 being Element of COMPLEX holds (Sum ((z1 + z) ExpSeq )) - (Sum (z1 ExpSeq )) = ((Sum (z1 ExpSeq )) * z) + ((z * (Sum (z P_dt ))) * (Sum (z1 ExpSeq )))
proof end;

theorem Th65: :: SIN_COS:65
for p, q being Real holds (cos . (p + q)) - (cos . p) = (- (q * (sin . p))) - (q * (Im ((Sum ([*0,q*] P_dt )) * [*(cos . p),(sin . p)*])))
proof end;

theorem Th66: :: SIN_COS:66
for p, q being Real holds (sin . (p + q)) - (sin . p) = (q * (cos . p)) + (q * (Re ((Sum ([*0,q*] P_dt )) * [*(cos . p),(sin . p)*])))
proof end;

theorem Th67: :: SIN_COS:67
for p, q being Real holds (exp_R . (p + q)) - (exp_R . p) = (q * (exp_R . p)) + ((q * (exp_R . p)) * (Re (Sum ([*q,0*] P_dt ))))
proof end;

theorem Th68: :: SIN_COS:68
for p being real number holds
( cos is_differentiable_in p & diff cos ,p = - (sin . p) )
proof end;

theorem Th69: :: SIN_COS:69
for p being real number holds
( sin is_differentiable_in p & diff sin ,p = cos . p )
proof end;

theorem Th70: :: SIN_COS:70
for p being real number holds
( exp_R is_differentiable_in p & diff exp_R ,p = exp_R . p )
proof end;

theorem Th71: :: SIN_COS:71
( exp_R is_differentiable_on REAL & ( for th being real number st th in REAL holds
diff exp_R ,th = exp_R . th ) )
proof end;

theorem Th72: :: SIN_COS:72
( cos is_differentiable_on REAL & ( for th being real number st th in REAL holds
diff cos ,th = - (sin . th) ) )
proof end;

theorem Th73: :: SIN_COS:73
for th being real number holds
( sin is_differentiable_on REAL & diff sin ,th = cos . th )
proof end;

theorem Th74: :: SIN_COS:74
for th being real number st th in [.0,1.] holds
( 0 < cos . th & cos . th >= 1 / 2 )
proof end;

definition
func tan -> PartFunc of REAL , REAL equals :: SIN_COS:def 30
sin / cos ;
correctness
coherence
sin / cos is PartFunc of REAL , REAL
;
;
func cot -> PartFunc of REAL , REAL equals :: SIN_COS:def 31
cos / sin ;
correctness
coherence
cos / sin is PartFunc of REAL , REAL
;
;
end;

:: deftheorem Def30 defines tan SIN_COS:def 30 :
tan = sin / cos ;

:: deftheorem Def31 defines cot SIN_COS:def 31 :
cot = cos / sin ;

theorem Th75: :: SIN_COS:75
( [.0,1.] c= dom tan & ].0,1.[ c= dom tan )
proof end;

Lemma234: ( dom (tan | [.0,1.]) = [.0,1.] & ( for th being real number st th in [.0,1.] holds
(tan | [.0,1.]) . th = tan . th ) )
proof end;

Lemma235: ( tan is_differentiable_on ].0,1.[ & ( for th being real number st th in ].0,1.[ holds
diff tan ,th > 0 ) )
proof end;

theorem Th76: :: SIN_COS:76
tan is_continuous_on [.0,1.]
proof end;

theorem Th77: :: SIN_COS:77
for th1, th2 being real number st th1 in ].0,1.[ & th2 in ].0,1.[ & tan . th1 = tan . th2 holds
th1 = th2
proof end;

Lemma239: ( tan . 0 = 0 & tan . 1 > 1 )
proof end;

definition
func PI -> real number means :Def32: :: SIN_COS:def 32
( tan . (it / 4) = 1 & it in ].0,4.[ );
existence
ex b1 being real number st
( tan . (b1 / 4) = 1 & b1 in ].0,4.[ )
proof end;
uniqueness
for b1, b2 being real number st tan . (b1 / 4) = 1 & b1 in ].0,4.[ & tan . (b2 / 4) = 1 & b2 in ].0,4.[ holds
b1 = b2
proof end;
end;

:: deftheorem Def32 defines PI SIN_COS:def 32 :
for b1 being real number holds
( b1 = PI iff ( tan . (b1 / 4) = 1 & b1 in ].0,4.[ ) );

definition
redefine func PI as PI -> Real;
coherence
PI is Real
by XREAL_0:def 1;
end;

theorem Th78: :: SIN_COS:78
sin . (PI / 4) = cos . (PI / 4)
proof end;

theorem Th79: :: SIN_COS:79
for th1, th2 being real number holds
( sin . (th1 + th2) = ((sin . th1) * (cos . th2)) + ((cos . th1) * (sin . th2)) & cos . (th1 + th2) = ((cos . th1) * (cos . th2)) - ((sin . th1) * (sin . th2)) )
proof end;

theorem Th80: :: SIN_COS:80
for th1, th2 being real number holds
( sin (th1 + th2) = ((sin th1) * (cos th2)) + ((cos th1) * (sin th2)) & cos (th1 + th2) = ((cos th1) * (cos th2)) - ((sin th1) * (sin th2)) ) by ;

theorem Th81: :: SIN_COS:81
( cos . (PI / 2) = 0 & sin . (PI / 2) = 1 & cos . PI = - 1 & sin . PI = 0 & cos . (PI + (PI / 2)) = 0 & sin . (PI + (PI / 2)) = - 1 & cos . (2 * PI ) = 1 & sin . (2 * PI ) = 0 )
proof end;

theorem Th82: :: SIN_COS:82
( cos (PI / 2) = 0 & sin (PI / 2) = 1 & cos PI = - 1 & sin PI = 0 & cos (PI + (PI / 2)) = 0 & sin (PI + (PI / 2)) = - 1 & cos (2 * PI ) = 1 & sin (2 * PI ) = 0 ) by ;

theorem Th83: :: SIN_COS:83
for th being real number holds
( sin . (th + (2 * PI )) = sin . th & cos . (th + (2 * PI )) = cos . th & sin . ((PI / 2) - th) = cos . th & cos . ((PI / 2) - th) = sin . th & sin . ((PI / 2) + th) = cos . th & cos . ((PI / 2) + th) = - (sin . th) & sin . (PI + th) = - (sin . th) & cos . (PI + th) = - (cos . th) )
proof end;

theorem Th84: :: SIN_COS:84
for th being real number holds
( sin (th + (2 * PI )) = sin th & cos (th + (2 * PI )) = cos th & sin ((PI / 2) - th) = cos th & cos ((PI / 2) - th) = sin th & sin ((PI / 2) + th) = cos th & cos ((PI / 2) + th) = - (sin th) & sin (PI + th) = - (sin th) & cos (PI + th) = - (cos th) ) by ;

Lemma245: for th being real number st th in [.0,1.] holds
sin . th >= 0
proof end;

theorem Th85: :: SIN_COS:85
for th being real number st th in ].0,(PI / 2).[ holds
cos . th > 0
proof end;

theorem Th86: :: SIN_COS:86
for th being real number st th in ].0,(PI / 2).[ holds
cos th > 0 by ;

theorem Th87: :: SIN_COS:87
for a, b being real number holds
( sin (a - b) = ((sin a) * (cos b)) - ((cos a) * (sin b)) & cos (a - b) = ((cos a) * (cos b)) + ((sin a) * (sin b)) )
proof end;

theorem Th88: :: SIN_COS:88
for a, b being real number holds sin (a - b) = ((sin a) * (cos b)) - ((cos a) * (sin b))
proof end;

theorem Th89: :: SIN_COS:89
for a, b being real number holds cos (a - b) = ((cos a) * (cos b)) + ((sin a) * (sin b))
proof end;