:: GROUP_1 semantic presentation

definition
attr a1 is strict;
struct HGrStr -> 1-sorted ;
aggr HGrStr(# carrier, mult #) -> HGrStr ;
sel mult c1 -> BinOp of the carrier of a1;
end;

registration
cluster non empty strict HGrStr ;
existence
ex b1 being HGrStr st
( not b1 is empty & b1 is strict )
proof end;
end;

definition
let c1 be non empty HGrStr ;
let c2, c3 be Element of c1;
func c2 * c3 -> Element of a1 equals :: GROUP_1:def 1
the mult of a1 . a2,a3;
coherence
the mult of c1 . c2,c3 is Element of c1
;
end;

:: deftheorem Def1 defines * GROUP_1:def 1 :
for b1 being non empty HGrStr
for b2, b3 being Element of b1 holds b2 * b3 = the mult of b1 . b2,b3;

registration
let c1 be non empty set ;
let c2 be BinOp of c1;
cluster HGrStr(# a1,a2 #) -> non empty ;
coherence
not HGrStr(# c1,c2 #) is empty
by STRUCT_0:def 1;
end;

E1: now
set c1 = HGrStr(# REAL ,addreal #);
E2: for b1, b2 being Element of HGrStr(# REAL ,addreal #)
for b3, b4 being Real st b1 = b3 & b2 = b4 holds
b1 * b2 = b3 + b4 by BINOP_2:def 9;
thus for b1, b2, b3 being Element of HGrStr(# REAL ,addreal #) holds (b1 * b2) * b3 = b1 * (b2 * b3)
proof
let c2, c3, c4 be Element of HGrStr(# REAL ,addreal #);
reconsider c5 = c2, c6 = c3, c7 = c4 as Real ;
E3: c2 * c3 = c5 + c6 by E2;
E4: c3 * c4 = c6 + c7 by E2;
thus (c2 * c3) * c4 = (c5 + c6) + c7 by E2, E3
.= c5 + (c6 + c7)
.= c2 * (c3 * c4) by E2, E4 ;
end;
reconsider c2 = 0 as Element of HGrStr(# REAL ,addreal #) ;
take c3 = c2;
let c4 be Element of HGrStr(# REAL ,addreal #);
reconsider c5 = c4 as Real ;
thus c4 * c3 = c5 + 0 by E2
.= c4 ;
thus c3 * c4 = 0 + c5 by E2
.= c4 ;
reconsider c6 = - c5 as Element of HGrStr(# REAL ,addreal #) ;
take c7 = c6;
thus c4 * c7 = c5 + (- c5) by E2
.= c3 ;
thus c7 * c4 = (- c5) + c5 by E2
.= c3 ;
end;

definition
let c1 be non empty HGrStr ;
attr a1 is unital means :Def2: :: GROUP_1:def 2
ex b1 being Element of a1 st
for b2 being Element of a1 holds
( b2 * b1 = b2 & b1 * b2 = b2 );
attr a1 is Group-like means :Def3: :: GROUP_1:def 3
ex b1 being Element of a1 st
for b2 being Element of a1 holds
( b2 * b1 = b2 & b1 * b2 = b2 & ex b3 being Element of a1 st
( b2 * b3 = b1 & b3 * b2 = b1 ) );
attr a1 is associative means :Def4: :: GROUP_1:def 4
for b1, b2, b3 being Element of a1 holds (b1 * b2) * b3 = b1 * (b2 * b3);
end;

:: deftheorem Def2 defines unital GROUP_1:def 2 :
for b1 being non empty HGrStr holds
( b1 is unital iff ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b3 * b2 = b3 & b2 * b3 = b3 ) );

:: deftheorem Def3 defines Group-like GROUP_1:def 3 :
for b1 being non empty HGrStr holds
( b1 is Group-like iff ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b3 * b2 = b3 & b2 * b3 = b3 & ex b4 being Element of b1 st
( b3 * b4 = b2 & b4 * b3 = b2 ) ) );

:: deftheorem Def4 defines associative GROUP_1:def 4 :
for b1 being non empty HGrStr holds
( b1 is associative iff for b2, b3, b4 being Element of b1 holds (b2 * b3) * b4 = b2 * (b3 * b4) );

registration
cluster non empty Group-like -> non empty unital HGrStr ;
coherence
for b1 being non empty HGrStr st b1 is Group-like holds
b1 is unital
proof end;
end;

registration
cluster non empty strict unital Group-like associative HGrStr ;
existence
ex b1 being non empty HGrStr st
( b1 is strict & b1 is Group-like & b1 is associative )
proof end;
end;

definition
mode Group is non empty Group-like associative HGrStr ;
end;

theorem Th1: :: GROUP_1:1
canceled;

theorem Th2: :: GROUP_1:2
canceled;

theorem Th3: :: GROUP_1:3
canceled;

theorem Th4: :: GROUP_1:4
canceled;

theorem Th5: :: GROUP_1:5
for b1 being non empty HGrStr st ( for b2, b3, b4 being Element of b1 holds (b2 * b3) * b4 = b2 * (b3 * b4) ) & ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b3 * b2 = b3 & b2 * b3 = b3 & ex b4 being Element of b1 st
( b3 * b4 = b2 & b4 * b3 = b2 ) ) holds
b1 is Group by Def3, Def4;

theorem Th6: :: GROUP_1:6
for b1 being non empty HGrStr st ( for b2, b3, b4 being Element of b1 holds (b2 * b3) * b4 = b2 * (b3 * b4) ) & ( for b2, b3 being Element of b1 holds
( ex b4 being Element of b1 st b2 * b4 = b3 & ex b4 being Element of b1 st b4 * b2 = b3 ) ) holds
( b1 is associative & b1 is Group-like )
proof end;

theorem Th7: :: GROUP_1:7
( HGrStr(# REAL ,addreal #) is associative & HGrStr(# REAL ,addreal #) is Group-like )
proof end;

definition
let c1 be non empty HGrStr ;
assume E6: c1 is unital ;
func 1. c1 -> Element of a1 means :Def5: :: GROUP_1:def 5
for b1 being Element of a1 holds
( b1 * a2 = b1 & a2 * b1 = b1 );
existence
ex b1 being Element of c1 st
for b2 being Element of c1 holds
( b2 * b1 = b2 & b1 * b2 = b2 )
by E6, Def2;
uniqueness
for b1, b2 being Element of c1 st ( for b3 being Element of c1 holds
( b3 * b1 = b3 & b1 * b3 = b3 ) ) & ( for b3 being Element of c1 holds
( b3 * b2 = b3 & b2 * b3 = b3 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines 1. GROUP_1:def 5 :
for b1 being non empty HGrStr st b1 is unital holds
for b2 being Element of b1 holds
( b2 = 1. b1 iff for b3 being Element of b1 holds
( b3 * b2 = b3 & b2 * b3 = b3 ) );

theorem Th8: :: GROUP_1:8
canceled;

theorem Th9: :: GROUP_1:9
canceled;

theorem Th10: :: GROUP_1:10
for b1 being non empty Group-like HGrStr
for b2 being Element of b1 st ( for b3 being Element of b1 holds
( b3 * b2 = b3 & b2 * b3 = b3 ) ) holds
b2 = 1. b1 by Def5;

definition
let c1 be Group;
let c2 be Element of c1;
func c2 " -> Element of a1 means :Def6: :: GROUP_1:def 6
( a2 * a3 = 1. a1 & a3 * a2 = 1. a1 );
existence
ex b1 being Element of c1 st
( c2 * b1 = 1. c1 & b1 * c2 = 1. c1 )
proof end;
uniqueness
for b1, b2 being Element of c1 st c2 * b1 = 1. c1 & b1 * c2 = 1. c1 & c2 * b2 = 1. c1 & b2 * c2 = 1. c1 holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines " GROUP_1:def 6 :
for b1 being Group
for b2, b3 being Element of b1 holds
( b3 = b2 " iff ( b2 * b3 = 1. b1 & b3 * b2 = 1. b1 ) );

theorem Th11: :: GROUP_1:11
canceled;

theorem Th12: :: GROUP_1:12
for b1 being Group
for b2, b3 being Element of b1 st b2 * b3 = 1. b1 & b3 * b2 = 1. b1 holds
b3 = b2 " by Def6;

theorem Th13: :: GROUP_1:13
canceled;

theorem Th14: :: GROUP_1:14
for b1 being Group
for b2, b3, b4 being Element of b1 st ( b2 * b3 = b2 * b4 or b3 * b2 = b4 * b2 ) holds
b3 = b4
proof end;

theorem Th15: :: GROUP_1:15
for b1 being Group
for b2, b3 being Element of b1 st ( b2 * b3 = b2 or b3 * b2 = b2 ) holds
b3 = 1. b1
proof end;

theorem Th16: :: GROUP_1:16
for b1 being Group holds (1. b1) " = 1. b1
proof end;

theorem Th17: :: GROUP_1:17
for b1 being Group
for b2, b3 being Element of b1 st b2 " = b3 " holds
b2 = b3
proof end;

theorem Th18: :: GROUP_1:18
for b1 being Group
for b2 being Element of b1 st b2 " = 1. b1 holds
b2 = 1. b1
proof end;

theorem Th19: :: GROUP_1:19
for b1 being Group
for b2 being Element of b1 holds (b2 " ) " = b2
proof end;

theorem Th20: :: GROUP_1:20
for b1 being Group
for b2, b3 being Element of b1 st ( b2 * b3 = 1. b1 or b3 * b2 = 1. b1 ) holds
( b2 = b3 " & b3 = b2 " )
proof end;

theorem Th21: :: GROUP_1:21
for b1 being Group
for b2, b3, b4 being Element of b1 holds
( b2 * b3 = b4 iff b3 = (b2 " ) * b4 )
proof end;

theorem Th22: :: GROUP_1:22
for b1 being Group
for b2, b3, b4 being Element of b1 holds
( b2 * b3 = b4 iff b2 = b4 * (b3 " ) )
proof end;

theorem Th23: :: GROUP_1:23
for b1 being Group
for b2, b3 being Element of b1 ex b4 being Element of b1 st b2 * b4 = b3
proof end;

theorem Th24: :: GROUP_1:24
for b1 being Group
for b2, b3 being Element of b1 ex b4 being Element of b1 st b4 * b2 = b3
proof end;

theorem Th25: :: GROUP_1:25
for b1 being Group
for b2, b3 being Element of b1 holds (b2 * b3) " = (b3 " ) * (b2 " )
proof end;

theorem Th26: :: GROUP_1:26
for b1 being Group
for b2, b3 being Element of b1 holds
( b2 * b3 = b3 * b2 iff (b2 * b3) " = (b2 " ) * (b3 " ) )
proof end;

theorem Th27: :: GROUP_1:27
for b1 being Group
for b2, b3 being Element of b1 holds
( b2 * b3 = b3 * b2 iff (b2 " ) * (b3 " ) = (b3 " ) * (b2 " ) )
proof end;

theorem Th28: :: GROUP_1:28
for b1 being Group
for b2, b3 being Element of b1 holds
( b2 * b3 = b3 * b2 iff b2 * (b3 " ) = (b3 " ) * b2 )
proof end;

definition
let c1 be Group;
func inverse_op c1 -> UnOp of the carrier of a1 means :Def7: :: GROUP_1:def 7
for b1 being Element of a1 holds a2 . b1 = b1 " ;
existence
ex b1 being UnOp of the carrier of c1 st
for b2 being Element of c1 holds b1 . b2 = b2 "
proof end;
uniqueness
for b1, b2 being UnOp of the carrier of c1 st ( for b3 being Element of c1 holds b1 . b3 = b3 " ) & ( for b3 being Element of c1 holds b2 . b3 = b3 " ) holds
b1 = b2
proof end;
end;

:: deftheorem Def7 defines inverse_op GROUP_1:def 7 :
for b1 being Group
for b2 being UnOp of the carrier of b1 holds
( b2 = inverse_op b1 iff for b3 being Element of b1 holds b2 . b3 = b3 " );

theorem Th29: :: GROUP_1:29
canceled;

theorem Th30: :: GROUP_1:30
canceled;

theorem Th31: :: GROUP_1:31
for b1 being non empty associative HGrStr holds the mult of b1 is associative
proof end;

theorem Th32: :: GROUP_1:32
for b1 being non empty unital HGrStr holds 1. b1 is_a_unity_wrt the mult of b1
proof end;

theorem Th33: :: GROUP_1:33
for b1 being non empty unital HGrStr holds the_unity_wrt the mult of b1 = 1. b1
proof end;

theorem Th34: :: GROUP_1:34
for b1 being non empty unital HGrStr holds the mult of b1 has_a_unity
proof end;

theorem Th35: :: GROUP_1:35
for b1 being Group holds inverse_op b1 is_an_inverseOp_wrt the mult of b1
proof end;

theorem Th36: :: GROUP_1:36
for b1 being Group holds the mult of b1 has_an_inverseOp
proof end;

theorem Th37: :: GROUP_1:37
for b1 being Group holds the_inverseOp_wrt the mult of b1 = inverse_op b1
proof end;

definition
let c1 be non empty HGrStr ;
func power c1 -> Function of [:the carrier of a1,NAT :],the carrier of a1 means :Def8: :: GROUP_1:def 8
for b1 being Element of a1 holds
( a2 . b1,0 = 1. a1 & ( for b2 being Nat holds a2 . b1,(b2 + 1) = (a2 . b1,b2) * b1 ) );
existence
ex b1 being Function of [:the carrier of c1,NAT :],the carrier of c1 st
for b2 being Element of c1 holds
( b1 . b2,0 = 1. c1 & ( for b3 being Nat holds b1 . b2,(b3 + 1) = (b1 . b2,b3) * b2 ) )
proof end;
uniqueness
for b1, b2 being Function of [:the carrier of c1,NAT :],the carrier of c1 st ( for b3 being Element of c1 holds
( b1 . b3,0 = 1. c1 & ( for b4 being Nat holds b1 . b3,(b4 + 1) = (b1 . b3,b4) * b3 ) ) ) & ( for b3 being Element of c1 holds
( b2 . b3,0 = 1. c1 & ( for b4 being Nat holds b2 . b3,(b4 + 1) = (b2 . b3,b4) * b3 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines power GROUP_1:def 8 :
for b1 being non empty HGrStr
for b2 being Function of [:the carrier of b1,NAT :],the carrier of b1 holds
( b2 = power b1 iff for b3 being Element of b1 holds
( b2 . b3,0 = 1. b1 & ( for b4 being Nat holds b2 . b3,(b4 + 1) = (b2 . b3,b4) * b3 ) ) );

definition
let c1 be Group;
let c2 be Integer;
let c3 be Element of c1;
func c3 |^ c2 -> Element of a1 equals :Def9: :: GROUP_1:def 9
(power a1) . a3,(abs a2) if 0 <= a2
otherwise ((power a1) . a3,(abs a2)) " ;
correctness
coherence
( ( 0 <= c2 implies (power c1) . c3,(abs c2) is Element of c1 ) & ( not 0 <= c2 implies ((power c1) . c3,(abs c2)) " is Element of c1 ) )
;
consistency
for b1 being Element of c1 holds verum
;
;
end;

:: deftheorem Def9 defines |^ GROUP_1:def 9 :
for b1 being Group
for b2 being Integer
for b3 being Element of b1 holds
( ( 0 <= b2 implies b3 |^ b2 = (power b1) . b3,(abs b2) ) & ( not 0 <= b2 implies b3 |^ b2 = ((power b1) . b3,(abs b2)) " ) );

definition
let c1 be Group;
let c2 be Nat;
let c3 be Element of c1;
redefine func c3 |^ c2 -> Element of a1 equals :: GROUP_1:def 10
(power a1) . a3,a2;
compatibility
for b1 being Element of c1 holds
( b1 = c3 |^ c2 iff b1 = (power c1) . c3,c2 )
proof end;
end;

:: deftheorem Def10 defines |^ GROUP_1:def 10 :
for b1 being Group
for b2 being Nat
for b3 being Element of b1 holds b3 |^ b2 = (power b1) . b3,b2;

Lemma28: for b1 being Nat
for b2 being Group
for b3 being Element of b2 holds b3 |^ (b1 + 1) = (b3 |^ b1) * b3
by Def8;

Lemma29: for b1 being Group
for b2 being Element of b1 holds b2 |^ 0 = 1. b1
by Def8;

theorem Th38: :: GROUP_1:38
canceled;

theorem Th39: :: GROUP_1:39
canceled;

theorem Th40: :: GROUP_1:40
canceled;

theorem Th41: :: GROUP_1:41
canceled;

theorem Th42: :: GROUP_1:42
for b1 being Nat
for b2 being Group holds (1. b2) |^ b1 = 1. b2
proof end;

theorem Th43: :: GROUP_1:43
for b1 being Group
for b2 being Element of b1 holds b2 |^ 0 = 1. b1 by Lemma29;

theorem Th44: :: GROUP_1:44
for b1 being Group
for b2 being Element of b1 holds b2 |^ 1 = b2
proof end;

theorem Th45: :: GROUP_1:45
for b1 being Group
for b2 being Element of b1 holds b2 |^ 2 = b2 * b2
proof end;

theorem Th46: :: GROUP_1:46
for b1 being Group
for b2 being Element of b1 holds b2 |^ 3 = (b2 * b2) * b2
proof end;

theorem Th47: :: GROUP_1:47
for b1 being Group
for b2 being Element of b1 holds
( b2 |^ 2 = 1. b1 iff b2 " = b2 )
proof end;

theorem Th48: :: GROUP_1:48
for b1, b2 being Nat
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b1 + b2) = (b4 |^ b1) * (b4 |^ b2)
proof end;

theorem Th49: :: GROUP_1:49
for b1 being Nat
for b2 being Group
for b3 being Element of b2 holds
( b3 |^ (b1 + 1) = (b3 |^ b1) * b3 & b3 |^ (b1 + 1) = b3 * (b3 |^ b1) )
proof end;

theorem Th50: :: GROUP_1:50
for b1, b2 being Nat
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b1 * b2) = (b4 |^ b1) |^ b2
proof end;

theorem Th51: :: GROUP_1:51
for b1 being Nat
for b2 being Group
for b3 being Element of b2 holds (b3 " ) |^ b1 = (b3 |^ b1) "
proof end;

theorem Th52: :: GROUP_1:52
for b1 being Nat
for b2 being Group
for b3, b4 being Element of b2 st b3 * b4 = b4 * b3 holds
b3 * (b4 |^ b1) = (b4 |^ b1) * b3
proof end;

theorem Th53: :: GROUP_1:53
for b1, b2 being Nat
for b3 being Group
for b4, b5 being Element of b3 st b4 * b5 = b5 * b4 holds
(b4 |^ b1) * (b5 |^ b2) = (b5 |^ b2) * (b4 |^ b1)
proof end;

theorem Th54: :: GROUP_1:54
for b1 being Nat
for b2 being Group
for b3, b4 being Element of b2 st b3 * b4 = b4 * b3 holds
(b3 * b4) |^ b1 = (b3 |^ b1) * (b4 |^ b1)
proof end;

theorem Th55: :: GROUP_1:55
for b1 being Integer
for b2 being Group
for b3 being Element of b2 st 0 <= b1 holds
b3 |^ b1 = b3 |^ (abs b1) by Def9;

theorem Th56: :: GROUP_1:56
for b1 being Integer
for b2 being Group
for b3 being Element of b2 st not 0 <= b1 holds
b3 |^ b1 = (b3 |^ (abs b1)) " by Def9;

theorem Th57: :: GROUP_1:57
canceled;

theorem Th58: :: GROUP_1:58
canceled;

theorem Th59: :: GROUP_1:59
for b1 being Integer
for b2 being Group
for b3 being Element of b2 st b1 = 0 holds
b3 |^ b1 = 1. b2 by Lemma29;

theorem Th60: :: GROUP_1:60
for b1 being Integer
for b2 being Group
for b3 being Element of b2 st b1 <= 0 holds
b3 |^ b1 = (b3 |^ (abs b1)) "
proof end;

theorem Th61: :: GROUP_1:61
for b1 being Integer
for b2 being Group holds (1. b2) |^ b1 = 1. b2
proof end;

theorem Th62: :: GROUP_1:62
for b1 being Group
for b2 being Element of b1 holds b2 |^ (- 1) = b2 "
proof end;

Lemma44: for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds b3 |^ (- b1) = (b3 |^ b1) "
proof end;

Lemma45: for b1 being Integer holds
( b1 >= 1 or b1 = 0 or b1 < 0 )
proof end;

Lemma46: for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds b3 |^ (b1 - 1) = (b3 |^ b1) * (b3 |^ (- 1))
proof end;

Lemma47: for b1 being Integer holds
( b1 >= 0 or b1 = - 1 or b1 < - 1 )
proof end;

Lemma48: for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds b3 |^ (b1 + 1) = (b3 |^ b1) * (b3 |^ 1)
proof end;

theorem Th63: :: GROUP_1:63
for b1, b2 being Integer
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b1 + b2) = (b4 |^ b1) * (b4 |^ b2)
proof end;

theorem Th64: :: GROUP_1:64
for b1 being Nat
for b2 being Integer
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b1 + b2) = (b4 |^ b1) * (b4 |^ b2) by Th63;

theorem Th65: :: GROUP_1:65
for b1 being Nat
for b2 being Integer
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b2 + b1) = (b4 |^ b2) * (b4 |^ b1) by Th63;

theorem Th66: :: GROUP_1:66
for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds
( b3 |^ (b1 + 1) = (b3 |^ b1) * b3 & b3 |^ (b1 + 1) = b3 * (b3 |^ b1) )
proof end;

Lemma50: for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds (b3 " ) |^ b1 = (b3 |^ b1) "
proof end;

theorem Th67: :: GROUP_1:67
for b1, b2 being Integer
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b1 * b2) = (b4 |^ b1) |^ b2
proof end;

theorem Th68: :: GROUP_1:68
for b1 being Nat
for b2 being Integer
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b1 * b2) = (b4 |^ b1) |^ b2 by Th67;

theorem Th69: :: GROUP_1:69
for b1 being Nat
for b2 being Integer
for b3 being Group
for b4 being Element of b3 holds b4 |^ (b2 * b1) = (b4 |^ b2) |^ b1 by Th67;

theorem Th70: :: GROUP_1:70
for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds b3 |^ (- b1) = (b3 |^ b1) " by Lemma44;

theorem Th71: :: GROUP_1:71
for b1 being Nat
for b2 being Group
for b3 being Element of b2 holds b3 |^ (- b1) = (b3 |^ b1) " by Lemma44;

theorem Th72: :: GROUP_1:72
for b1 being Integer
for b2 being Group
for b3 being Element of b2 holds (b3 " ) |^ b1 = (b3 |^ b1) " by Lemma50;

theorem Th73: :: GROUP_1:73
for b1 being Integer
for b2 being Group
for b3, b4 being Element of b2 st b3 * b4 = b4 * b3 holds
(b3 * b4) |^ b1 = (b3 |^ b1) * (b4 |^ b1)
proof end;

theorem Th74: :: GROUP_1:74
for b1, b2 being Integer
for b3 being Group
for b4, b5 being Element of b3 st b4 * b5 = b5 * b4 holds
(b4 |^ b1) * (b5 |^ b2) = (b5 |^ b2) * (b4 |^ b1)
proof end;

theorem Th75: :: GROUP_1:75
for b1 being Nat
for b2 being Integer
for b3 being Group
for b4, b5 being Element of b3 st b4 * b5 = b5 * b4 holds
(b4 |^ b1) * (b5 |^ b2) = (b5 |^ b2) * (b4 |^ b1) by Th74;

theorem Th76: :: GROUP_1:76
canceled;

theorem Th77: :: GROUP_1:77
for b1 being Integer
for b2 being Group
for b3, b4 being Element of b2 st b3 * b4 = b4 * b3 holds
b3 * (b4 |^ b1) = (b4 |^ b1) * b3
proof end;

definition
let c1 be Group;
let c2 be Element of c1;
attr a2 is being_of_order_0 means :Def11: :: GROUP_1:def 11
for b1 being Nat st a2 |^ b1 = 1. a1 holds
b1 = 0;
end;

:: deftheorem Def11 defines being_of_order_0 GROUP_1:def 11 :
for b1 being Group
for b2 being Element of b1 holds
( b2 is being_of_order_0 iff for b3 being Nat st b2 |^ b3 = 1. b1 holds
b3 = 0 );

notation
let c1 be Group;
let c2 be Element of c1;
antonym c2 is_not_of_order_0 for being_of_order_0 c2;
synonym c2 is_of_order_0 for being_of_order_0 c2;
end;

theorem Th78: :: GROUP_1:78
canceled;

theorem Th79: :: GROUP_1:79
for b1 being Group holds 1. b1 is_not_of_order_0
proof end;

definition
let c1 be Group;
let c2 be Element of c1;
func ord c2 -> Nat means :Def12: :: GROUP_1:def 12
a3 = 0 if a2 is_of_order_0
otherwise ( a2 |^ a3 = 1. a1 & a3 <> 0 & ( for b1 being Nat st a2 |^ b1 = 1. a1 & b1 <> 0 holds
a3 <= b1 ) );
existence
( ( c2 is_of_order_0 implies ex b1 being Nat st b1 = 0 ) & ( not c2 is_of_order_0 implies ex b1 being Nat st
( c2 |^ b1 = 1. c1 & b1 <> 0 & ( for b2 being Nat st c2 |^ b2 = 1. c1 & b2 <> 0 holds
b1 <= b2 ) ) ) )
proof end;
uniqueness
for b1, b2 being Nat holds
( ( c2 is_of_order_0 & b1 = 0 & b2 = 0 implies b1 = b2 ) & ( not c2 is_of_order_0 & c2 |^ b1 = 1. c1 & b1 <> 0 & ( for b3 being Nat st c2 |^ b3 = 1. c1 & b3 <> 0 holds
b1 <= b3 ) & c2 |^ b2 = 1. c1 & b2 <> 0 & ( for b3 being Nat st c2 |^ b3 = 1. c1 & b3 <> 0 holds
b2 <= b3 ) implies b1 = b2 ) )
proof end;
correctness
consistency
for b1 being Nat holds verum
;
;
end;

:: deftheorem Def12 defines ord GROUP_1:def 12 :
for b1 being Group
for b2 being Element of b1
for b3 being Nat holds
( ( b2 is_of_order_0 implies ( b3 = ord b2 iff b3 = 0 ) ) & ( not b2 is_of_order_0 implies ( b3 = ord b2 iff ( b2 |^ b3 = 1. b1 & b3 <> 0 & ( for b4 being Nat st b2 |^ b4 = 1. b1 & b4 <> 0 holds
b3 <= b4 ) ) ) ) );

theorem Th80: :: GROUP_1:80
canceled;

theorem Th81: :: GROUP_1:81
canceled;

theorem Th82: :: GROUP_1:82
for b1 being Group
for b2 being Element of b1 holds b2 |^ (ord b2) = 1. b1
proof end;

theorem Th83: :: GROUP_1:83
canceled;

theorem Th84: :: GROUP_1:84
for b1 being Group holds ord (1. b1) = 1
proof end;

theorem Th85: :: GROUP_1:85
for b1 being Group
for b2 being Element of b1 st ord b2 = 1 holds
b2 = 1. b1
proof end;

theorem Th86: :: GROUP_1:86
for b1 being Nat
for b2 being Group
for b3 being Element of b2 st b3 |^ b1 = 1. b2 holds
ord b3 divides b1
proof end;

definition
let c1 be Group;
func Ord c1 -> Cardinal equals :: GROUP_1:def 13
Card the carrier of a1;
correctness
coherence
Card the carrier of c1 is Cardinal
;
;
end;

:: deftheorem Def13 defines Ord GROUP_1:def 13 :
for b1 being Group holds Ord b1 = Card the carrier of b1;

definition
let c1 be 1-sorted ;
attr a1 is finite means :Def14: :: GROUP_1:def 14
the carrier of a1 is finite;
end;

:: deftheorem Def14 defines finite GROUP_1:def 14 :
for b1 being 1-sorted holds
( b1 is finite iff the carrier of b1 is finite );

notation
let c1 be 1-sorted ;
antonym infinite c1 for finite c1;
end;

definition
let c1 be Group;
assume E59: c1 is finite ;
func ord c1 -> Nat means :Def15: :: GROUP_1:def 15
ex b1 being finite set st
( b1 = the carrier of a1 & a2 = card b1 );
existence
ex b1 being Natex b2 being finite set st
( b2 = the carrier of c1 & b1 = card b2 )
proof end;
correctness
uniqueness
for b1, b2 being Nat st ex b3 being finite set st
( b3 = the carrier of c1 & b1 = card b3 ) & ex b3 being finite set st
( b3 = the carrier of c1 & b2 = card b3 ) holds
b1 = b2
;
;
end;

:: deftheorem Def15 defines ord GROUP_1:def 15 :
for b1 being Group st b1 is finite holds
for b2 being Nat holds
( b2 = ord b1 iff ex b3 being finite set st
( b3 = the carrier of b1 & b2 = card b3 ) );

theorem Th87: :: GROUP_1:87
canceled;

theorem Th88: :: GROUP_1:88
canceled;

theorem Th89: :: GROUP_1:89
canceled;

theorem Th90: :: GROUP_1:90
for b1 being Group st b1 is finite holds
ord b1 >= 1
proof end;

reconsider c1 = HGrStr(# REAL ,addreal #) as Group by Th7;

definition
let c2 be non empty HGrStr ;
attr a1 is commutative means :Def16: :: GROUP_1:def 16
for b1, b2 being Element of a1 holds b1 * b2 = b2 * b1;
end;

:: deftheorem Def16 defines commutative GROUP_1:def 16 :
for b1 being non empty HGrStr holds
( b1 is commutative iff for b2, b3 being Element of b1 holds b2 * b3 = b3 * b2 );

registration
cluster strict commutative HGrStr ;
existence
ex b1 being Group st
( b1 is strict & b1 is commutative )
proof end;
end;

definition
let c2 be non empty commutative HGrStr ;
let c3, c4 be Element of c2;
redefine func * as c2 * c3 -> Element of a1;
commutativity
for b1, b2 being Element of c2 holds b1 * b2 = b2 * b1
by Def16;
end;

theorem Th91: :: GROUP_1:91
canceled;

theorem Th92: :: GROUP_1:92
HGrStr(# REAL ,addreal #) is commutative Group
proof end;

theorem Th93: :: GROUP_1:93
canceled;

theorem Th94: :: GROUP_1:94
for b1 being commutative Group
for b2, b3 being Element of b1 holds (b2 * b3) " = (b2 " ) * (b3 " ) by Th25;

theorem Th95: :: GROUP_1:95
for b1 being Nat
for b2 being commutative Group
for b3, b4 being Element of b2 holds (b3 * b4) |^ b1 = (b3 |^ b1) * (b4 |^ b1) by Th54;

theorem Th96: :: GROUP_1:96
for b1 being Integer
for b2 being commutative Group
for b3, b4 being Element of b2 holds (b3 * b4) |^ b1 = (b3 |^ b1) * (b4 |^ b1) by Th73;

registration
let c2 be non empty set ;
let c3 be BinOp of c2;
let c4 be Element of c2;
cluster LoopStr(# a1,a2,a3 #) -> non empty ;
coherence
not LoopStr(# c2,c3,c4 #) is empty
by STRUCT_0:def 1;
end;

theorem Th97: :: GROUP_1:97
for b1 being commutative Group holds
( LoopStr(# the carrier of b1,the mult of b1,(1. b1) #) is Abelian & LoopStr(# the carrier of b1,the mult of b1,(1. b1) #) is add-associative & LoopStr(# the carrier of b1,the mult of b1,(1. b1) #) is right_zeroed & LoopStr(# the carrier of b1,the mult of b1,(1. b1) #) is right_complementable )
proof end;