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.
(** * Cat, the precategory of strict categories *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Functor.Identity Functor.Composition.Core Functor.Composition.Laws.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope functor_scope.Sectionsub_pre_cat.Context `{Funext}.(** We use a slight generalization; we look at a full 1-precategory of the 2-precategory Cat, such that all types of functors are hSets. It might be possible to prove that this doesn't buy you anything, because it's probably the case that [IsHSet (Functor C C) → IsStrictCategory C]. *)VariableP : PreCategory -> Type.Context `{HF : forallCD, P C -> P D -> IsHSet (Functor C D)}.(** There is a precategory of precategories which satisfy the proposition P *)Definitionsub_pre_cat : PreCategory
:= @Build_PreCategory
{ C : PreCategory | P C }
(funCD => Functor C.1 D.1)
(funC => identity C.1)
(fun___FG => F o G)
(fun_______ => associativity _ _ _)
(fun___ => left_identity _)
(fun___ => right_identity _)
(funsd => HF s.2 d.2).Endsub_pre_cat.Arguments sub_pre_cat {_} P {_}, {_} P _.#[local] Hint Extern4 => progress (cbv beta iota) : typeclass_instances.Definitionstrict_cat `{Funext} : PreCategory
:= sub_pre_cat (funC => IsStrictCategory C).(*Definition Cat `{Funext} : PreCategory. refine (@sub_pre_cat _ (fun C => IsCategory C) _). *)(** ** The initial and terminal categories are initial and terminal objects in cat *)Sectionobjects.Context `{Funext}.VariableP : PreCategory -> Type.Context `{forallC, IsHProp (P C)}.Context `{HF : forallCD, P C -> P D -> IsHSet (Functor C D)}.
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory,
P C -> P D -> IsHSet (Functor C D) one: PreCategory Contr0: Contr one H1: forallsd : one, Contr (morphism one s d) H2: IsTerminalCategory one HT: P one
IsTerminalObject (sub_pre_cat P) (one; HT)
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory,
P C -> P D -> IsHSet (Functor C D) one: PreCategory Contr0: Contr one H1: forallsd : one, Contr (morphism one s d) H2: IsTerminalCategory one HT: P one
IsTerminalObject (sub_pre_cat P) (one; HT)
typeclasses eauto.Defined.
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory,
P C -> P D -> IsHSet (Functor C D) zero: PreCategory H1: IsInitialCategory zero HI: P zero
IsInitialObject (sub_pre_cat P) (zero; HI)
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory,
P C -> P D -> IsHSet (Functor C D) zero: PreCategory H1: IsInitialCategory zero HI: P zero