Перейти к главе: Начало 1 2 3 4 A B C Bib Ind
 [Начало книги]  [Содержание]   [Предыдущая глава]   [Следующая глава] 

4 Операции над группами и их элементами
 4.1 Задание группы подстановок
 4.2 Задание подгруппы группы подстановок
 4.3 Простейшие свойства группы. Силовские подгруппы
 4.4 Другие виды подгрупп
 4.5 Факторгруппы
 4.6 Классы сопряженных элементов

4 Операции над группами и их элементами

4.1 Задание группы подстановок

Данный раздел посвящен операциям над группами и их элементами. Приведенные ниже примеры используют группы подстановок, но большинство используемых в них функций (в т.ч. Group, Size, SylowSubgroup) применяется и к другим используемым в GAP видам групп, для каждого из которых вычисления производятся по специальному алгоритму.

Зададим группу подстановок, которая порождается (записанными в виде произведения независимых циклов) подстановками (1 2) и (1 2 3 4 5 6 7 8). Эта группа есть не что иное, как симметрическая группа S_8:


gap> s8:= Group( (1,2), (1,2,3,4,5,6,7,8) );
Group([ (1,2), (1,2,3,4,5,6,7,8) ])

4.2 Задание подгруппы группы подстановок

Группа S_8 содержит знакопеременную группу A_8, которая может быть задана как подгруппа, состоящая из четных подстановок, или как ее коммутант:


gap> a8 := DerivedSubgroup( s8 );
Group([ (1,2,3), (2,3,4), (3,4,5), (2,6)(3,4), (3,7)(4,5), (3,5,6,7)(4,8) ])

Если обращение к объекту происходит часто, удобно присвоить ему имя. В этом случае при следующих обращениях к объекту вместо его представления будет выводиться на печать его имя:


gap> SetName(a8,"A8");
gap> a8;
A8

Несмотря на отсутствие связи между именем и идентификатором, их желательно выбирать согласованно.

4.3 Простейшие свойства группы. Силовские подгруппы

Изучим группу a8. Она является объектом, список известных свойств и атрибутов которого можно получить следующим образом:


gap> KnownPropertiesOfObject(a8);
[ "IsFinite", "CanEasilyCompareElements", "CanEasilySortElements",
  "IsDuplicateFree", "IsGeneratorsOfMagmaWithInverses", "IsAssociative",
  "IsSimpleSemigroup", "IsRegularSemigroup", "IsCompletelyRegularSemigroup",
  "IsCompletelySimpleSemigroup", "IsFinitelyGeneratedGroup",
  "IsSubsetLocallyFiniteGroup", "KnowsHowToDecompose", "IsNilpotentByFinite" ]
gap> KnownAttributesOfObject(a8);
[ "Name", "OneImmutable", "ParentAttr", "LargestMovedPoint",
  "GeneratorsOfMagmaWithInverses", "MultiplicativeNeutralElement",
  "StabChainMutable", "StabChainOptions" ]

Этот список может расширяться в процессе работы с объектом, так как многие функции сохраняют информацию о нем в новых атрибутах и свойствах, что позволяет эффективно избегать повторных вычислений. Например, найдем порядок группы. Видно, что скорость его повторного определения существенно выше, так как вместо его вычисления просто выводится на печать его уже сохраненное значение.


gap> Size( a8 );
20160
gap> time;
7
gap> Size( a8 );
20160
gap> time;
7

Теперь проверим, является ли группа абелевой и совершенной:


gap> IsAbelian( a8 ); IsPerfect( a8 );
false
true

Сравним теперь список известных свойств и атрибутов с первоначальным и увидим, что добавились к ним новые:


gap> KnownPropertiesOfObject(a8);
[ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite",
  "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",
  "IsGeneratorsOfMagmaWithInverses", "IsAssociative", "IsCommutative",
  "IsSimpleSemigroup", "IsRegularSemigroup", "IsCompletelyRegularSemigroup",
  "IsCompletelySimpleSemigroup", "IsFinitelyGeneratedGroup",
  "IsSubsetLocallyFiniteGroup", "KnowsHowToDecompose", "IsPerfectGroup",
  "IsNilpotentByFinite", "IsTorsionFree", "IsFreeAbelian" ]
gap> KnownAttributesOfObject(a8);
[ "Name", "Size", "OneImmutable", "ParentAttr", "LargestMovedPoint",
  "GeneratorsOfMagmaWithInverses", "TrivialSubmagmaWithOne",
  "MultiplicativeNeutralElement", "DerivedSubgroup", "StabChainMutable",
  "StabChainOptions" ]

Теперь получим список простых делителей порядка группы:


gap> Set( Factors( Size( a8 ) ) ); 
[ 2, 3, 5, 7 ] 

Для каждого из простых делителей p вычислим силовскую p-подгруппу и напечатаем ее порядок:


gap> for p in last do
> Print(p, " : ", Size(SylowSubgroup(a8,p)),"\n");
> od;
2 : 64
3 : 9
5 : 5
7 : 7

