Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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.
(** * Functoriality of the comma category construction with projection functors *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Category.Prod Functor.Prod.Core. Require Import Category.Dual Functor.Dual. Require Import Functor.Composition.Core. Require Import InitialTerminalCategory.Core InitialTerminalCategory.Functors NatCategory. Require Import FunctorCategory.Core. Require Import Cat.Core. Require Import Functor.Paths. Require Comma.Core. Local Set Warnings Append "-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 Append "notation-overridden". Require Import Comma.InducedFunctors Comma.Projection. Require ProductLaws ExponentialLaws.Law1.Functors ExponentialLaws.Law4.Functors. Require Import Types.Forall PathGroupoids HoTT.Tactics. Set Universe Polymorphism. Set Implicit Arguments. Generalizable All Variables. Set Asymmetric Patterns. Local Open Scope category_scope. (** ** Functor from [(A โ†’ C)แต’แต– ร— (B โ†’ C)] to [cat / (A ร— B)] *) (** It sends [S : A โ†’ C โ† B : T] to the category [(S / T)] and its projection functor to [A ร— B]. *) Section comma. Local Open Scope type_scope. Context `{Funext}. Variable P : PreCategory -> Type. Context `{HF : forall C D, P C -> P D -> IsHSet (Functor C D)}. Local Notation Cat := (@sub_pre_cat _ P HF). Variables A B C : PreCategory. Hypothesis PAB : P (A * B). Hypothesis P_comma : forall (S : Functor A C) (T : Functor B C), P (S / T). Local Open Scope category_scope. Local Open Scope morphism_scope.
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
ST: (A -> C)^op * (B -> C)

Cat / !((A * B; PAB) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
ST: (A -> C)^op * (B -> C)

Cat / !((A * B; PAB) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
ST: (A -> C)^op * (B -> C)

morphism Cat (Cat _0 (Overture.fst ST / Overture.snd ST; P_comma (Overture.fst ST) (Overture.snd ST)))%object (!(A * B; PAB) _0 (center 1%category))%object
exact (comma_category_projection (Basics.Overture.fst ST) (Basics.Overture.snd ST)). Defined.
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d: (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d

morphism (Cat / !((A * B; PAB) : Cat)) (comma_category_projection_functor_object_of s) (comma_category_projection_functor_object_of d)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d: (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d

morphism (Cat / !((A * B; PAB) : Cat)) (comma_category_projection_functor_object_of s) (comma_category_projection_functor_object_of d)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d: (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d

CommaCategory.morphism (comma_category_projection_functor_object_of s) (comma_category_projection_functor_object_of d)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d: (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d

!(A * B; PAB) _1 (center (morphism 1 (CommaCategory.b (comma_category_projection_functor_object_of s)) (CommaCategory.b (comma_category_projection_functor_object_of d)))) o CommaCategory.f (comma_category_projection_functor_object_of s) = CommaCategory.f (comma_category_projection_functor_object_of d) o Cat _1 (comma_category_induced_functor m)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d: (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d

(Identity.identity (A * B) o comma_category_projection (Overture.fst s) (Overture.snd s))%functor = (comma_category_projection (Overture.fst d) (Overture.snd d) o comma_category_induced_functor m)%functor
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
fst1: Functor A C
snd1: Functor B C
fst0: Functor A C
snd0: Functor B C
fst: Core.NaturalTransformation fst0 fst1
snd: Core.NaturalTransformation snd1 snd0

(Identity.identity (A * B) o comma_category_projection fst1 snd1)%functor = (comma_category_projection fst0 snd0 o comma_category_induced_functor (fst, snd)%core)%functor
path_functor. Defined. Local Ltac comma_laws_t := repeat (apply path_forall || intro); simpl; rewrite !transport_forall_constant; transport_path_forall_hammer; simpl; destruct_head Basics.Overture.prod; simpl in *; apply CommaCategory.path_morphism; simpl; repeat match goal with | [ |- context[?f _ _ _ _ _ _ _ (transport ?P ?p ?z)] ] => simpl rewrite (@ap_transport _ P _ _ _ p (fun _ => f _ _ _ _ _ _ _) z) | [ |- context[transport (fun y => ?f (?fa _ _ _ _ _ y) ?x)] ] => rewrite (fun a b => @transport_compose _ _ a b (fun y => f y x) (fa _ _ _ _ _)) | [ |- context[transport (fun y => ?f ?x (?fa _ _ _ _ _ y))] ] => rewrite (fun a b => @transport_compose _ _ a b (fun y => f x y) (fa _ _ _ _ _)) end; unfold comma_category_induced_functor_object_of_identity; unfold comma_category_induced_functor_object_of_compose; simpl; rewrite ?CommaCategory.ap_a_path_object', ?CommaCategory.ap_b_path_object'; try reflexivity.
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
x: (A -> C)^op * (B -> C)

comma_category_projection_functor_morphism_of 1 = 1
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
x: (A -> C)^op * (B -> C)

comma_category_projection_functor_morphism_of 1 = 1
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
x: (A -> C)^op * (B -> C)

comma_category_induced_functor (NaturalTransformation.Identity.identity (Overture.fst x), NaturalTransformation.Identity.identity (Overture.snd x)) = Identity.identity (Overture.fst x / Overture.snd x)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
x: (A -> C)^op * (B -> C)

{HO : comma_category_induced_functor_object_of (NaturalTransformation.Identity.identity (Overture.fst x), NaturalTransformation.Identity.identity (Overture.snd x)) = idmap & transport (fun GO : CommaCategory.object (Overture.fst x) (Overture.snd x) -> CommaCategory.object (Overture.fst x) (Overture.snd x) => forall s d : CommaCategory.object (Overture.fst x) (Overture.snd x), (CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d))%type) HO (comma_category_induced_functor_morphism_of (NaturalTransformation.Identity.identity (Overture.fst x), NaturalTransformation.Identity.identity (Overture.snd x))) = (fun s d : CommaCategory.object (Overture.fst x) (Overture.snd x) => idmap)}
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
x: (A -> C)^op * (B -> C)

transport (fun GO : CommaCategory.object (Overture.fst x) (Overture.snd x) -> CommaCategory.object (Overture.fst x) (Overture.snd x) => forall s d : CommaCategory.object (Overture.fst x) (Overture.snd x), (CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d))%type) (path_forall (comma_category_induced_functor_object_of 1) idmap (comma_category_induced_functor_object_of_identity x)) (comma_category_induced_functor_morphism_of (NaturalTransformation.Identity.identity (Overture.fst x), NaturalTransformation.Identity.identity (Overture.snd x))) = (fun s d : CommaCategory.object (Overture.fst x) (Overture.snd x) => idmap)
comma_laws_t. Qed.
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d, d': (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d
m': morphism ((A -> C)^op * (B -> C)) d d'

comma_category_projection_functor_morphism_of (m' o m) = comma_category_projection_functor_morphism_of m' o comma_category_projection_functor_morphism_of m
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d, d': (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d
m': morphism ((A -> C)^op * (B -> C)) d d'

comma_category_projection_functor_morphism_of (m' o m) = comma_category_projection_functor_morphism_of m' o comma_category_projection_functor_morphism_of m
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d, d': (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d
m': morphism ((A -> C)^op * (B -> C)) d d'

comma_category_induced_functor (Core.compose (Overture.fst m) (Overture.fst m'), Core.compose (Overture.snd m') (Overture.snd m)) = (comma_category_induced_functor m' o comma_category_induced_functor m)%functor
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d, d': (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d
m': morphism ((A -> C)^op * (B -> C)) d d'

{HO : comma_category_induced_functor_object_of (Core.compose (Overture.fst m) (Overture.fst m'), Core.compose (Overture.snd m') (Overture.snd m)) = (fun c : CommaCategory.object (Overture.fst s) (Overture.snd s) => comma_category_induced_functor_object_of m' (comma_category_induced_functor_object_of m c)) & transport (fun GO : CommaCategory.object (Overture.fst s) (Overture.snd s) -> CommaCategory.object (Overture.fst d') (Overture.snd d') => forall s0 d : CommaCategory.object (Overture.fst s) (Overture.snd s), (CommaCategory.morphism s0 d -> CommaCategory.morphism (GO s0) (GO d))%type) HO (comma_category_induced_functor_morphism_of (Core.compose (Overture.fst m) (Overture.fst m'), Core.compose (Overture.snd m') (Overture.snd m))) = (fun (s0 d0 : CommaCategory.object (Overture.fst s) (Overture.snd s)) (m0 : CommaCategory.morphism s0 d0) => comma_category_induced_functor_morphism_of m' (comma_category_induced_functor_morphism_of m m0))}
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d, d': (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d
m': morphism ((A -> C)^op * (B -> C)) d d'

{HO : comma_category_induced_functor_object_of (Core.compose (Overture.fst m) (Overture.fst m'), Core.compose (Overture.snd m') (Overture.snd m)) = (fun c : CommaCategory.object (Overture.fst s) (Overture.snd s) => comma_category_induced_functor_object_of m' (comma_category_induced_functor_object_of m c)) & transport (fun GO : CommaCategory.object (Overture.fst s) (Overture.snd s) -> CommaCategory.object (Overture.fst d') (Overture.snd d') => forall s0 d : CommaCategory.object (Overture.fst s) (Overture.snd s), (CommaCategory.morphism s0 d -> CommaCategory.morphism (GO s0) (GO d))%type) HO (comma_category_induced_functor_morphism_of (Core.compose (Overture.fst m) (Overture.fst m'), Core.compose (Overture.snd m') (Overture.snd m))) = (fun (s0 d0 : CommaCategory.object (Overture.fst s) (Overture.snd s)) (m0 : CommaCategory.morphism s0 d0) => comma_category_induced_functor_morphism_of m' (comma_category_induced_functor_morphism_of m m0))}
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
A, B, C: PreCategory
PAB: P (A * B)
P_comma: forall (S : Functor A C) (T : Functor B C), P (S / T)
s, d, d': (A -> C)^op * (B -> C)
m: morphism ((A -> C)^op * (B -> C)) s d
m': morphism ((A -> C)^op * (B -> C)) d d'

transport (fun GO : CommaCategory.object (Overture.fst s) (Overture.snd s) -> CommaCategory.object (Overture.fst d') (Overture.snd d') => forall s0 d : CommaCategory.object (Overture.fst s) (Overture.snd s), (CommaCategory.morphism s0 d -> CommaCategory.morphism (GO s0) (GO d))%type) (path_forall (comma_category_induced_functor_object_of (m' o m)) (fun x : Overture.fst s / Overture.snd s => comma_category_induced_functor_object_of m' (comma_category_induced_functor_object_of m x)) (comma_category_induced_functor_object_of_compose m' m)) (comma_category_induced_functor_morphism_of (Core.compose (Overture.fst m) (Overture.fst m'), Core.compose (Overture.snd m') (Overture.snd m))) = (fun (s0 d0 : CommaCategory.object (Overture.fst s) (Overture.snd s)) (m0 : CommaCategory.morphism s0 d0) => comma_category_induced_functor_morphism_of m' (comma_category_induced_functor_morphism_of m m0))
comma_laws_t. Qed. Definition comma_category_projection_functor : Functor ((A -> C)^op * (B -> C)) (Cat / !((A * B; PAB) : Cat)) := Build_Functor ((A -> C)^op * (B -> C)) (Cat / !((A * B; PAB) : Cat)) comma_category_projection_functor_object_of comma_category_projection_functor_morphism_of comma_category_projection_functor_composition_of comma_category_projection_functor_identity_of. End comma. Section slice_category_projection_functor. Local Open Scope type_scope. Context `{Funext}. Variable P : PreCategory -> Type. Context `{HF : forall C D, P C -> P D -> IsHSet (Functor C D)}. Local Notation Cat := (@sub_pre_cat _ P HF). Variables C D : PreCategory. Hypothesis P1C : P (1 * C). Hypothesis PC1 : P (C * 1). Hypothesis PC : P C. Hypothesis P_comma : forall (S : Functor C D) (T : Functor 1 D), P (S / T). Hypothesis P_comma' : forall (S : Functor 1 D) (T : Functor C D), P (S / T). Local Open Scope functor_scope. Local Open Scope category_scope. Local Notation inv D := (@ExponentialLaws.Law1.Functors.inverse _ terminal_category _ _ _ D). (** ** Functor [(C โ†’ D)แต’แต– โ†’ D โ†’ (cat / C)] *)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D)^op -> D -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D)^op -> D -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D)^op * D -> Cat / (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor ((C -> D)^op * (1 -> D)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (Cat / !(C * 1; PC1)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

morphism Cat (C * 1; PC1) (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (C * 1; PC1).1 (C; PC).1
exact (ProductLaws.Law1.functor _). Defined.
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D)^op -> D -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D)^op -> D -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D)^op * D -> Cat / (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor ((C -> D)^op * (1 -> D)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (Cat / !(C * 1; PC1)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

morphism Cat (C * 1; PC1) (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (C * 1; PC1).1 (C; PC).1
exact (ProductLaws.Law1.functor _). Defined. (** ** Functor [(C โ†’ D) โ†’ Dแต’แต– โ†’ (cat / C)] *)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D) -> D^op -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D) -> D^op -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D) * D^op -> Cat / (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor ((C -> D) * (1 -> D)^op) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor ((1 -> D)^op * (C -> D)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (Cat / !(1 * C; P1C)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

morphism Cat (1 * C; P1C) (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (1 * C; P1C).1 (C; PC).1
exact (ProductLaws.Law1.functor' _). Defined.
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D) -> D^op -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D) -> D^op -> Cat / ((C; PC) : Cat)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

(C -> D) * D^op -> Cat / (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor ((C -> D) * (1 -> D)^op) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor ((1 -> D)^op * (C -> D)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (Cat / !(1 * C; P1C)) (Cat / (C; PC))
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

morphism Cat (1 * C; P1C) (C; PC)
H: Funext
P: (PreCategory -> Type)%type
HF: forall C D : PreCategory, (P C -> P D -> IsHSet (Functor C D))%type
C, D: PreCategory
P1C: P (1 * C)
PC1: P (C * 1)
PC: P C
P_comma: forall (S0 : Functor C D) (T : Functor 1 D), P (S0 / T)
P_comma': forall (S0 : Functor 1 D) (T : Functor C D), P (S0 / T)

Functor (1 * C; P1C).1 (C; PC).1
exact (ProductLaws.Law1.functor' _). Defined. End slice_category_projection_functor.