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.
(** * Coercions between hom-set adjunctions and unit+counit adjunctions *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Adjoint.UnitCounit Adjoint.UnitCounitCoercions Adjoint.Hom.Require Import Category.Morphisms.Require Import Functor.Composition.Core.Require Import FunctorCategory.Morphisms.Require Import Functor.Identity.Require Import SetCategory.Morphisms.Require Import Basics.Trunc Types.Sigma HoTT.Tactics Equivalences.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope path_scope.LocalOpen Scope morphism_scope.LocalOpen Scope category_scope.LocalOpen Scope functor_scope.LocalOpen Scope natural_transformation_scope.(** ** unit+UMP from hom-set adjunction *)SectionAdjunctionEquivalences.Context `{Funext}.VariablesCD : PreCategory.VariableF : Functor C D.VariableG : Functor D C.LocalOpen Scope morphism_scope.(** We need to jump through some hoops with [simpl] for speed *)Sectionadjunction_naturality.VariableA : AdjunctionHom F G.Sectionnat1.Contextcdd'
(f : morphism D (F c) d)
(g : morphism D d d').Letadjunction_naturalityT
:= Evalsimplin
G _1 g o A (c, d) f = A (c, d') (g o f).
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d, d': D f: morphism D (F _0 c)%object d g: morphism D d d' adjunction_naturalityT:= G _1 g o A (c, d) f =
A (c, d') (g o f): Type
adjunction_naturalityT
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d, d': D f: morphism D (F _0 c)%object d g: morphism D d d' adjunction_naturalityT:= G _1 g o A (c, d) f =
A (c, d') (g o f): Type
adjunction_naturalityT
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d, d': D f: morphism D (F _0 c)%object d g: morphism D d d' adjunction_naturalityT:= G _1 g o A (c, d) f =
A (c, d') (g o f): Type H': G _1 g o A (c, d) f o 1 =
A (c, d') (g o f o F _1 1)
adjunction_naturalityT
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d, d': D f: morphism D (F _0 c)%object d g: morphism D d d' adjunction_naturalityT:= G _1 g o A (c, d) f =
A (c, d') (g o f): Type H': G _1 g o A (c, d) f = A (c, d') (g o f)
adjunction_naturalityT
exact H'.Qed.Endnat1.Sectionnat2.Contextcc'd
(f : morphism D (F c') d)
(g : morphism C c c').Letadjunction_naturalityT'
:= Evalsimplin
A (c', d) f o g = A (c, d) (f o F _1 g).
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c, c': C d: D f: morphism D (F _0 c')%object d g: morphism C c c' adjunction_naturalityT':= A (c', d) f o g =
A (c, d) (f o F _1 g): Type
adjunction_naturalityT'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c, c': C d: D f: morphism D (F _0 c')%object d g: morphism C c c' adjunction_naturalityT':= A (c', d) f o g =
A (c, d) (f o F _1 g): Type
adjunction_naturalityT'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c, c': C d: D f: morphism D (F _0 c')%object d g: morphism C c c' adjunction_naturalityT':= A (c', d) f o g =
A (c, d) (f o F _1 g): Type H': G _1 1 o A (c', d) f o g =
A (c, d) (1 o f o F _1 g)
adjunction_naturalityT'
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c, c': C d: D f: morphism D (F _0 c')%object d g: morphism C c c' adjunction_naturalityT':= A (c', d) f o g =
A (c, d) (f o F _1 g): Type H': A (c', d) f o g = A (c, d) (f o F _1 g)
adjunction_naturalityT'
exact H'.Qed.Endnat2.Endadjunction_naturality.(** Quoting from Awodey's "Category Theory": Proposition 9.4. Given categories and functors, [F : C ↔ D : G] the following conditions are equivalent: 1. [F] is left adjoint to [G]; that is, there is a natural transformation [η : 1_C → G ∘ F] that has the UMP of the unit: For any [c : C], [d : D] and [f : c -> G d] there exists a unique [g : F c → d] such that [f = G g ∘ η c]. 2. For any [c : C] and [d : D] there is an isomorphism, [ϕ : Hom_D (F c, d) ≅ Hom_C (c, G d)] that is natural in both [c] and [d]. Moreover, the two conditions are related by the formulas [ϕ g = G g ∘ η c] [η c = ϕ(1_{F c})] *)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
IsHProp
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
IsHProp
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
forallxy : {g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}, x = y
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object g0: morphism D (F _0 c)%object d H0: G _1 g0 o A (c, (F _0 c)%object) 1 = f g1: morphism D (F _0 c)%object d H1: G _1 g1 o A (c, (F _0 c)%object) 1 = f
g0 = g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: G _1 g0 o A (c, (F _0 c)%object) 1 =
G _1 g1 o A (c, (F _0 c)%object) 1
g0 = g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: A (c, d) (g0 o 1) = A (c, d) (g1 o 1)
g0 = g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: A (c, d) g0 = A (c, d) g1
g0 = g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: A (c, d) g0 = A (c, d) g1
idmap g0 = idmap g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: A (c, d) g0 = A (c, d) g1
((A (c, d))^-1 o A (c, d)) g0 = g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: A (c, d) g0 = A (c, d) g1
A^-1 (c, d) (A (c, d) g1) = g1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D g0, g1: morphism D (F _0 c)%object d H0: A (c, d) g0 = A (c, d) g1
g1 = g1
reflexivity.Qed.
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G s, d: C m: morphism C s d
A (d, (F _0 d)%object) 1 o m =
G _1 (F _1 m) o A (s, (F _0 s)%object) 1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G s, d: C m: morphism C s d
A (d, (F _0 d)%object) 1 o m =
G _1 (F _1 m) o A (s, (F _0 s)%object) 1
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G s, d: C m: morphism C s d
A (s, (F _0 d)%object) (1 o F _1 m) =
A (s, (F _0 d)%object) (F _1 m o 1)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G s, d: C m: morphism C s d
A (s, (F _0 d)%object) (F _1 m) =
A (s, (F _0 d)%object) (F _1 m)
reflexivity.Qed.
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G
AdjunctionUnit F G
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G
AdjunctionUnit F G
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G
forall (c : C) (d : D)
(f : morphism C c (G _0 d)%object),
Contr
{g : morphism D (F _0 c)%object d &
G _1 g
o Build_NaturalTransformation 1 (G o F)
(func0 : C => A (c0, (F _0 c0)%object) 1)
(adjunction_unit__of__adjunction_hom__mate_of__commutes
A) c = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G
forall (c : C) (d : D)
(f : morphism C c (G _0 d)%object),
Contr
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
Contr
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
IsHProp
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
IsHProp
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
apply adjunction_unit__of__adjunction_hom_helper.
H: Funext C, D: PreCategory F: Functor C D G: Functor D C A: AdjunctionHom F G c: C d: D f: morphism C c (G _0 d)%object
{g : morphism D (F _0 c)%object d &
G _1 g o A (c, (F _0 c)%object) 1 = f}
exact ((A (c, d))^-1%morphism f;
((adjunction_naturality A _ _ _ _ _)
@ (ap (A (c, d)) (right_identity _ _ _ _))
@ (ap10 (@right_inverse _ _ _ (A (c, d)) _) f))%path).Defined.EndAdjunctionEquivalences.Sectionisequiv.(** We want to be able to use this without needing [Funext]. So, first, we prove that the types of hom-sets are equivalent. *)VariablesCD : PreCategory.VariableF : Functor C D.VariableG : Functor D C.LocalOpen Scope morphism_scope.VariableT : AdjunctionUnit F G.
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D
morphism C c (G _0 d)%object <~>
morphism D (F _0 c)%object d
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D
morphism C c (G _0 d)%object <~>
morphism D (F _0 c)%object d
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D x: morphism D (F _0 c)%object d
(center
{g : morphism D (F _0 c)%object d &
G _1 g o T.1 c = G _1 x o T.1 c}).1 = x
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D x: morphism C c (G _0 d)%object
G
_1 (center
{g : morphism D (F _0 c)%object d &
G _1 g o T.1 c = x}).1 o T.1 c = x
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D x: morphism D (F _0 c)%object d
(center
{g : morphism D (F _0 c)%object d &
G _1 g o T.1 c = G _1 x o T.1 c}).1 = x
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D x: morphism D (F _0 c)%object d
(center
{g : morphism D (F _0 c)%object d &
G _1 g o T.1 c = G _1 x o T.1 c}).1 = (x; 1%path).1
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D x: morphism D (F _0 c)%object d
center
{g : morphism D (F _0 c)%object d &
G _1 g o T.1 c = G _1 x o T.1 c} = (x; 1%path)
apply contr.
C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G c: C d: D x: morphism C c (G _0 d)%object
G
_1 (center
{g : morphism D (F _0 c)%object d &
G _1 g o T.1 c = x}).1 o T.1 c = x
match goal with
| [ |- context[?x.1] ]
=> exact x.2end.Defined.Endisequiv.(** ** hom-set adjunction from unit+ump adjunction *)SectionAdjunctionEquivalences'.Context `{Funext}.VariablesCD : PreCategory.VariableF : Functor C D.VariableG : Functor D C.LocalOpen Scope morphism_scope.
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G sc: C sd: D dc: C dd: D mc: morphism C dc sc md: morphism D sd dd
(funx : morphism D (F _0 sc)%object sd =>
G _1 (md o x o F _1 mc) o T.1 dc) =
(funx : morphism D (F _0 sc)%object sd =>
G _1 md o (G _1 x o T.1 sc) o mc)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G sc: C sd: D dc: C dd: D mc: morphism C dc sc md: morphism D sd dd
(funx : morphism D (F _0 sc)%object sd =>
G _1 (md o x o F _1 mc) o T.1 dc) =
(funx : morphism D (F _0 sc)%object sd =>
G _1 md o (G _1 x o T.1 sc) o mc)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G sc: C sd: D dc: C dd: D mc: morphism C dc sc md: morphism D sd dd x: morphism D (F _0 sc)%object sd
G _1 (md o x o F _1 mc) o T.1 dc =
G _1 md o (G _1 x o T.1 sc) o mc
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G sc: C sd: D dc: C dd: D mc: morphism C dc sc md: morphism D sd dd x: morphism D (F _0 sc)%object sd
G _1 md o (G _1 x o (G _1 (F _1 mc) o T.1 dc)) =
G _1 md o (G _1 x o (T.1 sc o mc))
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G sc: C sd: D dc: C dd: D mc: morphism C dc sc md: morphism D sd dd x: morphism D (F _0 sc)%object sd
G _1 md o (G _1 x o (G _1 (F _1 mc) o T.1 dc)) =
G _1 md o (G _1 x o (G _1 (F _1 mc) o T.1 dc))
reflexivity.Qed.
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
AdjunctionHom F G
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
AdjunctionHom F G
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
(HomFunctor.hom_functor D
o Core.pair (Functor.Dual.opposite F) 1)%functor <~=~>
(HomFunctor.hom_functor C o Core.pair 1 G)%functor
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
IsIsomorphism
(Build_NaturalTransformation
(HomFunctor.hom_functor D
o Core.pair (Functor.Dual.opposite F) 1)
(HomFunctor.hom_functor C o Core.pair 1 G) ?CO?COM)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
forall (sd : Prod.prod (Category.Dual.opposite C) D)
(m : morphism (Prod.prod (Category.Dual.opposite C) D)
s d),
(funcd : C * D =>
equiv_fun
(equiv_hom_set_adjunction T (fst cd) (snd cd))^-1)
d
o (HomFunctor.hom_functor D
o Core.pair (Functor.Dual.opposite F) 1) _1 m =
(HomFunctor.hom_functor C o Core.pair 1 G) _1 m
o (funcd : C * D =>
equiv_fun
(equiv_hom_set_adjunction T (fst cd) (snd cd))^-1)
s
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G
forall (sd : C * D)
(m : morphism C (fst d) (fst s) *
morphism D (snd s) (snd d)),
(funx : morphism D (F _0 (fst s))%object (snd s) =>
G _1 (snd m o x o F _1 (fst m)) o T.1 (fst d)) =
(funx : morphism D (F _0 (fst s))%object (snd s) =>
G _1 (snd m) o (G _1 x o T.1 (fst s)) o fst m)
H: Funext C, D: PreCategory F: Functor C D G: Functor D C T: AdjunctionUnit F G s, d: C * D m: morphism C (fst d) (fst s) *
morphism D (snd s) (snd d)
(funx : morphism D (F _0 (fst s))%object (snd s) =>
G _1 (snd m o x o F _1 (fst m)) o T.1 (fst d)) =
(funx : morphism D (F _0 (fst s))%object (snd s) =>
G _1 (snd m) o (G _1 x o T.1 (fst s)) o fst m)
exact (adjunction_hom__of__adjunction_unit__commutes T _ _ _ _ _ _).Defined.EndAdjunctionEquivalences'.DefinitionAdjunctionUnitWithFunext `{Funext} C D F G := @AdjunctionUnit C D F G.DefinitionAdjunctionCounitWithFunext `{Funext} C D F G := @AdjunctionCounit C D F G.DefinitionAdjunctionUnitCounitWithFunext `{Funext} C D F G := @AdjunctionUnitCounit C D F G.Identity CoercionAdjunctionUnit_Funext : AdjunctionUnitWithFunext >-> AdjunctionUnit.Identity CoercionAdjunctionCounit_Funext : AdjunctionCounitWithFunext >-> AdjunctionCounit.Identity CoercionAdjunctionUnitCounit_Funext : AdjunctionUnitCounitWithFunext >-> AdjunctionUnitCounit.Definitionadjunction_hom__of__adjunction_unit_Funext `{Funext} C D F G
(A : AdjunctionUnitWithFunext _ _)
: AdjunctionHom _ _
:= @adjunction_hom__of__adjunction_unit _ C D F G A.DefinitionAdjunctionHomOfAdjunctionCounit_Funext `{Funext} C D F G
(A : AdjunctionCounitWithFunext _ _)
: AdjunctionHom _ _
:= @adjunction_hom__of__adjunction_unit _ C D F G (adjunction_unit_counit__of__adjunction_counit A).Definitionadjunction_hom__of__adjunction_unitCounit_Funext `{Funext} C D F G
(A : AdjunctionUnitCounitWithFunext _ _)
: AdjunctionHom _ _
:= @adjunction_hom__of__adjunction_unit _ C D F G A.