:: ALGSTR_0 semantic presentation
begin
definition
attrc1 is strict ;
struct addMagma -> 1-sorted ;
aggraddMagma(# carrier, addF #) -> addMagma ;
sel addF c1 -> BinOp of the carrier of c1;
end;
registration
let D be non empty set ;
let o be BinOp of D;
cluster addMagma(# D,o #) -> non empty ;
coherence
not addMagma(# D,o #) is empty ;
end;
registration
let T be trivial set ;
let f be BinOp of T;
cluster addMagma(# T,f #) -> trivial ;
coherence
addMagma(# T,f #) is trivial ;
end;
registration
let N be non trivial set ;
let b be BinOp of N;
cluster addMagma(# N,b #) -> non trivial ;
coherence
not addMagma(# N,b #) is trivial ;
end;
definition
let M be addMagma ;
let x, y be Element of M;
funcx + y -> Element of M equals :: ALGSTR_0:def 1
the addF of M . (x,y);
coherence
the addF of M . (x,y) is Element of M ;
end;
:: deftheorem defines + ALGSTR_0:def_1_:_
for M being addMagma
for x, y being Element of M holds x + y = the addF of M . (x,y);
definition
func Trivial-addMagma -> addMagma equals :: ALGSTR_0:def 2
addMagma(# 1,op2 #);
coherence
addMagma(# 1,op2 #) is addMagma ;
end;
:: deftheorem defines Trivial-addMagma ALGSTR_0:def_2_:_
Trivial-addMagma = addMagma(# 1,op2 #);
registration
cluster Trivial-addMagma -> 1 -element strict ;
coherence
( Trivial-addMagma is 1 -element & Trivial-addMagma is strict ) by CARD_1:49;
end;
registration
cluster1 -element strict for addMagma ;
existence
ex b1 being addMagma st
( b1 is strict & b1 is 1 -element )
proof
take Trivial-addMagma ; ::_thesis: ( Trivial-addMagma is strict & Trivial-addMagma is 1 -element )
thus ( Trivial-addMagma is strict & Trivial-addMagma is 1 -element ) ; ::_thesis: verum
end;
end;
definition
let M be addMagma ;
let x be Element of M;
attrx is left_add-cancelable means :: ALGSTR_0:def 3
for y, z being Element of M st x + y = x + z holds
y = z;
attrx is right_add-cancelable means :Def4: :: ALGSTR_0:def 4
for y, z being Element of M st y + x = z + x holds
y = z;
end;
:: deftheorem defines left_add-cancelable ALGSTR_0:def_3_:_
for M being addMagma
for x being Element of M holds
( x is left_add-cancelable iff for y, z being Element of M st x + y = x + z holds
y = z );
:: deftheorem Def4 defines right_add-cancelable ALGSTR_0:def_4_:_
for M being addMagma
for x being Element of M holds
( x is right_add-cancelable iff for y, z being Element of M st y + x = z + x holds
y = z );
definition
let M be addMagma ;
let x be Element of M;
attrx is add-cancelable means :Def5: :: ALGSTR_0:def 5
( x is right_add-cancelable & x is left_add-cancelable );
end;
:: deftheorem Def5 defines add-cancelable ALGSTR_0:def_5_:_
for M being addMagma
for x being Element of M holds
( x is add-cancelable iff ( x is right_add-cancelable & x is left_add-cancelable ) );
registration
let M be addMagma ;
cluster left_add-cancelable right_add-cancelable -> add-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is right_add-cancelable & b1 is left_add-cancelable holds
b1 is add-cancelable by Def5;
cluster add-cancelable -> left_add-cancelable right_add-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is add-cancelable holds
( b1 is right_add-cancelable & b1 is left_add-cancelable ) by Def5;
end;
definition
let M be addMagma ;
attrM is left_add-cancelable means :Def6: :: ALGSTR_0:def 6
for x being Element of M holds x is left_add-cancelable ;
attrM is right_add-cancelable means :Def7: :: ALGSTR_0:def 7
for x being Element of M holds x is right_add-cancelable ;
end;
:: deftheorem Def6 defines left_add-cancelable ALGSTR_0:def_6_:_
for M being addMagma holds
( M is left_add-cancelable iff for x being Element of M holds x is left_add-cancelable );
:: deftheorem Def7 defines right_add-cancelable ALGSTR_0:def_7_:_
for M being addMagma holds
( M is right_add-cancelable iff for x being Element of M holds x is right_add-cancelable );
definition
let M be addMagma ;
attrM is add-cancelable means :Def8: :: ALGSTR_0:def 8
( M is right_add-cancelable & M is left_add-cancelable );
end;
:: deftheorem Def8 defines add-cancelable ALGSTR_0:def_8_:_
for M being addMagma holds
( M is add-cancelable iff ( M is right_add-cancelable & M is left_add-cancelable ) );
registration
cluster left_add-cancelable right_add-cancelable -> add-cancelable for addMagma ;
coherence
for b1 being addMagma st b1 is right_add-cancelable & b1 is left_add-cancelable holds
b1 is add-cancelable by Def8;
cluster add-cancelable -> left_add-cancelable right_add-cancelable for addMagma ;
coherence
for b1 being addMagma st b1 is add-cancelable holds
( b1 is right_add-cancelable & b1 is left_add-cancelable ) by Def8;
end;
registration
cluster Trivial-addMagma -> add-cancelable ;
coherence
Trivial-addMagma is add-cancelable
proof
set M = Trivial-addMagma ;
thus Trivial-addMagma is right_add-cancelable :: according to ALGSTR_0:def_8 ::_thesis: Trivial-addMagma is left_add-cancelable
proof
let x, y, z be Element of Trivial-addMagma; :: according to ALGSTR_0:def_4,ALGSTR_0:def_7 ::_thesis: ( y + x = z + x implies y = z )
assume y + x = z + x ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
let x, y, z be Element of Trivial-addMagma; :: according to ALGSTR_0:def_3,ALGSTR_0:def_6 ::_thesis: ( x + y = x + z implies y = z )
assume x + y = x + z ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
end;
registration
cluster1 -element strict add-cancelable for addMagma ;
existence
ex b1 being addMagma st
( b1 is add-cancelable & b1 is strict & b1 is 1 -element )
proof
take Trivial-addMagma ; ::_thesis: ( Trivial-addMagma is add-cancelable & Trivial-addMagma is strict & Trivial-addMagma is 1 -element )
thus ( Trivial-addMagma is add-cancelable & Trivial-addMagma is strict & Trivial-addMagma is 1 -element ) ; ::_thesis: verum
end;
end;
registration
let M be left_add-cancelable addMagma ;
cluster -> left_add-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is left_add-cancelable by Def6;
end;
registration
let M be right_add-cancelable addMagma ;
cluster -> right_add-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is right_add-cancelable by Def7;
end;
definition
attrc1 is strict ;
struct addLoopStr -> ZeroStr , addMagma ;
aggraddLoopStr(# carrier, addF, ZeroF #) -> addLoopStr ;
end;
registration
let D be non empty set ;
let o be BinOp of D;
let d be Element of D;
cluster addLoopStr(# D,o,d #) -> non empty ;
coherence
not addLoopStr(# D,o,d #) is empty ;
end;
registration
let T be trivial set ;
let f be BinOp of T;
let t be Element of T;
cluster addLoopStr(# T,f,t #) -> trivial ;
coherence
addLoopStr(# T,f,t #) is trivial ;
end;
registration
let N be non trivial set ;
let b be BinOp of N;
let m be Element of N;
cluster addLoopStr(# N,b,m #) -> non trivial ;
coherence
not addLoopStr(# N,b,m #) is trivial ;
end;
definition
func Trivial-addLoopStr -> addLoopStr equals :: ALGSTR_0:def 9
addLoopStr(# 1,op2,op0 #);
coherence
addLoopStr(# 1,op2,op0 #) is addLoopStr ;
end;
:: deftheorem defines Trivial-addLoopStr ALGSTR_0:def_9_:_
Trivial-addLoopStr = addLoopStr(# 1,op2,op0 #);
registration
cluster Trivial-addLoopStr -> 1 -element strict ;
coherence
( Trivial-addLoopStr is 1 -element & Trivial-addLoopStr is strict ) by CARD_1:49;
end;
registration
cluster1 -element strict for addLoopStr ;
existence
ex b1 being addLoopStr st
( b1 is strict & b1 is 1 -element )
proof
take Trivial-addLoopStr ; ::_thesis: ( Trivial-addLoopStr is strict & Trivial-addLoopStr is 1 -element )
thus ( Trivial-addLoopStr is strict & Trivial-addLoopStr is 1 -element ) ; ::_thesis: verum
end;
end;
definition
let M be addLoopStr ;
let x be Element of M;
attrx is left_complementable means :Def10: :: ALGSTR_0:def 10
ex y being Element of M st y + x = 0. M;
attrx is right_complementable means :: ALGSTR_0:def 11
ex y being Element of M st x + y = 0. M;
end;
:: deftheorem Def10 defines left_complementable ALGSTR_0:def_10_:_
for M being addLoopStr
for x being Element of M holds
( x is left_complementable iff ex y being Element of M st y + x = 0. M );
:: deftheorem defines right_complementable ALGSTR_0:def_11_:_
for M being addLoopStr
for x being Element of M holds
( x is right_complementable iff ex y being Element of M st x + y = 0. M );
definition
let M be addLoopStr ;
let x be Element of M;
attrx is complementable means :Def12: :: ALGSTR_0:def 12
( x is right_complementable & x is left_complementable );
end;
:: deftheorem Def12 defines complementable ALGSTR_0:def_12_:_
for M being addLoopStr
for x being Element of M holds
( x is complementable iff ( x is right_complementable & x is left_complementable ) );
registration
let M be addLoopStr ;
cluster left_complementable right_complementable -> complementable for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is right_complementable & b1 is left_complementable holds
b1 is complementable by Def12;
cluster complementable -> left_complementable right_complementable for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is complementable holds
( b1 is right_complementable & b1 is left_complementable ) by Def12;
end;
definition
let M be addLoopStr ;
let x be Element of M;
assume A1: ( x is left_complementable & x is right_add-cancelable ) ;
func - x -> Element of M means :: ALGSTR_0:def 13
it + x = 0. M;
existence
ex b1 being Element of M st b1 + x = 0. M by A1, Def10;
uniqueness
for b1, b2 being Element of M st b1 + x = 0. M & b2 + x = 0. M holds
b1 = b2 by A1, Def4;
end;
:: deftheorem defines - ALGSTR_0:def_13_:_
for M being addLoopStr
for x being Element of M st x is left_complementable & x is right_add-cancelable holds
for b3 being Element of M holds
( b3 = - x iff b3 + x = 0. M );
definition
let V be addLoopStr ;
let v, w be Element of V;
funcv - w -> Element of V equals :: ALGSTR_0:def 14
v + (- w);
correctness
coherence
v + (- w) is Element of V;
;
end;
:: deftheorem defines - ALGSTR_0:def_14_:_
for V being addLoopStr
for v, w being Element of V holds v - w = v + (- w);
registration
cluster Trivial-addLoopStr -> add-cancelable ;
coherence
Trivial-addLoopStr is add-cancelable
proof
set M = Trivial-addLoopStr ;
thus Trivial-addLoopStr is right_add-cancelable :: according to ALGSTR_0:def_8 ::_thesis: Trivial-addLoopStr is left_add-cancelable
proof
let x, y, z be Element of Trivial-addLoopStr; :: according to ALGSTR_0:def_4,ALGSTR_0:def_7 ::_thesis: ( y + x = z + x implies y = z )
assume y + x = z + x ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
let x, y, z be Element of Trivial-addLoopStr; :: according to ALGSTR_0:def_3,ALGSTR_0:def_6 ::_thesis: ( x + y = x + z implies y = z )
assume x + y = x + z ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
end;
definition
let M be addLoopStr ;
attrM is left_complementable means :Def15: :: ALGSTR_0:def 15
for x being Element of M holds x is left_complementable ;
attrM is right_complementable means :Def16: :: ALGSTR_0:def 16
for x being Element of M holds x is right_complementable ;
end;
:: deftheorem Def15 defines left_complementable ALGSTR_0:def_15_:_
for M being addLoopStr holds
( M is left_complementable iff for x being Element of M holds x is left_complementable );
:: deftheorem Def16 defines right_complementable ALGSTR_0:def_16_:_
for M being addLoopStr holds
( M is right_complementable iff for x being Element of M holds x is right_complementable );
definition
let M be addLoopStr ;
attrM is complementable means :Def17: :: ALGSTR_0:def 17
( M is right_complementable & M is left_complementable );
end;
:: deftheorem Def17 defines complementable ALGSTR_0:def_17_:_
for M being addLoopStr holds
( M is complementable iff ( M is right_complementable & M is left_complementable ) );
registration
cluster left_complementable right_complementable -> complementable for addLoopStr ;
coherence
for b1 being addLoopStr st b1 is right_complementable & b1 is left_complementable holds
b1 is complementable by Def17;
cluster complementable -> left_complementable right_complementable for addLoopStr ;
coherence
for b1 being addLoopStr st b1 is complementable holds
( b1 is right_complementable & b1 is left_complementable ) by Def17;
end;
registration
cluster Trivial-addLoopStr -> complementable ;
coherence
Trivial-addLoopStr is complementable
proof
set M = Trivial-addLoopStr ;
thus Trivial-addLoopStr is right_complementable :: according to ALGSTR_0:def_17 ::_thesis: Trivial-addLoopStr is left_complementable
proof
let x be Element of Trivial-addLoopStr; :: according to ALGSTR_0:def_16 ::_thesis: x is right_complementable
take x ; :: according to ALGSTR_0:def_11 ::_thesis: x + x = 0. Trivial-addLoopStr
thus x + x = 0. Trivial-addLoopStr by STRUCT_0:def_10; ::_thesis: verum
end;
let x be Element of Trivial-addLoopStr; :: according to ALGSTR_0:def_15 ::_thesis: x is left_complementable
take x ; :: according to ALGSTR_0:def_10 ::_thesis: x + x = 0. Trivial-addLoopStr
thus x + x = 0. Trivial-addLoopStr by STRUCT_0:def_10; ::_thesis: verum
end;
end;
registration
cluster1 -element add-cancelable strict complementable for addLoopStr ;
existence
ex b1 being addLoopStr st
( b1 is complementable & b1 is add-cancelable & b1 is strict & b1 is 1 -element )
proof
take Trivial-addLoopStr ; ::_thesis: ( Trivial-addLoopStr is complementable & Trivial-addLoopStr is add-cancelable & Trivial-addLoopStr is strict & Trivial-addLoopStr is 1 -element )
thus ( Trivial-addLoopStr is complementable & Trivial-addLoopStr is add-cancelable & Trivial-addLoopStr is strict & Trivial-addLoopStr is 1 -element ) ; ::_thesis: verum
end;
end;
registration
let M be left_complementable addLoopStr ;
cluster -> left_complementable for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is left_complementable by Def15;
end;
registration
let M be right_complementable addLoopStr ;
cluster -> right_complementable for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is right_complementable by Def16;
end;
begin
definition
attrc1 is strict ;
struct multMagma -> 1-sorted ;
aggrmultMagma(# carrier, multF #) -> multMagma ;
sel multF c1 -> BinOp of the carrier of c1;
end;
registration
let D be non empty set ;
let o be BinOp of D;
cluster multMagma(# D,o #) -> non empty ;
coherence
not multMagma(# D,o #) is empty ;
end;
registration
let T be trivial set ;
let f be BinOp of T;
cluster multMagma(# T,f #) -> trivial ;
coherence
multMagma(# T,f #) is trivial ;
end;
registration
let N be non trivial set ;
let b be BinOp of N;
cluster multMagma(# N,b #) -> non trivial ;
coherence
not multMagma(# N,b #) is trivial ;
end;
definition
let M be multMagma ;
let x, y be Element of M;
funcx * y -> Element of M equals :: ALGSTR_0:def 18
the multF of M . (x,y);
coherence
the multF of M . (x,y) is Element of M ;
end;
:: deftheorem defines * ALGSTR_0:def_18_:_
for M being multMagma
for x, y being Element of M holds x * y = the multF of M . (x,y);
definition
func Trivial-multMagma -> multMagma equals :: ALGSTR_0:def 19
multMagma(# 1,op2 #);
coherence
multMagma(# 1,op2 #) is multMagma ;
end;
:: deftheorem defines Trivial-multMagma ALGSTR_0:def_19_:_
Trivial-multMagma = multMagma(# 1,op2 #);
registration
cluster Trivial-multMagma -> 1 -element strict ;
coherence
( Trivial-multMagma is 1 -element & Trivial-multMagma is strict ) by CARD_1:49;
end;
registration
cluster1 -element strict for multMagma ;
existence
ex b1 being multMagma st
( b1 is strict & b1 is 1 -element )
proof
take Trivial-multMagma ; ::_thesis: ( Trivial-multMagma is strict & Trivial-multMagma is 1 -element )
thus ( Trivial-multMagma is strict & Trivial-multMagma is 1 -element ) ; ::_thesis: verum
end;
end;
definition
let M be multMagma ;
let x be Element of M;
attrx is left_mult-cancelable means :: ALGSTR_0:def 20
for y, z being Element of M st x * y = x * z holds
y = z;
attrx is right_mult-cancelable means :Def21: :: ALGSTR_0:def 21
for y, z being Element of M st y * x = z * x holds
y = z;
end;
:: deftheorem defines left_mult-cancelable ALGSTR_0:def_20_:_
for M being multMagma
for x being Element of M holds
( x is left_mult-cancelable iff for y, z being Element of M st x * y = x * z holds
y = z );
:: deftheorem Def21 defines right_mult-cancelable ALGSTR_0:def_21_:_
for M being multMagma
for x being Element of M holds
( x is right_mult-cancelable iff for y, z being Element of M st y * x = z * x holds
y = z );
definition
let M be multMagma ;
let x be Element of M;
attrx is mult-cancelable means :Def22: :: ALGSTR_0:def 22
( x is right_mult-cancelable & x is left_mult-cancelable );
end;
:: deftheorem Def22 defines mult-cancelable ALGSTR_0:def_22_:_
for M being multMagma
for x being Element of M holds
( x is mult-cancelable iff ( x is right_mult-cancelable & x is left_mult-cancelable ) );
registration
let M be multMagma ;
cluster left_mult-cancelable right_mult-cancelable -> mult-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is right_mult-cancelable & b1 is left_mult-cancelable holds
b1 is mult-cancelable by Def22;
cluster mult-cancelable -> left_mult-cancelable right_mult-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is mult-cancelable holds
( b1 is right_mult-cancelable & b1 is left_mult-cancelable ) by Def22;
end;
definition
let M be multMagma ;
attrM is left_mult-cancelable means :Def23: :: ALGSTR_0:def 23
for x being Element of M holds x is left_mult-cancelable ;
attrM is right_mult-cancelable means :Def24: :: ALGSTR_0:def 24
for x being Element of M holds x is right_mult-cancelable ;
end;
:: deftheorem Def23 defines left_mult-cancelable ALGSTR_0:def_23_:_
for M being multMagma holds
( M is left_mult-cancelable iff for x being Element of M holds x is left_mult-cancelable );
:: deftheorem Def24 defines right_mult-cancelable ALGSTR_0:def_24_:_
for M being multMagma holds
( M is right_mult-cancelable iff for x being Element of M holds x is right_mult-cancelable );
definition
let M be multMagma ;
attrM is mult-cancelable means :Def25: :: ALGSTR_0:def 25
( M is left_mult-cancelable & M is right_mult-cancelable );
end;
:: deftheorem Def25 defines mult-cancelable ALGSTR_0:def_25_:_
for M being multMagma holds
( M is mult-cancelable iff ( M is left_mult-cancelable & M is right_mult-cancelable ) );
registration
cluster left_mult-cancelable right_mult-cancelable -> mult-cancelable for multMagma ;
coherence
for b1 being multMagma st b1 is right_mult-cancelable & b1 is left_mult-cancelable holds
b1 is mult-cancelable by Def25;
cluster mult-cancelable -> left_mult-cancelable right_mult-cancelable for multMagma ;
coherence
for b1 being multMagma st b1 is mult-cancelable holds
( b1 is right_mult-cancelable & b1 is left_mult-cancelable ) by Def25;
end;
registration
cluster Trivial-multMagma -> mult-cancelable ;
coherence
Trivial-multMagma is mult-cancelable
proof
set M = Trivial-multMagma ;
thus Trivial-multMagma is left_mult-cancelable :: according to ALGSTR_0:def_25 ::_thesis: Trivial-multMagma is right_mult-cancelable
proof
let x, y, z be Element of Trivial-multMagma; :: according to ALGSTR_0:def_20,ALGSTR_0:def_23 ::_thesis: ( x * y = x * z implies y = z )
assume x * y = x * z ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
let x, y, z be Element of Trivial-multMagma; :: according to ALGSTR_0:def_21,ALGSTR_0:def_24 ::_thesis: ( y * x = z * x implies y = z )
assume y * x = z * x ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
end;
registration
cluster1 -element strict mult-cancelable for multMagma ;
existence
ex b1 being multMagma st
( b1 is mult-cancelable & b1 is strict & b1 is 1 -element )
proof
take Trivial-multMagma ; ::_thesis: ( Trivial-multMagma is mult-cancelable & Trivial-multMagma is strict & Trivial-multMagma is 1 -element )
thus ( Trivial-multMagma is mult-cancelable & Trivial-multMagma is strict & Trivial-multMagma is 1 -element ) ; ::_thesis: verum
end;
end;
registration
let M be left_mult-cancelable multMagma ;
cluster -> left_mult-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is left_mult-cancelable by Def23;
end;
registration
let M be right_mult-cancelable multMagma ;
cluster -> right_mult-cancelable for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is right_mult-cancelable by Def24;
end;
definition
attrc1 is strict ;
struct multLoopStr -> OneStr , multMagma ;
aggrmultLoopStr(# carrier, multF, OneF #) -> multLoopStr ;
end;
registration
let D be non empty set ;
let o be BinOp of D;
let d be Element of D;
cluster multLoopStr(# D,o,d #) -> non empty ;
coherence
not multLoopStr(# D,o,d #) is empty ;
end;
registration
let T be trivial set ;
let f be BinOp of T;
let t be Element of T;
cluster multLoopStr(# T,f,t #) -> trivial ;
coherence
multLoopStr(# T,f,t #) is trivial ;
end;
registration
let N be non trivial set ;
let b be BinOp of N;
let m be Element of N;
cluster multLoopStr(# N,b,m #) -> non trivial ;
coherence
not multLoopStr(# N,b,m #) is trivial ;
end;
definition
func Trivial-multLoopStr -> multLoopStr equals :: ALGSTR_0:def 26
multLoopStr(# 1,op2,op0 #);
coherence
multLoopStr(# 1,op2,op0 #) is multLoopStr ;
end;
:: deftheorem defines Trivial-multLoopStr ALGSTR_0:def_26_:_
Trivial-multLoopStr = multLoopStr(# 1,op2,op0 #);
registration
cluster Trivial-multLoopStr -> 1 -element strict ;
coherence
( Trivial-multLoopStr is 1 -element & Trivial-multLoopStr is strict ) by CARD_1:49;
end;
registration
cluster1 -element strict for multLoopStr ;
existence
ex b1 being multLoopStr st
( b1 is strict & b1 is 1 -element )
proof
take Trivial-multLoopStr ; ::_thesis: ( Trivial-multLoopStr is strict & Trivial-multLoopStr is 1 -element )
thus ( Trivial-multLoopStr is strict & Trivial-multLoopStr is 1 -element ) ; ::_thesis: verum
end;
end;
registration
cluster Trivial-multLoopStr -> mult-cancelable ;
coherence
Trivial-multLoopStr is mult-cancelable
proof
set M = Trivial-multLoopStr ;
thus Trivial-multLoopStr is left_mult-cancelable :: according to ALGSTR_0:def_25 ::_thesis: Trivial-multLoopStr is right_mult-cancelable
proof
let x, y, z be Element of Trivial-multLoopStr; :: according to ALGSTR_0:def_20,ALGSTR_0:def_23 ::_thesis: ( x * y = x * z implies y = z )
assume x * y = x * z ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
let x, y, z be Element of Trivial-multLoopStr; :: according to ALGSTR_0:def_21,ALGSTR_0:def_24 ::_thesis: ( y * x = z * x implies y = z )
assume y * x = z * x ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
end;
definition
let M be multLoopStr ;
let x be Element of M;
attrx is left_invertible means :Def27: :: ALGSTR_0:def 27
ex y being Element of M st y * x = 1. M;
attrx is right_invertible means :: ALGSTR_0:def 28
ex y being Element of M st x * y = 1. M;
end;
:: deftheorem Def27 defines left_invertible ALGSTR_0:def_27_:_
for M being multLoopStr
for x being Element of M holds
( x is left_invertible iff ex y being Element of M st y * x = 1. M );
:: deftheorem defines right_invertible ALGSTR_0:def_28_:_
for M being multLoopStr
for x being Element of M holds
( x is right_invertible iff ex y being Element of M st x * y = 1. M );
definition
let M be multLoopStr ;
let x be Element of M;
attrx is invertible means :Def29: :: ALGSTR_0:def 29
( x is right_invertible & x is left_invertible );
end;
:: deftheorem Def29 defines invertible ALGSTR_0:def_29_:_
for M being multLoopStr
for x being Element of M holds
( x is invertible iff ( x is right_invertible & x is left_invertible ) );
registration
let M be multLoopStr ;
cluster left_invertible right_invertible -> invertible for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is right_invertible & b1 is left_invertible holds
b1 is invertible by Def29;
cluster invertible -> left_invertible right_invertible for Element of the carrier of M;
coherence
for b1 being Element of M st b1 is invertible holds
( b1 is right_invertible & b1 is left_invertible ) by Def29;
end;
definition
let M be multLoopStr ;
let x be Element of M;
assume A1: ( x is left_invertible & x is right_mult-cancelable ) ;
func / x -> Element of M means :: ALGSTR_0:def 30
it * x = 1. M;
existence
ex b1 being Element of M st b1 * x = 1. M by A1, Def27;
uniqueness
for b1, b2 being Element of M st b1 * x = 1. M & b2 * x = 1. M holds
b1 = b2 by A1, Def21;
end;
:: deftheorem defines / ALGSTR_0:def_30_:_
for M being multLoopStr
for x being Element of M st x is left_invertible & x is right_mult-cancelable holds
for b3 being Element of M holds
( b3 = / x iff b3 * x = 1. M );
definition
let M be multLoopStr ;
attrM is left_invertible means :Def31: :: ALGSTR_0:def 31
for x being Element of M holds x is left_invertible ;
attrM is right_invertible means :Def32: :: ALGSTR_0:def 32
for x being Element of M holds x is right_invertible ;
end;
:: deftheorem Def31 defines left_invertible ALGSTR_0:def_31_:_
for M being multLoopStr holds
( M is left_invertible iff for x being Element of M holds x is left_invertible );
:: deftheorem Def32 defines right_invertible ALGSTR_0:def_32_:_
for M being multLoopStr holds
( M is right_invertible iff for x being Element of M holds x is right_invertible );
definition
let M be multLoopStr ;
attrM is invertible means :Def33: :: ALGSTR_0:def 33
( M is right_invertible & M is left_invertible );
end;
:: deftheorem Def33 defines invertible ALGSTR_0:def_33_:_
for M being multLoopStr holds
( M is invertible iff ( M is right_invertible & M is left_invertible ) );
registration
cluster left_invertible right_invertible -> invertible for multLoopStr ;
coherence
for b1 being multLoopStr st b1 is right_invertible & b1 is left_invertible holds
b1 is invertible by Def33;
cluster invertible -> left_invertible right_invertible for multLoopStr ;
coherence
for b1 being multLoopStr st b1 is invertible holds
( b1 is right_invertible & b1 is left_invertible ) by Def33;
end;
registration
cluster Trivial-multLoopStr -> invertible ;
coherence
Trivial-multLoopStr is invertible
proof
set M = Trivial-multLoopStr ;
thus Trivial-multLoopStr is right_invertible :: according to ALGSTR_0:def_33 ::_thesis: Trivial-multLoopStr is left_invertible
proof
let x be Element of Trivial-multLoopStr; :: according to ALGSTR_0:def_32 ::_thesis: x is right_invertible
take x ; :: according to ALGSTR_0:def_28 ::_thesis: x * x = 1. Trivial-multLoopStr
thus x * x = 1. Trivial-multLoopStr by STRUCT_0:def_10; ::_thesis: verum
end;
let x be Element of Trivial-multLoopStr; :: according to ALGSTR_0:def_31 ::_thesis: x is left_invertible
take x ; :: according to ALGSTR_0:def_27 ::_thesis: x * x = 1. Trivial-multLoopStr
thus x * x = 1. Trivial-multLoopStr by STRUCT_0:def_10; ::_thesis: verum
end;
end;
registration
cluster1 -element mult-cancelable strict invertible for multLoopStr ;
existence
ex b1 being multLoopStr st
( b1 is invertible & b1 is mult-cancelable & b1 is strict & b1 is 1 -element )
proof
take Trivial-multLoopStr ; ::_thesis: ( Trivial-multLoopStr is invertible & Trivial-multLoopStr is mult-cancelable & Trivial-multLoopStr is strict & Trivial-multLoopStr is 1 -element )
thus ( Trivial-multLoopStr is invertible & Trivial-multLoopStr is mult-cancelable & Trivial-multLoopStr is strict & Trivial-multLoopStr is 1 -element ) ; ::_thesis: verum
end;
end;
registration
let M be left_invertible multLoopStr ;
cluster -> left_invertible for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is left_invertible by Def31;
end;
registration
let M be right_invertible multLoopStr ;
cluster -> right_invertible for Element of the carrier of M;
coherence
for b1 being Element of M holds b1 is right_invertible by Def32;
end;
begin
definition
attrc1 is strict ;
struct multLoopStr_0 -> multLoopStr , ZeroOneStr ;
aggrmultLoopStr_0(# carrier, multF, ZeroF, OneF #) -> multLoopStr_0 ;
end;
registration
let D be non empty set ;
let o be BinOp of D;
let d, e be Element of D;
cluster multLoopStr_0(# D,o,d,e #) -> non empty ;
coherence
not multLoopStr_0(# D,o,d,e #) is empty ;
end;
registration
let T be trivial set ;
let f be BinOp of T;
let s, t be Element of T;
cluster multLoopStr_0(# T,f,s,t #) -> trivial ;
coherence
multLoopStr_0(# T,f,s,t #) is trivial ;
end;
registration
let N be non trivial set ;
let b be BinOp of N;
let m, n be Element of N;
cluster multLoopStr_0(# N,b,m,n #) -> non trivial ;
coherence
not multLoopStr_0(# N,b,m,n #) is trivial ;
end;
definition
func Trivial-multLoopStr_0 -> multLoopStr_0 equals :: ALGSTR_0:def 34
multLoopStr_0(# 1,op2,op0,op0 #);
coherence
multLoopStr_0(# 1,op2,op0,op0 #) is multLoopStr_0 ;
end;
:: deftheorem defines Trivial-multLoopStr_0 ALGSTR_0:def_34_:_
Trivial-multLoopStr_0 = multLoopStr_0(# 1,op2,op0,op0 #);
registration
cluster Trivial-multLoopStr_0 -> 1 -element strict ;
coherence
( Trivial-multLoopStr_0 is 1 -element & Trivial-multLoopStr_0 is strict ) by CARD_1:49;
end;
registration
cluster1 -element strict for multLoopStr_0 ;
existence
ex b1 being multLoopStr_0 st
( b1 is strict & b1 is 1 -element )
proof
take Trivial-multLoopStr_0 ; ::_thesis: ( Trivial-multLoopStr_0 is strict & Trivial-multLoopStr_0 is 1 -element )
thus ( Trivial-multLoopStr_0 is strict & Trivial-multLoopStr_0 is 1 -element ) ; ::_thesis: verum
end;
end;
definition
let M be multLoopStr_0 ;
let x be Element of M;
funcx " -> Element of M means :: ALGSTR_0:def 35
it * x = 1. M if ( x is left_invertible & x is right_mult-cancelable )
otherwise it = 0. M;
existence
( ( x is left_invertible & x is right_mult-cancelable implies ex b1 being Element of M st b1 * x = 1. M ) & ( ( not x is left_invertible or not x is right_mult-cancelable ) implies ex b1 being Element of M st b1 = 0. M ) ) by Def27;
uniqueness
for b1, b2 being Element of M holds
( ( x is left_invertible & x is right_mult-cancelable & b1 * x = 1. M & b2 * x = 1. M implies b1 = b2 ) & ( ( not x is left_invertible or not x is right_mult-cancelable ) & b1 = 0. M & b2 = 0. M implies b1 = b2 ) ) by Def21;
consistency
for b1 being Element of M holds verum ;
end;
:: deftheorem defines " ALGSTR_0:def_35_:_
for M being multLoopStr_0
for x, b3 being Element of M holds
( ( x is left_invertible & x is right_mult-cancelable implies ( b3 = x " iff b3 * x = 1. M ) ) & ( ( not x is left_invertible or not x is right_mult-cancelable ) implies ( b3 = x " iff b3 = 0. M ) ) );
definition
let M be multLoopStr_0 ;
attrM is almost_left_cancelable means :: ALGSTR_0:def 36
for x being Element of M st x <> 0. M holds
x is left_mult-cancelable ;
attrM is almost_right_cancelable means :: ALGSTR_0:def 37
for x being Element of M st x <> 0. M holds
x is right_mult-cancelable ;
end;
:: deftheorem defines almost_left_cancelable ALGSTR_0:def_36_:_
for M being multLoopStr_0 holds
( M is almost_left_cancelable iff for x being Element of M st x <> 0. M holds
x is left_mult-cancelable );
:: deftheorem defines almost_right_cancelable ALGSTR_0:def_37_:_
for M being multLoopStr_0 holds
( M is almost_right_cancelable iff for x being Element of M st x <> 0. M holds
x is right_mult-cancelable );
definition
let M be multLoopStr_0 ;
attrM is almost_cancelable means :Def38: :: ALGSTR_0:def 38
( M is almost_left_cancelable & M is almost_right_cancelable );
end;
:: deftheorem Def38 defines almost_cancelable ALGSTR_0:def_38_:_
for M being multLoopStr_0 holds
( M is almost_cancelable iff ( M is almost_left_cancelable & M is almost_right_cancelable ) );
registration
cluster almost_left_cancelable almost_right_cancelable -> almost_cancelable for multLoopStr_0 ;
coherence
for b1 being multLoopStr_0 st b1 is almost_right_cancelable & b1 is almost_left_cancelable holds
b1 is almost_cancelable by Def38;
cluster almost_cancelable -> almost_left_cancelable almost_right_cancelable for multLoopStr_0 ;
coherence
for b1 being multLoopStr_0 st b1 is almost_cancelable holds
( b1 is almost_right_cancelable & b1 is almost_left_cancelable ) by Def38;
end;
registration
cluster Trivial-multLoopStr_0 -> almost_cancelable ;
coherence
Trivial-multLoopStr_0 is almost_cancelable
proof
set M = Trivial-multLoopStr_0 ;
thus Trivial-multLoopStr_0 is almost_left_cancelable :: according to ALGSTR_0:def_38 ::_thesis: Trivial-multLoopStr_0 is almost_right_cancelable
proof
let x be Element of Trivial-multLoopStr_0; :: according to ALGSTR_0:def_36 ::_thesis: ( x <> 0. Trivial-multLoopStr_0 implies x is left_mult-cancelable )
assume x <> 0. Trivial-multLoopStr_0 ; ::_thesis: x is left_mult-cancelable
let y, z be Element of Trivial-multLoopStr_0; :: according to ALGSTR_0:def_20 ::_thesis: ( x * y = x * z implies y = z )
assume x * y = x * z ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
let x be Element of Trivial-multLoopStr_0; :: according to ALGSTR_0:def_37 ::_thesis: ( x <> 0. Trivial-multLoopStr_0 implies x is right_mult-cancelable )
assume x <> 0. Trivial-multLoopStr_0 ; ::_thesis: x is right_mult-cancelable
let y, z be Element of Trivial-multLoopStr_0; :: according to ALGSTR_0:def_21 ::_thesis: ( y * x = z * x implies y = z )
assume y * x = z * x ; ::_thesis: y = z
thus y = z by STRUCT_0:def_10; ::_thesis: verum
end;
end;
registration
cluster1 -element strict almost_cancelable for multLoopStr_0 ;
existence
ex b1 being multLoopStr_0 st
( b1 is almost_cancelable & b1 is strict & b1 is 1 -element )
proof
take Trivial-multLoopStr_0 ; ::_thesis: ( Trivial-multLoopStr_0 is almost_cancelable & Trivial-multLoopStr_0 is strict & Trivial-multLoopStr_0 is 1 -element )
thus ( Trivial-multLoopStr_0 is almost_cancelable & Trivial-multLoopStr_0 is strict & Trivial-multLoopStr_0 is 1 -element ) ; ::_thesis: verum
end;
end;
definition
let M be multLoopStr_0 ;
attrM is almost_left_invertible means :: ALGSTR_0:def 39
for x being Element of M st x <> 0. M holds
x is left_invertible ;
attrM is almost_right_invertible means :: ALGSTR_0:def 40
for x being Element of M st x <> 0. M holds
x is right_invertible ;
end;
:: deftheorem defines almost_left_invertible ALGSTR_0:def_39_:_
for M being multLoopStr_0 holds
( M is almost_left_invertible iff for x being Element of M st x <> 0. M holds
x is left_invertible );
:: deftheorem defines almost_right_invertible ALGSTR_0:def_40_:_
for M being multLoopStr_0 holds
( M is almost_right_invertible iff for x being Element of M st x <> 0. M holds
x is right_invertible );
definition
let M be multLoopStr_0 ;
attrM is almost_invertible means :Def41: :: ALGSTR_0:def 41
( M is almost_right_invertible & M is almost_left_invertible );
end;
:: deftheorem Def41 defines almost_invertible ALGSTR_0:def_41_:_
for M being multLoopStr_0 holds
( M is almost_invertible iff ( M is almost_right_invertible & M is almost_left_invertible ) );
registration
cluster almost_left_invertible almost_right_invertible -> almost_invertible for multLoopStr_0 ;
coherence
for b1 being multLoopStr_0 st b1 is almost_right_invertible & b1 is almost_left_invertible holds
b1 is almost_invertible by Def41;
cluster almost_invertible -> almost_left_invertible almost_right_invertible for multLoopStr_0 ;
coherence
for b1 being multLoopStr_0 st b1 is almost_invertible holds
( b1 is almost_right_invertible & b1 is almost_left_invertible ) by Def41;
end;
registration
cluster Trivial-multLoopStr_0 -> almost_invertible ;
coherence
Trivial-multLoopStr_0 is almost_invertible
proof
set M = Trivial-multLoopStr_0 ;
thus Trivial-multLoopStr_0 is almost_right_invertible :: according to ALGSTR_0:def_41 ::_thesis: Trivial-multLoopStr_0 is almost_left_invertible
proof
let x be Element of Trivial-multLoopStr_0; :: according to ALGSTR_0:def_40 ::_thesis: ( x <> 0. Trivial-multLoopStr_0 implies x is right_invertible )
assume x <> 0. Trivial-multLoopStr_0 ; ::_thesis: x is right_invertible
take x ; :: according to ALGSTR_0:def_28 ::_thesis: x * x = 1. Trivial-multLoopStr_0
thus x * x = 1. Trivial-multLoopStr_0 by STRUCT_0:def_10; ::_thesis: verum
end;
let x be Element of Trivial-multLoopStr_0; :: according to ALGSTR_0:def_39 ::_thesis: ( x <> 0. Trivial-multLoopStr_0 implies x is left_invertible )
assume x <> 0. Trivial-multLoopStr_0 ; ::_thesis: x is left_invertible
take x ; :: according to ALGSTR_0:def_27 ::_thesis: x * x = 1. Trivial-multLoopStr_0
thus x * x = 1. Trivial-multLoopStr_0 by STRUCT_0:def_10; ::_thesis: verum
end;
end;
registration
cluster1 -element strict almost_cancelable almost_invertible for multLoopStr_0 ;
existence
ex b1 being multLoopStr_0 st
( b1 is almost_invertible & b1 is almost_cancelable & b1 is strict & b1 is 1 -element )
proof
take Trivial-multLoopStr_0 ; ::_thesis: ( Trivial-multLoopStr_0 is almost_invertible & Trivial-multLoopStr_0 is almost_cancelable & Trivial-multLoopStr_0 is strict & Trivial-multLoopStr_0 is 1 -element )
thus ( Trivial-multLoopStr_0 is almost_invertible & Trivial-multLoopStr_0 is almost_cancelable & Trivial-multLoopStr_0 is strict & Trivial-multLoopStr_0 is 1 -element ) ; ::_thesis: verum
end;
end;
begin
definition
attrc1 is strict ;
struct doubleLoopStr -> addLoopStr , multLoopStr_0 ;
aggrdoubleLoopStr(# carrier, addF, multF, OneF, ZeroF #) -> doubleLoopStr ;
end;
registration
let D be non empty set ;
let o, o1 be BinOp of D;
let d, e be Element of D;
cluster doubleLoopStr(# D,o,o1,d,e #) -> non empty ;
coherence
not doubleLoopStr(# D,o,o1,d,e #) is empty ;
end;
registration
let T be trivial set ;
let f, f1 be BinOp of T;
let s, t be Element of T;
cluster doubleLoopStr(# T,f,f1,s,t #) -> trivial ;
coherence
doubleLoopStr(# T,f,f1,s,t #) is trivial ;
end;
registration
let N be non trivial set ;
let b, b1 be BinOp of N;
let m, n be Element of N;
cluster doubleLoopStr(# N,b,b1,m,n #) -> non trivial ;
coherence
not doubleLoopStr(# N,b,b1,m,n #) is trivial ;
end;
definition
func Trivial-doubleLoopStr -> doubleLoopStr equals :: ALGSTR_0:def 42
doubleLoopStr(# 1,op2,op2,op0,op0 #);
coherence
doubleLoopStr(# 1,op2,op2,op0,op0 #) is doubleLoopStr ;
end;
:: deftheorem defines Trivial-doubleLoopStr ALGSTR_0:def_42_:_
Trivial-doubleLoopStr = doubleLoopStr(# 1,op2,op2,op0,op0 #);
registration
cluster Trivial-doubleLoopStr -> 1 -element strict ;
coherence
( Trivial-doubleLoopStr is 1 -element & Trivial-doubleLoopStr is strict ) by CARD_1:49;
end;
registration
cluster1 -element strict for doubleLoopStr ;
existence
ex b1 being doubleLoopStr st
( b1 is strict & b1 is 1 -element )
proof
take Trivial-doubleLoopStr ; ::_thesis: ( Trivial-doubleLoopStr is strict & Trivial-doubleLoopStr is 1 -element )
thus ( Trivial-doubleLoopStr is strict & Trivial-doubleLoopStr is 1 -element ) ; ::_thesis: verum
end;
end;