Commit 802ec554 authored by Guillaume Sabbagh's avatar Guillaume Sabbagh
Browse files

Catégorie composante connexes dans laquelles deux objets sont isomorphes si un...

Catégorie composante connexes dans laquelles deux objets sont isomorphes si un zig zag les relie, utilise pour la construction des clusters
parent 9501ead0
......@@ -266,7 +266,18 @@ class Categorie:
composees_resultat += [composee]
return composees_resultat
return []
def existe_composee(self,source,cible, noeuds_deja_visites=tuple()):
"""Trouve une composée de source à cible si elle existe, renvoie None sinon"""
if source == cible:
return self.identites[source]
if source not in noeuds_deja_visites:
noeuds_deja_visites = noeuds_deja_visites + (source,)
for morph in self.morph_sortants[source]:
composee = self.existe_composee(morph.cible, cible,noeuds_deja_visites)
if composee != None:
return self.Composee(morph, composee)
return None
def trouver_cycles_elementaires(self, objet):
"""Renvoie tous les cycles de morphismes élémentaires (qui ne contiennent aucun cycle)
de objet à objet qui n'est pas l'identité."""
......
from Categorie import Categorie
from Diagramme import DiagrammeIdentite, Triangle
import itertools
from Morphisme import Morphisme
from copy import copy
class CategorieComposantesConnexes(Categorie):
"""Soit C une catégorie.
La CategorieComposantesConnexes de C que l'on appellera C_cc est telle que deux objets sont isomorphes ssi les deux objets sont reliés par un zig zag dans C."""
def __init__(self,categorie):
Categorie.__init__(self,"Composantes connexes de "+str(categorie))
cat_intermediaire = copy(categorie)
for morph in categorie.morphismes:
inverse = Morphisme(morph.cible,morph.source,morph.representant+'^-1')
cat_intermediaire.ajouter_morphisme(inverse)
self.ajouter_objets(categorie.objets)
for source,cible in itertools.combinations(self.objets,2):
morph = cat_intermediaire.existe_composee(source,cible)
if morph != None:
morphisme = Morphisme(morph.source,morph.cible,morph.representant)
inverse = Morphisme(morph.cible,morph.source,morph.representant+'^-1')
self.ajouter_morphismes([morphisme,inverse])
diag = Triangle(self,[morph.source,morph.cible,morph.source],[morphisme,inverse,self.identites[morph.source]])
diag.faire_commuter()
diag = Triangle(self,[morph.cible,morph.source,morph.cible],[inverse,morphisme,self.identites[morph.cible]])
diag.faire_commuter()
def main():
import CategorieAleatoire
import random
random.seed(14896488564964)
cat = CategorieAleatoire.CategorieAleaIsomorph()
cat.transformer_graphviz()
cat2 = CategorieComposantesConnexes(cat)
cat2.transformer_graphviz(complet=False)
if __name__ == '__main__':
main()
\ No newline at end of file
from Categorie import Categorie
import itertools
from Morphisme import Morphisme
from copy import copy
class CategorieSous(Categorie):
......
from Categorie import Categorie
import itertools
from Morphisme import Morphisme
from copy import copy
class CategorieSur(Categorie):
......
......@@ -126,4 +126,6 @@ class ClusterActif(ClusterAbstrait):
if composante.source == self.foncteur1(d):
break
else:
raise Exception("Incoherence Cluster : l'objet "+str(self.foncteur1(d))+" de D1 n'a pas de d'image par le cluster")
\ No newline at end of file
raise Exception("Incoherence Cluster : l'objet "+str(self.foncteur1(d))+" de D1 n'a pas de d'image par le cluster")
# contrainte
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment