Задание
группы порождающими элементами и определяющими соотношениями
Для задания группы с помощью
порождающих элементов и определяющих соотношений необходимо сначала создать
свободную группу с соответствующим числом порождающих элементов, а затем
найти ее фактор-группу, указав список слов, которые должны быть равны единице.
Продемонстрируем это, на примере построения группы диэдра порядка 8. Она
задается следующими определяющими соотношениями:
D8 = < a,
b | a4 = 1, b2 = 1, b-1
a b = a-1 >.
Сначала зададим свободную группу F ранга 2:
gap> F:=FreeGroup("a","b");
<free group on the generators [ a, b ]>
Перед тем как задать список слов, равных единице, нужно "сообщить"
системе, что под a и b будут пониматься порождающие элементы
свободной группы F:
gap> a:=F.1;b:=F.2;
a
b
Теперь можно указать список тривиальных слов (обратите внимание на преобразование
последнего определяющего соотношения):
gap> rels := [ a^4, b^2, b^-1*a*b*a];
[ a^4, b^2, b^-1*a*b*a ]
Тогда группа диэдра будет получена как следующая фактор-группа:
gap> G:=F/rels;
<fp group on the generators [ a, b ]>
Убедимся в том, что это действительно группа диэдра. Это можно сделать
различными способами.
Идентифицируем нашу группу с помощью функции IdGroup, построим группу диэдра с помощью стандартной
библиотечной функции DihedralGroup, и убедимся, что номера полученных групп
совпадают:
gap> IdGroup(G);
[ 8, 3 ]
gap> D:=DihedralGroup(8);
<pc group of size 8 with 3 generators>
gap> IdGroup(D);
[ 8, 3 ]
Заметьте, что группа D задана тремя порождающими элементами,
т.е. ее система порождающих не является минимальной, зато имеет специальный
вид, обеспечивающий большую эффективность при вычислениях. Минимальную систему
порождающих группы D можно получить так:
gap> MinimalGeneratingSet(D);
[ f1, f2 ]
Если нужно в явном виде указать изоморфизм между двумя группами,
то можно использовать функцию IsomorphismGroups, которая возвращает искомый изоморфизм,
если он существует, и fail в противном случае.
gap> f:=IsomorphismGroups(G,D);
[ a, b ] -> [ f2*f3, f1*f2 ]
Найдем теперь элементы полученной с помощью стандартной функции группы
D, соответствующие элементам построенной нами выше группы G:
gap> l:=AsList(G);
[ <identity ...>, b, a^3*b, a, a^3, a*b, a^2*b, a^2 ]
gap> List(l, x -> x^f);
[ <identity> of ..., f1*f2, f1, f2*f3, f2, f1*f3, f1*f2*f3, f3 ]