Исследуем силовскую 2-подгруппу. Обозначим ее syl2:


gap> syl2:=SylowSubgroup(a8,2);
Group([ (1,7)(6,8), (1,7)(2,5), (3,4)(6,8), (2,6)(5,8), (1,3)(2,6)(4,7)
(5,8), (1,2)(3,6)(4,8)(5,7) ])

Теперь вычислим ее нормализатор в a8:


gap> Normalizer( a8, syl2 );
Group([ (1,7)(2,5), (1,7)(6,8), (2,5)(3,4), (2,8)(5,6), (1,4)(2,8)(3,7)
(5,6), (1,8)(2,4)(3,5)(6,7) ])

Проверим, что он совпадает с ней самой:


gap> last = syl2; 
true 

Вычислим центр подгруппы syl2:


gap> Centre(syl2);
Group([ (1,7)(2,5)(3,4)(6,8) ])

Найдем централизатор cent последней подгруппы в a8, т.е. подгруппу элементов а8, перестановочных с каждым элементом центра группы syl2:


gap> cent:= Centralizer( a8, last );
Group([ (1,7)(2,5)(3,4)(6,8), (3,4)(6,8), (3,6)(4,8), (2,3)(4,5), (1,2)
(5,7) ])

Найдем его порядок:


gap> Size( cent ); 
192 

Вычислим ряд коммутантов cent:


gap> DerivedSeries(cent);
[ Group([ (1,7)(2,5)(3,4)(6,8), (3,4)(6,8), (3,6)(4,8), (2,3)(4,5), (1,2)
  (5,7) ]), Group([ (1,6)(2,3)(4,5)(7,8), (2,3,8)(4,6,5), (1,3,6)(4,8,7) ]),
  Group([ (1,4)(2,8)(3,7)(5,6), (1,2)(3,6)(4,8)(5,7), (1,2,7,5)
  (3,8,4,6), (1,3)(2,8)(4,7)(5,6) ]), Group([ (1,7)(2,5)(3,4)(6,8) ]),
  Group(()) ]

Последний элемент полученного списка - тривиальная подгруппа, поэтому cent - разрешимая группа. Порядки подгрупп, входящих в ряд коммутантов (производный ряд) удобно получить следующим образом:


gap> List( last, Size ); 
[ 192, 96, 32, 2, 1 ] 

Вычислим теперь нижний центральный ряд группы cent:


gap> LowerCentralSeries(cent);
[ Group([ (1,7)(2,5)(3,4)(6,8), (3,4)(6,8), (3,6)(4,8), (2,3)(4,5), (1,2)
  (5,7) ]), Group([ (1,6)(2,3)(4,5)(7,8), (2,3,8)(4,6,5), (1,3,6)(4,8,7) ]) ]

4.4 Другие виды подгрупп

Теперь покажем, как найти стабилизатор некоторого элемента множества, на котором действует группа подстановок. Как видно из следующего примера, стабилизатором единицы является подгруппа порядка 2520 и индекса 8, порожденная пятью подстановками:


gap> stab:= Stabilizer( a8, 1 );
Group([ (2,3,4), (3,4,5), (2,6)(3,4), (3,7)(4,5), (3,5,6,7)(4,8) ])
gap> Size(stab);
2520
gap> Index(a8,stab);
8

С помощью функции Random получим случайный элемент из a8:


gap> x:=Random( a8 ); 
(1,6,3,8,5,2,7)

Новые подгруппы могут быть теперь получены путем поиска его централизатора, а затем комбинаций сопряжения и пересечения уже известных подгрупп.


gap> cent:=Centralizer(a8,x);
Group([ (1,6,3,8,5,2,7) ])
gap> Size(cent);
7
gap> conj:= ConjugateSubgroup( cent, (2,3,4) );
Group([ (1,6,4,8,5,3,7) ])
gap> inter:= Intersection( cent, conj );
Group(())

В следующем примере мы вычислим подгруппу группы a8, затем ее нормализатор и в итоге определим структуру факторгруппы. Сначала создадим элементарную абелеву подгруппу порядка 8:


gap> elab := Group( (1,2)(3,4)(5,6)(7,8), (1,3)(2,4)(5,7)(6,8),
>                   (1,5)(2,6)(3,7)(4,8) );;
gap> Size( elab );
8
gap> IsElementaryAbelian( elab );
true

Теперь присвоим ей имя и вычислим ее нормализатор:


gap> SetName( elab, "2^3" ); elab;
2^3
gap> norm := Normalizer( a8, elab );; Size( norm );
1344

4.5 Факторгруппы

Теперь мы имеем подгруппу norm порядка 1344 и ее подгруппу elab, и желаем построить факторгруппу. Поскольку мы также жедаем найти прообразы элементов факторгруппы в norm, нам также понадобится естественный гомоморфизм из norm в факторгруппу с ядром elab.


gap> hom := NaturalHomomorphismByNormalSubgroup( norm, elab );
<action epimorphism>
gap> f := Image( hom );
Group([ (), (), (), (4,5)(6,7), (4,6)(5,7), (2,3)(6,7), (2,4)(3,5), (1,2)
(5,6) ])
gap> Size( f );
168

