Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
(** * ∑-categories - exploded Grothendieck constructions, or generalizations of subcategories *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Basics.Trunc Types.Sigma.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.Local Notationsig_type := sig.(** We can generalize the notion of [sig] to categories. This is, essentially, a type-theoretic perspective on the Grothendieck construction. *)Sectionsig_obj_mor.VariableA : PreCategory.VariablePobj : A -> Type.Local Notationobj := (sig Pobj).VariablePmor : forallsd : obj, morphism A s.1 d.1 -> Type.Local Notationmor s d := (sig (Pmor s d)).Context `(HPmor : forallsd, IsHSet (mor s d)).VariablePidentity : forallx, @Pmor x x (@identity A _).VariablePcompose : forallsdd'm1m2,
@Pmor d d' m1
-> @Pmor s d m2
-> @Pmor s d' (m1 o m2).Local Notationidentity x := (@identity A x.1; @Pidentity x).Local Notationcompose m1 m2 := (m1.1 o m2.1; @Pcompose _ _ _ m1.1 m2.1 m1.2 m2.2)%morphism.HypothesisP_associativity
: forallx1x2x3x4 (m1 : mor x1 x2) (m2 : mor x2 x3) (m3 : mor x3 x4),
compose (compose m3 m2) m1 = compose m3 (compose m2 m1).HypothesisP_left_identity
: forallab (f : mor a b),
compose (identity b) f = f.HypothesisP_right_identity
: forallab (f : mor a b),
compose f (identity a) = f.(** ** Definition of a [sig]-precategory *)
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forallsd : obj, IsHSet (mor s d) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2) P_associativity: forall (x1x2x3x4 : obj)
(m1 : mor x1 x2) (m2 : mor x2 x3)
(m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1) P_left_identity: forall (ab : obj) (f : mor a b),
compose (identity b) f = f P_right_identity: forall (ab : obj) (f : mor a b),
compose f (identity a) = f
PreCategory
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forallsd : obj, IsHSet (mor s d) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2) P_associativity: forall (x1x2x3x4 : obj)
(m1 : mor x1 x2) (m2 : mor x2 x3)
(m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1) P_left_identity: forall (ab : obj) (f : mor a b),
compose (identity b) f = f P_right_identity: forall (ab : obj) (f : mor a b),
compose f (identity a) = f
PreCategory
refine (@Build_PreCategory
obj
(funsd => mor s d)
(funx => identity x)
(funsdd'm1m2 => compose m1 m2)
_
_
_
_);
assumption.Defined.(** ** First projection functor *)Definitionpr1' : Functor sig' A
:= Build_Functor
sig' A
(@pr1 _ _)
(fun__ => @pr1 _ _)
(fun_____ => idpath)
(fun_ => idpath).Endsig_obj_mor.Arguments pr1' {A Pobj Pmor HPmor Pidentity Pcompose P_associativity P_left_identity P_right_identity}.(** ** Variant of [sig']-precategory when we are taking a subset of morphisms *)Sectionsig_obj_mor_hProp.VariableA : PreCategory.VariablePobj : A -> Type.Local Notationobj := (sig_type Pobj).VariablePmor : forallsd : obj, morphism A s.1 d.1 -> Type.Local Notationmor s d := (sig_type (Pmor s d)).Context `(HPmor : forallsdm, IsHProp (Pmor s d m)).VariablePidentity : forallx, @Pmor x x (@identity A _).VariablePcompose : forallsdd'm1m2,
@Pmor d d' m1
-> @Pmor s d m2
-> @Pmor s d' (m1 o m2).Local Notationidentity x := (@identity A x.1; @Pidentity x).Local Notationcompose m1 m2 := (m1.1 o m2.1; @Pcompose _ _ _ m1.1 m2.1 m1.2 m2.2)%morphism.Local Ltact ex_tac :=
intros;
simpl;
apply path_sigma_uncurried;
simpl;
ex_tac;
apply path_ishprop.
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2)
forall (x1x2x3x4 : obj) (m1 : mor x1 x2)
(m2 : mor x2 x3) (m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1)
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2)
forall (x1x2x3x4 : obj) (m1 : mor x1 x2)
(m2 : mor x2 x3) (m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1)
abstract t ltac:(exists (associativity________))
using P_associativity_core_subproof.Defined.
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2) P_associativity:= P_associativity_core_subproof: forall (x1x2x3x4 : obj)
(m1 : mor x1 x2) (m2 : mor x2 x3)
(m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1)
forall (ab : obj) (f : mor a b),
compose (identity b) f = f
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2) P_associativity:= P_associativity_core_subproof: forall (x1x2x3x4 : obj)
(m1 : mor x1 x2) (m2 : mor x2 x3)
(m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1)
forall (ab : obj) (f : mor a b),
compose (identity b) f = f
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2)
forall (ab : obj) (f : mor a b),
compose (identity b) f = f
abstract t ltac:(exists (left_identity____))
using P_left_identity_core_subproof.Defined.
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2) P_associativity:= P_associativity_core_subproof: forall (x1x2x3x4 : obj)
(m1 : mor x1 x2) (m2 : mor x2 x3)
(m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1) P_left_identity:= P_left_identity_core_subproof: forall (ab : obj) (f : mor a b),
compose (identity b) f = f
forall (ab : obj) (f : mor a b),
compose f (identity a) = f
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2) P_associativity:= P_associativity_core_subproof: forall (x1x2x3x4 : obj)
(m1 : mor x1 x2) (m2 : mor x2 x3)
(m3 : mor x3 x4),
compose (compose m3 m2) m1 =
compose m3 (compose m2 m1) P_left_identity:= P_left_identity_core_subproof: forall (ab : obj) (f : mor a b),
compose (identity b) f = f
forall (ab : obj) (f : mor a b),
compose f (identity a) = f
A: PreCategory Pobj: A -> Type Pmor: forallsd : obj, morphism A s.1 d.1 -> Type HPmor: forall (sd : obj) (m : morphism A s.1 d.1),
IsHProp (Pmor s d m) Pidentity: forallx : obj, Pmor x x 1 Pcompose: forall (sdd' : obj)
(m1 : morphism A d.1 d'.1)
(m2 : morphism A s.1 d.1),
Pmor d d' m1 ->
Pmor s d m2 -> Pmor s d' (m1 o m2)
forall (ab : obj) (f : mor a b),
compose f (identity a) = f
abstract t ltac:(exists (right_identity____))
using P_right_identity_core_subproof.Defined.(** *** Definition of [sig]-precategory *)Definitionsig : PreCategory
:= Evalcbv delta [P_associativity P_left_identity P_right_identity]
in @sig' A Pobj Pmor _ Pidentity Pcompose P_associativity P_left_identity P_right_identity.(** *** First projection functor *)Definitionproj1_sig : Functor sig A
:= pr1'.Endsig_obj_mor_hProp.Arguments proj1_sig {A Pobj Pmor HPmor Pidentity Pcompose}.Notationsubcategory := sig.