Вычисления
в групповых кольцах с помощью пакета LAGUNA 3.0
Пакет
LAGUNA 3.0 расширяет возможности GAP 4.3 для работы с групповыми
кольцами. Название пакета означает "Lie AlGebras and
UNits of group Algebras". Кроме определения некоторых общих
характеристик групповых колец и их элементов, LAGUNA позволяет исследовать
Лиевские свойства группового кольца конечной группы и вычислять нормированную
мультипликативную группу модулярной групповой алгебры конечной р-группы
над полем из р элементов. Домашняя страница пакета LAGUNA c
дальнейшей информацией о нем, документацией и дистрибутивом находится по
адресу http://ukrgap.exponenta.ru/laguna.htm.
Для демонстрации возможностей пакета LAGUNA выполним некоторые вычисления
в групповой алгебре группы диэдра порядка 16 над полем из двух элементов.
Вначале мы создадим эту групповую алгебру:
gap> K := GF( 2 );
GF(2)
gap> G := DihedralGroup( 16 );
<pc group of size 16 with 4 generators>
gap> KG := GroupRing( K, G );
<algebra-with-one over GF(2), with 4 generators>
Некоторые свойства и атрибуты групповой алгебры KG могут быть получены
сразу же, так как являются прямым следствием ее определения:
gap> IsGroupAlgebra( KG );
true
gap> IsPModularGroupAlgebra( KG );
true
gap> IsFModularGroupAlgebra( KG );
true
gap> UnderlyingGroup( KG );
<pc group of size 16 with 4 generators>
gap> LeftActingDomain( KG );
GF(2)
Так как KG является групповой алгеброй, то информация, хранимая в
атрибуте LeftActingDomain, также может быть получена двумя другими
способами:
gap> UnderlyingRing( KG );
GF(2)
gap> UnderlyingField( KG );
GF(2)
Построим некоторый элемент данной групповой алгебры. Например, возьмем минимальную
систему порождающих элементов группы G и найдем соответствующие им
элементы в KG:
gap> MinimalGeneratingSet( G );
[ f1, f2 ]
gap> l := List( last, g -> g^Embedding( G, KG ) );
[ (Z(2)^0)*f1, (Z(2)^0)*f2 ]
Теперь зададим элемент x следующим образом:
gap> a :=l[1]; b:=l[2]; # a и b - образы порождающих элементов группы
в KG
(Z(2)^0)*f1
(Z(2)^0)*f2
gap> e := One( KG ); # для удобства, обозначим нейтральный элемент
через e
(Z(2)^0)*<identity> of ...
gap> x := ( e + a ) * ( e + b );
(Z(2)^0)*<identity> of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2
Исследуем некоторые основные
свойства этого элемента:
gap> Support( x );
[ <identity> of ..., f1, f2, f1*f2 ]
gap> CoefficientsBySupport( x );
[ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ]
gap> Length( x );
4
gap> TraceOfMagmaRingElement( x );
Z(2)^0
Мы можем также вычислить
сумму коэффициентов элемента x:
gap> Augmentation( x );
0*Z(2)
gap> IsUnit( KG, x );
false
Так как сумма коэффициентов
равна нулю, то x не является обратимым, но 1+x - обратим. Это
также легко проверить:
gap> y := e + x;
(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2
gap> IsUnit( KG, y );
true
Обратный элемент к 1+x
вычисляется очень легко:
gap> y^-1;
(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f4+(Z(2)^0)*f1*f2+(Z(2)^0)*f1*f3+(
Z(2)^0)*f1*f4+(Z(2)^0)*f2*f4+(Z(2)^0)*f1*f2*f4+(Z(2)^0)*f2*f3*f4+(Z(2)^
0)*f1*f2*f3*f4
Проверим, что получен в
действительности обратный элемент:
gap> y * y^-1;
(Z(2)^0)*<identity> of ...
Мы можем также проверить,
является ли y симметричным (т.е., инвариантным относительно классической
инволюции), а также является ли y унитарным (т.е., переводится классической
инволюцией в элемент, обратный к y). В данном случае ни то, ни другое
условие не выполняется:
gap> Involution( y );
(Z(2)^0)*f1+(Z(2)^0)*f1*f2+(Z(2)^0)*f2*f3*f4
gap> y = Involution( y );
false
gap> y * Involution( y );
(Z(2)^0)*<identity> of ...+(Z(2)^0)*f2+(Z(2)^0)*f2*f3*f4
Теперь вычислим некоторые важные идеалы групповой алгебры KG. Сначала
получим фундаментальный идеал, который совпадает с множеством элементов, у
которых сумма коэффициентов равна нулю. В нашем случае он совпадает с радикалом
групповой алгебры:
gap> AugmentationIdeal( KG );
<two-sided ideal in <algebra-with-one of dimension 16 over GF(2)>,
(dimension 15)>
gap> AugmentationIdeal( KG ) = RadicalOfAlgebra( KG );
true
Хорошо известно, что в
данном случае фундаментальный идеал является нильпотентным идеалом. Используя
теорию размерностных подгрупп, мы можем вычислить его индекс нильпотентности
без непосредственного вычисления степеней фундаментального идела:
gap> AugmentationIdealNilpotencyIndex( KG );
9
С другой стороны, мы можем
вычислить и степени фундаментального идела:
gap> AugmentationIdealPowerSeries( KG );
[ <algebra of dimension 15 over GF(2)>, <algebra of dimension 13
over GF(2)>,
<algebra of dimension 11 over GF(2)>, <algebra of dimension 9
over GF(2)>,
<algebra of dimension 7 over GF(2)>, <algebra of dimension 5
over GF(2)>,
<algebra of dimension 3 over GF(2)>, <algebra of dimension 1
over GF(2)>,
<algebra over GF(2)> ]
Как видно, длина данного списка совпадает с полученным ранее индексом нильпотентности.
Теперь покажем, как работать с мультипликативной группой групповой алгебры
KG. Сначала вычислим нормированную мультипликативную группу, состоящую
из элементов, у которых сумма коэффициентов равна единице. Эта группа может
быть вычислена очень быстро, но дальнейшие вычисления в ней малоэффективны:
gap> V := NormalizedUnitGroup( KG );
<group of size 32768 with 15 generators>
Для того, чтобы сделать возможными эффективные вычисления в нормированной
мультипликативной группе, вычислим изоморфную ей рс-группу:
gap> W := PcNormalizedUnitGroup( KG );
<pc group of size 32768 with 15 generators>
В системе GAP имеется много мощных алгортмов для рс-групп, и теперь
они все доступны нам для изучения структуры нормированной мультипликативной
группы. Для того, чтобы иметь возможность интерпретировать их результаты в
групповой алгебре, нужно установить изоморфизм между нормированной мультипликативной
группой, порожденной элементами групповой алгебры, и ее рс-представлением.
Первый из изоморфизмов
отображает NormalizedUnitGroup(KG) в ее рс-представление PcNormalizedUnitGroup(PC).
Найдем с его помощью образы элементов группы G в W:
gap> t := NaturalBijectionToPcNormalizedUnitGroup( KG );
MappingByFunction( <group of size 32768 with 15 generators>, <pc
group of size
32768 with 15 generators>, function( x ) ... end )
gap> List( AsList( G ), x -> ( x^Embedding( G, KG ) )^t );
[ <identity> of ..., f2, f1, f3, f7, f1*f2*f3, f2*f3, f2*f7, f1*f3,
f1*f7, f3*f7,
f1*f2*f7, f1*f2*f3*f7, f2*f3*f7, f1*f3*f7, f1*f2 ]
Второй изоморфизм является
обратным к предыдущему:
gap> f := NaturalBijectionToNormalizedUnitGroup( KG );
[ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15 ] ->
[ (Z(2)^0)*f2, (Z(2)^0)*f1, (Z(2)^0)*f3, (Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2,
(Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f2*f3, (Z(2)^0)*f1+(Z(2)^0)*f3+(Z(2)^0)*f1*f3,
(Z(2)^0)*f4, (Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f1*f2+(Z(2)^0)*f1*f3+(
Z(2)^0)*f2*f3+(Z(2)^0)*f1*f2*f3, (Z(2)^0)*f2+(Z(2)^0)*f4+(Z(2)^0)*f2*f4,
(Z(2)^0)*f1+(Z(2)^0)*f4+(Z(2)^0)*f1*f4, (Z(2)^0)*f3+(Z(2)^0)*f4+(Z(2)^0)*f3*f4,
(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f4+(Z(2)^0)*f1*f2+(Z(2)^0)*f1*f4+(Z(2)^
0)*f2*f4+(Z(2)^0)*f1*f2*f4, (Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f4+(Z(2)^
0)*f2*f3+(Z(2)^0)*f2*f4+(Z(2)^0)*f3*f4+(Z(2)^0)*f2*f3*f4,
(Z(2)^0)*f1+(Z(2)^0)*f3+(Z(2)^0)*f4+(Z(2)^0)*f1*f3+(Z(2)^0)*f1*f4+(Z(2)^
0)*f3*f4+(Z(2)^0)*f1*f3*f4, (Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f4+(
Z(2)^0)*f1*f2+(Z(2)^0)*f1*f3+(Z(2)^0)*f1*f4+(Z(2)^0)*f2*f3+(Z(2)^0)*f2*f4+(
Z(2)^0)*f3*f4+(Z(2)^0)*f1*f2*f3+(Z(2)^0)*f1*f2*f4+(Z(2)^0)*f1*f3*f4+(Z(2)^
0)*f2*f3*f4+(Z(2)^0)*f1*f2*f3*f4 ]
В качестве примера вычислим классы сопряженных элементов группы W,
а затем найдем представитель одного из классов в групповой алгебре KG:
gap> cc := ConjugacyClasses( W );;
gap> Length( cc );
848
gap> Representative( cc[ Length( cc ) ] );
f1*f2*f4*f6*f12*f15
gap> last^f;
(Z(2)^0)*<identity> of ...+(Z(2)^0)*f2+(Z(2)^0)*f4+(Z(2)^0)*f1*f2+(Z(2)^0)*f1*f3+(
Z(2)^0)*f1*f4+(Z(2)^0)*f2*f3+(Z(2)^0)*f2*f4+(Z(2)^0)*f3*f4+(Z(2)^0)*f1*f2*f3+(Z(2)^
0)*f1*f3*f4
Имея pc-представление нормированной
мультипликативной группы, мы можем использовать всю мощь имеющихся в GAP
методов для рс-групп. Например, очень быстро вычисляется ее нижний центральный
ряд:
gap> LowerCentralSeries( W );
[ <pc group of size 32768 with 15 generators>,
Group([ f3, f5*f8*f10*f12*f13*f14*f15, f6*f8*f12*f14*f15, f7, f9*f12,
f10*f14,
f11*f13, f13*f14, f14*f15 ]),
Group([ f7, f9*f12, f10*f15, f11*f15, f13*f15, f14*f15 ]),
Group([ f11*f15, f13*f15, f14*f15 ]), Group([ <identity> of ...
]) ]
Допустим, необходимо найти минимальную систему порождающих элементов центра
нормированной мультипликативной группы. Сначала мы произведем вычисления в
рс-группе, а затем отобразим результат в групповую алгебру:
gap> C := Centre( W );
Group([ f3*f5*f13*f15, f7, f15, f13*f15, f14*f15, f11*f13*f14*f15 ])
gap> m := MinimalGeneratingSet( C );
[ f11, f13, f14, f15, f3*f5*f13*f15 ]
gap> List( m, g -> g^f );
[ (Z(2)^0)*f3+(Z(2)^0)*f4+(Z(2)^0)*f3*f4, (Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f4+(
Z(2)^0)*f2*f3+(Z(2)^0)*f2*f4+(Z(2)^0)*f3*f4+(Z(2)^0)*f2*f3*f4,
(Z(2)^0)*f1+(Z(2)^0)*f3+(Z(2)^0)*f4+(Z(2)^0)*f1*f3+(Z(2)^0)*f1*f4+(Z(2)^
0)*f3*f4+(Z(2)^0)*f1*f3*f4, (Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f3+(Z(2)^0)*f4+(
Z(2)^0)*f1*f2+(Z(2)^0)*f1*f3+(Z(2)^0)*f1*f4+(Z(2)^0)*f2*f3+(Z(2)^0)*f2*f4+(
Z(2)^0)*f3*f4+(Z(2)^0)*f1*f2*f3+(Z(2)^0)*f1*f2*f4+(Z(2)^0)*f1*f3*f4+(Z(2)^
0)*f2*f3*f4+(Z(2)^0)*f1*f2*f3*f4, (Z(2)^0)*f1+(Z(2)^0)*f4+(Z(2)^0)*f1*f2+(Z(2)^
0)*f1*f3+(Z(2)^0)*f1*f4+(Z(2)^0)*f2*f3+(Z(2)^0)*f2*f4+(Z(2)^0)*f1*f2*f3+(Z(2)^
0)*f1*f2*f4+(Z(2)^0)*f1*f3*f4+(Z(2)^0)*f1*f2*f3*f4 ]
Мы закончим демонстрацию
пакета LAGUNA определением некоторых Лиевских свойств групповой алгебры
KG, понятных из названия используемых в этом примере функций:
gap> L := LieAlgebra( KG );
<Lie algebra of dimension 16 over GF(2)>
gap> D := LieDerivedSubalgebra( L );
<Lie algebra of dimension 9 over GF(2)>
gap> LC := LieCentre( L );
<Lie algebra of dimension 7 over GF(2)>
gap> LieLowerNilpotencyIndex( KG );
5
gap> LieUpperNilpotencyIndex( KG );
5
gap> IsLieAbelian( L );
false
gap> IsLieSolvable( L );
true
gap> IsLieMetabelian( L );
false
gap> IsLieCentreByMetabelian( L );
true
Описание всех функций,
используемых в данном примере, содержится в руководстве пользователя, которое
является частью пакета, а также находится на домашней странице пакета LAGUNA
по адресу http://ukrgap.exponenta.ru/laguna.htm.