:: Monoids
:: by Grzegorz Bancerek
::
:: Received December 29, 1992
:: Copyright (c) 1992-2016 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies STRUCT_0, ALGSTR_0, BINOP_1, SUBSET_1, FUNCT_1, FINSEQ_1,
RELAT_1, ORDINAL4, XBOOLE_0, ALGSTR_1, SETWISEO, FUNCOP_1, ZFMISC_1,
GROUP_1, FINSEQOP, MESFUNC1, VECTSP_1, TARSKI, REALSET1, MCART_1,
NUMBERS, BINOP_2, REAL_1, ARYTM_3, CARD_1, GR_CY_1, INT_1, PARTFUN1,
FUNCT_2, MONOID_0;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, ORDINAL1, NUMBERS, XCMPLX_0,
XREAL_0, XTUPLE_0, MCART_1, DOMAIN_1, BINOP_2, REALSET1, STRUCT_0,
RELAT_1, FINSEQOP, FUNCT_1, FINSEQ_1, PARTFUN1, FUNCT_2, BINOP_1,
FINSEQ_2, INT_1, GROUP_1, VECTSP_1, SETWISEO, FUNCOP_1, GR_CY_1,
ALGSTR_0;
constructors RELAT_2, PARTFUN1, BINOP_1, SETWISEO, BINOP_2, FINSEQOP,
REALSET1, VECTSP_2, GR_CY_1, RELSET_1, XTUPLE_0, NUMBERS;
registrations XBOOLE_0, SUBSET_1, RELAT_1, FUNCT_1, ORDINAL1, PARTFUN1,
FUNCT_2, NUMBERS, BINOP_2, MEMBERED, FINSEQ_1, REALSET1, STRUCT_0,
GROUP_1, ALGSTR_0, GR_CY_1, XREAL_0, NAT_1;
requirements NUMERALS, BOOLE, SUBSET, ARITHM;
begin :: Updating
reserve x,y,X,Y for set;
definition
let G be 1-sorted;
mode BinOp of G is BinOp of the carrier of G;
end;
definition
let IT be 1-sorted;
attr IT is constituted-Functions means
:: MONOID_0:def 1
for a being Element of IT holds a is Function;
attr IT is constituted-FinSeqs means
:: MONOID_0:def 2
for a being Element of IT holds a is FinSequence;
end;
registration
cluster constituted-Functions for 1-sorted;
cluster constituted-FinSeqs for 1-sorted;
end;
registration
let X be constituted-Functions 1-sorted;
cluster -> Function-like Relation-like for Element of X;
end;
registration
cluster constituted-FinSeqs -> constituted-Functions for 1-sorted;
end;
registration
let X be constituted-FinSeqs 1-sorted;
cluster -> FinSequence-like for Element of X;
end;
definition
let D be set, p,q be FinSequence of D;
redefine func p^q -> Element of D*;
end;
notation
let g,f be Function;
synonym f(*)g for f*g;
end;
definition
let D be non empty set;
let IT be BinOp of D;
attr IT is left-invertible means
:: MONOID_0:def 3
for a,b being Element of D ex l being Element of D st IT.(l,a) = b;
attr IT is right-invertible means
:: MONOID_0:def 4
for a,b being Element of D ex r being Element of D st IT.(a,r) = b;
attr IT is invertible means
:: MONOID_0:def 5
for a,b being Element of D ex r,l being
Element of D st IT.(a,r) = b & IT.(l,a) = b;
attr IT is left-cancelable means
:: MONOID_0:def 6
for a,b,c being Element of D st IT.(a,b) = IT.(a,c) holds b = c;
attr IT is right-cancelable means
:: MONOID_0:def 7
for a,b,c being Element of D st IT.(b,a) = IT.(c,a) holds b = c;
attr IT is cancelable means
:: MONOID_0:def 8
for a,b,c being Element of D st IT.(a,b) = IT.(a
,c) or IT.(b,a) = IT.(c,a) holds b = c;
attr IT is uniquely-decomposable means
:: MONOID_0:def 9
IT is having_a_unity & for a,b being
Element of D st IT.(a,b) = the_unity_wrt IT holds a = b & b = the_unity_wrt IT;
end;
theorem :: MONOID_0:1
for D be non empty set, f being BinOp of D holds f is invertible
iff f is left-invertible right-invertible;
theorem :: MONOID_0:2
for D be non empty set, f being BinOp of D holds f is cancelable
iff f is left-cancelable right-cancelable;
theorem :: MONOID_0:3
for f being BinOp of {x} holds f = (x,x) .--> x & f is
having_a_unity & f is commutative & f is associative & f is idempotent & f is
invertible cancelable uniquely-decomposable;
begin :: Semigroups
reserve G for non empty multMagma,
D for non empty set,
a,b,c,r,l for Element of G;
definition
let IT be non empty multMagma;
redefine attr IT is unital means
:: MONOID_0:def 10
the multF of IT is having_a_unity;
end;
definition
let G;
redefine attr G is commutative means
:: MONOID_0:def 11
the multF of G is commutative;
redefine attr G is associative means
:: MONOID_0:def 12
the multF of G is associative;
end;
definition
let IT be non empty multMagma;
attr IT is idempotent means
:: MONOID_0:def 13
the multF of IT is idempotent;
attr IT is left-invertible means
:: MONOID_0:def 14
the multF of IT is left-invertible;
attr IT is right-invertible means
:: MONOID_0:def 15
the multF of IT is right-invertible;
attr IT is invertible means
:: MONOID_0:def 16
the multF of IT is invertible;
attr IT is left-cancelable means
:: MONOID_0:def 17
the multF of IT is left-cancelable;
attr IT is right-cancelable means
:: MONOID_0:def 18
the multF of IT is right-cancelable;
attr IT is cancelable means
:: MONOID_0:def 19
the multF of IT is cancelable;
attr IT is uniquely-decomposable means
:: MONOID_0:def 20
the multF of IT is uniquely-decomposable;
end;
registration
cluster unital commutative associative cancelable idempotent invertible
uniquely-decomposable constituted-Functions constituted-FinSeqs strict for
non
empty multMagma;
end;
theorem :: MONOID_0:4
G is unital implies the_unity_wrt the multF of G is_a_unity_wrt
the multF of G;
theorem :: MONOID_0:5
G is unital iff for a holds (the_unity_wrt the multF of G)*a = a & a*(
the_unity_wrt the multF of G) = a;
theorem :: MONOID_0:6
G is unital iff ex a st for b holds a*b = b & b*a = b;
theorem :: MONOID_0:7
G is idempotent iff for a holds a*a = a;
theorem :: MONOID_0:8
G is left-invertible iff for a,b ex l st l*a = b;
theorem :: MONOID_0:9
G is right-invertible iff for a,b ex r st a*r = b;
theorem :: MONOID_0:10
G is invertible iff for a,b ex r,l st a*r = b & l*a = b;
theorem :: MONOID_0:11
G is left-cancelable iff for a,b,c st a*b = a*c holds b = c;
theorem :: MONOID_0:12
G is right-cancelable iff for a,b,c st b*a = c*a holds b = c;
theorem :: MONOID_0:13
G is cancelable iff for a,b,c st a*b = a*c or b*a = c*a holds b = c;
theorem :: MONOID_0:14
G is uniquely-decomposable iff the multF of G is having_a_unity
& for a,b being Element of G st a*b = the_unity_wrt the multF of G holds a = b
& b = the_unity_wrt the multF of G;
theorem :: MONOID_0:15
G is associative implies (G is invertible iff G is unital & the
multF of G is having_an_inverseOp);
registration
cluster associative Group-like -> invertible for non empty multMagma;
cluster associative invertible -> Group-like for non empty multMagma;
end;
registration
cluster invertible -> left-invertible right-invertible for
non empty multMagma;
cluster left-invertible right-invertible -> invertible for
non empty multMagma;
cluster cancelable -> left-cancelable right-cancelable for
non empty multMagma;
cluster left-cancelable right-cancelable -> cancelable for
non empty multMagma;
cluster associative invertible -> unital cancelable for
non empty multMagma;
end;
begin
reserve M for non empty multLoopStr;
definition
let IT be non empty multLoopStr;
redefine attr IT is well-unital means
:: MONOID_0:def 21
1.IT is_a_unity_wrt the multF of IT;
end;
theorem :: MONOID_0:16
M is well-unital iff for a being Element of M holds (1.M)*a = a & a*(1.M) = a
;
theorem :: MONOID_0:17
for M being non empty multLoopStr st M is well-unital holds 1.M
= the_unity_wrt the multF of M;
registration
cluster well-unital commutative associative cancelable idempotent invertible
uniquely-decomposable unital constituted-Functions constituted-FinSeqs strict
for
non empty multLoopStr;
end;
definition
mode Monoid is well-unital associative non empty multLoopStr;
end;
definition
let G be multMagma;
mode MonoidalExtension of G -> multLoopStr means
:: MONOID_0:def 22
the multMagma of it = the multMagma of G;
end;
registration
let G be non empty multMagma;
cluster -> non empty for MonoidalExtension of G;
end;
theorem :: MONOID_0:18
for M being MonoidalExtension of G holds the carrier of M = the
carrier of G & the multF of M = the multF of G & for a,b being Element of M, a9
,b9 being Element of G st a = a9 & b = b9 holds a*b = a9*b9;
registration
let G be multMagma;
cluster strict for MonoidalExtension of G;
end;
theorem :: MONOID_0:19
for G being non empty multMagma, M being MonoidalExtension of G
holds (G is unital implies M is unital) & (G is commutative implies M is
commutative) & (G is associative implies M is associative) & (G is invertible
implies M is invertible) & (G is uniquely-decomposable implies M is
uniquely-decomposable) & (G is cancelable implies M is cancelable);
registration
let G be constituted-Functions multMagma;
cluster -> constituted-Functions for MonoidalExtension of G;
end;
registration
let G be constituted-FinSeqs multMagma;
cluster -> constituted-FinSeqs for MonoidalExtension of G;
end;
registration
let G be unital non empty multMagma;
cluster -> unital for MonoidalExtension of G;
end;
registration
let G be associative non empty multMagma;
cluster -> associative for MonoidalExtension of G;
end;
registration
let G be commutative non empty multMagma;
cluster -> commutative for MonoidalExtension of G;
end;
registration
let G be invertible non empty multMagma;
cluster -> invertible for MonoidalExtension of G;
end;
registration
let G be cancelable non empty multMagma;
cluster -> cancelable for MonoidalExtension of G;
end;
registration
let G be uniquely-decomposable non empty multMagma;
cluster -> uniquely-decomposable for MonoidalExtension of G;
end;
registration
let G be unital non empty multMagma;
cluster well-unital strict for MonoidalExtension of G;
end;
theorem :: MONOID_0:20
for G being unital non empty multMagma for M1,M2 being
well-unital strict MonoidalExtension of G holds M1 = M2;
begin :: Subsystems
definition
let G be multMagma;
mode SubStr of G -> multMagma means
:: MONOID_0:def 23
the multF of it c= the multF of G;
end;
registration
let G be multMagma;
cluster strict for SubStr of G;
end;
registration
let G be non empty multMagma;
cluster strict non empty for SubStr of G;
end;
registration
let G be unital non empty multMagma;
cluster unital associative commutative cancelable idempotent invertible
uniquely-decomposable strict for non empty SubStr of G;
end;
definition
let G be multMagma;
mode MonoidalSubStr of G -> multLoopStr means
:: MONOID_0:def 24
the multF of it c= the
multF of G & for M being multLoopStr st G = M holds 1.it = 1.M;
end;
registration
let G be multMagma;
cluster strict for MonoidalSubStr of G;
end;
registration
let G be non empty multMagma;
cluster strict non empty for MonoidalSubStr of G;
end;
definition
let M be multLoopStr;
redefine mode MonoidalSubStr of M means
:: MONOID_0:def 25
the multF of it c= the multF of M & 1.it = 1.M;
end;
registration
let G be well-unital non empty multLoopStr;
cluster well-unital associative commutative cancelable idempotent invertible
uniquely-decomposable strict for non empty MonoidalSubStr of G;
end;
theorem :: MONOID_0:21
for G being multMagma, M being MonoidalSubStr of G holds M is SubStr of G;
definition
let G be multMagma, M be MonoidalExtension of G;
redefine mode SubStr of M -> SubStr of G;
end;
definition
let G1 be multMagma, G2 be SubStr of G1;
redefine mode SubStr of G2 -> SubStr of G1;
end;
definition
let G1 be multMagma, G2 be MonoidalSubStr of G1;
redefine mode SubStr of G2 -> SubStr of G1;
end;
definition
let G be multMagma, M be MonoidalSubStr of G;
redefine mode MonoidalSubStr of M -> MonoidalSubStr of G;
end;
theorem :: MONOID_0:22
G is SubStr of G & M is MonoidalSubStr of M;
reserve H for non empty SubStr of G,
N for non empty MonoidalSubStr of G;
theorem :: MONOID_0:23
the carrier of H c= the carrier of G & the carrier of N c= the carrier of G;
theorem :: MONOID_0:24
for G being non empty multMagma, H being non empty SubStr of G
holds the multF of H = (the multF of G)||the carrier of H;
theorem :: MONOID_0:25
for a,b being Element of H, a9,b9 being Element of G st a = a9 &
b = b9 holds a*b = a9*b9;
theorem :: MONOID_0:26
for H1,H2 being non empty SubStr of G st the carrier of H1 = the
carrier of H2 holds the multMagma of H1 = the multMagma of H2;
theorem :: MONOID_0:27
for H1,H2 being non empty MonoidalSubStr of M st the carrier of H1 =
the carrier of H2 holds the multLoopStr of H1 = the multLoopStr of H2;
theorem :: MONOID_0:28
for H1,H2 being non empty SubStr of G st the carrier of H1 c=
the carrier of H2 holds H1 is SubStr of H2;
theorem :: MONOID_0:29
for H1,H2 being non empty MonoidalSubStr of M st the carrier of H1 c=
the carrier of H2 holds H1 is MonoidalSubStr of H2;
theorem :: MONOID_0:30
G is unital & the_unity_wrt the multF of G in the carrier of H
implies H is unital & the_unity_wrt the multF of G = the_unity_wrt the multF of
H;
theorem :: MONOID_0:31
for M being well-unital non empty multLoopStr for N being non
empty MonoidalSubStr of M holds N is well-unital;
theorem :: MONOID_0:32
G is commutative implies H is commutative;
theorem :: MONOID_0:33
G is associative implies H is associative;
theorem :: MONOID_0:34
G is idempotent implies H is idempotent;
theorem :: MONOID_0:35
G is cancelable implies H is cancelable;
theorem :: MONOID_0:36
the_unity_wrt the multF of G in the carrier of H & G is
uniquely-decomposable implies H is uniquely-decomposable;
theorem :: MONOID_0:37
for M being well-unital uniquely-decomposable non empty
multLoopStr for N being non empty MonoidalSubStr of M holds N is
uniquely-decomposable;
registration
let G be constituted-Functions non empty multMagma;
cluster -> constituted-Functions for non empty SubStr of G;
cluster -> constituted-Functions for non empty MonoidalSubStr of G;
end;
registration
let G be constituted-FinSeqs non empty multMagma;
cluster -> constituted-FinSeqs for non empty SubStr of G;
cluster -> constituted-FinSeqs for non empty MonoidalSubStr of G;
end;
registration
let M be well-unital non empty multLoopStr;
cluster -> well-unital for non empty MonoidalSubStr of M;
end;
registration
let G be commutative non empty multMagma;
cluster -> commutative for non empty SubStr of G;
cluster -> commutative for non empty MonoidalSubStr of G;
end;
registration
let G be associative non empty multMagma;
cluster -> associative for non empty SubStr of G;
cluster -> associative for non empty MonoidalSubStr of G;
end;
registration
let G be idempotent non empty multMagma;
cluster -> idempotent for non empty SubStr of G;
cluster -> idempotent for non empty MonoidalSubStr of G;
end;
registration
let G be cancelable non empty multMagma;
cluster -> cancelable for non empty SubStr of G;
cluster -> cancelable for non empty MonoidalSubStr of G;
end;
registration
let M be well-unital uniquely-decomposable non empty multLoopStr;
cluster -> uniquely-decomposable for non empty MonoidalSubStr of M;
end;
scheme :: MONOID_0:sch 1
SubStrEx2 {G() -> non empty multMagma, P[object]}
: ex H being strict non empty
SubStr of G() st for x being Element of G()
holds x in the carrier of H iff P[x]
provided
for x,y being Element of G() holds P[x] & P[y] implies P[x*y] and
ex x being Element of G() st P[x];
scheme :: MONOID_0:sch 2
MonoidalSubStrEx2 {G() -> non empty multLoopStr, P[set]}: ex M being strict
non empty MonoidalSubStr of G() st for x being Element of G() holds x in the
carrier of M iff P[x]
provided
for x,y being Element of G() holds P[x] & P[y] implies P[x*y] and
P[1.G()];
notation
let G be multMagma, a,b be Element of G;
synonym a [*] b for a*b;
end;
begin :: Monoids on Nats
definition
func -> non empty multMagma equals
:: MONOID_0:def 26
multMagma(#REAL, addreal#);
end;
registration
cluster -> unital associative invertible commutative cancelable
strict;
end;
theorem :: MONOID_0:38
x is Element of iff x is Element of REAL;
theorem :: MONOID_0:39
for N being non empty SubStr of for a,b being Element
of N, x,y being Real st a = x & b = y holds a*b = x+y;
theorem :: MONOID_0:40
for N being unital non empty SubStr of holds
the_unity_wrt the multF of N = 0;
registration
let G be unital non empty multMagma;
cluster associative invertible -> unital cancelable Group-like for non empty
SubStr of G;
end;
definition
redefine func INT.Group -> strict non empty SubStr of ;
end;
:: corollary
:: INT.Group is unital commutative associative cancelable invertible;
theorem :: MONOID_0:41
for G being strict non empty SubStr of holds G = INT.Group
iff the carrier of G = INT;
theorem :: MONOID_0:42
x is Element of INT.Group iff x is Integer;
definition
func -> unital uniquely-decomposable strict non empty SubStr of
INT.Group means
:: MONOID_0:def 27
the carrier of it = NAT;
end;
:: corollary
:: is unital commutative associative cancelable uniquely-decomposable;
definition
func -> well-unital strict non empty MonoidalExtension of
means
:: MONOID_0:def 28
not contradiction;
end;
:: corollary
:: is
:: well-unital commutative associative cancelable uniquely-decomposable;
definition
redefine func addnat equals
:: MONOID_0:def 29
the multF of ;
end;
theorem :: MONOID_0:43
= multMagma(#NAT,addnat#);
theorem :: MONOID_0:44
x is Element of iff x is Element of NAT;
theorem :: MONOID_0:45
for n1,n2 being Element of NAT, m1,m2 being Element of st n1
= m1 & n2 = m2 holds m1*m2 = n1+n2;
theorem :: MONOID_0:46
= multLoopStr(#NAT,addnat,0#);
theorem :: MONOID_0:47
addnat = addreal||NAT & addnat = addint||NAT;
theorem :: MONOID_0:48
0 is_a_unity_wrt addnat & addnat is uniquely-decomposable;
definition
func -> unital commutative associative strict non empty multMagma
equals
:: MONOID_0:def 30
multMagma(#REAL,multreal#);
end;
theorem :: MONOID_0:49
x is Element of iff x is Element of REAL;
theorem :: MONOID_0:50
for N being non empty SubStr of for a,b being Element
of N, x,y being Real st a = x & b = y holds a*b = x*y;
theorem :: MONOID_0:51
for N being unital non empty SubStr of holds the_unity_wrt
the multF of N = 0 or the_unity_wrt the multF of N = 1;
definition
func -> unital uniquely-decomposable strict non empty SubStr of
means
:: MONOID_0:def 31
the carrier of it = NAT;
end;
:: corollary
:: is unital commutative associative uniquely-decomposable;
definition
func -> well-unital strict non empty MonoidalExtension of
means
:: MONOID_0:def 32
not contradiction;
end;
:: corollary
:: is well-unital commutative associative uniquely-decomposable;
definition
redefine func multnat equals
:: MONOID_0:def 33
the multF of ;
end;
theorem :: MONOID_0:52
= multMagma(#NAT,multnat#);
theorem :: MONOID_0:53
for n1,n2 being Element of NAT, m1,m2 being Element of st n1 =
m1 & n2 = m2 holds m1*m2 = n1*n2;
theorem :: MONOID_0:54
the_unity_wrt the multF of = 1;
theorem :: MONOID_0:55
for n1,n2 being Element of NAT, m1,m2 being Element of st n1
= m1 & n2 = m2 holds m1*m2 = n1*n2;
theorem :: MONOID_0:56
= multLoopStr(#NAT,multnat,1#);
theorem :: MONOID_0:57
multnat = multreal||NAT;
theorem :: MONOID_0:58
1 is_a_unity_wrt multnat & multnat is uniquely-decomposable;
begin :: Monoid of finite sequences
definition
let D be non empty set;
func D*+^ -> unital associative cancelable uniquely-decomposable
constituted-FinSeqs strict non empty multMagma means
:: MONOID_0:def 34
the carrier of it = D* & for p,q being Element of it holds p [*] q = p^q;
end;
definition
let D;
func D*+^+<0> -> well-unital strict non empty MonoidalExtension of D*+^
means
:: MONOID_0:def 35
not contradiction;
func D-concatenation -> BinOp of D* equals
:: MONOID_0:def 36
the multF of D*+^;
end;
theorem :: MONOID_0:59
D*+^ = multMagma(#D*, D-concatenation#);
theorem :: MONOID_0:60
the_unity_wrt the multF of D*+^ = {};
theorem :: MONOID_0:61
the carrier of D*+^+<0> = D* & the multF of D*+^+<0> = D-concatenation
& 1.(D*+^+<0>) = {};
theorem :: MONOID_0:62
for a,b being Element of D*+^+<0> holds a [*] b = a^b;
theorem :: MONOID_0:63
for F being non empty SubStr of D*+^ for p,q being Element of F
holds p[*]q = p^q;
theorem :: MONOID_0:64
for F being unital non empty SubStr of D*+^ holds the_unity_wrt the
multF of F = {};
theorem :: MONOID_0:65
for F being non empty SubStr of D*+^ st {} is Element of F holds F is
unital & the_unity_wrt the multF of F = {};
theorem :: MONOID_0:66
for A,B being non empty set st A c= B holds A*+^ is SubStr of B*+^;
theorem :: MONOID_0:67
D-concatenation is having_a_unity & the_unity_wrt (D-concatenation) =
{} & D-concatenation is associative;
begin :: Monoids of mappings
definition
let X be set;
func GPFuncs X -> constituted-Functions strict multMagma means
:: MONOID_0:def 37
the carrier of it = PFuncs(X,X) &
for f,g being Element of it holds f [*] g = g (*) f;
end;
registration
let X be set;
cluster GPFuncs X -> unital associative non empty;
end;
definition
let X be set;
func MPFuncs X -> well-unital strict non empty MonoidalExtension of GPFuncs
X means
:: MONOID_0:def 38
not contradiction;
func X-composition -> BinOp of PFuncs(X,X) equals
:: MONOID_0:def 39
the multF of GPFuncs X;
end;
:: corollary
:: MPFuncs X is constituted-Functions strict Monoid;
theorem :: MONOID_0:68
x is Element of GPFuncs X iff x is PartFunc of X,X;
theorem :: MONOID_0:69
the_unity_wrt the multF of GPFuncs X = id X;
theorem :: MONOID_0:70
for F being non empty SubStr of GPFuncs X for f,g being Element
of F holds f [*] g = g (*) f;
theorem :: MONOID_0:71
for F being non empty SubStr of GPFuncs X st id X is Element of
F holds F is unital & the_unity_wrt the multF of F = id X;
theorem :: MONOID_0:72
Y c= X implies GPFuncs Y is SubStr of GPFuncs X;
definition
let X be set;
func GFuncs X -> strict SubStr of GPFuncs X means
:: MONOID_0:def 40
the carrier of it = Funcs(X,X);
end;
registration
let X be set;
cluster GFuncs X -> unital non empty;
end;
:: corollary
:: GFuncs X is unital associative constituted-Functions;
definition
let X be set;
func MFuncs X -> well-unital strict MonoidalExtension of GFuncs X means
:: MONOID_0:def 41
not contradiction;
end;
:: corollary
:: GFuncs X is constituted-Functions Monoid;
theorem :: MONOID_0:73
x is Element of GFuncs X iff x is Function of X,X;
theorem :: MONOID_0:74
the multF of GFuncs X = (X-composition)||Funcs(X,X);
theorem :: MONOID_0:75
the_unity_wrt the multF of GFuncs X = id X;
theorem :: MONOID_0:76
the carrier of MFuncs X = Funcs(X,X) & the multF of MFuncs X = (X
-composition)||Funcs(X,X) & 1.MFuncs X = id X;
definition
let X be set;
func GPerms X -> strict non empty SubStr of GFuncs X
means
:: MONOID_0:def 42
for f being Element of GFuncs X holds f in the carrier of it iff
f is Permutation of X;
end;
registration
let X be set;
cluster GPerms X -> unital invertible;
end;
:: corollary
:: GPerms X is constituted-Functions Group;
theorem :: MONOID_0:77
x is Element of GPerms X iff x is Permutation of X;
theorem :: MONOID_0:78
the_unity_wrt the multF of GPerms X = id X & 1_GPerms X = id X;
theorem :: MONOID_0:79
for f being Element of GPerms X holds f" = (f qua Function)";
:: 2005.05.13, A.T.
theorem :: MONOID_0:80
for S being 1-sorted st the carrier of S is functional holds S is
constituted-Functions;
theorem :: MONOID_0:81
for G be non empty multMagma, D be non empty Subset of G st
for x,y being Element of D holds x*y in D
ex H being strict non empty SubStr of G st the carrier of H = D;
theorem :: MONOID_0:82
for G be non empty multLoopStr, D be non empty Subset of G st
(for x,y being Element of D holds x*y in D) & 1.G in D
ex H being strict non empty MonoidalSubStr of G st the carrier of H = D;