4 O primeiro encontro com grupos
Nesta página, vamos ver como construir grupos em GAP
e como fazer operações básicas com seus elementos.
4.1 Grupos disponíveis na biblioteca
GAP
permite várias formas de definir grupos. O sistema já vem com algumas classes de grupos pré-definidas. Primeiro considere alguns exemplos usando os grupos GL
e SL
. Lembre que \[
\mbox{GL}(n,\mathbb F)=\{A\in M_{n\times n}(\mathbb F)\mid \det A\neq 0\}
\] e \[
\mbox{SL}(n,\mathbb F)=\{A\in \mbox{GL}(n,\mathbb F)\mid \det A= 1\}.
\] Quando \(\mathbb F\) é o corpo finito com \(q\) elementos, os grupos \(\mbox{GL}(n,\mathbb F)\) e \(\mbox{SL}(n,\mathbb F)\) são também escritos como \(\mbox{GL}(n,q)\) e \(\mbox{SL}(n,q)\). Para revisar corpos finitos (função GF
) consulte Seção 2.4.
gap> G1 := GL( 3, 5 );
GL(3,5)
gap> G2 := SL( 3, 5 );
SL(3,5)
gap> Order( G1 );
1488000
gap> Order( G2 );
372000
gap> IsSubgroup( G1, G2 );
true
gap> IsNormal( G1, G2 );
true
Ora, considere as construções com SymmetricGroup
e AlternatingGroup
. Lembre que o grupo simétrico \(S_n\) é o grupo de todas as permutações do conjunto \(\{1,\ldots,n\}\) considerando com a operaçõo de composição. O grupo alternado \(A_n\) é o grupo das permutações pares.
gap> S6 := SymmetricGroup( 6 );
Sym( [ 1 .. 6 ] )
gap> A6 := AlternatingGroup( 6 );
Alt( [ 1 .. 6 ] )
gap> IsSubgroup( S6, A6 );
true
gap> IsNormal( S6, A6 );
true
Na biblioteca do GAP
, tem uma base de dados com todos os grupos de ordem pequena. Estes grupos podem ser acessos usando a função SmallGroup( n, k )
que devolve o \(k\)-ésimo grupo de ordem \(n\) na biblioteca de GAP
. Veja o seguinte exemplo.
gap> g := SmallGroup( 8, 3 );
<pc group of size 8 with 3 generators>
gap> StructureDescription( g );
"D8"
O grupo SmallGroup( 8, 3 )
é o grupo diedral de ordem 8.
Uma família de grupos pode ser construído também com a função AllSmallGroups
. No seguinte exemplo, vamos construir todos os grupos nilpotentes de ordem entre \(10\) e \(20\).
gap> AllSmallGroups( Size, [10..20] , IsNilpotent, true );
<pc group of size 10 with 2 generators>,
[ <pc group of size 11 with 1 generator>,
<pc group of size 12 with 3 generators>,
<pc group of size 12 with 3 generators>,
<pc group of size 13 with 1 generator>,
<pc group of size 14 with 2 generators>,
<pc group of size 15 with 2 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 16 with 4 generators>,
<pc group of size 17 with 1 generator>,
<pc group of size 18 with 3 generators>,
<pc group of size 18 with 3 generators>,
<pc group of size 19 with 1 generator>,
<pc group of size 20 with 3 generators>,
<pc group of size 20 with 3 generators> ]
4.2 Tarefa
- Construa os grupos \(\mbox{SL}(4,7)\) e \(\mbox{GL}(4,7)\) e calcule as suas ordens.
- Construa os grupos \(S_7\) e \(A_7\) e calcule as suas ordens.
- Construa a lista de todos os grupos de ordem entre \(55\) e \(65\).
- Ache todos os grupos solúveis, todos os grupos nilpotentes e todos os grupos simples na lista construída no item anterior. (Use as funções
IsSimpleGroup
eIsSolvableGroup
).
4.3 Grupos gerados por permutações ou matrizes
Pode-se também definir grupo por geradores. Os geradores podem ser objetos multiplicáveis, tipicamente usamos matrizes e permutações. Primeiro, consideremos alguns exemplos com permutações.
gap> G := Group( (1,2), (1,2,3,4,5));
Group([ (1,2), (1,2,3,4,5) ])
gap> Size( G );
120
gap> G = SymmetricGroup( 5 );
true
gap> A := Group( (1,2,3),(3,4,5));
Group([ (1,2,3), (3,4,5) ])
gap> Size( A );
60
gap> A = AlternatingGroup( 5 );
true
gap> A = SymmetricGroup( 5 );
false
O grupo dihedral \(D_5\) de ordem \(10\) pode ser construído da forma seguinte.
gap> D := Group( (1,2,3,4,5),(2,5)(3,4));
Group([ (1,2,3,4,5), (2,5)(3,4) ])
gap> Size( D );
10
gap> Elements( D );
, (2,5)(3,4), (1,2)(3,5), (1,2,3,4,5), (1,3)(4,5), (1,3,5,2,4), (1,4)(2,3), (1,4,2,5,3), (1,5,4,3,2), (1,5)(2,4) ]
[ ()gap> IsSubgroup( AlternatingGroup( 5 ), D );
true
gap> IsNormal( AlternatingGroup( 5 ), D );
false
4.4 Grupos gerados por matrizes
Pode-se também definir grupos de matrizes usando geradores. Considere por exemplo as seguintes duas matrizes sobre GF( 5 )
: \[
m_1 = \begin{pmatrix} 2 & 0 \\ 0 & 1 \end{pmatrix}\quad \mbox{e}\quad m_2 = \begin{pmatrix} 2 & 1 \\ 2 & 0 \end{pmatrix}.
\] O grupo gerado por \(m_1\) e \(m_2\) pode ser construído em GAP
usando as seguintes instruções.
gap> m1 := [[2,0],[0,1]]*Z(5)^0;
Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0 ] ]
[ [ gap> m2 := [[2,1],[2,0]]*Z(5)^0;
Z(5), Z(5)^0 ], [ Z(5), 0*Z(5) ] ]
[ [ gap> G := Group( m1, m2 );
Group([ [ [ Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0 ] ],
Z(5), Z(5)^0 ], [ Z(5), 0*Z(5) ] ] ])
[ [ gap> Order( G );
480
gap> G = GL( 2, 5 );
true
4.5 Tarefa: O grupo de Heisenberg
Sobre um corpo \(\mathbb F\), o grupo de Heisenberg é o grupo \[ H=\left\{\begin{pmatrix} 1 & a & c \\ 0 & 1 & b \\ 0 & 0 & 1\end{pmatrix}\mid a, b, c \in\mathbb F\right\}. \]
O seguinte resultado é fácil de verificar.
Lema 4.1 Se \(\mathbb F\) é um corpo finito de ordem \(q\), então \(|H|=q^3\).
- Construa em
GAP
o grupo de Heisenberg sobre os corposGF(2)
,GF(3)
,GF(5)
,GF( 9 )
,GF( 25 )
como um grupo de matrizes dado por geradores. Calcule a ordem do grupo construido para verificar que tem o grupo certo. - Escreva uma função
heisenberg_group( q )
que devolve o grupo de Heisenberg sobreGF( q )
dado inputq
. A sua função precisa seguir o seguinte exemplo.
gap> H := heisenberg_group( 5 );
Group(
[ Z(5)^0, Z(5)^0, 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ [ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
[ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, Z(5)^0 ],
[ [ 0*Z(5), 0*Z(5), Z(5)^0 ] ] ])
[ gap> Order( H );
125
gap> H := heisenberg_group( 7 );
Group(
[ Z(7)^0, Z(7)^0, 0*Z(7) ], [ 0*Z(7), Z(7)^0, 0*Z(7) ],
[ [ 0*Z(7), 0*Z(7), Z(7)^0 ] ],
[ Z(7)^0, 0*Z(7), 0*Z(7) ], [ 0*Z(7), Z(7)^0, Z(7)^0 ],
[ [ 0*Z(7), 0*Z(7), Z(7)^0 ] ] ])
[ gap> Order( H );
343
gap> H := heisenberg_group( 9 );
<matrix group of size 729 with 4 generators>
gap> Order( H );
729
- Investiga o grupo de Heisenberg usando a sua função construída em cima. Calcule o seu centro, subgrupo derivado, os termos da série derivada, série central superior, e série central inferior.
O grupo de Heisenberg \(H\) é gerado por dois geradores sobre o corpo \(\mathbb F_p\). Sobre um corpo \(\mathbb F_{p^k}\) o grupo é gerado por \(2k\) geradores. Para revisar como trabalhar sobre corpos finitos, consulte Seção 2.4; para ver como escrever uma função, consulte Seção 5.6. Para resolver o item 3., use as funções listadas no capítulo relevante do manual.