Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

Jupyter notebook sage1.ipynb

Project: TDC
Views: 77
Kernel: SageMath (stable)

Práctica 1 de SAGE: Grupos

Grupos simétricos

Veamos primero cómo se definen los grupos simétricos en SAGE.

G=SymmetricGroup(4) #Grupo simetrico de las permutaciones de orden 4 order(G) #orden de un grupo , numero de elementos de ese grupo list(G) #lista de elementos de un grupo L[x] #Asi nos muestra el enesimo elemento de una lista , contando que el primer elemento ocupa el lugar 0 .Como son elementos puedo operar con ellos. L[x]^(-1) #Inverso de un elemento G( [(1, 2)] ) #si queremos usar el elemento (1,2) como permutacion debo especificar que voy a usar el cuerpo simetrico y ya podre operar con el . -------------------------------------------------------------------------------------------------------------------------------------------- Operaciones con permutaciones sigma= G([(1, 2), (3, 4)]) #si quiero ver que se puede hcer con sigma pongo sigma. y le doy al tabulador #ej sigma.order() sigma.sign() identidad.sign() sigma(1) #que valor tiene el uno al aplicarla la permutacion sigma ----------------------------------------------------------------------------------------------------------------------------------------------- SUBGRUPOS G.subgroups() H=G.subgroup([(3,4), (2,4,3)]) #Seleccionar el subgrupo generado por esos elementos H.gens() >> [(3,4), (2,4,3)] #dar un generador de un subgrupo ,DE UN GRUPO EN GENERAL H.ambient_group() >>Symmetric group of order 4! as a permutation group #te dice que el subgrupo ese pertenece a S4 ----------------------------------------------------------------------------------------------------------------------------------------------- PREDICADOS PARA GRUPOS G.is_commutative() G.is_cyclic() H.is_normal() G.exponent() G.random_element() G.cayley_table() G.is_simple() H.is_simple() G.is_solvable() G.center() G.normalizer(H) G.centralizer(H) G.conjugacy_classes_subgroups() #Estos son los subgrupos de G sin contar con las conjugaciones ------------------------------------------------------------------------------------------------------------------------------------------------- GRUPO COCIENTE #Para generar un grupo cociente hace falta que el grupo de abajo sea normal , asi que lo que hago esmirar cuales son los subgrpos #normales y ya puedo ver con que generar mi subgrupo y poder crear el grupo cociente : V = G.subgroup(G([(1,3), (2, 4)]), G([(1, 4), (2,3)])) #subgrupo que voy a usar Q=G.quotient(V) #GRUPO COCIENTE #Si le pido que me de la lista de los elemento me va a daer numeros ya que SAGE nos esta dando un grupo isomorfo -------------------------------------------------------------------------------------------------------------------------------------------------- HOMOMORFISMOS f=PermutationGroupMorphism(G, G, [(1, 3, 2, 4), (1, 3)]) #Asi defino los morfismos QUE PONGO EN CADA PARTE????? #SAGE no nos da error en un morfismo hasta que no evaluamos un elem para ver su imagen f.kernel() f.image(G) --------------------------------------------------------------------------------------------------------------------------------------------------- GRUPOS ABELIANOS A.<a,b,c> = AbelianGroup([2,4,5]) #multiplicative Abelian group isomorphic to C2 x C4 x C5 A.is_isomorphic(AbelianGroup([2, 20])) >> True ---------------------------------------------------------------------------------------------------------------------------------------------------- OTROS GRUPOS DihedralGroup(4) KleinFourGroup() CyclicPermutationGroup(5) AlternatingGroup(5) ---------------------------------------------------------------------------------------------------------------------------------------------------- EJERCICIOS!!!!!!!!! S=(map(lambda x:operacion,lista) ) S=(map(lambda x:G.quotient(x),G.normal_subgroups()) ) filter(lambda x:condicion,lista ) filter(lambda x: order(x)==6 ,S)
Object `is_exponent` not found.
G=SymmetricGroup(4)
G
Symmetric group of order 4! as a permutation group
order(G)
24

Para ver los elementos de G, podemos pedirle que nos los enseñe en una lista

