Купить Matlab  |  Mathematica  |  Mathcad  |  Maple  |  Statistica  |  Другие пакеты Поиск по сайту
Internet-класс  |  Примеры  |  Методики  |  Форум  |  Download
https://hub.exponenta.ru/


Система компьютерной алгебры GAP.
А.Б.Коновалов

В начало

 

Приложение

Операции над группами и их элементами
К предыдущему разделуК следующему разделу

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

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

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

    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  Задание подгруппы группы подстановок

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

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

Таким образом, A8 описывается как подгруппа группы s8, которая порождается указанными шестью подстановками. Это представление намного короче, чем внутренняя структура a8, (которую можно посмотреть с помощью функций RecFields и PrintRec), но для понимания его вполне достаточно.

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

    gap> s8.name:= "s8";
    "s8"
    gap> a8;
    Subgroup( s8 ,[ (1,3,2), (2,4,3), (2,3)(4,5),
    (2,4,6,5,3), (2,5,3)(4,7,6), (2,3)(5,6,8,7)] )
    gap> a8.name:= "a8";
    "a8"
    gap> a8;
    a8

Как только группа будет содержать поле name, вместо самого описания группы будет выводиться ее имя:

    gap> copya8:= Copy( a8 );
    a8

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

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

Изучим группу a8. Она является записью, список полей которой возвращает функция RecFields:

    gap> RecFields( a8 );
    [ "isDomain", "isGroup", "parent", "identity",
      "generators", "operations", "isPermGroup",
      "1", "2", "3", "4", "5", "6", "stabChainOptions",
      "stabChain", "orbit", "transversal",
      "stabilizer", "name" ]

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

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

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

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

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

    gap> Set( Factors( Size( a8 ) ) );
    [ 2, 3, 5, 7 ]
    gap> for p in last do
    >       SylowSubgroup( a8, p );
    >     od;
    gap> a8.sylowSubgroups;
    [ , Subgroup(s8,[(1,5)(7,8), (1,5)(2,6),
      (3,4)(7,8), (2,3)(4,6),(1,7)(2,3)(4,6)(5,8),
      (1,2)(3,7)(4,8)(5,6)]),
      Subgroup( s8, [ (3,8,7), (2,6,4)(3,7,8) ] ),,
      Subgroup( s8, [ (3,7,8,6,4) ] ),,
      Subgroup( s8, [ (2,8,4,5,7,3,6) ] ) ]

sylowSubgroups является списком, p-м элементом которого является силовская p-подгруппа, если такая существует (поэтому 1-й, 4-й и 6-й элементы списка не определены).

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

    gap> syl2:= last[2];;
    gap> Size( syl2 );
    64

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

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

Проверим, совпадает ли он с syl2:

    gap> last = syl2;
    true

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

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

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

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

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

    gap> Size( cent );
    192

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

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

Последний элемент полученного списка — тривиальная подгруппа, поэтому cent - разрешимая группа.

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

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

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

gap> low:= LowerCentralSeries( cent );
[ Subgroup( s8, [ (1,5)(2,6)(3,4)(7,8), (3,4)(7,8),
          (3,7)(4,8), (2,3)(4,6), (1,2)(5,6) ] ),
  Subgroup( s8, [ (1,6,3)(2,4,5), (1,8,3)(4,5,7),
          (1,7)(2,3)(4,6)(5,8), (1,5)(2,6) ] ) ]

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

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

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

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

    gap> Random( a8 );
    (1,6,3,2,7)(4,5,8)

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

    gap> Random( a8 );
    (1,3,2,4,7,5,6)
    gap> cent:= Centralizer( a8,(1,2)(3,4)(5,8)(6,7) );
    Subgroup( s8, [ (1,2)(3,4)(5,8)(6,7), (5,6)(7,8),
                    (5,7)(6,8), (3,4)(6,7), (3,5)(4,8),
                    (1,3)(2,4) ] )
    gap> Size( cent );
    192
    gap> conj:= ConjugateSubgroup( cent, (2,3,4) );
    Subgroup( s8, [ (1,3)(2,4), (5,8)(6,7), (5,6)(7,8),
                            (5,7)(6,8), (2,4)(6,7), (2,8)(4,5),
                            (1,4)(2,3)] )
    gap> inter:= Intersection( cent, conj );
    Subgroup( s8, [ (5,6)(7,8), (5,7)(6,8), (1,2)(3,4),
                    (1,3)(2,4) ] )
    gap> Size( inter ); IsElementaryAbelian( inter );
    16
    true
    gap> norm:= Normalizer( a8, inter );
    Subgroup( s8, [ (6,7,8), (5,6,8), (3,4)(6,8),
                    (2,3)(6,8), (1,2)(6,8),
                    (1,5)(2,6,3,7,4,8) ] )
    gap> Size( norm );
    576