Полученная факторгруппа f также является группой подстановок. Однако множество, на котором она действует, не имеет ничего общего с множеством точек, на котором действует norm (это просто совпадение, что оба множества являются подмножествами множества натуральных чисел). Теперь мы можем найти образы и прообразы относительно естественного гомоморфизма. Множество прообразов элемента является смежным классом по подгруппе elab. Мы используем функцию PreImages, так как hom не является взаимно однозначным отображением.


gap> ker:= Kernel( hom );
2^3
gap> x := (1,8,3,5,7,6,2);; Image( hom, x );
(1,7,5,6,2,3,4)
gap> coset := PreImages( hom, last );
RightCoset(2^3,(2,8,6,7,3,4,5))

Заметьте, что GAP может выбирать любой из представителей смежного класса прообразов. Конечно же, частное двух представителей одного смежного класса лежит в ядре гомоморфизма:


gap> rep:= Representative( coset );
(2,8,6,7,3,4,5)
gap> x * rep^-1 in ker;
true

Факторгруппа f является простой группой, т.е. она не имеет нетривиальных нормальных подгрупп:


gap> IsSimple( f );
true

Группа norm действует на 8 элементах своей нормальной подгруппы elab с помощью сопряжения, что приводит к представлению группы f в S_8, оставляющему неподвижной только лишь точку 1. Образ этого представления может быть вычислен с помощью функции Action; более того, он даже содежится в группе norm, и мы можем показать, что norm в действительности является расщепимым расширением элементарной абелевой группы elab с помощью группы f.


gap> op := Action( norm, elab );
Group([ (), (), (), (5,6)(7,8), (5,7)(6,8), (3,4)(7,8), (3,5)(4,6), (2,3)
(6,7) ])
gap> IsSubgroup( a8, op ); IsSubgroup( norm, op );
true
true
gap> IsTrivial( Intersection( elab, op ) );
true

Примечание. Нельзя использовать знак "<" вместо IsSubgroup. Так, не приводит к ошибке команда:


gap> elab < a8; 
false 

Оператор же равенства "=" фактически проверяет равенство групп.

4.6 Классы сопряженных элементов

Другим источником информации о группе a8 будет являться ее разбиение на классы сопряженных элементов. Получим список классов сопряженности:


gap> ccl:=ConjugacyClasses(a8);
[ ()^G, (1,7)(2,8)(3,5)(4,6)^G, (1,5,6)(3,4,7)^G, (1,4,5,7,6,3)(2,8)^G,
  (1,4)(5,8)^G, (1,5,4,8)(2,7)^G, (2,5,8,3,4,6,7)^G, (2,7,6,4,3,8,5)^G,
  (2,6,3)^G, (1,7,4,5,8)^G, (1,8,5,4,7)(2,3,6)^G, (1,8,5,4,7)(2,6,3)^G,
  (1,6,7)(2,3)(4,5)^G, (1,2,7,8)(3,6,5,4)^G ]
gap> Length(last);
14 

Теперь определим порядки представителей классов сопряженности, взяв в каждом классе по одному представителю:


gap> reps:= List( ccl, Representative );
[ (), (1,7)(2,8)(3,5)(4,6), (1,5,6)(3,4,7), (1,4,5,7,6,3)(2,8), (1,4)(5,8),
  (1,5,4,8)(2,7), (2,5,8,3,4,6,7), (2,7,6,4,3,8,5), (2,6,3), (1,7,4,5,8),
  (1,8,5,4,7)(2,3,6), (1,8,5,4,7)(2,6,3), (1,6,7)(2,3)(4,5),
  (1,2,7,8)(3,6,5,4) ]
gap> List( reps, r -> Order( r ) );
[ 1, 2, 3, 6, 2, 4, 7, 7, 3, 5, 15, 15, 6, 4 ]

Определим, сколько элементов содержится в каждом классе:


gap> List(ccl,Size);
[ 1, 105, 1120, 3360, 210, 2520, 2880, 2880, 112, 1344, 1344, 1344, 1680,
  1260 ]

Примечание: следует различать функции Order (порядок элемента), Size (порядок группы, класса сопряженности и т.п.) и Length (длина списка). Построив классы сопряженных элементов, мы можем рассматривать их функции, т.е. отображения, принимающие одинаковые значения на всем классе сопряженных элементов. Примером может являться число неподвижных точек:


gap> nrfixedpoints:= function( perm, support )
> return Number( [1 .. support], x -> x^perm = x);
> end;
function( perm, support ) ... end

Вычислим его для группы a8:


gap> permchar1:= List(reps, x->nrfixedpoints(x,8));
[ 8, 0, 2, 0, 4, 2, 1, 1, 5, 3, 0, 0, 1, 0 ]

 [Начало книги]  [Содержание]   [Предыдущая глава]   [Следующая глава] 
Перейти к главе: Начало 1 2 3 4 A B C Bib Ind

generated by GAPDoc2HTML