list(G)
[(), (1,2), (1,2,3,4), (1,3)(2,4), (1,3,4), (2,3,4), (1,4,3,2), (1,3,4,2), (1,3,2,4), (1,4,2,3), (1,2,4,3), (2,4,3), (1,4,3), (1,4)(2,3), (1,4,2), (1,3,2), (1,3), (3,4), (2,4), (1,4), (2,3), (1,2)(3,4), (1,2,3), (1,2,4)]

SAGE presenta los elementos como producto de ciclos disjunto. Para manejar los elementos del grupo, podemos pedirle los elementos de la lista. SAGE numera las listas EMPEZANDO POR EL ELEMENTO CERO.

L=list(G)
L[0]
()
L[1]
(1,2)
L[1], L[2]
((1,2), (1,2,3,4))
L[1]*L[2]
(1,3,4)
L[2]*L[1]
(2,3,4)

Cuidado! Sage compone de izquierda a derecha, y no como estamos habituados de derecha a izquierda!

L[2]^(-1)
(1,4,3,2)
L[7]^(-2)*L[8]*L[3]
(1,3,2,4)

Si queremos dar un elemento de S_4 directamente, debemos escribirlo como una lista de ciclos disjuntos [C_1, C_2, ..., C_k]. Tenemos que especificar que esta lista debe mirarse como un elemento de G, usando la expresión G(...).

G( [(1, 2)] )
(1,2)
G([(1, 2)])*G([(1, 3, 2)])
(2,3)
G([(1, 2), (3, 4)])
(1,2)(3,4)

Operaciones con elementos:

sigma= G([(1, 2), (3, 4)])

Para ver qué cosas se pueden hacer con sigma, tecleamos sigma. y utilizamos la tecla autocompletar:

sigma.
File "<ipython-input-11-fa0be224a4ba>", line 1 sigma. ^ SyntaxError: invalid syntax
sigma.order()
2
sigma
(1,2)(3,4)
sigma.sign()
1
identidad = G([(1,2)]) identidad
(1,2)
identidad.sign()
-1

Si queremos información sobre un comando concreto, lo escribimos, seguido por una interrogación ?

sigma.sign?
Object `sigma.sign` not found.

Las permutaciones son funciones, y, como tales, se pueden evaluar:

sigma(1)
2

Subgrupos

Calculamos todos los subgrupos de G.

G.subgroups()
[Subgroup of (Symmetric group of order 4! as a permutation group) generated by [()], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2)(3,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)(2,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3,2)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,4,2)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,4,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (1,2)(3,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4), (1,3)(2,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2)(3,4), (1,3,2,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)(2,4), (1,4,3,2)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2,4,3), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (2,4,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,4,3), (1,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,3), (1,3,2)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2), (1,4,2)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2)(3,4), (1,3)(2,4), (1,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4), (1,2)(3,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4,3), (1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (2,4,3), (1,3)(2,4), (1,4)(2,3)]]

Para definir un subgrupo, especificamos los generadores.

H=G.subgroup([(3,4), (2,4,3)])
H
Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (2,4,3)]
order(H)
6

De nuevo, podemos pedirle a SAGE que nos de una lista con los elementos de H.

list(H)
[(), (3,4), (2,4,3), (2,4), (2,3,4), (2,3)]

También podemos pedirle un conjunto de generadores.

H.gens()
[(3,4), (2,4,3)]

SAGE recuerda que H está definido como un subgrupo de G.

H.ambient_group()
Symmetric group of order 4! as a permutation group

Predicados para grupos

G.is_commutative()
False
G.is_cyclic()
False
H.is_normal()
False
G.exponent()
12
exponent?
Object `exponent` not found.
G.random_element()
(2,3,4)

Un comando muy útil es cayley_table, que nos da la tabla de multiplicar del grupo

