-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommutators.qmd
176 lines (148 loc) · 5.47 KB
/
commutators.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
---
title: "Comutadores em grupos"
number-sections: true
lang: pt-BR
---
## O problema
:::{.problem}
Seja $G$ um grupo. Se $x,y\in G$, o *comutador* $[x,y]$ está definido como
$$
[x,y]=x^{-1}y^{-1}xy.
$$
O subgrupo derivado $G'$ de $G$ é definido como o subgrupo de $G$ gerado por todos os comutadores; ou seja,
$$
G'=\left<[x,y]\mid x,y\in G\right>.
$$
É importante observar que o subgrupo derivado por definição não é apenas o conjunto dos comutadores, mas ele é o **subgrupo** gerado por este conjunto. Isso é porque o conjunto de comutadores pode não ser um subgrupo. No entanto, nos grupos pequenos, $G'$ coincide com o conjunto de comutadores.
:::
## Exploração interativa
:::{.subexample}
Vamos explorar o conjunto de comutadores em um grupo dado. Considere por exemplo o grupo `SymmetricGroup( 5 )`. Vamos primeiro calcular o comutador de dois elementos.
```matlab
gap> G := SymmetricGroup( 5 );
Sym( [ 1 .. 5 ] )
gap> x := (1,2,3,4,5);
(1,2,3,4,5)
gap> y := (1,2);
(1,2)
gap> x in G;
true
gap> y in G;
true
gap> Comm( x, y );
(1,2,3)
gap> Comm( x, y ) = x^-1*y^-1*x*y;
true
```
Ora, vamos computar o conjunto de comutadores de $G$ e comparamos este conjunto com o subgrupo derivado.
```matlab
gap> comms := Set( Tuples( Elements( G ), 2 ), t->Comm( t[1],t[2]));
[ (), (3,4,5), (3,5,4), (2,3)(4,5), (2,3,4), (2,3,5), (2,4,3), (2,4,5),
(2,4)(3,5), (2,5,3), (2,5,4), (2,5)(3,4), (1,2)(4,5), (1,2)(3,4),
(1,2)(3,5), (1,2,3), (1,2,3,4,5), (1,2,3,5,4), (1,2,4,5,3), (1,2,4),
(1,2,4,3,5), (1,2,5,4,3), (1,2,5), (1,2,5,3,4), (1,3,2), (1,3,4,5,2),
(1,3,5,4,2), (1,3)(4,5), (1,3,4), (1,3,5), (1,3)(2,4), (1,3,2,4,5),
(1,3,5,2,4), (1,3)(2,5), (1,3,2,5,4), (1,3,4,2,5), (1,4,5,3,2), (1,4,2),
(1,4,3,5,2), (1,4,3), (1,4,5), (1,4)(3,5), (1,4,5,2,3), (1,4)(2,3),
(1,4,2,3,5), (1,4,2,5,3), (1,4,3,2,5), (1,4)(2,5), (1,5,4,3,2), (1,5,2),
(1,5,3,4,2), (1,5,3), (1,5,4), (1,5)(3,4), (1,5,4,2,3), (1,5)(2,3),
(1,5,2,3,4), (1,5,2,4,3), (1,5,3,2,4), (1,5)(2,4) ]
gap> Size( comms );
60
gap> comms = Set( DerivedSubgroup( G ));
true
gap> DerivedSubgroup( G ) = AlternatingGroup( 5 );
true
```
A computação em cima mostra que no caso do grupo $S_5$, o subgrupo derivado (ou seja, o subgrupo $A_5$) coincide com o conjunto de comutadores.
:::
## Tarefa 1
:::{.subproblem}
Escreva uma função `nr_commutators( G )` que para um grupo `G` dado, computa o número de comutadores distintos de `G`. A sua função deve verificar:
```matlab
gap> nr_comms( SymmetricGroup( 5 ));
60
gap> nr_comms( AlternatingGroup( 5 ));
60
gap> nr_comms( DihedralGroup( 20 ));
5
gap> nr_comms( AlternatingGroup( 4 ));
4
gap> nr_comms( PGL( 2, 7 ));
168
gap> Size( DerivedSubgroup( SymmetricGroup( 5 )));
60
gap> Size( DerivedSubgroup( AlternatingGroup( 5 )));
60
gap> Size( DerivedSubgroup( DihedralGroup( 10 )));
5
gap> Size( DerivedSubgroup( PGL( 2,7 )));
168
```
:::
:::{.hint}
Escreva uma função encapsulando o código no exemplo anterior.
:::
## Tarefa 2
:::{.subproblem}
Escreva uma função `commutator_set_is_subgroup( G )` para verificar se o conjunto de comutadores é igual ao subgrupo derivado de um grupo `G`. A função deve devolver `true` ou `false`. Note que é suficiente verificar se a cardinalidade do conjunto de comutadores é igual à cardinalidade do subgrupo derivado. A sua função deve seguir os seguintes exemplos.
```matlab
gap> commutator_set_is_subgroup( SymmetricGroup( 5 ));
true
gap> commutator_set_is_subgroup( AlternatingGroup( 5 ));
true
gap> commutator_set_is_subgroup( DihedralGroup( 10 ));
true
gap> commutator_set_is_subgroup( PGL( 2, 7 ));
true
```
:::
## Tarefa 3
:::{.subproblem}
Usando a função `AllSmallGroups( Size, list )`, ache o menor grupo `G` tal que o conjunto de comutadores de `G` não é o subgrupo derivado. Por exemplo, vamos verificar que entre os grupos de ordem 24 isso não ocorre.
```matlab
gap> List( AllSmallGroups( Size, [24] ), G -> commutator_set_is_subgroup( G ));
[ true, true, true, true, true, true, true, true, true, true, true, true,
true, true, true ]
```
:::
## Tarefa 4
:::{.subproblem}
Seja $G$ o grupo encontrado na tarefa anterior.
1. Faça a lista dos elementos do subgrupo derivado $G'$ que não são comutadores.
2. Escreva estes elementos como produto de comutadores de $G$. Demonstre que todo elemento de $G'$ pode ser escrito na forma $[x_1,x_2][y_1,y_2]$ com $x_i,y_i\in G$.
:::
:::{.hint}
O item 2. da tarefa anterior pode ser difícil resolver construindo todos os elementos $[x_1,x_2][y_1,y_2]$, pois o número de possibilidades é muito grande. Um caminho alternativo é escolher elementos aleatórios $x_1,x_2,y_1,y_2$ até obter os elemendos desejados na forma $[x_1,x_2][y_1,y_2]$.
:::
## Tarefa 5
:::{.subproblem}
Para um grupo $G$ e $x\in G$, denote por $B_x(G)$ o seguinte conjunto:
$$
B_x(G)=\{u^{-1}x^{-1}uv^{-1}xv\mid u,v\in G\}.
$$
<!--
B_x := function( G, x )
local set1, set2;
set1 := Set( G, z->z^-1*x^-1*z );
set2 := Set( G, z->z^-1*x*z );
return Set( Cartesian( set1, set2 ), z->z[1]*z[2] );
end;
-->
1. Escreva uma função `B_x( G, x )` que calcula $B_x(G)$ para um grupo $G$ e elemento $x\in G$.
2. Decide quais dos seguintes grupos possui elemento $x$ tal que $B_x(G)=G$:
- $D_8$,
- $Q_8$,
- $A_4$,
- $S_4$,
- $A_5$,
- $S_5$.
:::
:::{.hint}
Use `Cartesian` para criar o produto cartesiano de duas listas ([manual](https://docs.gap-system.org/doc/ref/chap21.html#X7E1593B979BDF2CD)).
:::
<!--
nr_comms := function( G )
return Size( Set( Tuples( Elements( G ), 2 ), t->Comm( t[1],t[2])));
end;
-->