:: Vectors in Real Linear Space
:: by Wojciech A. Trybulec
::
:: Copyright (c) 1990 Association of Mizar Users

begin

definition
attr c1 is strict ;
aggr RLSStruct(# carrier, ZeroF, addF, Mult #) -> RLSStruct ;
sel Mult c1 -> Function of [:REAL, the carrier of c1:], the carrier of c1;
end;

registration
cluster non empty RLSStruct ;
existence
not for b1 being RLSStruct holds b1 is empty
proof end;
end;

definition
let V be RLSStruct ;
mode VECTOR of V is Element of V;
end;

theorem :: RLVECT_1:1
canceled;

theorem :: RLVECT_1:2
canceled;

theorem :: RLVECT_1:3
for V being non empty 1-sorted
for v being Element of V holds v in V by STRUCT_0:def 5;

definition
let V be non empty RLSStruct ;
let v be VECTOR of V;
let a be real number ;
canceled;
canceled;
canceled;
func a * v -> Element of V equals :: RLVECT_1:def 4
the Mult of V . (a,v);
coherence
the Mult of V . (a,v) is Element of V
proof end;
end;

:: deftheorem RLVECT_1:def 1 :
canceled;

:: deftheorem RLVECT_1:def 2 :
canceled;

:: deftheorem RLVECT_1:def 3 :
canceled;

:: deftheorem defines * RLVECT_1:def 4 :
for V being non empty RLSStruct
for v being VECTOR of V
for a being real number holds a * v = the Mult of V . (a,v);

theorem :: RLVECT_1:4
canceled;

theorem :: RLVECT_1:5
for V being non empty addMagma
for v, w being Element of V holds v + w = the addF of V . (v,w) ;

registration
let ZS be non empty set ;
let O be Element of ZS;
let F be BinOp of ZS;
let G be Function of [:REAL,ZS:],ZS;
cluster RLSStruct(# ZS,O,F,G #) -> non empty ;
coherence
not RLSStruct(# ZS,O,F,G #) is empty
;
end;

definition
attr IT is Abelian means :Def5: :: RLVECT_1:def 5
for v, w being Element of IT holds v + w = w + v;
attr IT is add-associative means :Def6: :: RLVECT_1:def 6
for u, v, w being Element of IT holds (u + v) + w = u + (v + w);
end;

:: deftheorem Def5 defines Abelian RLVECT_1:def 5 :
( IT is Abelian iff for v, w being Element of IT holds v + w = w + v );

:: deftheorem Def6 defines add-associative RLVECT_1:def 6 :
( IT is add-associative iff for u, v, w being Element of IT holds (u + v) + w = u + (v + w) );

definition
attr IT is right_zeroed means :Def7: :: RLVECT_1:def 7
for v being Element of IT holds v + (0. IT) = v;
end;

:: deftheorem Def7 defines right_zeroed RLVECT_1:def 7 :
( IT is right_zeroed iff for v being Element of IT holds v + (0. IT) = v );

definition
let IT be non empty RLSStruct ;
attr IT is vector-distributive means :Def8: :: RLVECT_1:def 8
for a being real number
for v, w being VECTOR of IT holds a * (v + w) = (a * v) + (a * w);
attr IT is scalar-distributive means :Def9: :: RLVECT_1:def 9
for a, b being real number
for v being VECTOR of IT holds (a + b) * v = (a * v) + (b * v);
attr IT is scalar-associative means :Def10: :: RLVECT_1:def 10
for a, b being real number
for v being VECTOR of IT holds (a * b) * v = a * (b * v);
attr IT is scalar-unital means :Def11: :: RLVECT_1:def 11
for v being VECTOR of IT holds 1 * v = v;
end;

:: deftheorem Def8 defines vector-distributive RLVECT_1:def 8 :
for IT being non empty RLSStruct holds
( IT is vector-distributive iff for a being real number
for v, w being VECTOR of IT holds a * (v + w) = (a * v) + (a * w) );

:: deftheorem Def9 defines scalar-distributive RLVECT_1:def 9 :
for IT being non empty RLSStruct holds
( IT is scalar-distributive iff for a, b being real number
for v being VECTOR of IT holds (a + b) * v = (a * v) + (b * v) );

:: deftheorem Def10 defines scalar-associative RLVECT_1:def 10 :
for IT being non empty RLSStruct holds
( IT is scalar-associative iff for a, b being real number
for v being VECTOR of IT holds (a * b) * v = a * (b * v) );

:: deftheorem Def11 defines scalar-unital RLVECT_1:def 11 :
for IT being non empty RLSStruct holds
( IT is scalar-unital iff for v being VECTOR of IT holds 1 * v = v );

definition
func Trivial-RLSStruct -> strict RLSStruct equals :: RLVECT_1:def 12
RLSStruct(# 1,op0,op2,(pr2 (REAL,1)) #);
coherence
RLSStruct(# 1,op0,op2,(pr2 (REAL,1)) #) is strict RLSStruct
;
end;

:: deftheorem defines Trivial-RLSStruct RLVECT_1:def 12 :
Trivial-RLSStruct = RLSStruct(# 1,op0,op2,(pr2 (REAL,1)) #);

registration
cluster Trivial-RLSStruct -> non empty trivial strict ;
coherence
( Trivial-RLSStruct is trivial & not Trivial-RLSStruct is empty )
by CARD_1:87;
end;

registration
existence
( b1 is strict & b1 is Abelian & b1 is add-associative & not b1 is empty )
proof end;
end;

registration
existence
( b1 is strict & b1 is Abelian & b1 is add-associative & b1 is right_zeroed & b1 is right_complementable & not b1 is empty )
proof end;
end;

registration
cluster non empty right_complementable strict Abelian add-associative right_zeroed vector-distributive scalar-distributive scalar-associative scalar-unital RLSStruct ;
existence
ex b1 being non empty RLSStruct st
( b1 is strict & b1 is Abelian & b1 is add-associative & b1 is right_zeroed & b1 is right_complementable & b1 is scalar-distributive & b1 is vector-distributive & b1 is scalar-associative & b1 is scalar-unital )
proof end;
end;

definition end;

definition
let V be Abelian addMagma ;
let v, w be Element of V;
:: original: +
redefine func v + w -> Element of the carrier of V;
commutativity
for v, w being Element of V holds v + w = w + v
by Def5;
end;

theorem :: RLVECT_1:6
canceled;

theorem :: RLVECT_1:7
canceled;

for v, w being Element of V st v + w = 0. V holds
w + v = 0. V
proof end;

theorem :: RLVECT_1:8
canceled;

theorem Th9: :: RLVECT_1:9
proof end;

theorem Th10: :: RLVECT_1:10
for v being Element of V holds
( v + (0. V) = v & (0. V) + v = v )
proof end;

definition
let V be non empty addLoopStr ;
let v be Element of V;
assume A1: ( V is add-associative & V is right_zeroed & V is right_complementable ) ;
redefine func - v means :Def13: :: RLVECT_1:def 13
v + it = 0. V;
compatibility
for b1 being Element of the carrier of V holds
( b1 = - v iff v + b1 = 0. V )
proof end;
end;

:: deftheorem Def13 defines - RLVECT_1:def 13 :
for V being non empty addLoopStr
for v being Element of V st V is add-associative & V is right_zeroed & V is right_complementable holds
for b3 being Element of the carrier of V holds
( b3 = - v iff v + b3 = 0. V );

for v, u being Element of V ex w being Element of V st v + w = u
proof end;

definition
let v, w be Element of V;
redefine func v - w equals :: RLVECT_1:def 14
v + (- w);
correctness
compatibility
for b1 being Element of the carrier of V holds
( b1 = v - w iff b1 = v + (- w) )
;
;
end;

:: deftheorem defines - RLVECT_1:def 14 :
for v, w being Element of V holds v - w = v + (- w);

theorem :: RLVECT_1:11
canceled;

theorem :: RLVECT_1:12
canceled;

theorem :: RLVECT_1:13
canceled;

theorem :: RLVECT_1:14
canceled;

theorem :: RLVECT_1:15
canceled;

theorem Th16: :: RLVECT_1:16
for v being Element of V holds
( v + (- v) = 0. V & (- v) + v = 0. V )
proof end;

theorem :: RLVECT_1:17
canceled;

theorem :: RLVECT_1:18
canceled;

theorem Th19: :: RLVECT_1:19
for v, w being Element of V st v + w = 0. V holds
v = - w
proof end;

theorem :: RLVECT_1:20
for v, u being Element of V ex w being Element of V st v + w = u by Lm2;

theorem Th21: :: RLVECT_1:21
for w, u, v1, v2 being Element of V st ( w + v1 = w + v2 or v1 + w = v2 + w ) holds
v1 = v2
proof end;

theorem :: RLVECT_1:22
for v, w being Element of V st ( v + w = v or w + v = v ) holds
w = 0. V
proof end;

theorem Th23: :: RLVECT_1:23
for a being real number
for V being RealLinearSpace
for v being VECTOR of V st ( a = 0 or v = 0. V ) holds
a * v = 0. V
proof end;

theorem Th24: :: RLVECT_1:24
for a being real number
for V being RealLinearSpace
for v being VECTOR of V holds
( not a * v = 0. V or a = 0 or v = 0. V )
proof end;

theorem Th25: :: RLVECT_1:25
for V being non empty right_complementable add-associative right_zeroed addLoopStr holds - (0. V) = 0. V
proof end;

theorem :: RLVECT_1:26
for v being Element of V holds v - (0. V) = v
proof end;

theorem :: RLVECT_1:27
for v being Element of V holds (0. V) - v = - v by Th10;

theorem :: RLVECT_1:28
for v being Element of V holds v - v = 0. V by Def13;

theorem Th29: :: RLVECT_1:29
for V being RealLinearSpace
for v being VECTOR of V holds - v = (- 1) * v
proof end;

theorem Th30: :: RLVECT_1:30
for v being Element of V holds - (- v) = v
proof end;

theorem Th31: :: RLVECT_1:31
for v, w being Element of V st - v = - w holds
v = w
proof end;

theorem :: RLVECT_1:32
canceled;

theorem Th33: :: RLVECT_1:33
for V being RealLinearSpace
for v being VECTOR of V st v = - v holds
v = 0. V
proof end;

theorem :: RLVECT_1:34
for V being RealLinearSpace
for v being VECTOR of V st v + v = 0. V holds
v = 0. V
proof end;

theorem Th35: :: RLVECT_1:35
for v, w being Element of V st v - w = 0. V holds
v = w
proof end;

theorem :: RLVECT_1:36
for u, v being Element of V ex w being Element of V st v - w = u
proof end;

theorem :: RLVECT_1:37
for w, v1, v2 being Element of V st w - v1 = w - v2 holds
v1 = v2
proof end;

theorem Th38: :: RLVECT_1:38
for a being real number
for V being RealLinearSpace
for v being VECTOR of V holds a * (- v) = (- a) * v
proof end;

theorem Th39: :: RLVECT_1:39
for a being real number
for V being RealLinearSpace
for v being VECTOR of V holds a * (- v) = - (a * v)
proof end;

theorem :: RLVECT_1:40
for a being real number
for V being RealLinearSpace
for v being VECTOR of V holds (- a) * (- v) = a * v
proof end;

for u, w being Element of V holds - (u + w) = (- w) + (- u)
proof end;

theorem Th41: :: RLVECT_1:41
for v, u, w being Element of V holds v - (u + w) = (v - w) - u
proof end;

theorem :: RLVECT_1:42
for v, u, w being Element of V holds (v + u) - w = v + (u - w) by Def6;

theorem :: RLVECT_1:43
for v, u, w being Element of V holds v - (u - w) = (v - u) + w
proof end;

theorem Th44: :: RLVECT_1:44
for v, w being Element of V holds - (v + w) = (- w) - v
proof end;

theorem Th45: :: RLVECT_1:45
for v, w being Element of V holds - (v + w) = (- w) + (- v) by Lm3;

theorem :: RLVECT_1:46
for v, w being Element of V holds (- v) - w = (- w) - v
proof end;

theorem :: RLVECT_1:47
for v, w being Element of V holds - (v - w) = w + (- v)
proof end;

theorem Th48: :: RLVECT_1:48
for a being real number
for V being RealLinearSpace
for v, w being VECTOR of V holds a * (v - w) = (a * v) - (a * w)
proof end;

theorem Th49: :: RLVECT_1:49
for a, b being real number
for V being RealLinearSpace
for v being VECTOR of V holds (a - b) * v = (a * v) - (b * v)
proof end;

theorem :: RLVECT_1:50
for a being real number
for V being RealLinearSpace
for v, w being VECTOR of V st a <> 0 & a * v = a * w holds
v = w
proof end;

theorem :: RLVECT_1:51
for a, b being real number
for V being RealLinearSpace
for v being VECTOR of V st v <> 0. V & a * v = b * v holds
a = b
proof end;

definition
let V be non empty 1-sorted ;
let v, u be Element of V;
:: original: <*
redefine func <*v,u*> -> FinSequence of V;
coherence
<*v,u*> is FinSequence of V
proof end;
end;

definition
let V be non empty 1-sorted ;
let v, u, w be Element of V;
:: original: <*
redefine func <*v,u,w*> -> FinSequence of V;
coherence
<*v,u,w*> is FinSequence of V
proof end;
end;

definition
let V be non empty addLoopStr ;
let F be FinSequence-like PartFunc of NAT,V;
func Sum F -> Element of V means :Def15: :: RLVECT_1:def 15
ex f being Function of NAT,V st
( it = f . (len F) & f . 0 = 0. V & ( for j being Element of NAT
for v being Element of V st j < len F & v = F . (j + 1) holds
f . (j + 1) = (f . j) + v ) );
existence
ex b1 being Element of V ex f being Function of NAT,V st
( b1 = f . (len F) & f . 0 = 0. V & ( for j being Element of NAT
for v being Element of V st j < len F & v = F . (j + 1) holds
f . (j + 1) = (f . j) + v ) )
proof end;
uniqueness
for b1, b2 being Element of V st ex f being Function of NAT,V st
( b1 = f . (len F) & f . 0 = 0. V & ( for j being Element of NAT
for v being Element of V st j < len F & v = F . (j + 1) holds
f . (j + 1) = (f . j) + v ) ) & ex f being Function of NAT,V st
( b2 = f . (len F) & f . 0 = 0. V & ( for j being Element of NAT
for v being Element of V st j < len F & v = F . (j + 1) holds
f . (j + 1) = (f . j) + v ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def15 defines Sum RLVECT_1:def 15 :
for V being non empty addLoopStr
for F being FinSequence-like PartFunc of NAT,V
for b3 being Element of V holds
( b3 = Sum F iff ex f being Function of NAT,V st
( b3 = f . (len F) & f . 0 = 0. V & ( for j being Element of NAT
for v being Element of V st j < len F & v = F . (j + 1) holds
f . (j + 1) = (f . j) + v ) ) );

Lm4: for V being non empty addLoopStr holds Sum (<*> the carrier of V) = 0. V
proof end;

Lm5: for V being non empty addLoopStr
for F being FinSequence-like PartFunc of NAT,V st len F = 0 holds
Sum F = 0. V
proof end;

theorem :: RLVECT_1:52
canceled;

theorem :: RLVECT_1:53
canceled;

theorem :: RLVECT_1:54
canceled;

theorem Th55: :: RLVECT_1:55
for V being non empty addLoopStr
for v being Element of V
for F, G being FinSequence of V st len F = (len G) + 1 & G = F | (dom G) & v = F . (len F) holds
Sum F = (Sum G) + v
proof end;

theorem :: RLVECT_1:56
for a being real number
for V being RealLinearSpace
for F, G being FinSequence of V st len F = len G & ( for k being Element of NAT
for v being VECTOR of V st k in dom F & v = G . k holds
F . k = a * v ) holds
Sum F = a * (Sum G)
proof end;

theorem :: RLVECT_1:57
for F, G being FinSequence of V st len F = len G & ( for k being Element of NAT
for v being Element of V st k in dom F & v = G . k holds
F . k = - v ) holds
Sum F = - (Sum G)
proof end;

theorem Th58: :: RLVECT_1:58
for F, G being FinSequence of V holds Sum (F ^ G) = (Sum F) + (Sum G)
proof end;

for v being Element of V holds Sum <*v*> = v
proof end;

theorem :: RLVECT_1:59
for F, G being FinSequence of V st rng F = rng G & F is one-to-one & G is one-to-one holds
Sum F = Sum G
proof end;

theorem Th60: :: RLVECT_1:60
for V being non empty addLoopStr holds Sum (<*> the carrier of V) = 0. V by Lm4;

theorem :: RLVECT_1:61
for v being Element of V holds Sum <*v*> = v by Lm6;

theorem Th62: :: RLVECT_1:62
for v, u being Element of V holds Sum <*v,u*> = v + u
proof end;

theorem Th63: :: RLVECT_1:63
for v, u, w being Element of V holds Sum <*v,u,w*> = (v + u) + w
proof end;

theorem :: RLVECT_1:64
for V being RealLinearSpace
for a being Real holds a * (Sum (<*> the carrier of V)) = 0. V by ;

theorem :: RLVECT_1:65
canceled;

theorem :: RLVECT_1:66
for V being RealLinearSpace
for a being Real
for v, u being VECTOR of V holds a * (Sum <*v,u*>) = (a * v) + (a * u)
proof end;

theorem :: RLVECT_1:67
for V being RealLinearSpace
for a being Real
for v, u, w being VECTOR of V holds a * (Sum <*v,u,w*>) = ((a * v) + (a * u)) + (a * w)
proof end;

theorem :: RLVECT_1:68
for V being non empty right_complementable add-associative right_zeroed addLoopStr holds - (Sum (<*> the carrier of V)) = 0. V
proof end;

theorem :: RLVECT_1:69
for v being Element of V holds - () = - v by Lm6;

theorem :: RLVECT_1:70
for v, u being Element of V holds - (Sum <*v,u*>) = (- v) - u
proof end;

theorem :: RLVECT_1:71
for v, u, w being Element of V holds - (Sum <*v,u,w*>) = ((- v) - u) - w
proof end;

theorem Th72: :: RLVECT_1:72
for v, w being Element of V holds Sum <*v,w*> = Sum <*w,v*>
proof end;

theorem :: RLVECT_1:73
for v, w being Element of V holds Sum <*v,w*> = () + ()
proof end;

theorem :: RLVECT_1:74
for V being non empty right_complementable add-associative right_zeroed addLoopStr holds Sum <*(0. V),(0. V)*> = 0. V
proof end;

theorem :: RLVECT_1:75
for v being Element of V holds
( Sum <*(0. V),v*> = v & Sum <*v,(0. V)*> = v )
proof end;

theorem :: RLVECT_1:76
for v being Element of V holds
( Sum <*v,(- v)*> = 0. V & Sum <*(- v),v*> = 0. V )
proof end;

theorem :: RLVECT_1:77
for v, w being Element of V holds Sum <*v,(- w)*> = v - w by Th62;

theorem Th78: :: RLVECT_1:78
for v, w being Element of V holds Sum <*(- v),(- w)*> = - (w + v)
proof end;

theorem Th79: :: RLVECT_1:79
for V being RealLinearSpace
for v being VECTOR of V holds Sum <*v,v*> = 2 * v
proof end;

theorem :: RLVECT_1:80
for V being RealLinearSpace
for v being VECTOR of V holds Sum <*(- v),(- v)*> = (- 2) * v
proof end;

theorem :: RLVECT_1:81
for u, v, w being Element of V holds Sum <*u,v,w*> = (() + ()) + ()
proof end;

theorem :: RLVECT_1:82
for u, v, w being Element of V holds Sum <*u,v,w*> = (Sum <*u,v*>) + w
proof end;

theorem :: RLVECT_1:83
for v, u, w being Element of V holds Sum <*u,v,w*> = (Sum <*v,w*>) + u
proof end;

theorem Th84: :: RLVECT_1:84
for v, u, w being Element of V holds Sum <*u,v,w*> = (Sum <*u,w*>) + v
proof end;

theorem Th85: :: RLVECT_1:85
for v, u, w being Element of V holds Sum <*u,v,w*> = Sum <*u,w,v*>
proof end;

theorem Th86: :: RLVECT_1:86
for v, u, w being Element of V holds Sum <*u,v,w*> = Sum <*v,u,w*>
proof end;

theorem Th87: :: RLVECT_1:87
for v, u, w being Element of V holds Sum <*u,v,w*> = Sum <*v,w,u*>
proof end;

theorem :: RLVECT_1:88
canceled;

theorem :: RLVECT_1:89
for v, u, w being Element of V holds Sum <*u,v,w*> = Sum <*w,v,u*>
proof end;

theorem :: RLVECT_1:90
for V being non empty right_complementable add-associative right_zeroed addLoopStr holds Sum <*(0. V),(0. V),(0. V)*> = 0. V
proof end;

theorem :: RLVECT_1:91
for v being Element of V holds
( Sum <*(0. V),(0. V),v*> = v & Sum <*(0. V),v,(0. V)*> = v & Sum <*v,(0. V),(0. V)*> = v )
proof end;

theorem :: RLVECT_1:92
for u, v being Element of V holds
( Sum <*(0. V),u,v*> = u + v & Sum <*u,v,(0. V)*> = u + v & Sum <*u,(0. V),v*> = u + v )
proof end;

theorem :: RLVECT_1:93
for V being RealLinearSpace
for v being VECTOR of V holds Sum <*v,v,v*> = 3 * v
proof end;

theorem :: RLVECT_1:94
for F being FinSequence of V st len F = 0 holds
Sum F = 0. V by Lm5;

theorem :: RLVECT_1:95
for F being FinSequence of V st len F = 1 holds
Sum F = F . 1
proof end;

theorem :: RLVECT_1:96
for F being FinSequence of V
for v1, v2 being Element of V st len F = 2 & v1 = F . 1 & v2 = F . 2 holds
Sum F = v1 + v2
proof end;

theorem :: RLVECT_1:97
for F being FinSequence of V
for v1, v2, v being Element of V st len F = 3 & v1 = F . 1 & v2 = F . 2 & v = F . 3 holds
Sum F = (v1 + v2) + v
proof end;

begin

definition
let L be non empty addLoopStr ;
attr L is zeroed means :Def16: :: RLVECT_1:def 16
for a being Element of L holds
( a + (0. L) = a & (0. L) + a = a );
end;

:: deftheorem Def16 defines zeroed RLVECT_1:def 16 :
for L being non empty addLoopStr holds
( L is zeroed iff for a being Element of L holds
( a + (0. L) = a & (0. L) + a = a ) );

registration
cluster non empty zeroed -> non empty right_zeroed addLoopStr ;
coherence
for b1 being non empty addLoopStr st b1 is zeroed holds
b1 is right_zeroed
proof end;
end;

registration
cluster non empty Abelian right_zeroed -> non empty zeroed addLoopStr ;
coherence
for b1 being non empty addLoopStr st b1 is Abelian & b1 is right_zeroed holds
b1 is zeroed
proof end;
cluster non empty right_complementable Abelian -> non empty left_complementable addLoopStr ;
coherence
for b1 being non empty addLoopStr st b1 is Abelian & b1 is right_complementable holds
b1 is left_complementable
proof end;
end;

theorem :: RLVECT_1:98
for a being real number
for V being RealLinearSpace
for v being VECTOR of V holds (- a) * v = - (a * v)
proof end;

begin

theorem :: RLVECT_1:99
for V being non empty right_complementable Abelian add-associative right_zeroed addLoopStr holds - (Sum (<*> the carrier of V)) = 0. V
proof end;

theorem :: RLVECT_1:100
for v, u being Element of V holds - (Sum <*v,u*>) = (- v) - u
proof end;

theorem :: RLVECT_1:101
for v, u, w being Element of V holds - (Sum <*v,u,w*>) = ((- v) - u) - w
proof end;

theorem :: RLVECT_1:102
for v being Element of V holds
( Sum <*v,(- v)*> = 0. V & Sum <*(- v),v*> = 0. V )
proof end;

theorem :: RLVECT_1:103