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.
(** * Adjunctions as universal morphisms *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Functor.Identity Functor.Composition.Core.Require Import Functor.Dual Category.Dual.Require Import Adjoint.Core Adjoint.UnitCounit Adjoint.UnitCounitCoercions Adjoint.Dual.Require Comma.Core.Local Set Warnings"-notation-overridden". (* work around bug #5567, https://coq.inria.fr/bugs/show_bug.cgi?id=5567, notation-overridden,parsing should not trigger for only printing notations *)Import Comma.Core.Local Set Warnings"notation-overridden".Require Import UniversalProperties Comma.Dual InitialTerminalCategory.Core InitialTerminalCategory.Functors.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope morphism_scope.Sectionadjunction_universal.(** ** [F ⊣ G] gives an initial object of [(Y / G)] for all [Y : C] *)Sectioninitial.VariablesCD : PreCategory.VariableF : Functor C D.VariableG : Functor D C.VariableA : F -| G.VariableY : C.Definitioninitial_morphism__of__adjunction
: object (Y / G)
:= @CommaCategory.Build_object
_ D C
(! Y) G
(center _)
(F Y)
((unit A) Y).Definitionis_initial_morphism__of__adjunction
: IsInitialMorphism initial_morphism__of__adjunction
:= Build_IsInitialMorphism
_
_
_
_
((A : AdjunctionUnit _ _).2 _).Endinitial.GlobalArguments initial_morphism__of__adjunction [C D F G] A Y.GlobalArguments is_initial_morphism__of__adjunction [C D F G] A Y _.(** ** [F ⊣ G] gives a terminal object of [(F / X)] for all [X : D] *)Sectionterminal.VariablesCD : PreCategory.VariableF : Functor C D.VariableG : Functor D C.VariableA : F -| G.VariableX : D.Definitionterminal_morphism__of__adjunction
: object (F / X)
:= Evalsimplin
dual_functor
(! X)^op F^op
(initial_morphism__of__adjunction A^op X).Definitionis_terminal_morphism__of__adjunction
: IsTerminalMorphism terminal_morphism__of__adjunction
:= is_initial_morphism__of__adjunction A^op X.Endterminal.GlobalArguments terminal_morphism__of__adjunction [C D F G] A X.GlobalArguments is_terminal_morphism__of__adjunction [C D F G] A X _.Endadjunction_universal.Sectionadjunction_from_universal.(** ** an initial object of [(Y / G)] for all [Y : C] gives a left adjoint to [G] *)Sectioninitial.VariablesCD : PreCategory.VariableG : Functor D C.Context `(HM : forallY, @IsInitialMorphism _ _ Y G (M Y)).Local Notationobj_of Y :=
(IsInitialMorphism_object (@HM Y))
(only parsing).Local Notationmor_of Y0 Y1 f :=
(letetaY1 := IsInitialMorphism_morphism (@HM Y1) in
IsInitialMorphism_property_morphism (@HM Y0) _ (etaY1 o f))
(only parsing).
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) Y: C
(letetaY1 := IsInitialMorphism_morphism (HM (Y:=Y))
in
IsInitialMorphism_property_morphism (HM (Y:=Y))
(IsInitialMorphism_object (HM (Y:=Y))) (etaY1 o 1)) =
1
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) Y: C
(letetaY1 := IsInitialMorphism_morphism (HM (Y:=Y))
in
IsInitialMorphism_property_morphism (HM (Y:=Y))
(IsInitialMorphism_object (HM (Y:=Y))) (etaY1 o 1)) =
1
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) Y: C
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) x, y, z: C g: morphism C x y f: morphism C y z
(letetaY1 := IsInitialMorphism_morphism (HM (Y:=z))
in
IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=z)))
(etaY1 o (f o g))) =
(letetaY1 := IsInitialMorphism_morphism (HM (Y:=z))
in
IsInitialMorphism_property_morphism (HM (Y:=y))
(IsInitialMorphism_object (HM (Y:=z))) (etaY1 o f))
o (letetaY1 := IsInitialMorphism_morphism (HM (Y:=y))
in
IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=y)))
(etaY1 o g))
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) x, y, z: C g: morphism C x y f: morphism C y z
(letetaY1 := IsInitialMorphism_morphism (HM (Y:=z))
in
IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=z)))
(etaY1 o (f o g))) =
(letetaY1 := IsInitialMorphism_morphism (HM (Y:=z))
in
IsInitialMorphism_property_morphism (HM (Y:=y))
(IsInitialMorphism_object (HM (Y:=z))) (etaY1 o f))
o (letetaY1 := IsInitialMorphism_morphism (HM (Y:=y))
in
IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=y)))
(etaY1 o g))
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) x, y, z: C g: morphism C x y f: morphism C y z
IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=z)))
(IsInitialMorphism_morphism (HM (Y:=z)) o (f o g)) =
IsInitialMorphism_property_morphism (HM (Y:=y))
(IsInitialMorphism_object (HM (Y:=z)))
(IsInitialMorphism_morphism (HM (Y:=z)) o f)
o IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=y)))
(IsInitialMorphism_morphism (HM (Y:=y)) o g)
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) x, y, z: C g: morphism C x y f: morphism C y z
G
_1 (IsInitialMorphism_property_morphism (HM (Y:=y))
(IsInitialMorphism_object (HM (Y:=z)))
(IsInitialMorphism_morphism (HM (Y:=z)) o f)
o IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=y)))
(IsInitialMorphism_morphism (HM (Y:=y)) o g))
o IsInitialMorphism_morphism (HM (Y:=x)) =
IsInitialMorphism_morphism (HM (Y:=z)) o (f o g)
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) x, y, z: C g: morphism C x y f: morphism C y z
G
_1 (IsInitialMorphism_property_morphism (HM (Y:=y))
(IsInitialMorphism_object (HM (Y:=z)))
(IsInitialMorphism_morphism (HM (Y:=z)) o f))
o G
_1 (IsInitialMorphism_property_morphism (HM (Y:=x))
(IsInitialMorphism_object (HM (Y:=y)))
(IsInitialMorphism_morphism (HM (Y:=y)) o g))
o IsInitialMorphism_morphism (HM (Y:=x)) =
IsInitialMorphism_morphism (HM (Y:=z)) o (f o g)
C, D: PreCategory G: Functor D C M: forallx : C, (x / G)%category HM: forallY : C, IsInitialMorphism (M Y) x, y, z: C g: morphism C x y f: morphism C y z
IsInitialMorphism_morphism (HM (Y:=z)) o f o g =
IsInitialMorphism_morphism (HM (Y:=z)) o f o g
reflexivity.Qed.Definitionfunctor__of__initial_morphism : Functor C D
:= Build_Functor
C D
(funx => obj_of x)
(funsdm => mor_of s d m)
composition_of
identity_of.
forall (c : C) (d : D)
(f : morphism C c (G _0 d)%object),
Contr
{g
: morphism D
(functor__of__initial_morphism _0 c)%object d &
G _1 g
o Build_NaturalTransformation 1
(G o functor__of__initial_morphism)
(funx : C =>
IsInitialMorphism_morphism (HM (Y:=x)))
(fun (sd0 : C) (m : morphism C s d0) =>
symmetry
(G
_1 (IsInitialMorphism_property_morphism
(HM (Y:=s))
(functor__of__initial_morphism _0 d0)
(IsInitialMorphism_morphism
(HM (Y:=d0)) o 1 _1 m))
o IsInitialMorphism_morphism (HM (Y:=s)))
(IsInitialMorphism_morphism (HM (Y:=d0))
o 1 _1 m)
(IsInitialMorphism_property_morphism_property
(HM (Y:=s))
(functor__of__initial_morphism _0 d0)
(IsInitialMorphism_morphism (HM (Y:=d0))
o 1 _1 m))) c = f}
forall (c : C) (d : D)
(f : morphism C c (G _0 d)%object),
Contr
{g
: morphism D (IsInitialMorphism_object (HM (Y:=c)))
d &
G _1 g o IsInitialMorphism_morphism (HM (Y:=c)) = f}
exact (func => @IsInitialMorphism_property _ _ c G (M c) (@HM c)).Defined.Endinitial.(** ** a terminal object of [(F / X)] for all [X : D] gives a right adjoint to [F] *)Sectionterminal.VariablesCD : PreCategory.VariableF : Functor C D.Context `(HM : forallX, @IsTerminalMorphism _ _ F X (M X)).Definitionfunctor__of__terminal_morphism : Functor D C
:= (@functor__of__initial_morphism
(D^op) (C^op)
(F^op)
(funx : D => dual_functor F !x (M x)) HM)^op.Definitionadjunction__of__terminal_morphism
: F -| functor__of__terminal_morphism
:= ((@adjunction__of__initial_morphism
(D^op) (C^op)
(F^op)
(funx : D => dual_functor F !x (M x)) HM)^op)%adjunction.Endterminal.Endadjunction_from_universal.