G.cayley_table()
* a b c d e f g h i j k l m n o p q r s t u v w x +------------------------------------------------ a| a b c d e f g h i j k l m n o p q r s t u v w x b| b a e j c h l f n d m g k i s u w v o x p r q t c| c f d g k i a l m p o t b q u r v x n w e s h j d| d i g a o m c t b r u w f v e x s j q h k n l p e| e h j l m n b g k u s x a w p v r t i q c o f d f| f c k p d l t i q g b a o m n e h s u j r x v w g| g m a c u b d w f x e h i s k j n p v l o q t r h| h e m u j g x n w l a b s k i c f o p d v t r q i| i d o r g t w m v a f c u b q k l n e p x j s h j| j n l b s k e x a v p q h r c t o d w f m i g u k| k l p t b q f a o e n j c h r s x w m v d u i g l| l k b e p a j q h t c f n o m d i u r g s w x v m| m g u x a w h b s c i d e f v o t q k r j p n l n| n j s v l x q k r b h e p a w m g i c u t d o f o| o t r w f v i c u k q p d l x n j h b s g e m a p| p q t f n o k j c s r v l x d w u g h i b m a e q| q p n s t j v o x f l k r c h b a m d e w g u i r| r v w i q u o p d n x s t j g h e a l m f b c k s| s x v q h r n e p m w u j g t i d f a o l c k b t| t o f k r c p v l w d i q u b g m e x a n h j s u| u w x h i s m d e o v r g t j q p l f n a k b c v| v r q n w p s u j i t o x d l f c b g k h a e m w| w u i o x d r s t h g m v e f a b k j c q l p n x| x s h m v e u r g q j n w p a l k c t b i f d o

Como podéis ver, SAGE ha reemplazado los elementos por letras. Para saber a qué elemento se corresponde cada letra, podéis usar:

T = G.cayley_table() headings = T.row_keys() headings[3]
(1,3)(2,4)
H.cayley_table()
* a b c d e f +------------ a| a b c d e f b| b a d c f e c| c f e b a d d| d e f a b c e| e d a f c b f| f c b e d a

Algunos predicados relacionados con la asignatura de Estructuras Algebraicas

G.is_simple()
False
H.is_simple()
False
G.is_solvable()
True
G.center()
Subgroup of (Symmetric group of order 4! as a permutation group) generated by [()]
G.normalizer(H)
Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (2,3,4)]
G.centralizer(H)
Subgroup of (Symmetric group of order 4! as a permutation group) generated by [()]

Cuando trabajamos con un grupo muy grande, la cantidad de subgrupos es enorme. A veces puede ser útil tener una lista de subgrupos salvo conjugación.

G.conjugacy_classes_subgroups()
[Subgroup of (Symmetric group of order 4! as a permutation group) generated by [()], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)(2,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (1,2)(3,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2)(3,4), (1,3,2,4)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (2,4,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4,3), (1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(3,4), (2,4,3), (1,3)(2,4), (1,4)(2,3)]]
S5 = SymmetricGroup(5) len(S5.subgroups()), len(S5.conjugacy_classes_subgroups())
(156, 19)

Grupo cociente

Para construir grupos cociente, lo primero que tenemos que hacer es encontrar los subgrupos normales de un grupo

G=SymmetricGroup(4)
G.normal_subgroups()
[Subgroup of (Symmetric group of order 4! as a permutation group) generated by [()], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(2,4,3), (1,3)(2,4), (1,4)(2,3)], Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,2), (1,2,3,4)]]
V = G.subgroup(G([(1,3), (2, 4)]), G([(1, 4), (2,3)]))
#[(1,3)(2,4), (1,4)(2,3)]
gamma1=G([(1,3), (2, 4)]) gamma2= G([(1, 4), (2,3)]) V= G.subgroup([gamma1, gamma2])
V.is_normal()
True
Q=G.quotient(V)
Q
Permutation Group with generators [(1,2)(3,6)(4,5), (1,3,5)(2,4,6)]
list(Q)
[(), (1,3,5)(2,4,6), (1,2)(3,6)(4,5), (1,6)(2,5)(3,4), (1,5,3)(2,6,4), (1,4)(2,3)(5,6)]

SAGE nos da un grupo isomorfo al grupo cociente, pero no conserva el morfismo natural G -> G/V.

Q.is_abelian()
False

Luego sabemos por teoría de grupos que Q debe ser isomorfo al grupo simétrico de 3 elementos.

Q.is_isomorphic(SymmetricGroup(3))
True

Homomorfismos

