:: Abelian Groups, Fields and Vector Spaces :: by Eugeniusz Kusak, Wojciech Leo\'nczuk and Micha{\l} Muzalewski :: :: Received November 23, 1989 :: Copyright (c) 1990-2012 Association of Mizar Users begin definition func G_Real -> strict addLoopStr equals :: VECTSP_1:def 1 addLoopStr(# REAL,addreal,0 #); coherence addLoopStr(# REAL,addreal,0 #) is strict addLoopStr ; end; :: deftheorem defines G_Real VECTSP_1:def_1_:_ G_Real = addLoopStr(# REAL,addreal,0 #); registration cluster G_Real -> non empty strict ; coherence not G_Real is empty ; end; registration cluster the carrier of G_Real -> real-membered ; coherence the carrier of G_Real is real-membered ; end; registration let a, b be Element of G_Real; let x, y be real number ; identifya + b with x + y when a = x, b = y; compatibility ( a = x & b = y implies a + b = x + y ) by BINOP_2:def_9; end; registration cluster G_Real -> strict right_complementable Abelian add-associative right_zeroed ; coherence ( G_Real is Abelian & G_Real is add-associative & G_Real is right_zeroed & G_Real is right_complementable ) proofend; end; registration let a be Element of G_Real; let x be real number ; identify - a with - x when a = x; compatibility ( a = x implies - a = - x ) proofend; end; theorem :: VECTSP_1:1 for x, y, z being Element of G_Real holds ( x + y = y + x & (x + y) + z = x + (y + z) & x + (0. G_Real) = x & x + (- x) = 0. G_Real ) ; registration cluster non empty strict right_complementable Abelian add-associative right_zeroed for addLoopStr ; existence ex b1 being non empty addLoopStr st ( b1 is strict & b1 is add-associative & b1 is right_zeroed & b1 is right_complementable & b1 is Abelian ) proofend; end; definition mode AddGroup is non empty right_complementable add-associative right_zeroed addLoopStr ; end; definition mode AbGroup is Abelian AddGroup; end; :: 4. FIELD STRUCTURE definition let IT be non empty doubleLoopStr ; attrIT is right-distributive means :Def2: :: VECTSP_1:def 2 for a, b, c being Element of IT holds a * (b + c) = (a * b) + (a * c); attrIT is left-distributive means :Def3: :: VECTSP_1:def 3 for a, b, c being Element of IT holds (b + c) * a = (b * a) + (c * a); end; :: deftheorem Def2 defines right-distributive VECTSP_1:def_2_:_ for IT being non empty doubleLoopStr holds ( IT is right-distributive iff for a, b, c being Element of IT holds a * (b + c) = (a * b) + (a * c) ); :: deftheorem Def3 defines left-distributive VECTSP_1:def_3_:_ for IT being non empty doubleLoopStr holds ( IT is left-distributive iff for a, b, c being Element of IT holds (b + c) * a = (b * a) + (c * a) ); definition let IT be non empty multLoopStr ; attrIT is right_unital means :Def4: :: VECTSP_1:def 4 for x being Element of IT holds x * (1. IT) = x; end; :: deftheorem Def4 defines right_unital VECTSP_1:def_4_:_ for IT being non empty multLoopStr holds ( IT is right_unital iff for x being Element of IT holds x * (1. IT) = x ); definition func F_Real -> strict doubleLoopStr equals :: VECTSP_1:def 5 doubleLoopStr(# REAL,addreal,multreal,1,0 #); correctness coherence doubleLoopStr(# REAL,addreal,multreal,1,0 #) is strict doubleLoopStr ; ; end; :: deftheorem defines F_Real VECTSP_1:def_5_:_ F_Real = doubleLoopStr(# REAL,addreal,multreal,1,0 #); registration cluster F_Real -> non empty strict ; coherence not F_Real is empty ; end; registration cluster the carrier of F_Real -> real-membered ; coherence the carrier of F_Real is real-membered ; end; registration let a, b be Element of F_Real; let x, y be real number ; identifya + b with x + y when a = x, b = y; compatibility ( a = x & b = y implies a + b = x + y ) by BINOP_2:def_9; end; registration let a, b be Element of F_Real; let x, y be real number ; identifya * b with x * y when a = x, b = y; compatibility ( a = x & b = y implies a * b = x * y ) by BINOP_2:def_11; end; definition let IT be non empty multLoopStr ; attrIT is well-unital means :Def6: :: VECTSP_1:def 6 for x being Element of IT holds ( x * (1. IT) = x & (1. IT) * x = x ); end; :: deftheorem Def6 defines well-unital VECTSP_1:def_6_:_ for IT being non empty multLoopStr holds ( IT is well-unital iff for x being Element of IT holds ( x * (1. IT) = x & (1. IT) * x = x ) ); Lm1: for L being non empty multLoopStr st L is well-unital holds L is unital proofend; Lm2: for L being non empty multLoopStr st L is well-unital holds 1. L = 1_ L proofend; registration cluster F_Real -> strict well-unital ; coherence F_Real is well-unital proofend; end; registration cluster non empty well-unital for multLoopStr_0 ; existence ex b1 being non empty multLoopStr_0 st b1 is well-unital proofend; end; definition let IT be non empty doubleLoopStr ; attrIT is distributive means :Def7: :: VECTSP_1:def 7 for x, y, z being Element of IT holds ( x * (y + z) = (x * y) + (x * z) & (y + z) * x = (y * x) + (z * x) ); end; :: deftheorem Def7 defines distributive VECTSP_1:def_7_:_ for IT being non empty doubleLoopStr holds ( IT is distributive iff for x, y, z being Element of IT holds ( x * (y + z) = (x * y) + (x * z) & (y + z) * x = (y * x) + (z * x) ) ); definition let IT be non empty multLoopStr ; attrIT is left_unital means :Def8: :: VECTSP_1:def 8 for x being Element of IT holds (1. IT) * x = x; end; :: deftheorem Def8 defines left_unital VECTSP_1:def_8_:_ for IT being non empty multLoopStr holds ( IT is left_unital iff for x being Element of IT holds (1. IT) * x = x ); definition let IT be non empty multLoopStr_0 ; redefine attr IT is almost_left_invertible means :Def9: :: VECTSP_1:def 9 for x being Element of IT st x <> 0. IT holds ex y being Element of IT st y * x = 1. IT; compatibility ( IT is almost_left_invertible iff for x being Element of IT st x <> 0. IT holds ex y being Element of IT st y * x = 1. IT ) proofend; end; :: deftheorem Def9 defines almost_left_invertible VECTSP_1:def_9_:_ for IT being non empty multLoopStr_0 holds ( IT is almost_left_invertible iff for x being Element of IT st x <> 0. IT holds ex y being Element of IT st y * x = 1. IT ); set FR = F_Real ; registration cluster F_Real -> strict unital ; coherence F_Real is unital proofend; end; registration cluster F_Real -> non degenerated right_complementable almost_left_invertible strict Abelian add-associative right_zeroed associative commutative right_unital distributive left_unital ; coherence ( F_Real is add-associative & F_Real is right_zeroed & F_Real is right_complementable & F_Real is Abelian & F_Real is commutative & F_Real is associative & F_Real is left_unital & F_Real is right_unital & F_Real is distributive & F_Real is almost_left_invertible & not F_Real is degenerated ) proofend; end; registration let a be Element of F_Real; let x be real number ; identify - a with - x when a = x; compatibility ( a = x implies - a = - x ) proofend; end; Lm3: for L being non empty doubleLoopStr st L is distributive holds ( L is right-distributive & L is left-distributive ) proofend; registration cluster non empty distributive -> non empty right-distributive left-distributive for doubleLoopStr ; coherence for b1 being non empty doubleLoopStr st b1 is distributive holds ( b1 is left-distributive & b1 is right-distributive ) by Lm3; cluster non empty right-distributive left-distributive -> non empty distributive for doubleLoopStr ; coherence for b1 being non empty doubleLoopStr st b1 is left-distributive & b1 is right-distributive holds b1 is distributive proofend; end; registration cluster non empty well-unital -> non empty right_unital left_unital for multLoopStr ; coherence for b1 being non empty multLoopStr st b1 is well-unital holds ( b1 is left_unital & b1 is right_unital ) proofend; cluster non empty right_unital left_unital -> non empty unital for multLoopStr ; coherence for b1 being non empty multLoopStr st b1 is left_unital & b1 is right_unital holds b1 is unital proofend; end; registration cluster non empty associative commutative for multMagma ; existence ex b1 being non empty multMagma st ( b1 is commutative & b1 is associative ) proofend; end; registration cluster non empty unital associative commutative for multLoopStr ; existence ex b1 being non empty multLoopStr st ( b1 is commutative & b1 is associative & b1 is unital ) proofend; end; registration cluster non empty non degenerated right_complementable almost_left_invertible strict Abelian add-associative right_zeroed associative commutative right_unital well-unital distributive left_unital for doubleLoopStr ; existence ex b1 being non empty doubleLoopStr st ( b1 is add-associative & b1 is right_zeroed & b1 is right_complementable & b1 is Abelian & b1 is commutative & b1 is associative & b1 is left_unital & b1 is right_unital & b1 is distributive & b1 is almost_left_invertible & not b1 is degenerated & b1 is well-unital & b1 is strict ) proofend; end; definition mode Field is non empty non degenerated right_complementable almost_left_invertible Abelian add-associative right_zeroed associative commutative well-unital distributive doubleLoopStr ; end; theorem :: VECTSP_1:2 1. F_Real = 1 ; theorem :: VECTSP_1:3 for x, y, z being Element of F_Real holds ( x + y = y + x & (x + y) + z = x + (y + z) & x + (0. F_Real) = x & x + (- x) = 0. F_Real & x * y = y * x & (x * y) * z = x * (y * z) & (1. F_Real) * x = x & ( x <> 0. F_Real implies ex y being Element of F_Real st y * x = 1. F_Real ) & x * (y + z) = (x * y) + (x * z) & (y + z) * x = (y * x) + (z * x) ) by Def9; theorem :: VECTSP_1:4 for FS being non empty doubleLoopStr holds ( ( for x, y, z being Element of FS holds ( ( x <> 0. FS implies ex y being Element of FS st y * x = 1. FS ) & x * (y + z) = (x * y) + (x * z) & (y + z) * x = (y * x) + (z * x) ) ) iff FS is non empty almost_left_invertible distributive doubleLoopStr ) by Def7, Def9; :: 6. AXIOMS OF FIELD registration cluster non empty well-unital -> non empty unital for multLoopStr ; coherence for b1 being non empty multLoopStr st b1 is well-unital holds b1 is unital ; end; theorem :: VECTSP_1:5 for F being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr for x, y, z being Element of F st x <> 0. F & x * y = x * z holds y = z proofend; definition let F be non empty almost_left_invertible associative commutative well-unital doubleLoopStr ; let x be Element of F; assume A1: x <> 0. F ; redefine func x " means :Def10: :: VECTSP_1:def 10 it * x = 1. F; compatibility for b1 being Element of the carrier of F holds ( b1 = x " iff b1 * x = 1. F ) proofend; end; :: deftheorem Def10 defines " VECTSP_1:def_10_:_ for F being non empty almost_left_invertible associative commutative well-unital doubleLoopStr for x being Element of F st x <> 0. F holds for b3 being Element of the carrier of F holds ( b3 = x " iff b3 * x = 1. F ); definition let F be non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr ; let x, y be Element of F; funcx / y -> Element of F equals :: VECTSP_1:def 11 x * (y "); coherence x * (y ") is Element of F ; end; :: deftheorem defines / VECTSP_1:def_11_:_ for F being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr for x, y being Element of F holds x / y = x * (y "); theorem Th6: :: VECTSP_1:6 for F being non empty right_complementable add-associative right_zeroed right-distributive doubleLoopStr for x being Element of F holds x * (0. F) = 0. F proofend; theorem Th7: :: VECTSP_1:7 for F being non empty right_complementable add-associative right_zeroed left-distributive doubleLoopStr for x being Element of F holds (0. F) * x = 0. F proofend; theorem Th8: :: VECTSP_1:8 for F being non empty right_complementable add-associative right_zeroed right-distributive doubleLoopStr for x, y being Element of F holds x * (- y) = - (x * y) proofend; theorem Th9: :: VECTSP_1:9 for F being non empty right_complementable add-associative right_zeroed left-distributive doubleLoopStr for x, y being Element of F holds (- x) * y = - (x * y) proofend; theorem Th10: :: VECTSP_1:10 for F being non empty right_complementable add-associative right_zeroed distributive doubleLoopStr for x, y being Element of F holds (- x) * (- y) = x * y proofend; theorem :: VECTSP_1:11 for F being non empty right_complementable add-associative right_zeroed right-distributive doubleLoopStr for x, y, z being Element of F holds x * (y - z) = (x * y) - (x * z) proofend; theorem Th12: :: VECTSP_1:12 for F being non empty right_complementable almost_left_invertible add-associative right_zeroed associative commutative well-unital distributive doubleLoopStr for x, y being Element of F holds ( x * y = 0. F iff ( x = 0. F or y = 0. F ) ) proofend; theorem :: VECTSP_1:13 for K being non empty right_complementable add-associative right_zeroed left-distributive doubleLoopStr for a, b, c being Element of K holds (a - b) * c = (a * c) - (b * c) proofend; :: 8. VECTOR SPACE STRUCTURE definition let F be 1-sorted ; attrc2 is strict ; struct VectSpStr over F -> addLoopStr ; aggrVectSpStr(# carrier, addF, ZeroF, lmult #) -> VectSpStr over F; sel lmult c2 -> Function of [: the carrier of F, the carrier of c2:], the carrier of c2; end; registration let F be 1-sorted ; cluster non empty strict for VectSpStr over F; existence ex b1 being VectSpStr over F st ( not b1 is empty & b1 is strict ) proofend; end; registration let F be 1-sorted ; let A be non empty set ; let a be BinOp of A; let Z be Element of A; let l be Function of [: the carrier of F,A:],A; cluster VectSpStr(# A,a,Z,l #) -> non empty ; coherence not VectSpStr(# A,a,Z,l #) is empty ; end; definition let F be 1-sorted ; mode Scalar of F is Element of F; end; definition let F be 1-sorted ; let VS be VectSpStr over F; mode Scalar of VS is Scalar of F; mode Vector of VS is Element of VS; end; definition let F be non empty 1-sorted ; let V be non empty VectSpStr over F; let x be Element of F; let v be Element of V; funcx * v -> Element of V equals :: VECTSP_1:def 12 the lmult of V . (x,v); coherence the lmult of V . (x,v) is Element of V ; end; :: deftheorem defines * VECTSP_1:def_12_:_ for F being non empty 1-sorted for V being non empty VectSpStr over F for x being Element of F for v being Element of V holds x * v = the lmult of V . (x,v); definition let F be non empty addLoopStr ; func comp F -> UnOp of the carrier of F means :: VECTSP_1:def 13 for x being Element of F holds it . x = - x; existence ex b1 being UnOp of the carrier of F st for x being Element of F holds b1 . x = - x proofend; uniqueness for b1, b2 being UnOp of the carrier of F st ( for x being Element of F holds b1 . x = - x ) & ( for x being Element of F holds b2 . x = - x ) holds b1 = b2 proofend; end; :: deftheorem defines comp VECTSP_1:def_13_:_ for F being non empty addLoopStr for b2 being UnOp of the carrier of F holds ( b2 = comp F iff for x being Element of F holds b2 . x = - x ); Lm4: now__::_thesis:_for_F_being_non_empty_right_complementable_Abelian_add-associative_right_zeroed_associative_distributive_left_unital_doubleLoopStr_ for_MLT_being_Function_of_[:_the_carrier_of_F,_the_carrier_of_F:],_the_carrier_of_F_holds_ (_VectSpStr(#_the_carrier_of_F,_the_addF_of_F,(0._F),MLT_#)_is_Abelian_&_VectSpStr(#_the_carrier_of_F,_the_addF_of_F,(0._F),MLT_#)_is_add-associative_&_VectSpStr(#_the_carrier_of_F,_the_addF_of_F,(0._F),MLT_#)_is_right_zeroed_&_VectSpStr(#_the_carrier_of_F,_the_addF_of_F,(0._F),MLT_#)_is_right_complementable_) let F be non empty right_complementable Abelian add-associative right_zeroed associative distributive left_unital doubleLoopStr ; ::_thesis: for MLT being Function of [: the carrier of F, the carrier of F:], the carrier of F holds ( VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is Abelian & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is add-associative & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_zeroed & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_complementable ) let MLT be Function of [: the carrier of F, the carrier of F:], the carrier of F; ::_thesis: ( VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is Abelian & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is add-associative & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_zeroed & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_complementable ) set GF = VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); thus VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is Abelian ::_thesis: ( VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is add-associative & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_zeroed & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_complementable ) proof let x, y be Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); :: according toRLVECT_1:def_2 ::_thesis: x + y = y + x reconsider x9 = x, y9 = y as Element of F ; thus x + y = y9 + x9 by RLVECT_1:2 .= y + x ; ::_thesis: verum end; thus VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is add-associative ::_thesis: ( VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_zeroed & VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_complementable ) proof let x, y, z be Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); :: according toRLVECT_1:def_3 ::_thesis: (x + y) + z = x + (y + z) reconsider x9 = x, y9 = y, z9 = z as Element of F ; thus (x + y) + z = (x9 + y9) + z9 .= x9 + (y9 + z9) by RLVECT_1:def_3 .= x + (y + z) ; ::_thesis: verum end; thus VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_zeroed ::_thesis: VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_complementable proof let x be Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); :: according toRLVECT_1:def_4 ::_thesis: x + (0. VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #)) = x reconsider x9 = x as Element of F ; thus x + (0. VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #)) = x9 + (0. F) .= x by RLVECT_1:4 ; ::_thesis: verum end; thus VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) is right_complementable ::_thesis: verum proof let x be Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); :: according toALGSTR_0:def_16 ::_thesis: x is right_complementable reconsider x9 = x as Element of F ; consider t being Element of F such that A1: x9 + t = 0. F by ALGSTR_0:def_11; reconsider t9 = t as Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) ; take t9 ; :: according toALGSTR_0:def_11 ::_thesis: x + t9 = 0. VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) thus x + t9 = 0. VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) by A1; ::_thesis: verum end; end; Lm5: now__::_thesis:_for_F_being_non_empty_right_complementable_add-associative_right_zeroed_associative_well-unital_distributive_doubleLoopStr_ for_MLT_being_Function_of_[:_the_carrier_of_F,_the_carrier_of_F:],_the_carrier_of_F_st_MLT_=_the_multF_of_F_holds_ for_x,_y_being_Element_of_F for_v,_w_being_Element_of_VectSpStr(#_the_carrier_of_F,_the_addF_of_F,(0._F),MLT_#)_holds_ (_x_*_(v_+_w)_=_(x_*_v)_+_(x_*_w)_&_(x_+_y)_*_v_=_(x_*_v)_+_(y_*_v)_&_(x_*_y)_*_v_=_x_*_(y_*_v)_&_(1._F)_*_v_=_v_) let F be non empty right_complementable add-associative right_zeroed associative well-unital distributive doubleLoopStr ; ::_thesis: for MLT being Function of [: the carrier of F, the carrier of F:], the carrier of F st MLT = the multF of F holds for x, y being Element of F for v, w being Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) holds ( x * (v + w) = (x * v) + (x * w) & (x + y) * v = (x * v) + (y * v) & (x * y) * v = x * (y * v) & (1. F) * v = v ) let MLT be Function of [: the carrier of F, the carrier of F:], the carrier of F; ::_thesis: ( MLT = the multF of F implies for x, y being Element of F for v, w being Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) holds ( x * (v + w) = (x * v) + (x * w) & (x + y) * v = (x * v) + (y * v) & (x * y) * v = x * (y * v) & (1. F) * v = v ) ) assume A1: MLT = the multF of F ; ::_thesis: for x, y being Element of F for v, w being Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) holds ( x * (v + w) = (x * v) + (x * w) & (x + y) * v = (x * v) + (y * v) & (x * y) * v = x * (y * v) & (1. F) * v = v ) let x, y be Element of F; ::_thesis: for v, w being Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #) holds ( x * (v + w) = (x * v) + (x * w) & (x + y) * v = (x * v) + (y * v) & (x * y) * v = x * (y * v) & (1. F) * v = v ) set LS = VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); let v, w be Element of VectSpStr(# the carrier of F, the addF of F,(0. F),MLT #); ::_thesis: ( x * (v + w) = (x * v) + (x * w) & (x + y) * v = (x * v) + (y * v) & (x * y) * v = x * (y * v) & (1. F) * v = v ) reconsider v9 = v, w9 = w as Element of F ; thus x * (v + w) = x * (v9 + w9) by A1 .= (x * v9) + (x * w9) by Def7 .= (x * v) + (x * w) by A1 ; ::_thesis: ( (x + y) * v = (x * v) + (y * v) & (x * y) * v = x * (y * v) & (1. F) * v = v ) thus (x + y) * v = (x + y) * v9 by A1 .= (x * v9) + (y * v9) by Def7 .= (x * v) + (y * v) by A1 ; ::_thesis: ( (x * y) * v = x * (y * v) & (1. F) * v = v ) thus (x * y) * v = (x * y) * v9 by A1 .= x * (y * v9) by GROUP_1:def_3 .= x * (y * v) by A1 ; ::_thesis: (1. F) * v = v thus (1. F) * v = (1. F) * v9 by A1 .= v by Def8 ; ::_thesis: verum end; definition let F be non empty doubleLoopStr ; let IT be non empty VectSpStr over F; attrIT is vector-distributive means :Def14: :: VECTSP_1:def 14 for x being Element of F for v, w being Element of IT holds x * (v + w) = (x * v) + (x * w); attrIT is scalar-distributive means :Def15: :: VECTSP_1:def 15 for x, y being Element of F for v being Element of IT holds (x + y) * v = (x * v) + (y * v); attrIT is scalar-associative means :Def16: :: VECTSP_1:def 16 for x, y being Element of F for v being Element of IT holds (x * y) * v = x * (y * v); attrIT is scalar-unital means :Def17: :: VECTSP_1:def 17 for v being Element of IT holds (1. F) * v = v; end; :: deftheorem Def14 defines vector-distributive VECTSP_1:def_14_:_ for F being non empty doubleLoopStr for IT being non empty VectSpStr over F holds ( IT is vector-distributive iff for x being Element of F for v, w being Element of IT holds x * (v + w) = (x * v) + (x * w) ); :: deftheorem Def15 defines scalar-distributive VECTSP_1:def_15_:_ for F being non empty doubleLoopStr for IT being non empty VectSpStr over F holds ( IT is scalar-distributive iff for x, y being Element of F for v being Element of IT holds (x + y) * v = (x * v) + (y * v) ); :: deftheorem Def16 defines scalar-associative VECTSP_1:def_16_:_ for F being non empty doubleLoopStr for IT being non empty VectSpStr over F holds ( IT is scalar-associative iff for x, y being Element of F for v being Element of IT holds (x * y) * v = x * (y * v) ); :: deftheorem Def17 defines scalar-unital VECTSP_1:def_17_:_ for F being non empty doubleLoopStr for IT being non empty VectSpStr over F holds ( IT is scalar-unital iff for v being Element of IT holds (1. F) * v = v ); registration let F be non empty right_complementable Abelian add-associative right_zeroed associative well-unital distributive doubleLoopStr ; cluster non empty right_complementable Abelian add-associative right_zeroed strict vector-distributive scalar-distributive scalar-associative scalar-unital for VectSpStr over F; existence ex b1 being non empty VectSpStr over F st ( b1 is scalar-distributive & b1 is vector-distributive & b1 is scalar-associative & b1 is scalar-unital & b1 is add-associative & b1 is right_zeroed & b1 is right_complementable & b1 is Abelian & b1 is strict ) proofend; end; definition let F be non empty right_complementable Abelian add-associative right_zeroed associative well-unital distributive doubleLoopStr ; mode VectSp of F is non empty right_complementable Abelian add-associative right_zeroed vector-distributive scalar-distributive scalar-associative scalar-unital VectSpStr over F; end; theorem Th14: :: VECTSP_1:14 for F being non empty right_complementable Abelian add-associative right_zeroed associative well-unital distributive doubleLoopStr for x being Element of F for V being non empty right_complementable add-associative right_zeroed vector-distributive scalar-distributive scalar-associative scalar-unital VectSpStr over F for v being Element of V holds ( (0. F) * v = 0. V & (- (1. F)) * v = - v & x * (0. V) = 0. V ) proofend; theorem :: VECTSP_1:15 for F being Field for x being Element of F for V being VectSp of F for v being Element of V holds ( x * v = 0. V iff ( x = 0. F or v = 0. V ) ) proofend; :: 13. APPENDIX theorem :: VECTSP_1:16 for V being non empty right_complementable add-associative right_zeroed addLoopStr for v, w being Element of V holds ( v + w = 0. V iff - v = w ) proofend; Lm6: for V being non empty right_complementable add-associative right_zeroed addLoopStr for v, w being Element of V holds - (w + (- v)) = v - w proofend; Lm7: for V being non empty right_complementable add-associative right_zeroed addLoopStr for v, w being Element of V holds - ((- v) - w) = w + v proofend; theorem :: VECTSP_1:17 for V being non empty right_complementable add-associative right_zeroed addLoopStr for u, v, w being Element of V holds ( - (v + w) = (- w) - v & - (w + (- v)) = v - w & - (v - w) = w + (- v) & - ((- v) - w) = w + v & u - (w + v) = (u - v) - w ) by Lm6, Lm7, RLVECT_1:27, RLVECT_1:30, RLVECT_1:33; theorem :: VECTSP_1:18 for V being non empty right_complementable add-associative right_zeroed addLoopStr for v being Element of V holds ( (0. V) - v = - v & v - (0. V) = v ) by RLVECT_1:13, RLVECT_1:14; theorem Th19: :: VECTSP_1:19 for F being non empty right_complementable add-associative right_zeroed addLoopStr for x, y being Element of F holds ( ( x + (- y) = 0. F implies x = y ) & ( x = y implies x + (- y) = 0. F ) & ( x - y = 0. F implies x = y ) & ( x = y implies x - y = 0. F ) ) proofend; theorem :: VECTSP_1:20 for F being Field for x being Element of F for V being VectSp of F for v being Element of V st x <> 0. F holds (x ") * (x * v) = v proofend; theorem Th21: :: VECTSP_1:21 for F being non empty right_complementable Abelian add-associative right_zeroed associative well-unital distributive doubleLoopStr for V being non empty right_complementable add-associative right_zeroed vector-distributive scalar-distributive scalar-associative scalar-unital VectSpStr over F for x being Element of F for v, w being Element of V holds ( - (x * v) = (- x) * v & w - (x * v) = w + ((- x) * v) ) proofend; registration cluster non empty commutative left_unital -> non empty right_unital for multLoopStr ; coherence for b1 being non empty multLoopStr st b1 is commutative & b1 is left_unital holds b1 is right_unital proofend; end; theorem Th22: :: VECTSP_1:22 for F being non empty right_complementable Abelian add-associative right_zeroed associative right_unital well-unital distributive doubleLoopStr for V being non empty right_complementable add-associative right_zeroed vector-distributive scalar-distributive scalar-associative scalar-unital VectSpStr over F for x being Element of F for v being Element of V holds x * (- v) = - (x * v) proofend; theorem :: VECTSP_1:23 for F being non empty right_complementable Abelian add-associative right_zeroed associative right_unital well-unital distributive doubleLoopStr for V being non empty right_complementable add-associative right_zeroed vector-distributive scalar-distributive scalar-associative scalar-unital VectSpStr over F for x being Element of F for v, w being Element of V holds x * (v - w) = (x * v) - (x * w) proofend; theorem :: VECTSP_1:24 for F being non empty non degenerated right_complementable almost_left_invertible add-associative right_zeroed associative commutative well-unital distributive doubleLoopStr for x being Element of F st x <> 0. F holds (x ") " = x proofend; theorem :: VECTSP_1:25 for F being Field for x being Element of F st x <> 0. F holds ( x " <> 0. F & - (x ") <> 0. F ) proofend; theorem Th26: :: VECTSP_1:26 (1. F_Real) + (1. F_Real) <> 0. F_Real ; definition let IT be non empty addLoopStr ; attrIT is Fanoian means :Def18: :: VECTSP_1:def 18 for a being Element of IT st a + a = 0. IT holds a = 0. IT; end; :: deftheorem Def18 defines Fanoian VECTSP_1:def_18_:_ for IT being non empty addLoopStr holds ( IT is Fanoian iff for a being Element of IT st a + a = 0. IT holds a = 0. IT ); registration cluster non empty Fanoian for addLoopStr ; existence ex b1 being non empty addLoopStr st b1 is Fanoian proofend; end; definition let F be non empty non degenerated right_complementable almost_left_invertible add-associative right_zeroed associative commutative well-unital distributive doubleLoopStr ; redefine attr F is Fanoian means :Def19: :: VECTSP_1:def 19 (1. F) + (1. F) <> 0. F; compatibility ( F is Fanoian iff (1. F) + (1. F) <> 0. F ) proofend; end; :: deftheorem Def19 defines Fanoian VECTSP_1:def_19_:_ for F being non empty non degenerated right_complementable almost_left_invertible add-associative right_zeroed associative commutative well-unital distributive doubleLoopStr holds ( F is Fanoian iff (1. F) + (1. F) <> 0. F ); registration cluster non empty non degenerated non trivial right_complementable almost_left_invertible strict Abelian add-associative right_zeroed unital associative commutative right-distributive left-distributive right_unital well-unital distributive left_unital Fanoian for doubleLoopStr ; existence ex b1 being Field st ( b1 is strict & b1 is Fanoian ) proofend; end; theorem :: VECTSP_1:27 for F being non empty right_complementable add-associative right_zeroed addLoopStr for a, b being Element of F st a - b = 0. F holds a = b by Th19; theorem Th28: :: VECTSP_1:28 for F being non empty right_complementable add-associative right_zeroed addLoopStr for a being Element of F st - a = 0. F holds a = 0. F proofend; theorem :: VECTSP_1:29 for F being non empty right_complementable add-associative right_zeroed addLoopStr for a, b being Element of F st a - b = 0. F holds b - a = 0. F proofend; theorem :: VECTSP_1:30 for F being Field for a, b, c being Element of F holds ( ( a <> 0. F & (a * c) - b = 0. F implies c = b * (a ") ) & ( a <> 0. F & b - (c * a) = 0. F implies c = b * (a ") ) ) proofend; theorem :: VECTSP_1:31 for F being non empty right_complementable add-associative right_zeroed addLoopStr for a, b being Element of F holds a + b = - ((- b) + (- a)) proofend; theorem :: VECTSP_1:32 for F being non empty right_complementable add-associative right_zeroed addLoopStr for a, b, c being Element of F holds (b + a) - (c + a) = b - c proofend; theorem :: VECTSP_1:33 for G being non empty right_complementable add-associative right_zeroed addLoopStr for v, w being Element of G holds - ((- v) + w) = (- w) + v proofend; theorem :: VECTSP_1:34 for G being non empty Abelian add-associative addLoopStr for u, v, w being Element of G holds (u - v) - w = (u - w) - v proofend; theorem :: VECTSP_1:35 for B being AbGroup holds multMagma(# the carrier of B, the addF of B #) is commutative Group proofend; begin :: from COMPTRIG, 2006.08.12, A.T. theorem :: VECTSP_1:36 for L being non empty right_complementable add-associative right_zeroed unital right-distributive doubleLoopStr for n being Element of NAT st n > 0 holds (power L) . ((0. L),n) = 0. L proofend; :: 2007.02.14, A.T. registration cluster non empty well-unital for multLoopStr ; existence ex b1 being non empty multLoopStr st b1 is well-unital proofend; end; registration let S be non empty well-unital multLoopStr ; identify 1_ S with 1. S; compatibility 1_ S = 1. S by Lm2; end; theorem :: VECTSP_1:37 for L being non empty multLoopStr st L is well-unital holds 1. L = 1_ L by Lm2; definition let G, H be non empty addMagma ; let f be Function of G,H; attrf is additive means :: VECTSP_1:def 20 for x, y being Element of G holds f . (x + y) = (f . x) + (f . y); end; :: deftheorem defines additive VECTSP_1:def_20_:_ for G, H being non empty addMagma for f being Function of G,H holds ( f is additive iff for x, y being Element of G holds f . (x + y) = (f . x) + (f . y) );