Теперь построим в группе a8 элементарную абелеву подгруппу порядка 8, каждая инволюция (т.е. элемент порядка 2) в которой не имеет неподвижных точек, а затем вычислим  ее нормализатор в :

    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> norm:=Normalizer( a8, AsSubgroup(s8, elab) );
    Subgroup( s8, [(5,6)(7,8), (5,7)(6,8), (3,4)(7,8),
                           (3,5)(4,6), (2,3)(6,7), (1,2)(7,8)])
    gap> Size( norm );
    1344

Заметим, что группа elab была определена как отдельная группа, поэтому мы воспользовались функцией AsSubgroup для того, чтобы рассматривать ее как подгруппу в a8. Применение команды Normalizer(a8,elab); дало бы тот же результат, однако было бы некорректным. В последнем случае недоступны некоторые эффективные алгоритмы, что может существенно увеличить время расчета.

Еще один пример использования функции AsSubgroup, обращающий внимание на правильное указание группы, подгруппа которой рассматривается:

    gap> IsSubgroup( a8, AsSubgroup( a8, elab ) );
    Error, <G> must be a parent group in
    AsSubgroup( a8, elab ) called from main loop
    brk> quit;
    gap> IsSubgroup( a8, AsSubgroup( s8, elab ) );
    true

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

    gap> elab < a8;
    false
    gap> AsSubgroup( s8, elab ) < a8;
    false

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

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

    gap> elab = AsSubgroup( s8, elab );
    true

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

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

Теперь вычислим факторгруппу подгруппы norm по подгруппе elab (см. предыдущий параграф). Сначала зададим elab как подгруппу группы s8:

    gap> elab:= AsSubgroup( s8, elab );;
    gap> elab.name:= "elab";;

Факторгруппу f получаем следующим образом:

    gap> f:= norm / elab;
    (Subgroup(s8, [ (5,6)(7,8), (5,7)(6,8), (3,4)(7,8),
       (3,5)(4,6), (2,3)(6,7), (1,2)(7,8) ] ) / elab)
    gap> Size( f );
    168

Полученная группа f, как видно из результата, уже не является группой подстановок. Но операции над ней и ее элементами производятся аналогично:

    gap> Random( f );
    FactorGroupElement( elab, (2,8,7)(3,5,6) )
    gap> Order( f, last );
    3

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

    gap> f.name:= "f";;
    gap> hom:= NaturalHomomorphism( norm, f );
    NaturalHomomorphism( Subgroup( s8, [ (5,6)(7,8),
      (5,7)(6,8), (3,4)(7,8), (3,5)(4,6), (2,3)(6,7),
      (1,2)(7,8) ] ), (Subgroup( s8, [ (5,6)(7,8),
      (5,7)(6,8), (3,4)(7,8), (3,5)(4,6), (2,3)(6,7),
      (1,2)(7,8) ] ) / elab) )

Ядром естественного гомоморфизма является elab:

    gap> Kernel( hom ) = elab;
    true

Пусть теперь x - произвольный элемент в norm. вычислим сначала его образ, а затем смежный класс, в котором содержится x, как множество прообразов соответствующего элемента факторгруппы:

    gap> x:= Random( norm );
    (1,7,5,8,3,6,2)
    gap> Image( hom, x );
    FactorGroupElement( elab, (2,7,3,4,6,8,5) )
    gap> coset:= PreImages( hom, last );
    (elab*(2,7,3,4,6,8,5))
    gap> IsCoset( coset ); x in coset; coset in f;
    true
    true
    false

Действие группы f на множестве своих элементов с помощью умножения справа приводит к регулярному представлению группы f подстановками, т.е. к новой группе подстановок.

    gap> op:= Operation( f, Elements( f ), OnRight );;
    gap> IsPermGroup( op );
    true
    gap> Maximum( List( op.generators,
    >                    LargestMovedPointPerm ) );
    168
    gap> IsSimple( op );
    true

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

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

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

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

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

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

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

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

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

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

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

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

В начало страницы К предыдущему разделуК следующему разделу

Приложение

| На первую страницу | Поиск | Купить Matlab

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter


Copyright © 1993-2024. Компания Softline. Все права защищены.

Дата последнего обновления информации на сайте: 04.03.17
Сайт начал работу 01.09.00