Ich bin ein absoluter Anfänger in Coq und ich versuche, einige kategorietheoretische Dinge als Übung zu implementieren.
Ich habe ein wenig unter den Git-Repos der vielen verfügbaren Implementierungen (HoTT, Awodeys Coq-Begleiter usw.) gesurft. Es scheint, dass jedes einzelne Projekt so etwas implementiert
Record Category : Type :=
mkCategory{
ob : Type ;
mor : ob -> ob -> Type ;
compose : forall x y z : ob,
mor x y -> mor y z -> mor x z ;
identity : forall x, mor x x ;
(* ... axioms ... *)
}.
Es ist eine Art natürlich, wenn man die meisten Definitionen von Kategorien in modernen Büchern berücksichtigt. Ich bin jedoch der Meinung, dass es einfacher wäre, es intern zu implementieren (wenn nicht falsch, war es zu Grothendiecks Zeiten die übliche Definition):
Definition. Eine Kategorie sind die Daten von
- eine Menge / Klasse von Objekten,
- eine Gruppe / Klasse von morphisms,
- Funktionen und ( steht für Quelle , für Ziel undfür Identität )
- eine Funktion deren Domäne ist das Faserprodukt von
einige Axiome befriedigen ...
Der Vorteil einer solchen Definition besteht darin, dass sie direkt verallgemeinert wird, indem "Menge / Klasse" durch "Objekte einer bestimmten Kategorie" und "Funktionen" durch "Morphismen dieser Kategorie" ersetzt werden, was zum Konzept der internen Kategorie führt . (Dann können Sie von topologischen / differenziellen Kategorien oder Kategorien innerhalb eines Topos usw. sprechen.)
Mein Problem ist die Formalisierung des Faserprodukts in Coq. Mein erster Versuch wäre, so etwas zu tun
Record Category : Type :=
mkCategory{
ob : Type ;
mor : Type ;
s : mor -> ob ;
t : mor -> ob ;
compose : mor -> mor -> option mor ;
i : ob -> mor ;
adequacy : forall f g : mor,
(exists h, (compose f g) = (some h)) -> (t f = s g) ;
(* ... axioms ... *)
}.
Aber ich denke, das könnte zu einem lästigen späteren Code führen. Beispielsweise wären verkettete Zusammensetzungen schwer zu lesen.
Gibt es ein Projekt mit einer Implementierung, die auf der internen Definition basiert? Gibt es eine schnelle Möglichkeit, das Faserprodukt zu definieren, das ich in Coq benötige?
Bearbeiten. Übrigens sehe ich viel
Ob :> Type
eher von
Ob : Type
Was bedeutet das zusätzliche ">"? Aus dem Dokument geht hervor, dass es sich um eine Art Zwang handelt . Was genau bedeutet das?
mor
abhängig von s
und t
z mor: forall s t : ob, Type
.
Ob
)?