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.
(** * Classify the path space of adjunctions *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Functor.Composition.Core Functor.Identity.Require Import Adjoint.UnitCounit Adjoint.Core NaturalTransformation.Paths.Require Import Types Trunc.Require Import Basics.Tactics.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope morphism_scope.LocalOpen Scope natural_transformation_scope.Sectionpath_adjunction.Context `{Funext}.VariablesCD : PreCategory.VariableF : Functor C D.VariableG : Functor D C.Notationadjunction_sig :=
{ eta : NaturalTransformation 1 (G o F)
| { eps : NaturalTransformation (F o G) 1
| { equ1 : forallY : C, (eps (F Y) o F _1 (eta Y))%morphism = 1%morphism
| forallX : D, (G _1 (eps X) o eta (G X))%morphism = 1%morphism }}}.(** ** Equivalence between record and nested sigma for unit+counit adjunctions *)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C
{eta : NaturalTransformation 1 (G o F) &
{eps : NaturalTransformation (F o G) 1 &
{_
: forallY : C, eps (F _0 Y)%object o F _1 (eta Y) = 1
&
forallX : D, G _1 (eps X) o eta (G _0 X)%object = 1}}} <~>
F -| G
H: Funext C, D: PreCategory F: Functor C D G: Functor D C
{eta : NaturalTransformation 1 (G o F) &
{eps : NaturalTransformation (F o G) 1 &
{_
: forallY : C, eps (F _0 Y)%object o F _1 (eta Y) = 1
&
forallX : D, G _1 (eps X) o eta (G _0 X)%object = 1}}} <~>
F -| G
issig.Defined.(** ** Adjunctions are an hSet *)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C
IsHSet (F -| G)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C
IsHSet (F -| G)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C
IsHSet
{eta : NaturalTransformation 1 (G o F) &
{eps : NaturalTransformation (F o G) 1 &
{_
: forallY : C,
eps (F _0 Y)%object o F _1 (eta Y) = 1 &
forallX : D, G _1 (eps X) o eta (G _0 X)%object = 1}}}
typeclasses eauto.Qed.(** ** Equality of adjunctions follows from equality of unit+counit *)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A, A': F -| G
unit A = unit A' -> counit A = counit A' -> A = A'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A, A': F -| G
unit A = unit A' -> counit A = counit A' -> A = A'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A, A': F -| G X: unit A = unit A' X0: counit A = counit A'
A = A'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C unit: NaturalTransformation 1 (G o F) counit: NaturalTransformation (F o G) 1 unit_counit_equation_1: forallY : C,
counit (F _0 Y)%object
o F _1 (unit Y) = 1 unit_counit_equation_2: forallX : D,
G _1 (counit X)
o unit (G _0 X)%object = 1 unit0: NaturalTransformation 1 (G o F) counit0: NaturalTransformation (F o G) 1 unit_counit_equation_0: forallY : C,
counit0 (F _0 Y)%object
o F _1 (unit0 Y) = 1 unit_counit_equation_3: forallX : D,
G _1 (counit0 X)
o unit0 (G _0 X)%object = 1 X: unit = unit0 X0: counit = counit0
f_ap;
exact (center _).Qed.(** ** Equality of adjunctions follows from equality of action of unit+counit on objects *)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A, A': F -| G
unit A == unit A' -> counit A == counit A' -> A = A'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A, A': F -| G
unit A == unit A' -> counit A == counit A' -> A = A'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A, A': F -| G X: unit A == unit A' X0: counit A == counit A'
A = A'
apply path_adjunction';
apply path_natural_transformation;
assumption.Qed.(** In fact, it suffices to show that either the units are equal, or the counits are equal, by the UMP of the (co)unit. And if we are working in a [Category], rather than a [PreCategory], then [Adjunction] is, in fact, an hProp, because the (co)unit is unique up to unique isomorphism. TODO: Formalize this. *)Endpath_adjunction.Ltacpath_adjunction :=
repeatmatch goal with
| _ => intro
| _ => reflexivity
| _ => apply path_adjunction; simplend.