Commit 0fd3832c authored by Guillaume Sabbagh's avatar Guillaume Sabbagh
Browse files

Changement de Catégorie prohomologue

parent 5a7cb5c3
from Categorie import Categorie
from Foncteur import Foncteur
from CatFinies import CatFinies
from EnsFinis import EnsFinis,Application
from ChampPerceptif import ChampPerceptif
from EnsFinis import CategorieBijections,Bijection
from ChampPerceptif import ChampPerceptif,Cone
from collections import defaultdict
import itertools
......@@ -16,7 +16,7 @@ class FoncteurOubli(Foncteur):
{f:f.k for f in champ_perceptif(abs(champ_perceptif),abs(champ_perceptif))})
class CategorieProhomologue(CatFinies):
"""Catégorie dont les objets sont des champs perceptifs et les morphismes sont des foncteurs qui commutent avec le foncteur d'oubli."""
"""Catégorie dont les objets sont des champs perceptifs et les morphismes sont des foncteurs bijectifs qui commutent avec le foncteur d'oubli."""
def verifier_coherence(self):
CatFinies.verifier_coherence(self)
......@@ -35,42 +35,57 @@ class CategorieProhomologue(CatFinies):
for cible in cibles:
dict_apex_cone_source = defaultdict(frozenset)
for obj in abs(source):
dict_apex_cone_source[obj.e] |= {obj}
dict_apex_cone_source[Cone(obj).apex] |= {obj}
dict_apex_cone_cible = defaultdict(frozenset)
for obj in abs(cible):
dict_apex_cone_cible[obj.e] |= {obj}
dict_apex_cone_cible[Cone(obj).apex] |= {obj}
if set(dict_apex_cone_source.keys()) != set(dict_apex_cone_cible.keys()):
continue
applications_objets = set() # applications entre cônes de même apex
ens_objets = EnsFinis()
bijections_objets = set() # bijections entre cônes de même apex
ens_objets = CategorieBijections()
rate = False
for apex in dict_apex_cone_source:
if len(dict_apex_cone_source[apex]) != len(dict_apex_cone_cible[apex]):
rate = True
break
ens_objets |= {dict_apex_cone_source[apex]}
ens_objets |= {dict_apex_cone_cible[apex]}
applications_objets |= {ens_objets({dict_apex_cone_source[apex]},{dict_apex_cone_cible[apex]})}
for application_objet in itertools.product(*applications_objets):
app_obj = dict([x for app in application_objet for x in app.as_dict().items()])
app_fleche_foncteur = dict() # à chaque couple d'objets on associe un ensemble d'applications
bijections_objets |= {frozenset(ens_objets({dict_apex_cone_source[apex]},{dict_apex_cone_cible[apex]}))}
if rate:
continue
print(len(list(itertools.product(*bijections_objets))))
for bijection_objet in itertools.product(*bijections_objets):
bij_obj = dict([x for bij in bijection_objet for x in bij.as_dict().items()])
bij_fleche_foncteur = dict() # à chaque couple d'objets on associe un ensemble de bijections
rate = False
for c,d in itertools.product(source.objets, repeat=2):
ens_fleches = EnsFinis({frozenset(source({c},{d})),frozenset(cible({app_obj[c]},{app_obj[d]}))})
app_fleches_c_vers_d = ens_fleches({frozenset(source({c},{d}))},{frozenset(cible({app_obj[c]},{app_obj[d]}))})
app_fleche_foncteur[(c,d)] = app_fleches_c_vers_d
if len(app_fleches_c_vers_d) == 0:
fleches_source_c_vers_d = source({c},{d})
fleches_cibles_c_vers_d = cible({bij_obj[c]},{bij_obj[d]})
if len(fleches_source_c_vers_d) != len(fleches_cibles_c_vers_d):
rate = True
break
ens_fleches = CategorieBijections({frozenset(fleches_source_c_vers_d),frozenset(fleches_cibles_c_vers_d)})
bij_fleches_c_vers_d = ens_fleches({frozenset(source({c},{d}))},{frozenset(cible({bij_obj[c]},{bij_obj[d]}))})
bij_fleche_foncteur[(c,d)] = bij_fleches_c_vers_d
if len(bij_fleches_c_vers_d) == 0:
rate = True
break
if len(app_fleche_foncteur[(c,d)]) == 0: #la dernière recherche d'applications à échouée, on passe à l'application objet suivante
if rate:
continue
for applications_fleches in itertools.product(*app_fleche_foncteur.values()):
app_fleches = dict()
for app in applications_fleches:
app_fleches.update(app.as_dict())
print(len(list(itertools.product(*bij_fleche_foncteur.values()))))
for bijections_fleches in itertools.product(*bij_fleche_foncteur.values()):
bij_fleches = dict()
for bij in bijections_fleches:
bij_fleches.update(bij.as_dict())
for f in source(abs(source),abs(source)):
for g in source(abs(source),{f.source}):
if app_fleches[f@g] != app_fleches[f]@app_fleches[g]:
if bij_fleches[f@g] != bij_fleches[f]@bij_fleches[g]:
break
else:
continue
break
else:
result |= {Foncteur(source,cible,app_obj,app_fleches)}
result |= {Foncteur(source,cible,bij_obj,bij_fleches)}
return result
......
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