Para definir homomorfimos entre grupos de permutaciones o subgrupos de éstos, debemos dar una lista ordenada con las imagenes de los generadores del grupo de origen

G.gens()
[(1,2,3,4), (1,2)]
f=PermutationGroupMorphism(G, G, [(1, 3, 2, 4), (1, 3)])
PermutationGroupMorphism?
f
Permutation group endomorphism of Symmetric group of order 4! as a permutation group Defn: [(1,2,3,4), (1,2)] -> [(1,3,2,4), (1,3)]

Hemos construido un morfismo que lleva (1, 2, 3, 4) en (1, 3, 2, 4) y (1, 2) en (1, 3)

f([(1, 3, 4)])
(1,2,4)
for i in G: print (i, f(i))
((), ()) ((1,2), (1,3)) ((1,2,3,4), (1,3,2,4)) ((1,3)(2,4), (1,2)(3,4)) ((1,3,4), (1,2,4)) ((2,3,4), (2,4,3)) ((1,4,3,2), (1,4,2,3)) ((1,3,4,2), (1,2,4,3)) ((1,3,2,4), (1,2,3,4)) ((1,4,2,3), (1,4,3,2)) ((1,2,4,3), (1,3,4,2)) ((2,4,3), (2,3,4)) ((1,4,3), (1,4,2)) ((1,4)(2,3), (1,4)(2,3)) ((1,4,2), (1,4,3)) ((1,3,2), (1,2,3)) ((1,3), (1,2)) ((3,4), (2,4)) ((2,4), (3,4)) ((1,4), (1,4)) ((2,3), (2,3)) ((1,2)(3,4), (1,3)(2,4)) ((1,2,3), (1,3,2)) ((1,2,4), (1,3,4))

Pero, cuidado! SAGE "no se da cuenta" si definimos algo que no tiene sentido...

g=PermutationGroupMorphism(G, G, [(1, 2, 3), (1, 2)])
g
Permutation group endomorphism of Symmetric group of order 4! as a permutation group Defn: [(1,2,3,4), (1,2)] -> [(1,2,3), (1,2)]

hasta que no lo evaluamos:

#for i in G: # print (i, g(i))
f
Permutation group endomorphism of Symmetric group of order 4! as a permutation group Defn: [(1,2,3,4), (1,2)] -> [(1,3,2,4), (1,3)]
f.kernel()
Subgroup of (Symmetric group of order 4! as a permutation group) generated by [()]
f.image(G)
Subgroup of (Symmetric group of order 4! as a permutation group) generated by [(1,3), (1,3,2,4)]

Grupos abelianos

