begin
deffunc H1( 1-sorted ) -> set = the carrier of $1;
deffunc H2( multMagma ) -> Element of bool [:[: the carrier of $1, the carrier of $1:], the carrier of $1:] = the multF of $1;
begin
Lm1:
for G being non empty multMagma holds
( G is commutative iff for a, b being Element of G holds a * b = b * a )
Lm2:
for G being non empty multMagma holds
( G is associative iff for a, b, c being Element of G holds (a * b) * c = a * (b * c) )
Lm3:
for G being non empty multMagma holds
( G is invertible iff ( G is left-invertible & G is right-invertible ) )
Lm4:
for G being non empty multMagma holds
( G is cancelable iff ( G is left-cancelable & G is right-cancelable ) )
Lm5:
for G being non empty multMagma st G is associative & G is invertible holds
G is Group-like
begin
deffunc H3( multLoopStr ) -> Element of the carrier of $1 = 1. $1;
begin
begin
begin
begin
::: cluster INT.Group -> unital invertible;
::: coherence;
:::end;