¿Existe alguna forma de obtener en GAP los diagramas de Hasse de posets famosos como la red de particiones o la red de divisores de un entero? Si no están guardados, ¿hay alguna manera de obtenerlos de alguna otra forma, como usando SAGE? Si no, ¿hay algún truco para obtener el diagrama de Hasse fácilmente sin programar todo desde cero? ¿Se guardan posets o retículos pequeños en GAP? ¿Como los que tienen como máximo 7 puntos?
Respuestas
¿Demasiados anuncios?Sage tiene una clase integrada Poset
con una funcionalidad bastante amplia. Esta celda de Sage da un ejemplo bastante aburrido:
P = posets(5)
for p in P:
p.show()
print('\n')
Para algo más específico, puedes mirar el catálogo de posets/lattices y utilizar algunas de las opciones de graficación de gráficos:
posets.IntegerPartitions(10).hasse_diagram().show(figsize=[10,10])
Para una mejor experiencia, probablemente querrás ser más sofisticado con las opciones de la gráfica, como usar esta opción:
heights
Un diccionario que mapea alturas a la lista de vértices en esta altura.
Aunque GAP no tiene un tipo de dato de poset formal, el paquete de homología sí tiene ese tipo, y tiene algunos de los ejemplos que mencionas incluidos. Es difícil construir la parte compilada de la biblioteca, pero prácticamente todo lo relacionado con los posets debería funcionar sin compilar. Desafortunadamente, no creo que el soporte de poset en este paquete esté conectado a algo que muestre diagramas de Hasse.
Conozco dos formas de mostrar los diagramas de Hasse de retículos de subgrupos en GAP, ambas requieren un software adicional:
No es demasiado difícil mostrar los diagramas de Hasse en xgap o Gap.app. El código integrado solo maneja retículos de subgrupos. Tengo código (no pulido) que dibuja retículos de particiones en estos sistemas. Por si acaso, lo publicaré en mi página web. Al menos servirá como modelo de cómo mostrar los diagramas de Hasse de nuevos posets en xgap o Gap.app.
Ten en cuenta que necesitas Xwindows (en Linux u otro sistema similar a Unix) para ejecutar xgap, o una Mac para ejecutar Gap.app.
También podrías mirar la rutina DotFileLatticeSubgroups. Esa exporta un retículo de subgrupos a un archivo de GraphViz, que luego puedes convertir en una imagen del diagrama de Hasse. Mira por ejemplo esta pregunta.
Lo hace, está mencionado en la documentación de Macaulay2
aquí
El paquete GAP
Simplicial Homology
, disponible en http://www.eecis.udel.edu/~dumas/Homology/, provee métodos para utilizar posets dentro de GAP. Según la documentación, los posets se almacenan en GAP de la siguiente manera: El conjunto base es el conjunto de enteros 1..n+1 y las relaciones se almacenan en una lista de longitud n, donde la entrada i-ésima es el conjunto de vértices que cubren a i en el poset. En particular, 1 debería ser el elemento mínimo único y n+1 debería ser el elemento máximo único.
El enlace está ahora roto, y parece ser https://ljk.imag.fr/membres/Jean-Guillaume.Dumas/Homology/ ahora en su lugar. Puedes encontrar el enlace antiguo en the Wayback Machine.
Ten en cuenta que esto no es el paquete simpcomp
.
Estoy investigando el mismo problema y no conocía el parámetro heights
en Sage, probablemente lo usaré en su lugar pero dejo esta nota por si acaso ayuda.
Específicamente, estaba intentando ver si era sencillo hacer una red de particiones enteras como en Sage, pero parece que no lo es.
Conozco que este es un hilo antiguo, pero estaba buscando una biblioteca de posets y encontré https://github.com/isadofschi/posets.
Hice algunos ejemplos hace algún tiempo para mis clases de GAP en este blog de Jupyter.
RelToDot
está inspirado en DotBinaryRelation
del paquete numericalsgps. DotBinaryRelation
se puede usar en combinación con HasseDiagramBinaryRelation
para resolver el problema inicial.
gap> d:=DivisorsInt(12);;
gap> r:=BinaryRelationByElements(Domain(d),List(Filtered(Cartesian(d,d),t->t[2] mod t[1] =0),t->Tuple(t)));
Domain([ 1, 2, 3, 4, 6, 12 ]) >
gap> h:=HasseDiagramBinaryRelation(r);
Domain([ 1, 2, 3, 4, 6, 12 ]) >
Luego, puedes usar el DotBinaryRelation
del paquete numericalsgps:
gap> Print(DotBinaryRelation(h));
digraph NSGraph{rankdir = TB; edge[dir=back];
1 [label="1"];
2 [label="2"];
3 [label="3"];
4 [label="4"];
5 [label="6"];
6 [label="12"];
2 -> 1;
3 -> 1;
4 -> 2;
5 -> 2;
5 -> 3;
6 -> 4;
6 -> 5;
}
(o DotSplash
). Si estás usando el kernel de gap en Jupyter, entonces simplemente puedes escribir JupyterSplashDot(DotBinaryRelation(h))
.