Para trabajar con grupos abelianos, SAGE tiene comandos específicos: El comando AbelianGroup([a, b, ..., l) define el grupo producto de grupos cíclicos C_a x C_b x ... x C_l.

A.<a,b,c> = AbelianGroup([2,4,5])
A
Multiplicative Abelian group isomorphic to C2 x C4 x C5
(a*b)^5
a*b
A.is_isomorphic(AbelianGroup([2, 20]))
True
a
a
a^2
1

Otros grupos

DihedralGroup(4) KleinFourGroup() CyclicPermutationGroup(5) AlternatingGroup(5)
Dihedral group of order 8 as a permutation group
CyclicPermutationGroup(5)
Cyclic group of order 5 as a permutation group
AlternatingGroup(5)
Alternating group of order 5!/2 as a permutation group
KleinFourGroup()
The Klein 4 group of order 4, as a permutation group

Ejercicios

  1. Construye un homomorfismo sobreyectivo de S_4 en C_2. (Ayuda: utiliza la paridad de las permutaciones).

C2 = SymmetricGroup(2) C2 = CyclicPermutationGroup(2) C2.gens()
[(1,2)]
order(C2)
2
list (C2)
[(), (1,2)]
G = SymmetricGroup(4) G.gens()
[(1,2,3,4), (1,2)]
f=PermutationGroupMorphism(G, C2, [ (1,2),(1,2) ] )
for x in G: print (x, f(x))
((), ()) ((1,2), (1,2)) ((1,2,3,4), (1,2)) ((1,3)(2,4), ()) ((1,3,4), ()) ((2,3,4), ()) ((1,4,3,2), (1,2)) ((1,3,4,2), (1,2)) ((1,3,2,4), (1,2)) ((1,4,2,3), (1,2)) ((1,2,4,3), (1,2)) ((2,4,3), ()) ((1,4,3), ()) ((1,4)(2,3), ()) ((1,4,2), ()) ((1,3,2), ()) ((1,3), (1,2)) ((3,4), (1,2)) ((2,4), (1,2)) ((1,4), (1,2)) ((2,3), (1,2)) ((1,2)(3,4), ()) ((1,2,3), ()) ((1,2,4), ())
  1. Encuentra todos los cocientes de S_4 de orden 6. ¿Cuáles son abelianos?

G=SymmetricGroup(4) V=G.normal_subgroups() S=(map(lambda x:G.quotient(x),G.normal_subgroups()) )
s=list(S) s
[Permutation Group with generators [(1,7)(2,8)(3,9)(4,10)(5,11)(6,12)(13,15)(14,16)(17,18)(19,21)(20,22)(23,24), (1,10,17,19)(2,9,18,20)(3,12,14,21)(4,11,13,22)(5,7,16,23)(6,8,15,24)], Permutation Group with generators [(1,2)(3,6)(4,5), (1,3,5)(2,4,6)], Permutation Group with generators [(1,2)], Permutation Group with generators [()]]
order(s[0])
24
filter(lambda x: order(x)==6 ,S)
[Permutation Group with generators [(1,2)(3,6)(4,5), (1,3,5)(2,4,6)]]
filter(is_commutative,S)
[Permutation Group with generators [(1,2)], Permutation Group with generators [()]]
  1. Encuentra todos los grupos abelianos de orden 72 salvo isomorfismo.

abeliangroups
[2, 3]
  1. Encuentra todos los subgrupos del grupo abeliano C_4 x C_8. ¿Cuáles de ellos son cíclicos?

M=AbelianGroup([4,8])
M
Multiplicative Abelian group isomorphic to C4 x C8
m=M.subgroups()
m
[Multiplicative Abelian subgroup isomorphic to C4 x C8 generated by {f0, f1}, Multiplicative Abelian subgroup isomorphic to C4 x C4 generated by {f1^2, f0}, Multiplicative Abelian subgroup isomorphic to C2 x C8 generated by {f0^2, f0*f1^7}, Multiplicative Abelian subgroup isomorphic to C2 x C4 generated by {f1^4, f0}, Multiplicative Abelian subgroup isomorphic to C8 generated by {f0*f1^5}, Multiplicative Abelian subgroup isomorphic to C2 x C4 generated by {f1^4, f0*f1^6}, Multiplicative Abelian subgroup isomorphic to C8 generated by {f0*f1^7}, Multiplicative Abelian subgroup isomorphic to C4 generated by {f0}, Multiplicative Abelian subgroup isomorphic to C4 generated by {f0*f1^2}, Multiplicative Abelian subgroup isomorphic to C4 generated by {f0*f1^4}, Multiplicative Abelian subgroup isomorphic to C4 generated by {f0*f1^6}, Multiplicative Abelian subgroup isomorphic to C2 x C8 generated by {f0^2, f1}, Multiplicative Abelian subgroup isomorphic to C2 x C4 generated by {f0^2, f1^2}, Multiplicative Abelian subgroup isomorphic to C8 generated by {f0^2*f1}, Multiplicative Abelian subgroup isomorphic to C2 x C2 generated by {f1^4, f0^2}, Multiplicative Abelian subgroup isomorphic to C4 generated by {f0^2*f1^6}, Multiplicative Abelian subgroup isomorphic to C2 generated by {f0^2}, Multiplicative Abelian subgroup isomorphic to C2 generated by {f0^2*f1^4}, Multiplicative Abelian subgroup isomorphic to C8 generated by {f1}, Multiplicative Abelian subgroup isomorphic to C4 generated by {f1^2}, Multiplicative Abelian subgroup isomorphic to C2 generated by {f1^4}, Trivial Abelian subgroup]
filter(lambda x: (x.is_cyclic()),S)
[Permutation Group with generators [(1,2)], Permutation Group with generators [()]]