Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 4183461[1X3 [33X[0;0Y[5XCircle[105X[101X[1X functions[133X[101X23[33X[0;0YTo use the [5XCircle[105X package first you need to load it as follows:[133X45[4X[32X Example [32X[104X6[4X[28X[128X[104X7[4X[25Xgap>[125X [27XLoadPackage("circle");[127X[104X8[4X[28X-----------------------------------------------------------------------------[128X[104X9[4X[28XLoading Circle 1.4.0 (Adjoint groups of finite rings)[128X[104X10[4X[28Xby Alexander Konovalov (http://www.cs.st-andrews.ac.uk/~alexk/) and[128X[104X11[4X[28X Panagiotis Soules ([email protected]).[128X[104X12[4X[28X-----------------------------------------------------------------------------[128X[104X13[4X[28Xtrue[128X[104X14[4X[28Xgap>[128X[104X15[4X[28X[128X[104X16[4X[32X[104X1718[33X[0;0YNote that if you entered examples from the previous chapter, you need to19restart [5XGAP[105X before loading the [5XCircle[105X package.[133X202122[1X3.1 [33X[0;0YCircle objects[133X[101X2324[33X[0;0YBecause for elements of the ring [22XR[122X the ordinary multiplication is already25denoted by [10X*[110X, for the implementation of the circle multiplication in the26adjoint semigroup we need to wrap up ring elements as CircleObjects, for27which [10X*[110X is defined to be the circle multiplication.[133X2829[1X3.1-1 CircleObject[101X3031[29X[2XCircleObject[102X( [3Xx[103X ) [32X attribute3233[33X[0;0YLet [3Xx[103X be a ring element. Then [10XCircleObject(x)[110X returns the corresponding34circle object. If [3Xx[103X lies in the family [10Xfam[110X, then [10XCircleObject(x)[110X lies in the35family [2XCircleFamily[102X ([14X3.1-5[114X), corresponding to the family [10Xfam[110X.[133X3637[4X[32X Example [32X[104X38[4X[28X[128X[104X39[4X[25Xgap>[125X [27Xa := CircleObject( 2 );[127X[104X40[4X[28XCircleObject( 2 )[128X[104X41[4X[28X[128X[104X42[4X[32X[104X4344[1X3.1-2 UnderlyingRingElement[101X4546[29X[2XUnderlyingRingElement[102X( [3Xx[103X ) [32X attribute4748[33X[0;0YReturns the corresponding ring element for the circle object [3Xx[103X.[133X4950[4X[32X Example [32X[104X51[4X[28X[128X[104X52[4X[25Xgap>[125X [27Xa := CircleObject( 2 );[127X[104X53[4X[28XCircleObject( 2 )[128X[104X54[4X[25Xgap>[125X [27XUnderlyingRingElement( a ); [127X[104X55[4X[28X2[128X[104X56[4X[28X[128X[104X57[4X[32X[104X5859[1X3.1-3 IsCircleObject[101X6061[29X[2XIsCircleObject[102X( [3Xx[103X ) [32X Category62[29X[2XIsCircleObjectCollection[102X( [3Xx[103X ) [32X Category6364[33X[0;0YAn object [3Xx[103X lies in the category [10XIsCircleObject[110X if and only if it lies in a65family constructed by [2XCircleFamily[102X ([14X3.1-5[114X). Since circle objects can be66multiplied via [10X*[110X with elements in their family, and we need operations [10XOne[110X67and [10XInverse[110X to deal with groups they generate, circle objects are68implemented in the category [10XIsMultiplicativeElementWithInverse[110X. A collection69of circle objects (e.g. adjoint semigroup or adjoint group) will lie in the70category [10XIsCircleObjectCollection[110X.[133X7172[4X[32X Example [32X[104X73[4X[28X[128X[104X74[4X[25Xgap>[125X [27XIsCircleObject( 2 ); IsCircleObject( CircleObject( 2 ) ); [127X[104X75[4X[28Xfalse[128X[104X76[4X[28Xtrue[128X[104X77[4X[25Xgap>[125X [27XIsMultiplicativeElementWithInverse( CircleObject( 2 ) );[127X[104X78[4X[28Xtrue[128X[104X79[4X[25Xgap>[125X [27XIsCircleObjectCollection( [ CircleObject(0), CircleObject(2) ] );[127X[104X80[4X[28Xtrue[128X[104X81[4X[28X[128X[104X82[4X[32X[104X8384[1X3.1-4 IsPositionalObjectOneSlotRep[101X8586[29X[2XIsPositionalObjectOneSlotRep[102X( [3Xx[103X ) [32X Representation87[29X[2XIsDefaultCircleObject[102X( [3Xx[103X ) [32X Representation8889[33X[0;0YTo store the corresponding circle object, we need only to store the90underlying ring element. Since this is quite common situation, we defined91the representation [10XIsPositionalObjectOneSlotRep[110X for a more general case.92Then we defined [10XIsDefaultCircleObject[110X as a synonym of93[10XIsPositionalObjectOneSlotRep[110X for objects in [2XIsCircleObject[102X ([14X3.1-3[114X).[133X9495[4X[32X Example [32X[104X96[4X[28X[128X[104X97[4X[25Xgap>[125X [27XIsPositionalObjectOneSlotRep( CircleObject( 2 ) );[127X[104X98[4X[28Xtrue[128X[104X99[4X[25Xgap>[125X [27XIsDefaultCircleObject( CircleObject( 2 ) ); [127X[104X100[4X[28Xtrue[128X[104X101[4X[28X[128X[104X102[4X[32X[104X103104[1X3.1-5 CircleFamily[101X105106[29X[2XCircleFamily[102X( [3Xfam[103X ) [32X attribute107108[33X[0;0Y[10XCircleFamily(fam)[110X is a family, elements of which are in one-to-one109correspondence with elements of the family [3Xfam[103X, but with the circle110multiplication as an infix multiplication. That is, for [22Xx[122X, [22Xy[122X in [3Xfam[103X, the111product of their images in the [10XCircleFamily(fam)[110X will be the image of [22Xx + y112+ x y[122X. The relation between these families is demonstrated by the following113equality:[133X114115[4X[32X Example [32X[104X116[4X[28X[128X[104X117[4X[25Xgap>[125X [27XFamilyObj( CircleObject ( 2 ) ) = CircleFamily( FamilyObj( 2 ) );[127X[104X118[4X[28Xtrue[128X[104X119[4X[28X[128X[104X120[4X[32X[104X121122123[1X3.2 [33X[0;0YOperations with circle objects[133X[101X124125[1X3.2-1 One[101X126127[29X[2XOne[102X( [3Xx[103X ) [32X operation128129[33X[0;0YThis operation returns the multiplicative neutral element for the circle130object [3Xx[103X. The result is the circle object corresponding to the additive131neutral element of the appropriate ring.[133X132133[4X[32X Example [32X[104X134[4X[28X[128X[104X135[4X[25Xgap>[125X [27XOne( CircleObject( 5 ) );[127X[104X136[4X[28XCircleObject( 0 )[128X[104X137[4X[25Xgap>[125X [27XOne( CircleObject( 5 ) ) = CircleObject( Zero( 5 ) );[127X[104X138[4X[28Xtrue[128X[104X139[4X[25Xgap>[125X [27XOne( CircleObject( [ [ 1, 1 ],[ 0, 1 ] ] ) );[127X[104X140[4X[28XCircleObject( [ [ 0, 0 ], [ 0, 0 ] ] )[128X[104X141[4X[28X[128X[104X142[4X[32X[104X143144[1X3.2-2 InverseOp[101X145146[29X[2XInverseOp[102X( [3Xx[103X ) [32X operation147148[33X[0;0YFor a circle object [3Xx[103X, returns the multiplicative inverse of [3Xx[103X with respect149to the circle multiplication; if such one does not exist then [9Xfail[109X is150returned.[133X151152[33X[0;0YIn our implementation we assume that the underlying ring is a subring of the153ring with one, thus, if the circle inverse for an element [22Xx[122X exists, than it154can be computed as [22X-x(1+x)^-1[122X.[133X155156[4X[32X Example [32X[104X157[4X[28X[128X[104X158[4X[25Xgap>[125X [27XCircleObject( -2 )^-1; [127X[104X159[4X[28XCircleObject( -2 )[128X[104X160[4X[25Xgap>[125X [27XCircleObject( 2 )^-1; [127X[104X161[4X[28XCircleObject( -2/3 )[128X[104X162[4X[25Xgap>[125X [27XCircleObject( -2 )*CircleObject( -2 )^-1;[127X[104X163[4X[28XCircleObject( 0 )[128X[104X164[4X[28X[128X[104X165[4X[32X[104X166167[4X[32X Example [32X[104X168[4X[28X[128X[104X169[4X[25Xgap>[125X [27Xm := CircleObject( [ [ 1, 1 ], [ 0, 1 ] ] ); [127X[104X170[4X[28XCircleObject( [ [ 1, 1 ], [ 0, 1 ] ] )[128X[104X171[4X[25Xgap>[125X [27Xm^-1; [127X[104X172[4X[28XCircleObject( [ [ -1/2, -1/4 ], [ 0, -1/2 ] ] )[128X[104X173[4X[25Xgap>[125X [27Xm * m^-1;[127X[104X174[4X[28XCircleObject( [ [ 0, 0 ], [ 0, 0 ] ] )[128X[104X175[4X[25Xgap>[125X [27XCircleObject( [ [ 0, 1 ], [ 1, 0 ] ] )^-1; [127X[104X176[4X[28Xfail[128X[104X177[4X[28X[128X[104X178[4X[32X[104X179180[1X3.2-3 IsUnit[101X181182[29X[2XIsUnit[102X( [[3XR[103X, ][3Xx[103X ) [32X operation183184[33X[0;0YLet [3Xx[103X be a circle object corresponding to an element of the ring [3XR[103X. Then the185operation [10XIsUnit[110X returns [10Xtrue[110X, if [3Xx[103X is invertible in [3XR[103X with respect to the186circle multiplication, and [10Xfalse[110X otherwise.[133X187188[4X[32X Example [32X[104X189[4X[28X[128X[104X190[4X[25Xgap>[125X [27XIsUnit( Integers, CircleObject( -2 ) );[127X[104X191[4X[28Xtrue[128X[104X192[4X[25Xgap>[125X [27XIsUnit( Integers, CircleObject( 2 ) ); [127X[104X193[4X[28Xfalse[128X[104X194[4X[25Xgap>[125X [27XIsUnit( Rationals, CircleObject( 2 ) ); [127X[104X195[4X[28Xtrue[128X[104X196[4X[25Xgap>[125X [27XIsUnit( ZmodnZ(8), CircleObject( ZmodnZObj(2,8) ) );[127X[104X197[4X[28Xtrue[128X[104X198[4X[25Xgap>[125X [27Xm := CircleObject( [ [ 1, 1 ],[ 0, 1 ] ] );;[127X[104X199[4X[25Xgap>[125X [27XIsUnit( FullMatrixAlgebra( Rationals, 2 ), m );[127X[104X200[4X[28Xtrue[128X[104X201[4X[28X[128X[104X202[4X[32X[104X203204[33X[0;0YIf the first argument is omitted, the result will be returned with respect205to the default ring of the circle object [3Xx[103X.[133X206207[4X[32X Example [32X[104X208[4X[28X[128X[104X209[4X[25Xgap>[125X [27XIsUnit( CircleObject( -2 ) );[127X[104X210[4X[28Xtrue[128X[104X211[4X[25Xgap>[125X [27XIsUnit( CircleObject( 2 ) ); [127X[104X212[4X[28Xfalse[128X[104X213[4X[25Xgap>[125X [27XIsUnit( CircleObject( ZmodnZObj(2,8) ) );[127X[104X214[4X[28Xtrue[128X[104X215[4X[25Xgap>[125X [27XIsUnit( CircleObject( [ [ 1, 1 ],[ 0, 1 ] ] ) ); [127X[104X216[4X[28Xfalse[128X[104X217[4X[28X[128X[104X218[4X[32X[104X219220[1X3.2-4 IsCircleUnit[101X221222[29X[2XIsCircleUnit[102X( [[3XR[103X, ][3Xx[103X ) [32X operation223224[33X[0;0YLet [3Xx[103X be an element of the ring [3XR[103X. Then [10XIsCircleUnit( R, x )[110X determines225whether [3Xx[103X is invertible in [3XR[103X with respect to the circle multilpication. This226is equivalent to the condition that 1+[3Xx[103X is a unit in [3XR[103X with respect to the227ordinary multiplication.[133X228229[4X[32X Example [32X[104X230[4X[28X[128X[104X231[4X[25Xgap>[125X [27XIsCircleUnit( Integers, -2 );[127X[104X232[4X[28Xtrue[128X[104X233[4X[25Xgap>[125X [27XIsCircleUnit( Integers, 2 ); [127X[104X234[4X[28Xfalse[128X[104X235[4X[25Xgap>[125X [27XIsCircleUnit( Rationals, 2 ); [127X[104X236[4X[28Xtrue[128X[104X237[4X[25Xgap>[125X [27XIsCircleUnit( ZmodnZ(8), ZmodnZObj(2,8) ); [127X[104X238[4X[28Xtrue[128X[104X239[4X[25Xgap>[125X [27Xm := [ [ 1, 1 ],[ 0, 1 ] ]; [127X[104X240[4X[28X[ [ 1, 1 ], [ 0, 1 ] ][128X[104X241[4X[25Xgap>[125X [27XIsCircleUnit( FullMatrixAlgebra(Rationals,2), m );[127X[104X242[4X[28Xtrue[128X[104X243[4X[28X[128X[104X244[4X[32X[104X245246[33X[0;0YIf the first argument is omitted, the result will be returned with respect247to the default ring of [3Xx[103X.[133X248249[4X[32X Example [32X[104X250[4X[28X[128X[104X251[4X[25Xgap>[125X [27XIsCircleUnit( -2 ); [127X[104X252[4X[28Xtrue[128X[104X253[4X[25Xgap>[125X [27XIsCircleUnit( 2 ); [127X[104X254[4X[28Xfalse[128X[104X255[4X[25Xgap>[125X [27XIsCircleUnit( ZmodnZObj(2,8) ); [127X[104X256[4X[28Xtrue[128X[104X257[4X[25Xgap>[125X [27XIsCircleUnit( [ [ 1, 1 ],[ 0, 1 ] ] ); [127X[104X258[4X[28Xfalse[128X[104X259[4X[28X[128X[104X260[4X[32X[104X261262263[1X3.3 [33X[0;0YConstruction of the adjoint semigroup and adjoint group[133X[101X264265[1X3.3-1 AdjointSemigroup[101X266267[29X[2XAdjointSemigroup[102X( [3XR[103X ) [32X attribute268269[33X[0;0YIf [3XR[103X is a finite ring then [10XAdjointSemigroup([3XR[103X[10X)[110X will return the monoid which270is formed by all elements of [3XR[103X with respect to the circle multiplication.[133X271272[33X[0;0YThe implementation is rather straightforward and was added to provide a link273to the [5XGAP[105X functionality for semigroups. It assumes that the enumaration of274all elements of the ring [3XR[103X is feasible.[133X275276[4X[32X Example [32X[104X277[4X[28X[128X[104X278[4X[25Xgap>[125X [27XR:=Ring( [ ZmodnZObj(2,8) ] );[127X[104X279[4X[28X<ring with 1 generators>[128X[104X280[4X[25Xgap>[125X [27XS:=AdjointSemigroup(R);[127X[104X281[4X[28X<monoid with 4 generators>[128X[104X282[4X[28X[128X[104X283[4X[32X[104X284285[1X3.3-2 AdjointGroup[101X286287[29X[2XAdjointGroup[102X( [3XR[103X ) [32X attribute288289[33X[0;0YIf [3XR[103X is a finite radical algebra then [10XAdjointGroup([3XR[103X[10X)[110X will return the290adjoint group of [3XR[103X, given as a group generated by a set of circle objects.[133X291292[33X[0;0YTo compute the adjoint group of a finite radical algebra, [5XCircle[105X uses the293fact that all elements of a radical algebra form a group with respect to the294circle multiplication. Thus, the adjoint group of [3XR[103X coincides with [3XR[103X295elementwise, and we can randomly select an appropriate set of generators for296the adjoint group.[133X297298[33X[0;0YThe warning is displayed by [10XIsGeneratorsOfMagmaWithInverses[110X method defined299in [11Xgap4r4/lib/grp.gi[111X and may be ignored.[133X300301[33X[0;0Y[12XWARNINGS:[112X[133X302303[33X[0;0Y1. The set of generators of the returned group is not required to be a304generating set of minimal possible order.[133X305306[33X[0;0Y2. [10XAdjointGroup[110X is stored as an attribute of [3XR[103X, so for the same copy of [3XR[103X307calling it again you will get the same result. But if you will create308another copy of [3XR[103X in the future, the output may differ because of the random309selection of generators. If you want to have the same generating set, next310time you should construct a group immediately specifying circle objects that311generate it.[133X312313[33X[0;0Y3. In most cases, to investigate some properties of the adjoint group, it is314necessary first to convert it to an isomorphic permutation group or to a315PcGroup.[133X316317[33X[0;0YFor example, we can create the following commutative 2-dimensional radical318algebra of order 4 over the field of two elements, and show that its adjoint319group is a cyclic group of order 4:[133X320321[4X[32X Example [32X[104X322[4X[28X[128X[104X323[4X[25Xgap>[125X [27Xx:=[ [ 0, 1, 0 ],[127X[104X324[4X[25X>[125X [27X [ 0, 0, 1 ],[127X[104X325[4X[25X>[125X [27X [ 0, 0, 0 ] ];;[127X[104X326[4X[25Xgap>[125X [27XR := Algebra( GF(2), [ One(GF(2))*x ] ); [127X[104X327[4X[28X<algebra over GF(2), with 1 generators>[128X[104X328[4X[25Xgap>[125X [27XRadicalOfAlgebra( R ) = R;[127X[104X329[4X[28Xtrue[128X[104X330[4X[25Xgap>[125X [27XDimension(R);[127X[104X331[4X[28X2[128X[104X332[4X[25Xgap>[125X [27XG := AdjointGroup( R );;[127X[104X333[4X[25Xgap>[125X [27XSize( R ) = Size( G );[127X[104X334[4X[28Xtrue[128X[104X335[4X[25Xgap>[125X [27XStructureDescription( G );[127X[104X336[4X[28X"C4"[128X[104X337[4X[28X[128X[104X338[4X[32X[104X339340[33X[0;0YIn the following example we construct a non-commutative 3-dimensional341radical algebra of order 8 over the field of two elements, and demonstrate342that its adjoint group is the dihedral group of order 8:[133X343344[4X[32X Example [32X[104X345[4X[28X[128X[104X346[4X[25Xgap>[125X [27Xx:=[ [ 0, 1, 0 ],[127X[104X347[4X[25X>[125X [27X [ 0, 0, 0 ], [127X[104X348[4X[25X>[125X [27X [ 0, 0, 0 ] ];;[127X[104X349[4X[25Xgap>[125X [27Xy:=[ [ 0, 0, 0 ], [127X[104X350[4X[25X>[125X [27X [ 0, 0, 1 ], [127X[104X351[4X[25X>[125X [27X [ 0, 0, 0 ] ];;[127X[104X352[4X[25Xgap>[125X [27XR := Algebra( GF(2), One(GF(2))*[x,y] ); [127X[104X353[4X[28X<algebra over GF(2), with 2 generators>[128X[104X354[4X[25Xgap>[125X [27XRadicalOfAlgebra(R) = R; [127X[104X355[4X[28Xtrue[128X[104X356[4X[25Xgap>[125X [27XDimension(R);[127X[104X357[4X[28X3[128X[104X358[4X[25Xgap>[125X [27XG := AdjointGroup( R );[127X[104X359[4X[28X<group of size 8 with 2 generators>[128X[104X360[4X[25Xgap>[125X [27XStructureDescription( G );[127X[104X361[4X[28X"D8"[128X[104X362[4X[28X[128X[104X363[4X[32X[104X364365[33X[0;0YIf the ring [3XR[103X is not a radical algebra, then [5XCircle[105X will use another366approach. We will enumerate all elements of the ring [3XR[103X and select those that367are units with respect to the circle multiplication. Then we will use a368random approach similar to the case of the radical algebra, to find some369generating set of the adjoint group. Again, all warnings 1-3 above refer370also to this case.[133X371372[33X[0;0YOf course, enumeration of all elements of [3XR[103X should be feasible for this373computation. In the following example we demonstrate how it works for rings,374generated by residue classes:[133X375376[4X[32X Example [32X[104X377[4X[28X[128X[104X378[4X[25Xgap>[125X [27XR := Ring( [ ZmodnZObj(2,8) ] );[127X[104X379[4X[28X<ring with 1 generators>[128X[104X380[4X[25Xgap>[125X [27XG := AdjointGroup( R );[127X[104X381[4X[28X<group of size 4 with 2 generators>[128X[104X382[4X[25Xgap>[125X [27XStructureDescription( G );[127X[104X383[4X[28X"C2 x C2"[128X[104X384[4X[25Xgap>[125X [27XR := Ring( [ ZmodnZObj(2,256) ] ); [127X[104X385[4X[28X<ring with 1 generators>[128X[104X386[4X[25Xgap>[125X [27XG := AdjointGroup( R );;[127X[104X387[4X[25Xgap>[125X [27XStructureDescription( G );[127X[104X388[4X[28X"C64 x C2"[128X[104X389[4X[28X[128X[104X390[4X[32X[104X391392[33X[0;0YDue to the [2XAdjointSemigroup[102X ([14X3.3-1[114X), there is also another way to compute393the adjoint group of a ring [22XR[122X by means of the computation of its adjoint394semigroup [22XS(R)[122X and taking the Green's [22XH[122X-class of the multiplicative neutral395element of [22XS(R)[122X. Let us repeat the last example in this way:[133X396397[4X[32X Example [32X[104X398[4X[28X[128X[104X399[4X[25Xgap>[125X [27XR := Ring( [ ZmodnZObj(2,256) ] ); [127X[104X400[4X[28X<ring with 1 generators>[128X[104X401[4X[25Xgap>[125X [27XS := AdjointSemigroup( R );[127X[104X402[4X[28X<monoid with 128 generators>[128X[104X403[4X[25Xgap>[125X [27XH := GreensHClassOfElement(S,One(S));[127X[104X404[4X[28X<Green's H-class: <object>>[128X[104X405[4X[25Xgap>[125X [27XG:=AsGroup(H);[127X[104X406[4X[28X<group of size 128 with 2 generators>[128X[104X407[4X[25Xgap>[125X [27XStructureDescription(G);[127X[104X408[4X[28X"C64 x C2"[128X[104X409[4X[28X[128X[104X410[4X[32X[104X411412[33X[0;0YHowever, the conversion of the Green's [22XH[122X-class to the group may take some413time which may vary dependently on the particular ring in question, and will414also display a lot of warnings about the default415[10XIsGeneratorsOfMagmaWithInverses[110X method, so we did not implemented this as as416standard method. In the following example the method based on Green's417[22XH[122X-class is much slower than an application of earlier described random418approach (20s vs 10ms):[133X419420[4X[32X Example [32X[104X421[4X[28X[128X[104X422[4X[25Xgap>[125X [27XR := Ring( [ ZmodnZObj(2,256) ] ); [127X[104X423[4X[28X<ring with 1 generators>[128X[104X424[4X[25Xgap>[125X [27XAdjointGroup(R);;[127X[104X425[4X[25Xgap>[125X [27XR := Ring( [ ZmodnZObj(2,256) ] );[127X[104X426[4X[28X<ring with 1 generators>[128X[104X427[4X[25Xgap>[125X [27XS:=AdjointSemigroup(R); [127X[104X428[4X[28X<monoid with 128 generators>[128X[104X429[4X[25Xgap>[125X [27XAsGroup(GreensHClassOfElement(S,One(S))); [127X[104X430[4X[28X<group of size 128 with 2 generators>[128X[104X431[4X[28X[128X[104X432[4X[32X[104X433434[33X[0;0YFinally, note that if [3XR[103X has a unity [22X1[122X, then the set [22X1+R^ad[122X, where [22XR^ad[122X is435the adjoint semigroup of [3XR[103X, coincides with the multiplicative semigroup436[22XR^mult[122X of [22XR[122X, and the map [22Xr ↦ (1+r)[122X for [22Xr[122X in [22XR[122X is an isomorphism from [22XR^ad[122X437onto [22XR^mult[122X.[133X438439[33X[0;0YSimilarly, the set [22X1+R^*[122X, where [22XR^*[122X is the adjoint group of [3XR[103X, coincides440with the unit group of [22XR[122X, which we denote [22XU(R)[122X, and the map [22Xr ↦ (1+r)[122X for [22Xr[122X441in [22XR[122X is an isomorphism from [22XR^*[122X onto [22XU(R)[122X.[133X442443[33X[0;0YWe demonstrate this isomorphism using the following example.[133X444445[4X[32X Example [32X[104X446[4X[28X[128X[104X447[4X[25Xgap>[125X [27XLoadPackage( "laguna", false );[127X[104X448[4X[28Xtrue[128X[104X449[4X[25Xgap>[125X [27XFG := GroupRing( GF(2), DihedralGroup(8) );[127X[104X450[4X[28X<algebra-with-one over GF(2), with 3 generators>[128X[104X451[4X[25Xgap>[125X [27XR := AugmentationIdeal( FG );;[127X[104X452[4X[25Xgap>[125X [27XG := AdjointGroup( R );;[127X[104X453[4X[25Xgap>[125X [27XIdGroup( G );[127X[104X454[4X[28X[ 128, 170 ][128X[104X455[4X[25Xgap>[125X [27XIdGroup( Units( FG ) );[127X[104X456[4X[28X#I LAGUNA package: Computing the unit group ...[128X[104X457[4X[28X[ 128, 170 ][128X[104X458[4X[28X[128X[104X459[4X[32X[104X460461[33X[0;0YThus, dependently on the ring [10XR[110X in question, it might be possible that you462can compute much faster its unit group using [10XUnits(R)[110X than its adjoint group463using [10XAdjointGroup(R)[110X. This is why in an attempt of computation of the464adjoint group of the ring with one a warning message will be displayed:[133X465466[4X[32X Example [32X[104X467[4X[28X[128X[104X468[4X[25Xgap>[125X [27XSize( AdjointGroup( GroupRing( GF(2), DihedralGroup(8) ) ) );[127X[104X469[4X[28X[128X[104X470[4X[28XWARNING: usage of AdjointGroup for associative ring <R> with one!!! [128X[104X471[4X[28XIn this case the adjoint group is isomorphic to the unit group [128X[104X472[4X[28XUnits(<R>), which possibly may be computed faster!!! [128X[104X473[4X[28X[128X[104X474[4X[28X128[128X[104X475[4X[25Xgap>[125X [27XSize( AdjointGroup( Integers mod 11 ) ); [127X[104X476[4X[28X[128X[104X477[4X[28XWARNING: usage of AdjointGroup for associative ring <R> with one!!! [128X[104X478[4X[28XIn this case the adjoint group is isomorphic to the unit group [128X[104X479[4X[28XUnits(<R>), which possibly may be computed faster!!! [128X[104X480[4X[28X[128X[104X481[4X[28X10[128X[104X482[4X[28X[128X[104X483[4X[32X[104X484485[33X[0;0YIf [3XR[103X is infinite, an error message will appear, telling that [5XCircle[105X does not486provide methods to deal with infinite rings.[133X487488489[1X3.4 [33X[0;0YService functions[133X[101X490491[1X3.4-1 InfoCircle[101X492493[29X[2XInfoCircle[102X[32X info class494495[33X[0;0Y[10XInfoCircle[110X is a special Info class for [5XCircle[105X algorithms. It has 2 levels: 0496(default) and 1. To change info level to [10Xk[110X, use command497[10XSetInfoLevel(InfoCircle, k)[110X.[133X498499[4X[32X Example [32X[104X500[4X[28X[128X[104X501[4X[25Xgap>[125X [27XSetInfoLevel( InfoCircle, 1 );[127X[104X502[4X[25Xgap>[125X [27XSetInfoLevel(InfoCircle,1);[127X[104X503[4X[25Xgap>[125X [27XR := Ring( [ ZmodnZObj(2,8) ]);[127X[104X504[4X[28X<ring with 1 generators>[128X[104X505[4X[25Xgap>[125X [27XG := AdjointGroup( R );[127X[104X506[4X[28X#I Circle : <R> is not a radical algebra, computing circle units ...[128X[104X507[4X[28X#I Circle : searching generators for adjoint group ...[128X[104X508[4X[28X<group of size 4 with 2 generators>[128X[104X509[4X[25Xgap>[125X [27XSetInfoLevel( InfoCircle, 0 );[127X[104X510[4X[28X[128X[104X511[4X[32X[104X512513514515