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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Basics.Trunc Types.UniverseHIT.iso HoTT.Truncations.Core.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope category_scope.Sectionfull_faithful.Context `{Funext}.VariablesCD : PreCategory.VariableF : Functor C D.(** ** Natural transformation [hom_C(โ, โ) โ hom_D(Fแตแต(โ), F(โ))] *)(** TODO(JasonGross): Come up with a better name and location for this. *)
H: Funext C, D: PreCategory F: Functor C D
NaturalTransformation (hom_functor C)
(hom_functor D o (F^op, F))
H: Funext C, D: PreCategory F: Functor C D
NaturalTransformation (hom_functor C)
(hom_functor D o (F^op, F))
H: Funext C, D: PreCategory F: Functor C D
forall (sd : (C^op * C)%category)
(m : morphism (C^op * C) s d),
((funm0 : ((hom_functor C) _0 d)%object => F _1 m0)
o (hom_functor C) _1 m)%morphism =
((hom_functor D o (F^op, F)) _1 m
o (funm0 : ((hom_functor C) _0 s)%object => F _1 m0))%morphism
typeclasses eauto.Qed.(** ** Full * Faithful โ Fully Faithful *)(** We start with a helper method, which assumes that epi * mono โ iso, and ten prove this assumption *)
H: Funext C, D: PreCategory F: Functor C D H0: IsFull H1: IsFaithful H': forall (xy : set_cat)
(m : morphism set_cat x y),
IsEpimorphism m ->
IsMonomorphism m -> IsIsomorphism m
IsFullyFaithful
H: Funext C, D: PreCategory F: Functor C D H0: IsFull H1: IsFaithful H': forall (xy : set_cat)
(m : morphism set_cat x y),
IsEpimorphism m ->
IsMonomorphism m -> IsIsomorphism m
IsFullyFaithful
H: Funext C, D: PreCategory F: Functor C D H0: forallxy : C,
IsEpimorphism
(induced_hom_natural_transformation (x, y)) H1: forallxy : C,
IsMonomorphism
(induced_hom_natural_transformation (x, y)) H': forall (xy : set_cat)
(m : morphism set_cat x y),
IsEpimorphism m ->
IsMonomorphism m -> IsIsomorphism m x, y: C
apply H'; eauto.Qed.Endfull_faithful.Sectionfully_faithful_helpers.Context `{ua : Univalence}.Variablesxy : HSet.Variablem : x -> y.
ua: Univalence x, y: HSet m: x -> y H': IsEquiv m
IsIsomorphism (m : morphism set_cat x y)
ua: Univalence x, y: HSet m: x -> y H': IsEquiv m
IsIsomorphism (m : morphism set_cat x y)
exists (m^-1)%core;
apply path_forall; intro;
destruct H';
simplin *;
eauto.Qed.Definitionisequiv_isepimorphism_ismonomorphism
(Hepi : IsEpimorphism (m : morphism set_cat x y))
(Hmono : IsMonomorphism (m : morphism set_cat x y))
: @IsEquiv _ _ m
(* NB: This depends on the (arguably accidental) fact that `ismono` and `isepi` from HoTT core are *definitionally* identical to the specialization of `IsMonomorphism` and `IsEpimorphism` to the category of sets. *)
:= @isequiv_isepi_ismono _ x y m Hepi Hmono.Endfully_faithful_helpers.Instanceisfullyfaithful_isfull_isfaithful
`{Univalence}
`{Hfull : @IsFull _ C D F}
`{Hfaithful : @IsFaithful _ C D F}
: @IsFullyFaithful _ C D F
:= funxy => @isisomorphism_isequiv_set_cat
_ _ _ _
(@isequiv_isepimorphism_ismonomorphism
_ _ _ _
(Hfull x y)
(Hfaithful x y)).(** ** Split Essentially Surjective *)(** Quoting the HoTT Book: We say a functor [F : A โ B] is _split essentially surjective_ if for all [b : B] there exists an [a : A] such that [F a โ b]. *)ClassIsSplitEssentiallySurjectiveAB (F : Functor A B)
:= is_split_essentially_surjective
: forallb : B, existsa : A, F a <~=~> b.(** ** Essentially Surjective *)(** Quoting the HoTT Book: A functor [F : A โ B] is _split essentially surjective_ if for all [b : B] there _merely_ exists an [a : A] such that [F a โ b]. *)ClassIsEssentiallySurjectiveAB (F : Functor A B)
:= is_essentially_surjective
: forallb : B, hexists (funa : A => F a <~=~> b).(** ** Weak Equivalence *)(** Quoting the HoTT Book: We say [F] is a _weak equivalence_ if it is fully faithful and essentially surjective. *)ClassIsWeakEquivalence `{Funext} A B (F : Functor A B)
:= { is_fully_faithful__is_weak_equivalence :: IsFullyFaithful F;
is_essentially_surjective__is_weak_equivalence :: IsEssentiallySurjective F }.