Para complementar los geniales diagramas de Mike, aquí hay una manera de comprobar si una lista finita arbitraria de listas es una topología, es decir, (1) si contiene el conjunto vacío, (2) el conjunto base, (3) cerrados bajo intersecciones finitas, y (3) cerrado bajo unión:
topologyQ[x_List] :=
Intersection[x, #] === # & [
Union[
{Union @@ x},
Intersection @@@ [email protected]#,
Union @@@ #
] & @ Subsets @ x
]
aplicado a los seis ejemplos
list1 = {{}, {1, 2, 3}};
list2 = {{}, {1}, {1, 2, 3}};
list3 = {{}, {1}, {2}, {1, 2}, {1, 2, 3}};
list4 = {{}, {2}, {1, 2}, {2, 3}, {1, 2, 3}};
list5 = {{}, {2}, {3}, {1, 2, 3}};
list6 = {{}, {1, 2}, {2, 3}, {1, 2, 3}};
como
topologyQ /@ {list1, list2, list3, list4, list5, list6}
da
{True, True, True, True, False, False}
EDIT 1: Para un refinamiento adicional de la formulación, tenga en cuenta que el operador
topoCover := (Union @@ {Union @@@ #, Intersection @@@ [email protected]#} &)@[email protected]# &
da la colección obtenida tomando todas las uniones e intersecciones de los elementos de una colección de conjuntos . Una colección de conjuntos list
es una topología si es un punto fijo del operador topoCover
.Así se puede definir una función alternativa para comprobar si es list
topología:
topologyQ2 := ([email protected]# === #) &
Si list
no es una topología, topoCover
da smalles superconjunto de list
que es una topología. Así
Complement[[email protected]#,#]&
da los elementos que se añadirán a list
para que sea una topología.
También se pueden considerar los subconjuntos más grandes de list
que es una topología y los elementos que se eliminarán del list
para topologizar. Esto se hace mediante el uso de
maxTopoSubset := (If[{} == #, None, [email protected]#] &)@(GatherBy[
Select[[email protected]#, topologyQ], Length[#] &]) &
Aplicada, por ejemplo, a list6
como
[email protected]
obtenemos las dos topologías
{{}, {1, 2}, {1, 2, 3}}, {{}, {2, 3}, {1, 2, 3}}}
para obtener los elementos para ser retirado para conseguir una topología de list
, uno puede usar
removeToTopologize := Table[Complement[#, Part[[email protected]#, i]], {i,
[email protected]@#}] &
Utilización con list6
como
[email protected]
obtenemos
{{{2, 3}}, {{1, 2}}}
, es decir, la eliminación de {2,3}
o {1,2}
de list6
da una topología.
Estoy buscando generar programáticamente una imagen para una cantidad variable de puntos. Creo que puedo generalizar esto, gracias por tu ayuda. – tlehman
Friggin dulce trabajo en los diagramas! Así que concéntrate en que tuve que reír. +1 fo sho. – telefunkenvf14
¡Maravilloso! Hacer doble clic en las imágenes y mover los objetos alrededor de una puede cubrir casos que son diferentes a los ejemplos de @ Tobi, p. Ej. el caso donde el subconjunto '{1,3}' es un elemento de la lista que requiere colocar puntos en un triángulo. – kglr