Commit dc36ca9d authored by Guillaume Sabbagh's avatar Guillaume Sabbagh
Browse files

Tests sur l'exemple P({1,2,3}), erreur trouvee au niveau catégorie homologue...

Tests sur l'exemple P({1,2,3}), erreur trouvee au niveau catégorie homologue (il faut tester les bijections et pas les applications) + on peut optimiser en comptant le nombre de cônes de même apex et en vérifiant que les apex sont les même si la champ perceptif est à limite
parent 5b87dfc9
......@@ -2,7 +2,7 @@ from Categorie import Categorie
from Foncteur import Foncteur
from CatFinies import CatFinies
from EnsFinis import EnsFinis,Application
from ChampActif import ChampActif
from ChampActif import ChampActif,Cocone
from collections import defaultdict
import itertools
......@@ -35,10 +35,10 @@ class CategorieHomologue(CatFinies):
for cible in cibles:
dict_nadir_cocone_source = defaultdict(frozenset)
for obj in abs(source):
dict_nadir_cocone_source[obj.d] |= {obj}
dict_nadir_cocone_source[Cocone(obj).nadir] |= {obj}
dict_nadir_cocone_cible = defaultdict(frozenset)
for obj in abs(cible):
dict_nadir_cocone_cible[obj.d] |= {obj}
dict_nadir_cocone_cible[Cocone(obj).nadir] |= {obj}
if set(dict_nadir_cocone_source.keys()) != set(dict_nadir_cocone_cible.keys()):
continue
applications_objets = set() # applications entre cocônes de même nadir
......
from GrapheDeComposition import GC,MGC
from Diagramme import Diagramme, DiagrammeIdentite
from ChampActif import ChampActif
from copy import copy
cat = GC(set("ABC"))
f,g = [MGC('A','B','f'),MGC('A','C','g')]
cat |= {f,g}
diag = DiagrammeIdentite(cat)
c_a = ChampActif(diag)
diag.transformer_graphviz()
c_a.transformer_graphviz()
cat2 = copy(cat)
cat2 |= {'L'}
h,i,j = [MGC('A','L','h'),MGC('B','L','i'),MGC('C','L','j')]
cat2 |= {h,i,j}
diag2 = Diagramme(cat,cat2,{'A':'A','B':'B','C':'C'},{f:f,g:g})
MGC.identifier_morphismes(i@f,h)
MGC.identifier_morphismes(j@g,h)
diag2.transformer_graphviz()
c_a2 = ChampActif(diag2)
c_a2.transformer_graphviz()
......@@ -4,6 +4,7 @@ from ChampActif import ChampActif,Cocone
from CommaCategorie import ObjetCommaCategorie
from Categorie import SousCategoriePleine
from CategorieHomologue import CategorieHomologue
from Cluster import CategorieClusters
cat = EnsParties({1,2,3})
cat.transformer_graphviz()
......@@ -12,10 +13,19 @@ d1 = DiagrammeObjets(cat,{frozenset({1,2}),frozenset({3})})
d2 = DiagrammeObjets(cat,{frozenset({3,2}),frozenset({1})})
d1.transformer_graphviz()
#d2.transformer_graphviz()
d2.transformer_graphviz()
c_p1 = ChampActif(d1)
# obj = set(c_p1.objets).pop()
# Cocone(obj).transformer_graphviz()
# fleches = c_p1({obj},{obj})
# fleche = fleches.pop()
# fleche.h.transformer_graphviz()
# fleche = fleches.pop()
# fleche.h.transformer_graphviz()
c_p2 = ChampActif(d2)
# c_p1.transformer_graphviz()
sous_c_p1 = SousCategoriePleine(c_p1,c_p1.objets_colimites())
......@@ -25,6 +35,8 @@ sous_c_p1.transformer_graphviz()
sous_c_p2 = SousCategoriePleine(c_p2,c_p2.objets_colimites())
sous_c_p2.transformer_graphviz()
cat_hom = CategorieHomologue({sous_c_p1,sous_c_p2}) #on cherche simplement un isomoprhisme entre les colimites pour dire qu'ils ont les mêmes colimites
print("cat_hom")
cat_hom.transformer_graphviz()
\ No newline at end of file
# cat_hom = CategorieHomologue({sous_c_p1,sous_c_p2}) #on cherche simplement un isomoprhisme entre les colimites pour dire qu'ils ont les mêmes colimites
# print("cat_hom")
# cat_hom.transformer_graphviz()
cat_clust = CategorieClusters({d1,d2})
\ No newline at end of file
......@@ -10,4 +10,40 @@ class Perspective(Interaction):
- ses composantes font partie de la même composante connexe de (D1(0)|D2)
- la famille de composantes est maximale."""
\ No newline at end of file
def verifier_struct(interaction:Interaction) -> tuple:
'''Renvoie (True,None) si la structure de perspective est vérifiée par l'`interaction`, (False,Exception) sinon.'''
D1,D2 = interaction.source,interaction.cible
# contrainte 1) au moins une flèche part de chacun des objets de D1
for e in D1.source.objets:
for composante in interaction:
if composante.e == e:
break
else:
return False,Exception("Incoherence ProtoClusterActif : l'objet "+str(e)+" de l'index de D1 n'a pas de de composante associée.")
# contrainte 2) les composantes qui sortent d'un objet D1(i) mènent à des objets D2(j_i) reliés par un zig zag dans la comma catégorie (D1(i)|D2)
for i in D1.source.objets:
G_i = {compo for compo in interaction if compo.e == i}
comma_categorie = CategorieFSous(D2,D1(i))
cat_cc = CatPZigZag(comma_categorie)
# on vérifie que tous les E(e) sont isomorphes dans la catégorie des composantes connexes de la catégorie sous D(d)
temp = G_i.pop()
composante_reference = ObjetCommaCategorie(0,temp.f,temp.d) #on met un 0 dans e puisque c'est un objet à gauche de la comma catégorie (D1(i)|D2)
for composante in G_i:
composante = ObjetCommaCategorie(0,composante.f,composante.d) #on met un 0 dans e puisque c'est un objet à gauche de la comma catégorie (D1(i)|D2)
if not cat_cc.existe_morphisme(composante,composante_reference):
return False,Exception("Incoherence ProtoClusterActif : la composante"+str(composante)+" n'est pas dans la même composante connexe que "+str(composante_reference))
# contrainte 3) hog = g'
for composante in interaction:
for h in D2.source({composante.d},abs(D2.source)):
if ObjetCommaCategorie(composante.e,D2(h)@composante.f,h.cible) not in interaction:
return False,Exception("Incoherence ProtoClusterActif : la composee de la composante "+str(composante)+" avec la fleche "+str(D2(h))+" de D2 n'est pas dans le cluster.")
# contrainte 4) goh = g'
for composante in interaction:
for h in D1.source(abs(D1.source),{composante.e}):
if ObjetCommaCategorie(h.source,composante.f@D1(h),composante.d) not in interaction:
return False,Exception("Incoherence ProtoClusterActif : la composee de la fleche "+str(D1(h))+" de D1 avec la composante "+str(composante)+" n'est pas dans le cluster")
return True,None
\ No newline at end of file
Markdown is supported
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