En los dos cursos hemos oido mucho sobre los "conjuntos parcialmente ordenados" o "posets". Los posets estan implementados en Sage, vamos hacer unos ejemplos y ver si podemos reproducir los ejemplos de las clases.
Hay varias opciones para construir un poset en Sage.
Primero, hay que dar un "diccionario".
In [1]:
d = {1:[2,3], 2:[4], 3:[4]}
P = Poset(d); P
Para cada elemento $x$ en el poset, hay que dar listas de $y$ tal que $x$ esta cubierto por $y$.
Si das relaciones que no son "relaciones minimas" ( $x < y$ y no hay un $z$ tal que $x<z<y$ ), aun as\'i funciona.
In [2]:
d = {1:[2,3,4], 2:[4], 3:[4]}
PP = Poset(d); PP
Otra manera es dar una función de comparación de elementos.
In [3]:
D = list(divisors(12))
P1 = Poset([D, lambda i,j : i.divides(j)]); P1
Para declarar la función, utilice la palabra clave lambda
luego $x$ y $y$ son elementos del poset y escriba una expresión que es True
(verdadera) si $x \leq y$ en el poset. En el ejemplo de arriba, $x \leq y$ si y solo si $x$ divide a $y$.
Usted tambien puede dar una función que describe las relaciones mínimas.
In [4]:
D = list(divisors(12))
P1 = Poset([D, lambda i,j : i.divides(j) and (j//i).is_prime()], cover_relations=True); P1
Otra manera de describirlo es dar una lista de elementos y una lista de relaciones. Por ejemplo
In [2]:
P1 = Poset([list(divisors(12)), [(1,2),(1,3),(2,4),(2,6),(3,6),(4,12),(6,12)]])
P1
Si las relaciones que usted da crean un *ciclo: (que quiere decir que el poset ya no es antisimétrico), esto da un error.
In [1]:
P2 = Poset([[1,2,3], [(1,2),(2,3),(3,1)]])
Una vez el poset esta creado, usted puede ver los métdos disponibles escribiendo P1.
+ tecla tab.
In [ ]:
P1. # ponga el cursor despues del punto y presione la tecla Tab
Por ejemplo, puede revisar que el poset sea un lattice.
In [8]:
P1.is_lattice()
O que el poset es ranqueado.
In [9]:
P1.is_ranked()
Hasta puede obtener la función de rango.
In [5]:
f = P1.rank_function()
In [9]:
f(1)
In [10]:
f(2)
In [11]:
f(3)
In [12]:
f(4)
In [13]:
f(6)
In [14]:
f(12)
Sage puede construir todos los subconjuntos de un conjunto.
In [16]:
Sub4 = Subsets([1,2,3,4])
Sub4
In [18]:
list(Sub4)
Puede crear un conjunto dado de la siguiente manera:
In [24]:
s1 = Sub4({1,2})
s2 = Sub4({2,3,4})
Puede ensayar si un subconjunto está incluido en otro utilizando el siguiente método:
In [28]:
s1.issubset(s2)
In [29]:
s3 = Sub4({1})
s3.issubset(s1)
Exercisio Cree el poset de subconjuntos de $2^{[4]}$.
In [17]:
¿Es este poset un lattice? (Permita que Sage le diga)
In [18]:
¿Está el poset graduado?
In [19]:
Calcule la función de rango del subconjunto \lbrace 1,2,3 \rbrace
In [20]:
Use Sage para calcular el número de elementos de cada rango y verifique las propiedades vistas en la clase (por ejemplo, la propiedad de suma alternante)
In [22]:
In [34]:
p = PermutationGroupElement([(1,2,3,4)]) # create the cyclic permutation
In [35]:
G = PermutationGroup([p]) # create the group generated by that element
G
In [31]:
list(G)
Si usted tiene un subconjunto, puede calcular sus imagenes bajo un elemento del grupo.
In [38]:
s = Sub4({1,2})
orbit = []
for p in G:
orbit.append(Sub4({p(i) for i in s}))
print orbit
Podemos crear una lista de sus órbitas.
In [47]:
Orbits = []
S = set(Sub4) # we compute all the elements
while len(S) > 0:
s = S.pop() # we take one element out
orbit = set()
for p in G:
orbit.add(Sub4({p(i) for i in s})) # we add the image to the orbit
S.difference_update(orbit) # we remote the elements of the orbit from the initial set
Orbits.append(tuple(orbit)) # note : we transform them into type "tuple" so that they are "immutable"
Orbits
Ejercisio Complete el código de la siguiente función y compare las órbitas.
In [48]:
def orbit_comp(o1, o2):
"""
Return true if at least one element of o1 is smaller than one elements of o2
"""
# edit here
Esto funciona?
In [49]:
orbit_comp(Orbits[0], Orbits[1]) # should say True
In [50]:
orbit_comp(Orbits[0], Orbits[2]) # should say False
In [51]:
POrbits = Poset([Orbits, lambda x,y: orbit_comp(x,y)])
POrbits
Utilizando métodos similares, construya el poset de $2^{[6]}$ tomando el cociente con el grupo cíclico. Luego verifique las propiedades que hemos visto en la clase.
In [ ]:
In [53]:
In [ ]: