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.
(** * Universal properties of product categories *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B
fst o (a * b) = a
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B
fst o (a * b) = a
path_functor; trivial.Defined.(** ** [snd ∘ (a * b) = b] *)
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B
snd o (a * b) = b
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B
snd o (a * b) = b
path_functor; trivial.Defined.Sectionunique.VariableF : Functor C (A * B).HypothesisH1 : fst o F = a.HypothesisH2 : snd o F = b.
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b c: C
((a * b) _0 c)%object = (F _0 c)%object
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b c: C
((a * b) _0 c)%object = (F _0 c)%object
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b c: C X: (funF : Functor C A => (F _0 c)%object) (fst o F) =
(funF : Functor C A => (F _0 c)%object) a
((a * b) _0 c)%object = (F _0 c)%object
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b c: C X: (funF : Functor C A => (F _0 c)%object) (fst o F) =
(funF : Functor C A => (F _0 c)%object) a X0: (funF : Functor C B => (F _0 c)%object)
(snd o F) =
(funF : Functor C B => (F _0 c)%object) b
((a * b) _0 c)%object = (F _0 c)%object
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b c: C X: fst_type (F _0 c)%object = (a _0 c)%object X0: snd_type (F _0 c)%object = (b _0 c)%object
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b
transport
(funGO : C -> prod_type A B =>
forallsd : C,
morphism C s d ->
prod_type
(morphism A (fst_type (GO s)) (fst_type (GO d)))
(morphism B (snd_type (GO s)) (snd_type (GO d))))
(path_forall (a * b) F unique_helper)
(fun (sd : C) (m : morphism C s d) =>
pair_type (a _1 m) (b _1 m)) = morphism_of F
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b
transport
(funGO : C -> prod_type A B =>
forallsd : C,
morphism C s d ->
prod_type
(morphism A (fst_type (GO s)) (fst_type (GO d)))
(morphism B (snd_type (GO s)) (snd_type (GO d))))
(path_forall (a * b) F unique_helper)
(fun (sd : C) (m : morphism C s d) =>
pair_type (a _1 m) (b _1 m)) = morphism_of F
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b x, x0: C x1: morphism C x x0
transport
(funGO : C -> prod_type A B =>
forallsd : C,
morphism C s d ->
prod_type
(morphism A (fst_type (GO s)) (fst_type (GO d)))
(morphism B (snd_type (GO s)) (snd_type (GO d))))
(path_forall (a * b) F unique_helper)
(fun (sd : C) (m : morphism C s d) =>
pair_type (a _1 m) (b _1 m)) x x0 x1 = F _1 x1
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b x, x0: C x1: morphism C x x0
transport
(funx1 : C -> prod_type A B =>
prod_type
(morphism A (fst_type (x1 x)) (fst_type (x1 x0)))
(morphism B (snd_type (x1 x)) (snd_type (x1 x0))))
(path_forall
(func : C =>
pair_type (a _0 c)%object (b _0 c)%object) F
unique_helper) (pair_type (a _1 x1) (b _1 x1)) =
F _1 x1
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b x, x0: C x1: morphism C x x0
transport
(funy : prod_type A B =>
prod_type
(morphism A (fst_type (F _0 x)%object)
(fst_type y))
(morphism B (snd_type (F _0 x)%object)
(snd_type y))) (unique_helper x0)
(transport
(funy : prod_type A B =>
prod_type
(morphism A (fst_type y)
(fst_type
(pair_type (a _0 x0)%object
(b _0 x0)%object)))
(morphism B (snd_type y)
(snd_type
(pair_type (a _0 x0)%object
(b _0 x0)%object))))
(unique_helper x) (pair_type (a _1 x1) (b _1 x1))) =
F _1 x1
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b x, x0: C x1: morphism C x x0
transport
(funy : prod_type A B =>
prod_type
(morphism A (fst_type (F _0 x)%object)
(fst_type y))
(morphism B (snd_type (F _0 x)%object)
(snd_type y)))
(paths_rect B (snd_type (F _0 x0)%object)
(fun (o : B) (_ : snd_type (F _0 x0)%object = o)
=>
pair_type (a _0 x0)%object o = (F _0 x0)%object)
(paths_rect A (fst_type (F _0 x0)%object)
(fun (o : A)
(_ : fst_type (F _0 x0)%object = o) =>
pair_type o (snd_type (F _0 x0)%object) =
(F _0 x0)%object)
(paths_rect (Functor C B) (snd o F)
(fun (b : Functor C B) (_ : snd o F = b) =>
snd o F = b ->
pair_type (fst_type (F _0 x0)%object)
(snd_type (F _0 x0)%object) =
(F _0 x0)%object)
(fun_ : snd o F = snd o F =>
paths_rect (Functor C A) (fst o F)
(fun (a : Functor C A) (_ : fst o F = a)
=>
fst o F = a ->
pair_type (fst_type (F _0 x0)%object)
(snd_type (F _0 x0)%object) =
(F _0 x0)%object)
(fun_ : fst o F = fst o F =>
eta_prod (F _0 x0)%object) a H1 H1) b
H2 H2) (a _0 x0)%object
(ap (funF : Functor C A => (F _0 x0)%object)
H1)) (b _0 x0)%object
(ap (funF : Functor C B => (F _0 x0)%object) H2))
(transport
(funy : prod_type A B =>
prod_type
(morphism A (fst_type y)
(fst_type
(pair_type (a _0 x0)%object
(b _0 x0)%object)))
(morphism B (snd_type y)
(snd_type
(pair_type (a _0 x0)%object
(b _0 x0)%object))))
(paths_rect B (snd_type (F _0 x)%object)
(fun (o : B)
(_ : snd_type (F _0 x)%object = o) =>
pair_type (a _0 x)%object o = (F _0 x)%object)
(paths_rect A (fst_type (F _0 x)%object)
(fun (o : A)
(_ : fst_type (F _0 x)%object = o) =>
pair_type o (snd_type (F _0 x)%object) =
(F _0 x)%object)
(paths_rect (Functor C B) (snd o F)
(fun (b : Functor C B) (_ : snd o F = b)
=>
snd o F = b ->
pair_type (fst_type (F _0 x)%object)
(snd_type (F _0 x)%object) =
(F _0 x)%object)
(fun_ : snd o F = snd o F =>
paths_rect (Functor C A) (fst o F)
(fun (a : Functor C A)
(_ : fst o F = a) =>
fst o F = a ->
pair_type (fst_type (F _0 x)%object)
(snd_type (F _0 x)%object) =
(F _0 x)%object)
(fun_ : fst o F = fst o F =>
eta_prod (F _0 x)%object) a H1 H1) b
H2 H2) (a _0 x)%object
(ap
(funF : Functor C A => (F _0 x)%object)
H1)) (b _0 x)%object
(ap (funF : Functor C B => (F _0 x)%object)
H2)) (pair_type (a _1 x1) (b _1 x1))) =
F _1 x1
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) x, x0: C x1: morphism C x x0
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) fst0: A snd0: B fst1: A snd1: B fst: morphism A (fst_type (pair_type fst0 snd0))
(fst_type (pair_type fst1 snd1)) snd: morphism B (snd_type (pair_type fst0 snd0))
(snd_type (pair_type fst1 snd1))
pair_type fst snd = pair_type fst snd
reflexivity.Qed.
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b
a * b = F
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b
a * b = F
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b
{HO
: (func : C =>
pair_type (a _0 c)%object (b _0 c)%object) = F &
transport
(funGO : C -> prod_type A B =>
forallsd : C,
morphism C s d ->
prod_type
(morphism A (fst_type (GO s)) (fst_type (GO d)))
(morphism B (snd_type (GO s)) (snd_type (GO d))))
HO
(fun (sd : C) (m : morphism C s d) =>
pair_type (a _1 m) (b _1 m)) = morphism_of F}
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B F: Functor C (A * B) H1: fst o F = a H2: snd o F = b
transport
(funGO : C -> prod_type A B =>
forallsd : C,
morphism C s d ->
prod_type
(morphism A (fst_type (GO s)) (fst_type (GO d)))
(morphism B (snd_type (GO s)) (snd_type (GO d))))
(path_forall (a * b) F unique_helper)
(fun (sd : C) (m : morphism C s d) =>
pair_type (a _1 m) (b _1 m)) = morphism_of F
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B)
Contr
{F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)}
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B)
Contr
{F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)}
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B)
forally : {F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)},
(a * b; pair_type compose_fst_prod compose_snd_prod) =
y
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B) y: {F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)}
(a * b; pair_type compose_fst_prod compose_snd_prod) =
y
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B) y: {F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)}
{p
: (a * b; pair_type compose_fst_prod compose_snd_prod).1 =
y.1 &
transport
(funF : Functor C (A * B) =>
prod_type (fst o F = a) (snd o F = b)) p
(a * b; pair_type compose_fst_prod compose_snd_prod).2 =
y.2}
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B) y: {F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)}
{p : a * b = y.1 &
transport
(funF : Functor C (A * B) =>
prod_type (fst o F = a) (snd o F = b)) p
(pair_type compose_fst_prod compose_snd_prod) = y.2}
H: Funext A, B, C: PreCategory a: Functor C A b: Functor C B IsHSet0: IsHSet (Functor C A) IsHSet1: IsHSet (Functor C B) y: {F : Functor C (A * B) &
prod_type (fst o F = a) (snd o F = b)}
transport
(funF : Functor C (A * B) =>
prod_type (fst o F = a) (snd o F = b))
(unique (fst_type y.2) (snd_type y.2))
(pair_type compose_fst_prod compose_snd_prod) = y.2
exact (center _).Qed.Enduniversal.(** ** Classification of path space of functors to a product precategory *)
H: Funext A, B, C: PreCategory F, G: Functor C (A * B) H1: fst o F = fst o G H2: snd o F = snd o G
F = G
H: Funext A, B, C: PreCategory F, G: Functor C (A * B) H1: fst o F = fst o G H2: snd o F = snd o G