Built with Alectryon. 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.
Require Import Basics.Overture Basics.Equivalences Basics.Tactics.Require Import Basics.Overture Basics.Equivalences Basics.Tactics.
Require Import Types.Bool Types.Prod.
Require Import WildCat.Core WildCat.Bifunctor WildCat.Equiv WildCat.EquivGpd
               WildCat.Forall WildCat.NatTrans WildCat.Opposite
               WildCat.Universe WildCat.Yoneda WildCat.Graph WildCat.ZeroGroupoid
               WildCat.Monoidal WildCat.MonoidalTwistConstruction
               WildCat.FunctorCat.

(** * Categories with products *)

(** ** Indexed products *)

(** For [A] a wild 1-category, [I] a type, and [x : I -> A] an [I]-indexed family of objects in [A], we study the categorical product of this family of objects. *)

(** When [x] is an [I]-indexed family of objects in [A] and [prod] is an object with an [I]-indexed family of projections, we get for each [z] an induced map from the 0-groupoid of morphisms [z $-> prod] to the product of the 0-groupoids [z $-> x i] over [i : I]. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
prod: A
pr: forall i : I, prod $-> x i
z: A

yon_0gpd prod z $-> prod_0gpd I (fun i : I => yon_0gpd (x i) z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
prod: A
pr: forall i : I, prod $-> x i
z: A

yon_0gpd prod z $-> prod_0gpd I (fun i : I => yon_0gpd (x i) z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
prod: A
pr: forall i : I, prod $-> x i
z: A

forall i : I, yon_0gpd prod z $-> (fun i0 : I => yon_0gpd (x i0) z) i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
prod: A
pr: forall i0 : I, prod $-> x i0
z: A
i: I

yon_0gpd prod z $-> (fun i0 : I => yon_0gpd (x i0) z) i
exact (fmap (fun x => yon_0gpd x z) (pr i)). Defined. (** An object is a product of an [I]-indexed family of objects of a category if there is an [I]-indexed family of projections such that the induced map defined above is an equivalence. *) Class IsProduct {A : Type} `{Is1Cat A} {I : Type} (x : I -> A) (cat_prod : A) := Build_IsProduct' { cat_pr : forall i : I, cat_prod $-> x i; cat_isequiv_cat_prod_corec_inv :: forall z : A, CatIsEquiv (cat_prod_corec_inv x cat_prod cat_pr z); }. Arguments cat_pr {A _ _ _ _ _ x cat_prod isprod} : rename. Arguments cat_isequiv_cat_prod_corec_inv {A _ _ _ _ _} x cat_prod {isprod} : rename. Arguments Build_IsProduct' {A _ _ _ _ _} x cat_prod. (** A product is an object together with the data that it is a product. *) Class Product {A : Type} `{Is1Cat A} {I : Type} (x : I -> A) := Build_Product' { cat_prod : A; cat_isprod :: IsProduct x cat_prod; }. Arguments Build_Product' {A _ _ _ _ _} x cat_prod cat_isprod. Arguments cat_prod {A _ _ _ _ _} x {product} : rename. Arguments cat_isprod {A _ _ _ _ _} x {product} : rename. Section ProductConstructors. Context {A : Type} `{Is1Cat A} {I : Type} (x : I -> A) (cat_prod : A) (cat_pr : forall i : I, cat_prod $-> x i) (cat_prod_corec : forall z : A, (forall i : I, z $-> x i) -> (z $-> cat_prod)) (cat_prod_beta_pr : forall (z : A) (f : forall i, z $-> x i) (i : I), cat_pr i $o cat_prod_corec z f $== f i) (cat_prod_eta_pr : forall (z : A) (f g : z $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g). (** A convenience wrapper for building [IsProduct]. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z : A, (forall i : I, z $-> x i) -> z $-> cat_prod
cat_prod_beta_pr: forall (z : A) (f : forall i : I, z $-> x i) (i : I), cat_pr i $o cat_prod_corec z f $== f i
cat_prod_eta_pr: forall (z : A) (f g : z $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g

IsProduct x cat_prod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z : A, (forall i : I, z $-> x i) -> z $-> cat_prod
cat_prod_beta_pr: forall (z : A) (f : forall i : I, z $-> x i) (i : I), cat_pr i $o cat_prod_corec z f $== f i
cat_prod_eta_pr: forall (z : A) (f g : z $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g

IsProduct x cat_prod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z : A, (forall i : I, z $-> x i) -> z $-> cat_prod
cat_prod_beta_pr: forall (z : A) (f : forall i : I, z $-> x i) (i : I), cat_pr i $o cat_prod_corec z f $== f i
cat_prod_eta_pr: forall (z : A) (f g : z $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g

forall z : A, CatIsEquiv (cat_prod_corec_inv x cat_prod cat_pr z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f $== f i
cat_prod_eta_pr: forall (z0 : A) (f g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g
z: A

CatIsEquiv (cat_prod_corec_inv x cat_prod cat_pr z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f $== f i
cat_prod_eta_pr: forall (z0 : A) (f g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g
z: A

IsSurjInj (cat_prod_corec_inv x cat_prod cat_pr z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f $== f i
cat_prod_eta_pr: forall (z0 : A) (f g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g
z: A

SplEssSurj (cat_prod_corec_inv x cat_prod cat_pr z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f $== f i
cat_prod_eta_pr: forall (z0 : A) (f g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g
z: A
forall x0 y : zerogpd_graph (yon_0gpd cat_prod z), cat_prod_corec_inv x cat_prod cat_pr z x0 $== cat_prod_corec_inv x cat_prod cat_pr z y -> x0 $== y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f $== f i
cat_prod_eta_pr: forall (z0 : A) (f g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g
z: A

SplEssSurj (cat_prod_corec_inv x cat_prod cat_pr z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f0 : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f0 $== f0 i
cat_prod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f0 $== cat_pr i $o g) -> f0 $== g
z: A
f: zerogpd_graph (prod_0gpd I (fun i : I => yon_0gpd (x i) z))

{a : zerogpd_graph (yon_0gpd cat_prod z) & cat_prod_corec_inv x cat_prod cat_pr z a $== f}
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f0 : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f0 $== f0 i
cat_prod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f0 $== cat_pr i $o g) -> f0 $== g
z: A
f: zerogpd_graph (prod_0gpd I (fun i : I => yon_0gpd (x i) z))

cat_prod_corec_inv x cat_prod cat_pr z (cat_prod_corec z f) $== f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i0 : I, cat_prod $-> x i0
cat_prod_corec: forall z0 : A, (forall i0 : I, z0 $-> x i0) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f0 : forall i0 : I, z0 $-> x i0) (i0 : I), cat_pr i0 $o cat_prod_corec z0 f0 $== f0 i0
cat_prod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_prod), (forall i0 : I, cat_pr i0 $o f0 $== cat_pr i0 $o g) -> f0 $== g
z: A
f: zerogpd_graph (prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z))
i: I

cat_prod_corec_inv x cat_prod cat_pr z (cat_prod_corec z f) i $-> f i
napply cat_prod_beta_pr.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f $== f i
cat_prod_eta_pr: forall (z0 : A) (f g : z0 $-> cat_prod), (forall i : I, cat_pr i $o f $== cat_pr i $o g) -> f $== g
z: A

forall x0 y : zerogpd_graph (yon_0gpd cat_prod z), cat_prod_corec_inv x cat_prod cat_pr z x0 $== cat_prod_corec_inv x cat_prod cat_pr z y -> x0 $== y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_pr: forall i : I, cat_prod $-> x i
cat_prod_corec: forall z0 : A, (forall i : I, z0 $-> x i) -> z0 $-> cat_prod
cat_prod_beta_pr: forall (z0 : A) (f0 : forall i : I, z0 $-> x i) (i : I), cat_pr i $o cat_prod_corec z0 f0 $== f0 i
cat_prod_eta_pr: forall (z0 : A) (f0 g0 : z0 $-> cat_prod), (forall i : I, cat_pr i $o f0 $== cat_pr i $o g0) -> f0 $== g0
z: A
f, g: zerogpd_graph (yon_0gpd cat_prod z)
p: cat_prod_corec_inv x cat_prod cat_pr z f $== cat_prod_corec_inv x cat_prod cat_pr z g

f $== g
by napply cat_prod_eta_pr. Defined. (** A convenience wrapper for building products. *) Definition Build_Product : Product x := Build_Product' x cat_prod Build_IsProduct. End ProductConstructors. Section Lemmata. Context {A : Type} `{Is1Cat A} {I : Type} {x : I -> A} (cat_prod : A) {cat_isprod : IsProduct x cat_prod}. Definition cate_cat_prod_corec_inv {z : A} : (yon_0gpd cat_prod z) $<~> prod_0gpd I (fun i => yon_0gpd (x i) z) := Build_CatEquiv (cat_prod_corec_inv x cat_prod cat_pr z). Definition cate_cat_prod_corec {z : A} : prod_0gpd I (fun i => yon_0gpd (x i) z) $<~> (yon_0gpd cat_prod z) := cate_cat_prod_corec_inv^-1$. Definition cat_prod_corec {z : A} : (forall i, z $-> x i) -> (z $-> cat_prod) := cate_fun cate_cat_prod_corec. (** Applying the [i]th projection after a tuple of maps gives the [ith] map. *) Definition cat_prod_beta {z : A} (f : forall i, z $-> x i) : forall i, cat_pr i $o cat_prod_corec f $== f i := cate_isretr cate_cat_prod_corec_inv f. (** The pairing map is the unique map that makes the following diagram commute. *) Definition cat_prod_eta {z : A} (f : z $-> cat_prod) : cat_prod_corec (fun i => cat_pr i $o f) $== f := cate_issect cate_cat_prod_corec_inv f.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

Is0Functor (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

Is0Functor (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

forall a b : A^op, (a $-> b) -> (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a $-> (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) b
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b

(fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a $-> (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) b
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b

zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a) -> zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) b)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b
forall a0 b0 : zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a), (a0 $-> b0) -> ?F a0 $-> ?F b0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b

zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a) -> zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) b)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b
g: zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) a)
i: I

yon_0gpd (x i) b
exact (f $o g i).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b

forall a0 b0 : zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a), (a0 $-> b0) -> (fun g : zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a) => (fun i : I => f $o g i) : zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) b)) a0 $-> (fun g : zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a) => (fun i : I => f $o g i) : zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) b)) b0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f: a $-> b
g, h: zerogpd_graph ((fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) a)
p: g $-> h
i: I

f $o g i $-> f $o h i
exact (f $@L p i). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

Is1Functor (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

Is1Functor (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

forall (a b : A^op) (f g : a $-> b), f $== g -> fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f $== fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
forall a : A^op, fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (Id a) $== Id ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
forall (a b c : A^op) (f : a $-> b) (g : b $-> c), fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (g $o f) $== fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) g $o fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

forall (a b : A^op) (f g : a $-> b), f $== g -> fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f $== fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f, g: a $-> b
p: f $== g
r: zerogpd_graph (prod_0gpd I (fun i0 : I => yon_0gpd (x i0) a))
i: I

fmap (fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) f r i $-> fmap (fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) g r i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b: A^op
f, g: a $-> b
p: f $== g
r: zerogpd_graph (prod_0gpd I (fun i0 : I => yon_0gpd (x i0) a))
i: I

f $== g
exact p.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

forall a : A^op, fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (Id a) $== Id ((fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a: A^op
r: zerogpd_graph (prod_0gpd I (fun i0 : I => yon_0gpd (x i0) a))
i: I

fmap (fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) (Id a) r i $-> Id (prod_0gpd I (fun i0 : I => yon_0gpd (x i0) a)) r i
napply cat_idl; exact _.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

forall (a b c : A^op) (f : a $-> b) (g : b $-> c), fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (g $o f) $== fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) g $o fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
a, b, c: A^op
f: a $-> b
g: b $-> c
r: zerogpd_graph (prod_0gpd I (fun i0 : I => yon_0gpd (x i0) a))
i: I

fmap (fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) (g $o f) r i $-> (fmap (fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) g $o fmap (fun z : A^op => prod_0gpd I (fun i0 : I => yon_0gpd (x i0) z)) f) r i
napply cat_assoc; exact _. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

NatEquiv (yon_0gpd cat_prod) (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

NatEquiv (yon_0gpd cat_prod) (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

forall a : A^op, yon_0gpd cat_prod a $<~> (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
Is1Natural (yon_0gpd cat_prod) (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (fun a : A^op => ?e a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod

Is1Natural (yon_0gpd cat_prod) (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (fun a : A^op => (fun a0 : A^op => cate_cat_prod_corec_inv) a)
exact (is1natural_yoneda_0gpd cat_prod (fun z => prod_0gpd I (fun i => yon_0gpd (x i) z)) cat_pr). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': forall i : I, z $-> x i

(forall i : I, f i $== f' i) -> cat_prod_corec f $== cat_prod_corec f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': forall i : I, z $-> x i

(forall i : I, f i $== f' i) -> cat_prod_corec f $== cat_prod_corec f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': forall i : I, z $-> x i
p: forall i : I, f i $== f' i

cat_prod_corec f $== cat_prod_corec f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': forall i : I, z $-> x i
p: forall i : I, f i $== f' i

cate_cat_prod_corec f $== cate_cat_prod_corec f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': forall i : I, z $-> x i
p: forall i : I, f i $== f' i

equiv_fun_0gpd cate_cat_prod_corec_inv (cate_cat_prod_corec f) $== f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': forall i : I, z $-> x i
p: forall i : I, f i $== f' i

Id (prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f $== f'
exact p. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': z $-> cat_prod

(forall i : I, cat_pr i $o f $== cat_pr i $o f') -> f $== f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': z $-> cat_prod

(forall i : I, cat_pr i $o f $== cat_pr i $o f') -> f $== f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': z $-> cat_prod
p: forall i : I, cat_pr i $o f $== cat_pr i $o f'

f $== f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
I: Type
x: I -> A
cat_prod: A
cat_isprod: IsProduct x cat_prod
z: A
f, f': z $-> cat_prod
p: forall i : I, cat_pr i $o f $== cat_pr i $o f'

cat_prod_corec (fun i : I => cat_pr i $o f) $== cat_prod_corec (fun i : I => cat_pr i $o f')
by napply cat_prod_corec_eta. Defined. End Lemmata. Section InducedFromEquiv. Context {A : Type} `{he : HasEquivs A} {I : Type} {x : I -> A} (cat_prod : A) `{!IsProduct x cat_prod} (y : A) (f : y $<~> cat_prod). (** A categorical equivalence into a product induces a product structure on the domain. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

IsProduct x y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

IsProduct x y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

forall i : I, y $-> x i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
forall z : A, (forall i : I, z $-> x i) -> z $-> y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
forall (z : A) (f0 : forall i : I, z $-> x i) (i : I), ?cat_pr i $o ?cat_prod_corec z f0 $== f0 i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
forall (z : A) (f0 g : z $-> y), (forall i : I, ?cat_pr i $o f0 $== ?cat_pr i $o g) -> f0 $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

forall i : I, y $-> x i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
i: I

y $-> x i
exact (cat_pr i $o f).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

forall z : A, (forall i : I, z $-> x i) -> z $-> y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
D: forall i : I, z $-> x i

z $-> y
exact (f^-1$ $o cat_prod_corec _ D).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

forall (z : A) (f0 : forall i : I, z $-> x i) (i : I), (fun i0 : I => cat_pr i0 $o f) i $o (fun (z0 : A) (D : forall i0 : I, z0 $-> x i0) => f^-1$ $o cat_prod_corec cat_prod D) z f0 $== f0 i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
D: forall i0 : I, z $-> x i0
i: I

cat_pr i $o f $o (f^-1$ $o cat_prod_corec cat_prod D) $== D i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
D: forall i0 : I, z $-> x i0
i: I

cat_pr i $o f $o (f^-1$ $o cat_prod_corec cat_prod D) $== cat_pr i $o cat_prod_corec cat_prod D
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
D: forall i0 : I, z $-> x i0
i: I

cat_pr i $o (f $o (f^-1$ $o cat_prod_corec cat_prod D)) $== cat_pr i $o cat_prod_corec cat_prod D
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
D: forall i0 : I, z $-> x i0
i: I

f $o (f^-1$ $o cat_prod_corec cat_prod D) $== cat_prod_corec cat_prod D
apply compose_h_Vh.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod

forall (z : A) (f0 g : z $-> y), (forall i : I, (fun i0 : I => cat_pr i0 $o f) i $o f0 $== (fun i0 : I => cat_pr i0 $o f) i $o g) -> f0 $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
g, g': z $-> y
e: forall i : I, cat_pr i $o f $o g $== cat_pr i $o f $o g'

g $== g'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
g, g': z $-> y
e: forall i : I, cat_pr i $o f $o g $== cat_pr i $o f $o g'

f $o g $== f $o g'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
g, g': z $-> y
e: forall i : I, cat_pr i $o f $o g $== cat_pr i $o f $o g'

forall i : ?Goal, cat_pr i $o (f $o g) $== cat_pr i $o (f $o g')
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
g, g': z $-> y
e: forall i0 : I, cat_pr i0 $o f $o g $== cat_pr i0 $o f $o g'
i: ?Goal

cat_pr i $o (f $o g) $== cat_pr i $o (f $o g')
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
g, g': z $-> y
e: forall i0 : I, cat_pr i0 $o f $o g $== cat_pr i0 $o f $o g'
i: ?Goal

cat_pr i $o f $o g $== cat_pr i $o (f $o g')
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
he: HasEquivs A
I: Type
x: I -> A
cat_prod: A
IsProduct0: IsProduct x cat_prod
y: A
f: y $<~> cat_prod
z: A
g, g': z $-> y
e: forall i0 : I, cat_pr i0 $o f $o g $== cat_pr i0 $o f $o g'
i: ?Goal

cat_pr i $o f $o g $== cat_pr i $o f $o g'
exact (e i). Defined. (** The induced projection is given by the equivalence. *) Definition cat_pr_comp (i : I) : cat_pr i $== cat_pr i $o f := Id _. (** The induced corecursion is given by the equivalence. *) Definition cat_prod_corec_comp {z : A} (D : forall i, z $-> x i) : f $o cat_prod_corec (cat_isprod:=cat_prod_equiv_prod) y D $== cat_prod_corec _ D := compose_h_Vh _ _. End InducedFromEquiv. (** *** Diagonal map into the product of a constant family *) Definition cat_prod_diag {A : Type} {I : Type} (x : A) (cat_prod : A) `{IsProduct _ I (fun _ => x) cat_prod} : x $-> cat_prod := cat_prod_corec cat_prod (fun _ => Id x). (** *** Uniqueness of products *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

prod_x $<~> prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

prod_x $<~> prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

yon1_0gpd prod_x $<~> yon1_0gpd prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

NatEquiv (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (yon1_0gpd prod_y)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

NatEquiv (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

forall a : A^op, (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a $<~> (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)
Is1Natural (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z)) (fun a : A^op => ?e a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

forall a : A^op, (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) a $<~> (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)
z: A^op

(fun z0 : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z0)) z $<~> (fun z0 : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z0)) z
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)
z: A^op

forall i : I, yon_0gpd (x i) z $<~> yon_0gpd (y (ie i)) z
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i0 : I, x i0 $<~> y (ie i0)
z: A^op
i: I

yon_0gpd (x i) z $<~> yon_0gpd (y (ie i)) z
exact (natequiv_yon_equiv_0gpd (e i) _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

Is1Natural (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z)) (fun a : A^op => (fun z : A^op => cate_prod_0gpd ie (fun i : I => yon_0gpd (x i) z) (fun i : J => yon_0gpd (y i) z) (fun i : I => natequiv_yon_equiv_0gpd (e i) z)) a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)

forall (a a' : A^op) (f : a $-> a'), (fun a0 : A^op => cate_fun ((fun z : A^op => cate_prod_0gpd ie (fun i : I => yon_0gpd (x i) z) (fun i : J => yon_0gpd (y i) z) (fun i : I => natequiv_yon_equiv_0gpd (e i) z)) a0)) a' $o fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f $== fmap (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z)) f $o (fun a0 : A^op => cate_fun ((fun z : A^op => cate_prod_0gpd ie (fun i : I => yon_0gpd (x i) z) (fun i : J => yon_0gpd (y i) z) (fun i : I => natequiv_yon_equiv_0gpd (e i) z)) a0)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)
a, b: A^op
f: a $-> b
g: zerogpd_graph (prod_0gpd I (fun i : I => yon_0gpd (x i) a))
j: J

(cate_prod_0gpd ie (fun i : I => yon_0gpd (x i) b) (fun i : J => yon_0gpd (y i) b) (fun i : I => natequiv_yon_equiv_0gpd (e i) b) $o fmap (fun z : A^op => prod_0gpd I (fun i : I => yon_0gpd (x i) z)) f) g j $-> (fmap (fun z : A^op => prod_0gpd J (fun i : J => yon_0gpd (y i) z)) f $o cate_prod_0gpd ie (fun i : I => yon_0gpd (x i) a) (fun i : J => yon_0gpd (y i) a) (fun i : I => natequiv_yon_equiv_0gpd (e i) a)) g j
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)
a, b: A^op
f: a $-> b
g: zerogpd_graph (prod_0gpd I (fun i : I => yon_0gpd (x i) a))
j: J

transport (fun x0 : J => b $-> y x0) (eisretr ie j) (cate_fun' (x (ie^-1 j)) (y (ie (ie^-1 j))) (e (ie^-1 j)) $o (g (ie^-1 j) $o f)) $-> transport (fun x0 : J => a $-> y x0) (eisretr ie j) (cate_fun' (x (ie^-1 j)) (y (ie (ie^-1 j))) (e (ie^-1 j)) $o g (ie^-1 j)) $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
I, J: Type
ie: I <~> J
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
e: forall i : I, x i $<~> y (ie i)
a, b: A^op
f: a $-> b
g: zerogpd_graph (prod_0gpd I (fun i : I => yon_0gpd (x i) a))
j: J

transport (fun x0 : J => b $-> y x0) 1 (cate_fun' (x (ie^-1 j)) (y (ie (ie^-1 j))) (e (ie^-1 j)) $o (g (ie^-1 j) $o f)) $-> transport (fun x0 : J => a $-> y x0) 1 (cate_fun' (x (ie^-1 j)) (y (ie (ie^-1 j))) (e (ie^-1 j)) $o g (ie^-1 j)) $o f
exact (cat_assoc_opp _ _ _). Defined. (** [I]-indexed products are unique. *) Definition cat_prod_unique {A : Type} `{HasEquivs A} {I : Type} (x : I -> A) (prod_x : A) `{!IsProduct x prod_x} (y : I -> A) (prod_y : A) `{!IsProduct y prod_y} (e : forall i : I, x i $<~> y i) : prod_x $<~> prod_y := cate_cat_prod 1 x _ y _ e. (** *** Existence of products *) Class HasProducts (A : Type) `{Is1Cat A} (I : Type) := has_products :: forall x : I -> A, Product x. Arguments has_products {A _ _ _ _ I hasproducts} x : rename. Class HasAllProducts (A : Type) `{Is1Cat A} := has_all_products :: forall I : Type, HasProducts A I. (** *** Product functor *)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

Is0Functor (fun x : I -> A => cat_prod x)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

Is0Functor (fun x : I -> A => cat_prod x)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

forall a b : I -> A, (a $-> b) -> cat_prod a $-> cat_prod b
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y: I -> A
f: x $-> y

cat_prod x $-> cat_prod y
exact (cat_prod_corec _ (fun i => f i $o cat_pr i)). Defined.
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

Is1Functor (fun x : I -> A => cat_prod x)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

Is1Functor (fun x : I -> A => cat_prod x)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

forall (a b : I -> A) (f g : a $-> b), f $== g -> fmap (fun x : I -> A => cat_prod x) f $== fmap (fun x : I -> A => cat_prod x) g
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
forall a : I -> A, fmap (fun x : I -> A => cat_prod x) (Id a) $== Id (cat_prod a)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
forall (a b c : I -> A) (f : a $-> b) (g : b $-> c), fmap (fun x : I -> A => cat_prod x) (g $o f) $== fmap (fun x : I -> A => cat_prod x) g $o fmap (fun x : I -> A => cat_prod x) f
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

forall (a b : I -> A) (f g : a $-> b), f $== g -> fmap (fun x : I -> A => cat_prod x) f $== fmap (fun x : I -> A => cat_prod x) g
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y: I -> A
f, g: x $-> y
p: f $== g

fmap (fun x0 : I -> A => cat_prod x0) f $== fmap (fun x0 : I -> A => cat_prod x0) g
exact (cat_prod_corec_eta _ (fun i => p i $@R cat_pr i)).
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

forall a : I -> A, fmap (fun x : I -> A => cat_prod x) (Id a) $== Id (cat_prod a)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x: I -> A

fmap (fun x0 : I -> A => cat_prod x0) (Id x) $== Id (cat_prod x)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x: I -> A

fmap (fun x0 : I -> A => cat_prod x0) (Id x) $== cat_prod_corec (cat_prod x) (fun i : ?Goal1 => cat_pr i $o Id (cat_prod x))
exact (cat_prod_corec_eta _ (fun i => cat_idl _ $@ (cat_idr _)^$)).
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I

forall (a b c : I -> A) (f : a $-> b) (g : b $-> c), fmap (fun x : I -> A => cat_prod x) (g $o f) $== fmap (fun x : I -> A => cat_prod x) g $o fmap (fun x : I -> A => cat_prod x) f
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z

fmap (fun x0 : I -> A => cat_prod x0) (g $o f) $== fmap (fun x0 : I -> A => cat_prod x0) g $o fmap (fun x0 : I -> A => cat_prod x0) f
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z

forall i : ?Goal, cat_pr i $o fmap (fun x0 : I -> A => cat_prod x0) (g $o f) $== cat_pr i $o (fmap (fun x0 : I -> A => cat_prod x0) g $o fmap (fun x0 : I -> A => cat_prod x0) f)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: ?Goal

cat_pr i $o fmap (fun x0 : I -> A => cat_prod x0) (g $o f) $== cat_pr i $o (fmap (fun x0 : I -> A => cat_prod x0) g $o fmap (fun x0 : I -> A => cat_prod x0) f)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: I

(g $o f) i $o cat_pr i $== cat_pr i $o (fmap (fun x0 : I -> A => cat_prod x0) g $o fmap (fun x0 : I -> A => cat_prod x0) f)
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: I

(g $o f) i $o cat_pr i $== cat_pr i $o fmap (fun x0 : I -> A => cat_prod x0) g $o fmap (fun x0 : I -> A => cat_prod x0) f
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: I

cat_pr i $o fmap (fun x0 : I -> A => cat_prod x0) g $o fmap (fun x0 : I -> A => cat_prod x0) f $== (g $o f) i $o cat_pr i
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: I

g i $o cat_pr i $o fmap (fun x0 : I -> A => cat_prod x0) f $== (g $o f) i $o cat_pr i
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: I

g i $o (cat_pr i $o fmap (fun x0 : I -> A => cat_prod x0) f) $== (g $o f) i $o cat_pr i
A, I: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasProducts A I
x, y, z: I -> A
f: x $-> y
g: y $-> z
i: I

g i $o (f i $o cat_pr i) $== (g $o f) i $o cat_pr i
napply cat_assoc_opp. Defined. (** *** An empty product is terminal *)
A: Type
x: Empty -> A
prod_empty: A
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
isprod: IsProduct x prod_empty

IsTerminal prod_empty
A: Type
x: Empty -> A
prod_empty: A
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
isprod: IsProduct x prod_empty

IsTerminal prod_empty
A: Type
x: Empty -> A
prod_empty: A
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
isprod: IsProduct x prod_empty
a: A

{f : a $-> prod_empty & forall g : a $-> prod_empty, f $== g}
srefine (cat_prod_corec _ _; fun f => cat_prod_pr_eta _ _); intros []. Defined. (** ** Binary products *) Class IsBinaryProduct {A : Type} `{Is1Cat A} (x y : A) (cat_binprod : A) := is_binary_product :: IsProduct (Bool_rec _ x y) (cat_binprod). Class BinaryProduct {A : Type} `{Is1Cat A} (x y : A) := binary_product :: Product (Bool_rec _ x y). Instance isbinaryproduct_binaryproduct {A : Type} `{Is1Cat A} (x y : A) `{!BinaryProduct x y} : IsBinaryProduct x y (cat_prod _) := cat_isprod _. (** A category with binary products is a category with a binary product for each pair of objects. *) Class HasBinaryProducts (A : Type) `{Is1Cat A} := has_binary_products :: forall x y : A, BinaryProduct x y. Instance hasbinaryproducts_hasproductsbool {A : Type} `{HasProducts A Bool} : HasBinaryProducts A := fun x y => has_products (Bool_rec _ x y). Section BinaryProducts. Context {A : Type} `{Is1Cat A} {x y : A} (cat_binprod : A) {isbinprod : IsBinaryProduct x y cat_binprod}. Definition cat_pr1 : cat_binprod $-> x := cat_pr (x:=Bool_rec _ x y) true. Definition cat_pr2 : cat_binprod $-> y := cat_pr (x:=Bool_rec _ x y) false.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y

z $-> cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y

z $-> cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y

forall i : Bool, z $-> Bool_rec A x y i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y

z $-> Bool_rec A x y true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y
z $-> Bool_rec A x y false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y

z $-> Bool_rec A x y true
exact f.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> x
g: z $-> y

z $-> Bool_rec A x y false
exact g. Defined. Definition cat_binprod_beta_pr1 {z : A} (f : z $-> x) (g : z $-> y) : cat_pr1 $o cat_binprod_corec f g $== f := cat_prod_beta _ _ true. Definition cat_binprod_beta_pr2 {z : A} (f : z $-> x) (g : z $-> y) : cat_pr2 $o cat_binprod_corec f g $== g := cat_prod_beta _ _ false.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

cat_binprod_corec (cat_pr1 $o f) (cat_pr2 $o f) $== f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

cat_binprod_corec (cat_pr1 $o f) (cat_pr2 $o f) $== f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

cat_prod_corec cat_binprod (fun i : Bool => match i as b return (z $-> Bool_rec A x y b) with | true => cat_pr1 $o f | false => cat_pr2 $o f end) $== f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

forall i : Bool, cat_pr i $o cat_prod_corec cat_binprod (fun i0 : Bool => match i0 as b return (z $-> Bool_rec A x y b) with | true => cat_pr1 $o f | false => cat_pr2 $o f end) $== cat_pr i $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

cat_pr true $o cat_prod_corec cat_binprod (fun i : Bool => match i as b return (z $-> Bool_rec A x y b) with | true => cat_pr1 $o f | false => cat_pr2 $o f end) $== cat_pr true $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod
cat_pr false $o cat_prod_corec cat_binprod (fun i : Bool => match i as b return (z $-> Bool_rec A x y b) with | true => cat_pr1 $o f | false => cat_pr2 $o f end) $== cat_pr false $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

cat_pr true $o cat_prod_corec cat_binprod (fun i : Bool => match i as b return (z $-> Bool_rec A x y b) with | true => cat_pr1 $o f | false => cat_pr2 $o f end) $== cat_pr true $o f
exact (cat_binprod_beta_pr1 _ _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f: z $-> cat_binprod

cat_pr false $o cat_prod_corec cat_binprod (fun i : Bool => match i as b return (z $-> Bool_rec A x y b) with | true => cat_pr1 $o f | false => cat_pr2 $o f end) $== cat_pr false $o f
exact (cat_binprod_beta_pr2 _ _). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod

cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod

cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod
p: cat_pr1 $o f $== cat_pr1 $o g
q: cat_pr2 $o f $== cat_pr2 $o g

f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod
p: cat_pr1 $o f $== cat_pr1 $o g
q: cat_pr2 $o f $== cat_pr2 $o g

forall i : Bool, cat_pr i $o f $== cat_pr i $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod
p: cat_pr1 $o f $== cat_pr1 $o g
q: cat_pr2 $o f $== cat_pr2 $o g

cat_pr true $o f $== cat_pr true $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod
p: cat_pr1 $o f $== cat_pr1 $o g
q: cat_pr2 $o f $== cat_pr2 $o g
cat_pr false $o f $== cat_pr false $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod
p: cat_pr1 $o f $== cat_pr1 $o g
q: cat_pr2 $o f $== cat_pr2 $o g

cat_pr true $o f $== cat_pr true $o g
exact p.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, g: z $-> cat_binprod
p: cat_pr1 $o f $== cat_pr1 $o g
q: cat_pr2 $o f $== cat_pr2 $o g

cat_pr false $o f $== cat_pr false $o g
exact q. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y

f $== f' -> g $== g' -> cat_binprod_corec f g $== cat_binprod_corec f' g'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y

f $== f' -> g $== g' -> cat_binprod_corec f g $== cat_binprod_corec f' g'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y
p: f $== f'
q: g $== g'

cat_binprod_corec f g $== cat_binprod_corec f' g'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y
p: f $== f'
q: g $== g'

forall i : Bool, match i as b return (z $-> Bool_rec A x y b) with | true => f | false => g end $== match i as b return (z $-> Bool_rec A x y b) with | true => f' | false => g' end
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y
p: f $== f'
q: g $== g'

f $== f'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y
p: f $== f'
q: g $== g'
g $== g'
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y
p: f $== f'
q: g $== g'

f $== f'
exact p.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
isbinprod: IsBinaryProduct x y cat_binprod
z: A
f, f': z $-> x
g, g': z $-> y
p: f $== f'
q: g $== g'

g $== g'
exact q. Defined. End BinaryProducts. Section BinaryProductConstructors. Context {A : Type} `{Is1Cat A} {x y : A} (cat_binprod : A) (cat_pr1 : cat_binprod $-> x) (cat_pr2 : cat_binprod $-> y) (cat_binprod_corec : forall z : A, z $-> x -> z $-> y -> z $-> cat_binprod) (cat_binprod_beta_pr1 : forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f) (cat_binprod_beta_pr2 : forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g) (cat_binprod_eta_pr : forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g). (** A convenience wrapper for building [IsBinaryProduct]. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

IsBinaryProduct x y cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

IsBinaryProduct x y cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

forall i : Bool, cat_binprod $-> Bool_rec A x y i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g
forall z : A, (forall i : Bool, z $-> Bool_rec A x y i) -> z $-> cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g
forall (z : A) (f : forall i : Bool, z $-> Bool_rec A x y i) (i : Bool), ?cat_pr i $o ?cat_prod_corec z f $== f i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g
forall (z : A) (f g : z $-> cat_binprod), (forall i : Bool, ?cat_pr i $o f $== ?cat_pr i $o g) -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

forall i : Bool, cat_binprod $-> Bool_rec A x y i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

cat_binprod $-> Bool_rec A x y true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g
cat_binprod $-> Bool_rec A x y false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

cat_binprod $-> Bool_rec A x y true
exact cat_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

cat_binprod $-> Bool_rec A x y false
exact cat_pr2.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

forall z : A, (forall i : Bool, z $-> Bool_rec A x y i) -> z $-> cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

z $-> cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

z $-> x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i
z $-> y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

z $-> x
exact (f true).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

z $-> y
exact (f false).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

forall (z : A) (f : forall i : Bool, z $-> Bool_rec A x y i) (i : Bool), (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o (fun (z0 : A) (f0 : forall i0 : Bool, z0 $-> Bool_rec A x y i0) => cat_binprod_corec z0 (f0 true) (f0 false)) z f $== f i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

cat_pr1 $o cat_binprod_corec z (f true) (f false) $== f true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i
cat_pr2 $o cat_binprod_corec z (f true) (f false) $== f false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

cat_pr1 $o cat_binprod_corec z (f true) (f false) $== f true
napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g $== g
cat_binprod_eta_pr: forall (z0 : A) (f0 g : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g -> cat_pr2 $o f0 $== cat_pr2 $o g -> f0 $== g
z: A
f: forall i : Bool, z $-> Bool_rec A x y i

cat_pr2 $o cat_binprod_corec z (f true) (f false) $== f false
napply cat_binprod_beta_pr2.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z : A, (z $-> x) -> (z $-> y) -> z $-> cat_binprod
cat_binprod_beta_pr1: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr1 $o cat_binprod_corec z f g $== f
cat_binprod_beta_pr2: forall (z : A) (f : z $-> x) (g : z $-> y), cat_pr2 $o cat_binprod_corec z f g $== g
cat_binprod_eta_pr: forall (z : A) (f g : z $-> cat_binprod), cat_pr1 $o f $== cat_pr1 $o g -> cat_pr2 $o f $== cat_pr2 $o g -> f $== g

forall (z : A) (f g : z $-> cat_binprod), (forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o g) -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g0 $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g0 $== g0
cat_binprod_eta_pr: forall (z0 : A) (f0 g0 : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g0 -> cat_pr2 $o f0 $== cat_pr2 $o g0 -> f0 $== g0
z: A
f, g: z $-> cat_binprod
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o g

f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g0 $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g0 $== g0
cat_binprod_eta_pr: forall (z0 : A) (f0 g0 : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g0 -> cat_pr2 $o f0 $== cat_pr2 $o g0 -> f0 $== g0
z: A
f, g: z $-> cat_binprod
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o g

cat_pr1 $o f $== cat_pr1 $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g0 $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g0 $== g0
cat_binprod_eta_pr: forall (z0 : A) (f0 g0 : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g0 -> cat_pr2 $o f0 $== cat_pr2 $o g0 -> f0 $== g0
z: A
f, g: z $-> cat_binprod
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o g
cat_pr2 $o f $== cat_pr2 $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g0 $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g0 $== g0
cat_binprod_eta_pr: forall (z0 : A) (f0 g0 : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g0 -> cat_pr2 $o f0 $== cat_pr2 $o g0 -> f0 $== g0
z: A
f, g: z $-> cat_binprod
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o g

cat_pr1 $o f $== cat_pr1 $o g
exact (p true).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
x, y, cat_binprod: A
cat_pr1: cat_binprod $-> x
cat_pr2: cat_binprod $-> y
cat_binprod_corec: forall z0 : A, (z0 $-> x) -> (z0 $-> y) -> z0 $-> cat_binprod
cat_binprod_beta_pr1: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr1 $o cat_binprod_corec z0 f0 g0 $== f0
cat_binprod_beta_pr2: forall (z0 : A) (f0 : z0 $-> x) (g0 : z0 $-> y), cat_pr2 $o cat_binprod_corec z0 f0 g0 $== g0
cat_binprod_eta_pr: forall (z0 : A) (f0 g0 : z0 $-> cat_binprod), cat_pr1 $o f0 $== cat_pr1 $o g0 -> cat_pr2 $o f0 $== cat_pr2 $o g0 -> f0 $== g0
z: A
f, g: z $-> cat_binprod
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod $-> Bool_rec A x y b) with | true => cat_pr1 | false => cat_pr2 end) i $o g

cat_pr2 $o f $== cat_pr2 $o g
exact (p false). Defined. (** A convenience wrapper for building binary products. *) Definition Build_BinaryProduct : BinaryProduct x y := Build_Product' _ cat_binprod Build_IsBinaryProduct. End BinaryProductConstructors. Definition cat_binprod {A: Type} `{HasBinaryProducts A} (x y : A) : A := cat_prod (Bool_rec _ x y).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g -> cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g -> cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g -> cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g -> cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
exact p.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

cat_pr1 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o f) $== cat_pr1 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
cat_pr2 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o f) $== cat_pr2 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

cat_pr1 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o f) $== cat_pr1 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o g)
exact (cat_assoc_opp _ _ _ $@ q $@ cat_assoc _ _ _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o g
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o g

cat_pr2 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o f) $== cat_pr2 (cat_binprod y z) $o (cat_pr2 (cat_binprod x (cat_binprod y z)) $o g)
exact (cat_assoc_opp _ _ _ $@ r $@ cat_assoc _ _ _). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z

cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g -> cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g -> cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z

cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g -> cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g -> cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g
cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

cat_pr1 (cat_binprod x y) $o (cat_pr1 (cat_binprod (cat_binprod x y) z) $o f) $== cat_pr1 (cat_binprod x y) $o (cat_pr1 (cat_binprod (cat_binprod x y) z) $o g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g
cat_pr2 (cat_binprod x y) $o (cat_pr1 (cat_binprod (cat_binprod x y) z) $o f) $== cat_pr2 (cat_binprod x y) $o (cat_pr1 (cat_binprod (cat_binprod x y) z) $o g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

cat_pr1 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g
cat_pr2 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

cat_pr1 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
exact p.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
w, x, y, z: A
f, g: w $-> cat_binprod (cat_binprod x y) z
p: cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
q: cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
r: cat_pr2 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod (cat_binprod x y) z) $o g

cat_pr2 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o f $== cat_pr2 (cat_binprod x y) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o g
exact q. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) -> cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) -> cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) -> f $== Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) -> cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) -> cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) -> f $== Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))

f $== Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))

cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z)) $o Id (cat_binprod x (cat_binprod y z))
exact (p $@ (cat_idr _)^$).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))

cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o Id (cat_binprod x (cat_binprod y z))
exact (q $@ (cat_idr _)^$).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: cat_binprod x (cat_binprod y z) $-> cat_binprod x (cat_binprod y z)
p: cat_pr1 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_binprod x (cat_binprod y z))
q: cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
r: cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))

cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o f $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o Id (cat_binprod x (cat_binprod y z))
exact (r $@ (cat_idr _)^$). Defined. (** From binary products, all [Bool]-shaped products can be constructed. This should not be an instance to avoid a cycle with [hasbinaryproducts_hasproductsbool]. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A

HasProducts A Bool
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A

HasProducts A Bool
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

Product x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

A
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
forall i : Bool, ?cat_prod $-> x i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
forall z : A, (forall i : Bool, z $-> x i) -> z $-> ?cat_prod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
forall (z : A) (f : forall i : Bool, z $-> x i) (i : Bool), ?cat_pr i $o ?cat_prod_corec z f $== f i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
forall (z : A) (f g : z $-> ?cat_prod), (forall i : Bool, ?cat_pr i $o f $== ?cat_pr i $o g) -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

A
exact (cat_binprod (x true) (x false)).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

forall i : Bool, cat_binprod (x true) (x false) $-> x i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

cat_binprod (x true) (x false) $-> x true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
cat_binprod (x true) (x false) $-> x false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

cat_binprod (x true) (x false) $-> x true
exact (cat_pr1 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

cat_binprod (x true) (x false) $-> x false
exact (cat_pr2 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

forall z : A, (forall i : Bool, z $-> x i) -> z $-> cat_binprod (x true) (x false)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f: forall i : Bool, z $-> x i

z $-> cat_binprod (x true) (x false)
exact (cat_binprod_corec _ (f true) (f false)).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

forall (z : A) (f : forall i : Bool, z $-> x i) (i : Bool), (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o (fun (z0 : A) (f0 : forall i0 : Bool, z0 $-> x i0) => cat_binprod_corec (cat_binprod (x true) (x false)) (f0 true) (f0 false)) z f $== f i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f: forall i : Bool, z $-> x i

cat_pr1 (cat_binprod (x true) (x false)) $o cat_binprod_corec (cat_binprod (x true) (x false)) (f true) (f false) $== f true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f: forall i : Bool, z $-> x i
cat_pr2 (cat_binprod (x true) (x false)) $o cat_binprod_corec (cat_binprod (x true) (x false)) (f true) (f false) $== f false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f: forall i : Bool, z $-> x i

cat_pr1 (cat_binprod (x true) (x false)) $o cat_binprod_corec (cat_binprod (x true) (x false)) (f true) (f false) $== f true
exact (cat_binprod_beta_pr1 _ (f true) (f false)).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f: forall i : Bool, z $-> x i

cat_pr2 (cat_binprod (x true) (x false)) $o cat_binprod_corec (cat_binprod (x true) (x false)) (f true) (f false) $== f false
exact (cat_binprod_beta_pr2 _ (f true) (f false)).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A

forall (z : A) (f g : z $-> cat_binprod (x true) (x false)), (forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o g) -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f, g: z $-> cat_binprod (x true) (x false)
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o g

f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f, g: z $-> cat_binprod (x true) (x false)
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o g

cat_pr1 (cat_binprod (x true) (x false)) $o f $== cat_pr1 (cat_binprod (x true) (x false)) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f, g: z $-> cat_binprod (x true) (x false)
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o g
cat_pr2 (cat_binprod (x true) (x false)) $o f $== cat_pr2 (cat_binprod (x true) (x false)) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f, g: z $-> cat_binprod (x true) (x false)
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o g

cat_pr1 (cat_binprod (x true) (x false)) $o f $== cat_pr1 (cat_binprod (x true) (x false)) $o g
exact (p true).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
x: Bool -> A
z: A
f, g: z $-> cat_binprod (x true) (x false)
p: forall i : Bool, (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o f $== (fun i0 : Bool => match i0 as b return (cat_binprod (x true) (x false) $-> x b) with | true => cat_pr1 (cat_binprod (x true) (x false)) | false => cat_pr2 (cat_binprod (x true) (x false)) end) i $o g

cat_pr2 (cat_binprod (x true) (x false)) $o f $== cat_pr2 (cat_binprod (x true) (x false)) $o g
exact (p false). Defined. (** *** Operations on indexed products *) (** We can take the disjoint union of the index set of an indexed product if we have all binary products. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

Product (sum_ind (fun _ : I + J => A) x y)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

Product (sum_ind (fun _ : I + J => A) x y)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

A
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
forall i : I + J, ?cat_prod $-> sum_ind (fun _ : I + J => A) x y i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
forall z : A, (forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i) -> z $-> ?cat_prod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
forall (z : A) (f : forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i) (i : I + J), ?cat_pr i $o ?cat_prod_corec z f $== f i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
forall (z : A) (f g : z $-> ?cat_prod), (forall i : I + J, ?cat_pr i $o f $== ?cat_pr i $o g) -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

A
exact (cat_binprod prod_x prod_y).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

forall i : I + J, cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
i: I

cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y (inl i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
j: J
cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y (inr j)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
i: I

cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y (inl i)
exact (cat_pr i $o cat_pr1 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
j: J

cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y (inr j)
exact (cat_pr j $o cat_pr2 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

forall z : A, (forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i) -> z $-> cat_binprod prod_x prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i

z $-> cat_binprod prod_x prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i

z $-> prod_x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i
z $-> prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i

z $-> prod_x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i

forall i : I, z $-> x i
exact (f o inl).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i

z $-> prod_y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i

forall i : J, z $-> y i
exact (f o inr).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

forall (z : A) (f : forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i) (i : I + J), (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o (fun (z0 : A) (f0 : forall i0 : I + J, z0 $-> sum_ind (fun _ : I + J => A) x y i0) => cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (f0 o inl)) (cat_prod_corec prod_y (f0 o inr))) z f $== f i
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i0 : I + J, z $-> sum_ind (fun _ : I + J => A) x y i0
i: I

cat_pr i $o cat_pr1 (cat_binprod prod_x prod_y) $o cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (fun x0 : I => f (inl x0))) (cat_prod_corec prod_y (fun x0 : J => f (inr x0))) $== f (inl i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i
j: J
cat_pr j $o cat_pr2 (cat_binprod prod_x prod_y) $o cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (fun x0 : I => f (inl x0))) (cat_prod_corec prod_y (fun x0 : J => f (inr x0))) $== f (inr j)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i0 : I + J, z $-> sum_ind (fun _ : I + J => A) x y i0
i: I

cat_pr i $o cat_pr1 (cat_binprod prod_x prod_y) $o cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (fun x0 : I => f (inl x0))) (cat_prod_corec prod_y (fun x0 : J => f (inr x0))) $== f (inl i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i0 : I + J, z $-> sum_ind (fun _ : I + J => A) x y i0
i: I

cat_pr i $o (cat_pr1 (cat_binprod prod_x prod_y) $o cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (fun x0 : I => f (inl x0))) (cat_prod_corec prod_y (fun x0 : J => f (inr x0)))) $== f (inl i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i0 : I + J, z $-> sum_ind (fun _ : I + J => A) x y i0
i: I

cat_pr i $o cat_prod_corec prod_x (fun x0 : I => f (inl x0)) $== f (inl i)
tapply (cat_prod_beta prod_x).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i
j: J

cat_pr j $o cat_pr2 (cat_binprod prod_x prod_y) $o cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (fun x0 : I => f (inl x0))) (cat_prod_corec prod_y (fun x0 : J => f (inr x0))) $== f (inr j)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i
j: J

cat_pr j $o (cat_pr2 (cat_binprod prod_x prod_y) $o cat_binprod_corec (cat_binprod prod_x prod_y) (cat_prod_corec prod_x (fun x0 : I => f (inl x0))) (cat_prod_corec prod_y (fun x0 : J => f (inr x0)))) $== f (inr j)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f: forall i : I + J, z $-> sum_ind (fun _ : I + J => A) x y i
j: J

cat_pr j $o cat_prod_corec prod_y (fun x0 : J => f (inr x0)) $== f (inr j)
tapply (cat_prod_beta prod_y).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y

forall (z : A) (f g : z $-> cat_binprod prod_x prod_y), (forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g) -> f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g

f $== g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g

cat_pr1 (cat_binprod prod_x prod_y) $o f $== cat_pr1 (cat_binprod prod_x prod_y) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g
cat_pr2 (cat_binprod prod_x prod_y) $o f $== cat_pr2 (cat_binprod prod_x prod_y) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g

cat_pr1 (cat_binprod prod_x prod_y) $o f $== cat_pr1 (cat_binprod prod_x prod_y) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g

forall i : I, cat_pr i $o (cat_pr1 (cat_binprod prod_x prod_y) $o f) $== cat_pr i $o (cat_pr1 (cat_binprod prod_x prod_y) $o g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i0 : I + J, (fun i1 : I + J => match i1 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i2 => (fun i3 : I => cat_pr i3 $o cat_pr1 (cat_binprod prod_x prod_y)) i2 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i0 $o f $== (fun i1 : I + J => match i1 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i2 => (fun i3 : I => cat_pr i3 $o cat_pr1 (cat_binprod prod_x prod_y)) i2 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i0 $o g
i: I

cat_pr i $o (cat_pr1 (cat_binprod prod_x prod_y) $o f) $== cat_pr i $o (cat_pr1 (cat_binprod prod_x prod_y) $o g)
exact ((cat_assoc _ _ _)^$ $@ r (inl i) $@ cat_assoc _ _ _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g

cat_pr2 (cat_binprod prod_x prod_y) $o f $== cat_pr2 (cat_binprod prod_x prod_y) $o g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j => (fun j0 : J => cat_pr j0 $o cat_pr2 (cat_binprod prod_x prod_y)) j end) i $o g

forall i : J, cat_pr i $o (cat_pr2 (cat_binprod prod_x prod_y) $o f) $== cat_pr i $o (cat_pr2 (cat_binprod prod_x prod_y) $o g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
I, J: Type
x: I -> A
prod_x: A
IsProduct0: IsProduct x prod_x
y: J -> A
prod_y: A
IsProduct1: IsProduct y prod_y
z: A
f, g: z $-> cat_binprod prod_x prod_y
r: forall i : I + J, (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j0 => (fun j1 : J => cat_pr j1 $o cat_pr2 (cat_binprod prod_x prod_y)) j0 end) i $o f $== (fun i0 : I + J => match i0 as s return (cat_binprod prod_x prod_y $-> sum_ind (fun _ : I + J => A) x y s) with | inl i1 => (fun i2 : I => cat_pr i2 $o cat_pr1 (cat_binprod prod_x prod_y)) i1 | inr j0 => (fun j1 : J => cat_pr j1 $o cat_pr2 (cat_binprod prod_x prod_y)) j0 end) i $o g
j: J

cat_pr j $o (cat_pr2 (cat_binprod prod_x prod_y) $o f) $== cat_pr j $o (cat_pr2 (cat_binprod prod_x prod_y) $o g)
exact ((cat_assoc _ _ _)^$ $@ r (inr j) $@ cat_assoc _ _ _). Defined. (** *** Binary product functor *) (** We prove bifunctoriality of [cat_binprod : A -> A -> A] by factoring it as [cat_prod Bool o Bool_rec A]. First, we prove that [Bool_rec A : A -> A -> (Bool -> A)] is a bifunctor. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is0Bifunctor (Bool_rec A)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is0Bifunctor (Bool_rec A)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is01Cat A
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
Is01Cat A
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
Is0Functor (uncurry (Bool_rec A))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is0Functor (uncurry (Bool_rec A))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

forall a b : A * A, (a $-> b) -> uncurry (Bool_rec A) a $-> uncurry (Bool_rec A) b
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')

uncurry (Bool_rec A) (a, b) true $-> uncurry (Bool_rec A) (a', b') true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')
uncurry (Bool_rec A) (a, b) false $-> uncurry (Bool_rec A) (a', b') false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')

uncurry (Bool_rec A) (a, b) true $-> uncurry (Bool_rec A) (a', b') true
exact f.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')

uncurry (Bool_rec A) (a, b) false $-> uncurry (Bool_rec A) (a', b') false
exact g. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is1Bifunctor (Bool_rec A)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is1Bifunctor (Bool_rec A)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

Is1Functor (uncurry (Bool_rec A))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

forall (a b : A * A) (f g : a $-> b), f $== g -> fmap (uncurry (Bool_rec A)) f $== fmap (uncurry (Bool_rec A)) g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
forall a : A * A, fmap (uncurry (Bool_rec A)) (Id a) $== Id (uncurry (Bool_rec A) a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
forall (a b c : A * A) (f : a $-> b) (g : b $-> c), fmap (uncurry (Bool_rec A)) (g $o f) $== fmap (uncurry (Bool_rec A)) g $o fmap (uncurry (Bool_rec A)) f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

forall (a b : A * A) (f g : a $-> b), f $== g -> fmap (uncurry (Bool_rec A)) f $== fmap (uncurry (Bool_rec A)) g
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')
f': fst (a, b) $-> fst (a', b')
g': snd (a, b) $-> snd (a', b')
p: fst (f, g) $-> fst (f', g')
q: snd (f, g) $-> snd (f', g')

fmap (uncurry (Bool_rec A)) (f, g) true $-> fmap (uncurry (Bool_rec A)) (f', g') true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')
f': fst (a, b) $-> fst (a', b')
g': snd (a, b) $-> snd (a', b')
p: fst (f, g) $-> fst (f', g')
q: snd (f, g) $-> snd (f', g')
fmap (uncurry (Bool_rec A)) (f, g) false $-> fmap (uncurry (Bool_rec A)) (f', g') false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')
f': fst (a, b) $-> fst (a', b')
g': snd (a, b) $-> snd (a', b')
p: fst (f, g) $-> fst (f', g')
q: snd (f, g) $-> snd (f', g')

fmap (uncurry (Bool_rec A)) (f, g) true $-> fmap (uncurry (Bool_rec A)) (f', g') true
exact p.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, a', b': A
f: fst (a, b) $-> fst (a', b')
g: snd (a, b) $-> snd (a', b')
f': fst (a, b) $-> fst (a', b')
g': snd (a, b) $-> snd (a', b')
p: fst (f, g) $-> fst (f', g')
q: snd (f, g) $-> snd (f', g')

fmap (uncurry (Bool_rec A)) (f, g) false $-> fmap (uncurry (Bool_rec A)) (f', g') false
exact q.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

forall a : A * A, fmap (uncurry (Bool_rec A)) (Id a) $== Id (uncurry (Bool_rec A) a)
intros [a b] [ | ]; reflexivity.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A

forall (a b c : A * A) (f : a $-> b) (g : b $-> c), fmap (uncurry (Bool_rec A)) (g $o f) $== fmap (uncurry (Bool_rec A)) g $o fmap (uncurry (Bool_rec A)) f
intros [a b] [a' b'] [a'' b''] [f f'] [g g'] [ | ]; reflexivity. Defined. (** As a special case of the product functor, restriction along [Bool_rec A] yields bifunctoriality of [cat_binprod]. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A

Is0Bifunctor cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A

Is0Bifunctor cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
p:= has_products: forall x : Bool -> A, Product x

Is0Bifunctor cat_binprod
exact (is0bifunctor_postcompose (Bool_rec A) (fun x => cat_prod x (product:=p x))). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A

Is1Bifunctor cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A

Is1Bifunctor cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
p:= has_products: forall x : Bool -> A, Product x

Is1Bifunctor cat_binprod
exact (is1bifunctor_postcompose (Bool_rec A) (fun x => cat_prod x (product:=p x))). Defined. (** [cat_binprod_corec] is also functorial in each morphism. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
g: z $-> y

Is0Functor (fun f : z $-> x => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
g: z $-> y

Is0Functor (fun f : z $-> x => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
g: z $-> y

forall a b : z $-> x, (a $-> b) -> (fun f : z $-> x => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g) a $-> (fun f : z $-> x => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g) b
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
g: z $-> y
f, f': z $-> x
p: f $-> f'

(fun f0 : z $-> x => cat_binprod_corec (cat_prod (Bool_rec A x y)) f0 g) f $-> (fun f0 : z $-> x => cat_binprod_corec (cat_prod (Bool_rec A x y)) f0 g) f'
by napply cat_binprod_corec_eta. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: z $-> x

Is0Functor (fun g : z $-> y => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: z $-> x

Is0Functor (fun g : z $-> y => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: z $-> x

forall a b : z $-> y, (a $-> b) -> (fun g : z $-> y => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g) a $-> (fun g : z $-> y => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g) b
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y, z: A
f: z $-> x
g, h: z $-> y
p: g $-> h

(fun g0 : z $-> y => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g0) g $-> (fun g0 : z $-> y => cat_binprod_corec (cat_prod (Bool_rec A x y)) f g0) h
by napply cat_binprod_corec_eta. Defined. Definition cat_pr1_fmap01_binprod {A : Type} `{HasBinaryProducts A} (a : A) {x y : A} (g : x $-> y) : cat_pr1 _ $o fmap01 cat_binprod a g $== cat_pr1 _ := cat_binprod_beta_pr1 _ _ _ $@ cat_idl _. Definition cat_pr1_fmap10_binprod {A : Type} `{HasBinaryProducts A} {x y : A} (f : x $-> y) (a : A) : cat_pr1 _ $o fmap10 cat_binprod f a $== f $o cat_pr1 _ := cat_binprod_beta_pr1 _ _ _. Definition cat_pr1_fmap11_binprod {A : Type} `{HasBinaryProducts A} {w x y z : A} (f : w $-> y) (g : x $-> z) : cat_pr1 _ $o fmap11 cat_binprod f g $== f $o cat_pr1 _ := cat_binprod_beta_pr1 _ _ _. Definition cat_pr2_fmap01_binprod {A : Type} `{HasBinaryProducts A} (a : A) {x y : A} (g : x $-> y) : cat_pr2 _ $o fmap01 cat_binprod a g $== g $o cat_pr2 _ := cat_binprod_beta_pr2 _ _ _. Definition cat_pr2_fmap10_binprod {A : Type} `{HasBinaryProducts A} {x y : A} (f : x $-> y) (a : A) : cat_pr2 _ $o fmap10 cat_binprod f a $== cat_pr2 _ := cat_binprod_beta_pr2 _ _ _ $@ cat_idl _. Definition cat_pr2_fmap11_binprod {A : Type} `{HasBinaryProducts A} {w x y z : A} (f : w $-> y) (g : x $-> z) : cat_pr2 _ $o fmap11 cat_binprod f g $== g $o cat_pr2 _ := cat_binprod_beta_pr2 _ _ _. (** *** Lemmas about [cat_binprod_corec] *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h $== cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h $== cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr1 (cat_binprod z y) $o (fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h) $== cat_pr1 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x
cat_pr2 (cat_binprod z y) $o (fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h) $== cat_pr2 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr1 (cat_binprod z y) $o (fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h) $== cat_pr1 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr1 (cat_binprod z y) $o fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h $== cat_pr1 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr1 (cat_binprod z y) $o fmap01 cat_binprod z g $== Id z $o ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x
?Goal2 $o cat_binprod_corec (cat_binprod z x) f h $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x
cat_pr1 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h) $-> ?Goal0
1-3: rapply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr2 (cat_binprod z y) $o (fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h) $== cat_pr2 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr2 (cat_binprod z y) $o fmap01 cat_binprod z g $o cat_binprod_corec (cat_binprod z x) f h $== cat_pr2 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x

cat_pr2 (cat_binprod z y) $o fmap01 cat_binprod z g $== ?Goal2 $o ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x
?Goal1 $o cat_binprod_corec (cat_binprod z x) f h $== ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> z
g: x $-> y
h: w $-> x
cat_pr2 (cat_binprod z y) $o cat_binprod_corec (cat_binprod z y) f (g $o h) $-> ?Goal2 $o ?Goal3
1-3: rapply cat_binprod_beta_pr2. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h $== cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h $== cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr1 (cat_binprod y z) $o (fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h) $== cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z
cat_pr2 (cat_binprod y z) $o (fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h) $== cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr1 (cat_binprod y z) $o (fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h) $== cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr1 (cat_binprod y z) $o fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h $== cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr1 (cat_binprod y z) $o fmap10 cat_binprod f z $== ?Goal3 $o ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z
?Goal2 $o cat_binprod_corec (cat_binprod x z) g h $== ?Goal4
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z
cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h $-> ?Goal3 $o ?Goal4
1-3: napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr2 (cat_binprod y z) $o (fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h) $== cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr2 (cat_binprod y z) $o fmap10 cat_binprod f z $o cat_binprod_corec (cat_binprod x z) g h $== cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z

cat_pr2 (cat_binprod y z) $o fmap10 cat_binprod f z $== Id z $o ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z
?Goal1 $o cat_binprod_corec (cat_binprod x z) g h $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
w, x, y, z: A
f: x $-> y
g: w $-> x
h: w $-> z
cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o g) h $-> ?Goal
1-3: napply cat_binprod_beta_pr2. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i $== cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i $== cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr1 (cat_binprod y z) $o (fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i) $== cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x
cat_pr2 (cat_binprod y z) $o (fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i) $== cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr1 (cat_binprod y z) $o (fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i) $== cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr1 (cat_binprod y z) $o fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i $== cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr1 (cat_binprod y z) $o fmap11 cat_binprod f g $== ?Goal3 $o ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x
?Goal2 $o cat_binprod_corec (cat_binprod w x) h i $== ?Goal4
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x
cat_pr1 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i) $-> ?Goal3 $o ?Goal4
1-3: napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr2 (cat_binprod y z) $o (fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i) $== cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr2 (cat_binprod y z) $o fmap11 cat_binprod f g $o cat_binprod_corec (cat_binprod w x) h i $== cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x

cat_pr2 (cat_binprod y z) $o fmap11 cat_binprod f g $== ?Goal2 $o ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x
?Goal1 $o cat_binprod_corec (cat_binprod w x) h i $== ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
hbp: HasBinaryProducts A
v, w, x, y, z: A
f: w $-> y
g: x $-> z
h: v $-> w
i: v $-> x
cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) (f $o h) (g $o i) $-> ?Goal2 $o ?Goal3
1-3: rapply cat_binprod_beta_pr2. Defined. (** *** Diagonal *) (** Annoyingly this doesn't follow directly from the general diagonal since [Bool_rec _ x x] is not definitionally equal to [fun _ => x]. *) Definition cat_binprod_diag {A : Type} `{Is1Cat A} (x : A) (cat_binprod : A) `{isbinprod : !IsBinaryProduct x x cat_binprod} : x $-> cat_binprod := cat_binprod_corec _ (Id _) (Id _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_binprod_diag y (cat_binprod y y) $o f $== fmap11 cat_binprod f f $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_binprod_diag y (cat_binprod y y) $o f $== fmap11 cat_binprod f f $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_binprod_diag y (cat_binprod y y) $o f $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y
fmap11 cat_binprod f f $o cat_binprod_diag x (cat_binprod x x) $-> ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_binprod_diag y (cat_binprod y y) $o f $== cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr1 (cat_binprod y y) $o (cat_binprod_diag y (cat_binprod y y) $o f) $== cat_pr1 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y
cat_pr2 (cat_binprod y y) $o (cat_binprod_diag y (cat_binprod y y) $o f) $== cat_pr2 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr1 (cat_binprod y y) $o (cat_binprod_diag y (cat_binprod y y) $o f) $== cat_pr1 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr1 (cat_binprod y y) $o cat_binprod_diag y (cat_binprod y y) $o f $== cat_pr1 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr1 (cat_binprod y y) $o cat_binprod_diag y (cat_binprod y y) $== Id y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y
cat_pr1 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x) $-> f $o Id x
1,2: rapply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr2 (cat_binprod y y) $o (cat_binprod_diag y (cat_binprod y y) $o f) $== cat_pr2 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr2 (cat_binprod y y) $o cat_binprod_diag y (cat_binprod y y) $o f $== cat_pr2 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y

cat_pr2 (cat_binprod y y) $o cat_binprod_diag y (cat_binprod y y) $== Id y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasBinaryProducts A
x, y: A
f: x $-> y
cat_pr2 (cat_binprod y y) $o cat_binprod_corec (cat_binprod y y) (f $o Id x) (f $o Id x) $-> f $o Id x
1,2: rapply cat_binprod_beta_pr2. Defined. (** *** Symmetry of binary products *) Section Symmetry. (** The requirement of having all binary products can be weakened further to having specific binary products, but it is not clear this is a useful generality. *) Context {A : Type} `{HasEquivs A} `{hbp : !HasBinaryProducts A}. Definition cat_binprod_swap (x y : A) : cat_binprod x y $-> cat_binprod y x := cat_binprod_corec _ (cat_pr2 _) (cat_pr1 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_binprod_swap x y $o cat_binprod_swap y x $== Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_binprod_swap x y $o cat_binprod_swap y x $== Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr1 (cat_binprod y x) $o (cat_binprod_swap x y $o cat_binprod_swap y x) $== cat_pr1 (cat_binprod y x) $o Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A
cat_pr2 (cat_binprod y x) $o (cat_binprod_swap x y $o cat_binprod_swap y x) $== cat_pr2 (cat_binprod y x) $o Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr1 (cat_binprod y x) $o (cat_binprod_swap x y $o cat_binprod_swap y x) $== cat_pr1 (cat_binprod y x) $o Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr1 (cat_binprod y x) $o cat_binprod_swap x y $o cat_binprod_swap y x $== cat_pr1 (cat_binprod y x) $o Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr2 (cat_binprod x y) $o cat_binprod_swap y x $== cat_pr1 (cat_binprod y x) $o Id (cat_binprod y x)
exact (cat_binprod_beta_pr2 _ _ _ $@ (cat_idr _)^$).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr2 (cat_binprod y x) $o (cat_binprod_swap x y $o cat_binprod_swap y x) $== cat_pr2 (cat_binprod y x) $o Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr2 (cat_binprod y x) $o cat_binprod_swap x y $o cat_binprod_swap y x $== cat_pr2 (cat_binprod y x) $o Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_pr1 (cat_binprod x y) $o cat_binprod_swap y x $== cat_pr2 (cat_binprod y x) $o Id (cat_binprod y x)
exact (cat_binprod_beta_pr1 _ _ _ $@ (cat_idr _)^$). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_binprod x y $<~> cat_binprod y x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_binprod x y $<~> cat_binprod y x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_binprod x y $-> cat_binprod y x
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A
cat_binprod y x $-> cat_binprod x y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A
?f $o ?g $== Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A
?g $o ?f $== Id (cat_binprod x y)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

cat_binprod_swap x y $o cat_binprod_swap y x $== Id (cat_binprod y x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A
cat_binprod_swap y x $o cat_binprod_swap x y $== Id (cat_binprod x y)
all: napply cat_binprod_swap_cat_binprod_swap. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_binprod_swap b c $o cat_binprod_corec (cat_binprod b c) f g $== cat_binprod_corec (cat_binprod c b) g f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_binprod_swap b c $o cat_binprod_corec (cat_binprod b c) f g $== cat_binprod_corec (cat_binprod c b) g f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr1 (cat_binprod c b) $o (cat_binprod_swap b c $o cat_binprod_corec (cat_binprod b c) f g) $== cat_pr1 (cat_binprod c b) $o cat_binprod_corec (cat_binprod c b) g f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c
cat_pr2 (cat_binprod c b) $o (cat_binprod_swap b c $o cat_binprod_corec (cat_binprod b c) f g) $== cat_pr2 (cat_binprod c b) $o cat_binprod_corec (cat_binprod c b) g f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr1 (cat_binprod c b) $o (cat_binprod_swap b c $o cat_binprod_corec (cat_binprod b c) f g) $== cat_pr1 (cat_binprod c b) $o cat_binprod_corec (cat_binprod c b) g f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr1 (cat_binprod c b) $o cat_binprod_swap b c $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c
?Goal0 $o cat_binprod_corec (cat_binprod b c) f g $== ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c
cat_pr1 (cat_binprod c b) $o cat_binprod_corec (cat_binprod c b) g f $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr2 (cat_binprod b c) $o cat_binprod_corec (cat_binprod b c) f g $== g
napply cat_binprod_beta_pr2.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr2 (cat_binprod c b) $o (cat_binprod_swap b c $o cat_binprod_corec (cat_binprod b c) f g) $== cat_pr2 (cat_binprod c b) $o cat_binprod_corec (cat_binprod c b) g f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr2 (cat_binprod c b) $o cat_binprod_swap b c $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c
?Goal $o cat_binprod_corec (cat_binprod b c) f g $== ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c
cat_pr2 (cat_binprod c b) $o cat_binprod_corec (cat_binprod c b) g f $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c: A
f: a $-> b
g: a $-> c

cat_pr1 (cat_binprod b c) $o cat_binprod_corec (cat_binprod b c) f g $== f
napply cat_binprod_beta_pr1. Defined. Definition cat_binprod_swap_nat {a b c d : A} (f : a $-> c) (g : b $-> d) : cat_binprod_swap c d $o fmap11 cat_binprod f g $== fmap11 cat_binprod g f $o cat_binprod_swap a b := cat_binprod_swap_corec _ _ $@ (cat_binprod_fmap11_corec _ _ _ _)^$.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

SymmetricBraiding cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

SymmetricBraiding cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

Braiding cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
forall a b : A, ?braiding_symmetricbraiding a b $o ?braiding_symmetricbraiding b a $== Id (cat_binprod b a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

Braiding cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

uncurry cat_binprod $=> uncurry (flip cat_binprod)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
Is1Natural (uncurry cat_binprod) (uncurry (flip cat_binprod)) ?alpha
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

uncurry cat_binprod $=> uncurry (flip cat_binprod)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y: A

uncurry cat_binprod (x, y) $-> uncurry (flip cat_binprod) (x, y)
exact (cat_binprod_swap x y).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

Is1Natural (uncurry cat_binprod) (uncurry (flip cat_binprod)) ((fun a : A * A => (fun x y : A => cat_binprod_swap x y) (fst a) (snd a)) : uncurry cat_binprod $=> uncurry (flip cat_binprod))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

forall (a a' : A * A) (f : a $-> a'), (fun a0 : A * A => (fun x y : A => cat_binprod_swap x y) (fst a0) (snd a0)) a' $o fmap (uncurry cat_binprod) f $== fmap (uncurry (flip cat_binprod)) f $o (fun a0 : A * A => (fun x y : A => cat_binprod_swap x y) (fst a0) (snd a0)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, b, c, d: A
f: a $-> c
g: b $-> d

cat_binprod_swap c d $o fmap (uncurry cat_binprod) (f, g) $== fmap (uncurry (flip cat_binprod)) (f, g) $o cat_binprod_swap a b
exact(cat_binprod_swap_nat f g).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

forall a b : A, {| trans_nattrans := (fun a0 : A * A => (fun x y : A => cat_binprod_swap x y) (fst a0) (snd a0)) : uncurry cat_binprod $=> uncurry (flip cat_binprod); is1natural_nattrans := Build_Is1Natural (fun a0 : A * A => (fun x y : A => cat_binprod_swap x y) (fst a0) (snd a0)) (fun a0 : A * A => (fun (a1 b0 : A) (a' : A * A) => (fun (c d : A) (f0 : (a1, b0) $-> (c, d)) => (fun (f : fst (a1, b0) $-> fst (c, d)) (g : snd (a1, b0) $-> snd (c, d)) => cat_binprod_swap_nat f g) (fst f0) (snd f0)) (fst a') (snd a')) (fst a0) (snd a0)) |} a b $o {| trans_nattrans := (fun a0 : A * A => (fun x y : A => cat_binprod_swap x y) (fst a0) (snd a0)) : uncurry cat_binprod $=> uncurry (flip cat_binprod); is1natural_nattrans := Build_Is1Natural (fun a0 : A * A => (fun x y : A => cat_binprod_swap x y) (fst a0) (snd a0)) (fun a0 : A * A => (fun (a1 b0 : A) (a' : A * A) => (fun (c d : A) (f0 : (a1, b0) $-> (c, d)) => (fun (f : fst (a1, b0) $-> fst (c, d)) (g : snd (a1, b0) $-> snd (c, d)) => cat_binprod_swap_nat f g) (fst f0) (snd f0)) (fst a') (snd a')) (fst a0) (snd a0)) |} b a $== Id (cat_binprod b a)
exact cat_binprod_swap_cat_binprod_swap. Defined. (** The swap map preserves the diagonal. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_binprod_swap x x $o cat_binprod_diag x (cat_binprod x x) $== cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_binprod_swap x x $o cat_binprod_diag x (cat_binprod x x) $== cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr1 (cat_binprod x x) $o (cat_binprod_swap x x $o cat_binprod_diag x (cat_binprod x x)) $== cat_pr1 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A
cat_pr2 (cat_binprod x x) $o (cat_binprod_swap x x $o cat_binprod_diag x (cat_binprod x x)) $== cat_pr2 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr1 (cat_binprod x x) $o (cat_binprod_swap x x $o cat_binprod_diag x (cat_binprod x x)) $== cat_pr1 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr1 (cat_binprod x x) $o cat_binprod_swap x x $== ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A
?Goal2 $o cat_binprod_diag x (cat_binprod x x) $== cat_pr1 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr2 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x) $== cat_pr1 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr1 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x) $-> Id x
napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr2 (cat_binprod x x) $o (cat_binprod_swap x x $o cat_binprod_diag x (cat_binprod x x)) $== cat_pr2 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr2 (cat_binprod x x) $o cat_binprod_swap x x $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A
?Goal $o cat_binprod_diag x (cat_binprod x x) $== cat_pr2 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr1 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x) $== cat_pr2 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x: A

cat_pr2 (cat_binprod x x) $o cat_binprod_diag x (cat_binprod x x) $-> Id x
napply cat_binprod_beta_pr2. Defined. End Symmetry. (** *** Binary product gives a symmetric monoidal structure *) Section Associativity. Context {A : Type} `{HasEquivs A} `{hbp : !HasBinaryProducts A}.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $-> cat_binprod y (cat_binprod x z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $-> cat_binprod y (cat_binprod x z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $-> y
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_binprod x (cat_binprod y z) $-> cat_binprod x z
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $-> y
exact (cat_pr1 _ $o cat_pr2 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $-> cat_binprod x z
exact (fmap01 cat_binprod x (cat_pr2 _)). Defined. Definition cat_binprod_pr1_twist (x y z : A) : cat_pr1 _ $o cat_binprod_twist x y z $== cat_pr1 _ $o cat_pr2 _ := cat_binprod_beta_pr1 _ _ _.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x z)) $o (cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z) $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x z)) $o fmap01 cat_binprod x (cat_pr2 (cat_binprod y z)) $== cat_pr1 (cat_binprod x (cat_binprod y z))
napply cat_pr1_fmap01_binprod. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x z)) $o (cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z) $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x z)) $o fmap01 cat_binprod x (cat_pr2 (cat_binprod y z)) $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
napply cat_pr2_fmap01_binprod. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr1 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h)) $== cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
cat_pr2 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h)) $== cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr1 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h)) $== cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $== ?Goal5 $o ?Goal4
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
?Goal4 $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== ?Goal6
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
?Goal5 $o ?Goal6 $== ?Goal8
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h) $-> ?Goal8
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr2 (cat_binprod x (cat_binprod y z)) $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
cat_pr1 (cat_prod (Bool_rec A y z)) $o ?Goal0 $== ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h) $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_binprod_corec (cat_binprod y z) g h $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
cat_pr1 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h) $-> ?Goal0
1,2: napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr2 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h)) $== cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_corec (cat_binprod y (cat_binprod x z)) g (cat_binprod_corec (cat_binprod x z) f h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr2 (cat_binprod y (cat_binprod x z)) $o cat_binprod_twist x y z $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
?Goal $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod x z) f h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

fmap01 cat_binprod x (cat_pr2 (cat_binprod y z)) $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod x z) f h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_binprod_corec (cat_binprod x z) f (cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod x z) f h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

f $== f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) g h $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_pr2 (cat_binprod y z) $o cat_binprod_corec (cat_binprod y z) g h $== h
napply cat_binprod_beta_pr2. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod_twist x y z $o cat_binprod_twist y x z $== Id (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod_twist x y z $o cat_binprod_twist y x z $== Id (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_twist y x z) $== cat_pr1 (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_twist y x z) $== cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_twist y x z) $== cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_twist y x z) $== cat_pr1 (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o cat_binprod_twist y x z $== cat_pr1 (cat_binprod y (cat_binprod x z))
napply cat_binprod_pr1_pr2_twist.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_twist y x z) $== cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod x (cat_binprod y z)) $o cat_binprod_twist y x z $== cat_pr1 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z))
napply cat_binprod_pr1_twist.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z)) $o (cat_binprod_twist x y z $o cat_binprod_twist y x z) $== cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z)) $o cat_binprod_twist y x z $== cat_pr2 (cat_prod (Bool_rec A x z)) $o cat_pr2 (cat_binprod y (cat_binprod x z))
napply cat_binprod_pr2_pr2_twist. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $<~> cat_binprod y (cat_binprod x z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $<~> cat_binprod y (cat_binprod x z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod x (cat_binprod y z) $-> cat_binprod y (cat_binprod x z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_binprod y (cat_binprod x z) $-> cat_binprod x (cat_binprod y z)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
?f $o ?g $== Id (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
?g $o ?f $== Id (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_binprod_twist x y z $o cat_binprod_twist y x z $== Id (cat_binprod y (cat_binprod x z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_binprod_twist y x z $o cat_binprod_twist x y z $== Id (cat_binprod x (cat_binprod y z))
1,2: napply cat_binprod_twist_cat_binprod_twist. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o (cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h)) $== cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_prod (Bool_rec A b' c')) $o cat_pr2 (cat_binprod a' (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_prod (Bool_rec A b' c')) $o (cat_pr2 (cat_binprod a' (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr2 (cat_binprod a' (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
cat_pr1 (cat_prod (Bool_rec A b' c')) $o ?Goal0 $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_prod (Bool_rec A b' c')) $o (fmap11 cat_binprod g h $o cat_pr2 (cat_binprod a (cat_binprod b c))) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_prod (Bool_rec A b' c')) $o fmap11 cat_binprod g h $o cat_pr2 (cat_binprod a (cat_binprod b c)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_prod (Bool_rec A b' c')) $o fmap11 cat_binprod g h $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
?Goal0 $o cat_pr2 (cat_binprod a (cat_binprod b c)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

g $o cat_pr1 (cat_binprod b c) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

g $o cat_pr1 (cat_binprod b c) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $== cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

g $o cat_pr1 (cat_binprod b c) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $== ?Goal1 $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
cat_pr1 (cat_binprod b' (cat_binprod a' c')) $o fmap11 cat_binprod g (fmap11 cat_binprod f h) $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

g $o cat_pr1 (cat_binprod b c) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $== g $o cat_pr1 (cat_binprod b (cat_binprod a c)) $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr1 (cat_binprod b (cat_binprod a c)) $o cat_binprod_twist a b c $-> cat_pr1 (cat_binprod b c) $o cat_pr2 (cat_binprod a (cat_binprod b c))
napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o (cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h)) $== cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o (fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== ?Goal0 $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
cat_pr2 (cat_binprod b' (cat_binprod a' c')) $o fmap11 cat_binprod g (fmap11 cat_binprod f h) $-> ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod f h $o cat_pr2 (cat_binprod b (cat_binprod a c)) $o cat_binprod_twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod f h $o ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
cat_pr2 (cat_binprod b (cat_binprod a c)) $o cat_binprod_twist a b c $-> ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod f h $o fmap01 cat_binprod a (cat_pr2 (cat_binprod b c))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

?Goal0 $-> fmap01 cat_binprod a' (cat_pr2 (cat_binprod b' c')) $o fmap11 cat_binprod f (fmap11 cat_binprod g h)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
?Goal0 $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
?Goal $== fmap11 cat_binprod f h $o fmap01 cat_binprod a (cat_pr2 (cat_binprod b c))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap11 cat_binprod (fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a', b0)) (cat_pr2 (cat_binprod b' c'))) true $o f) (fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a', b0)) (cat_pr2 (cat_binprod b' c'))) false $o fmap11 cat_binprod g h) $== fmap11 cat_binprod (f $o fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a, b0)) (cat_pr2 (cat_binprod b c))) true) (h $o fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a, b0)) (cat_pr2 (cat_binprod b c))) false)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a', b0)) (cat_pr2 (cat_binprod b' c'))) true $o f $== f $o fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a, b0)) (cat_pr2 (cat_binprod b c))) true
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'
fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a', b0)) (cat_pr2 (cat_binprod b' c'))) false $o fmap11 cat_binprod g h $== h $o fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a, b0)) (cat_pr2 (cat_binprod b c))) false
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
a, a', b, b', c, c': A
f: a $-> a'
g: b $-> b'
h: c $-> c'

fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a', b0)) (cat_pr2 (cat_binprod b' c'))) false $o fmap11 cat_binprod g h $== h $o fmap (uncurry (Bool_rec A)) (fmap (fun b0 : A => (a, b0)) (cat_pr2 (cat_binprod b c))) false
napply cat_binprod_beta_pr2. Defined. Local Existing Instance symmetricbraiding_binprod.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

Associator cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

Associator cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

SymmetricBraiding cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
forall a b c : A, cat_binprod a (cat_binprod b c) $-> cat_binprod b (cat_binprod a c)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
forall a b c : A, ?twist a b c $o ?twist b a c $== Id (cat_binprod b (cat_binprod a c))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
forall (a a' b b' c c' : A) (f : a $-> a') (g : b $-> b') (h : c $-> c'), ?twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod g (fmap11 cat_binprod f h) $o ?twist a b c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

SymmetricBraiding cat_binprod
exact _.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

forall a b c : A, cat_binprod a (cat_binprod b c) $-> cat_binprod b (cat_binprod a c)
exact cat_binprod_twist.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

forall a b c : A, cat_binprod_twist a b c $o cat_binprod_twist b a c $== Id (cat_binprod b (cat_binprod a c))
exact cat_binprod_twist_cat_binprod_twist.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A

forall (a a' b b' c c' : A) (f : a $-> a') (g : b $-> b') (h : c $-> c'), cat_binprod_twist a' b' c' $o fmap11 cat_binprod f (fmap11 cat_binprod g h) $== fmap11 cat_binprod g (fmap11 cat_binprod f h) $o cat_binprod_twist a b c
intros ? ? ? ? ? ?; exact cat_binprod_twist_nat. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o associator_cat_binprod x y z $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o associator_cat_binprod x y z $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o (symmetricbraiding_binprod z (cat_binprod x y) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod (cat_binprod x y) z) $o symmetricbraiding_binprod z (cat_binprod x y) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_pr1 (cat_prod (Bool_rec A x y)) $o (?Goal $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x y)) $o (cat_pr2 (cat_binprod (fst (z, cat_binprod x y)) (snd (z, cat_binprod x y))) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A x y)) $o cat_pr2 (cat_binprod z (cat_binprod x y)) $o cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z) $== cat_pr1 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod x (cat_binprod z y)) $o fmap01 cat_binprod x (symmetricbraiding_binprod y z) $== cat_pr1 (cat_binprod x (cat_binprod y z))
napply cat_pr1_fmap01_binprod. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o associator_cat_binprod x y z $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o associator_cat_binprod x y z $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr1 (cat_binprod (cat_binprod x y) z) $o (symmetricbraiding_binprod z (cat_binprod x y) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod (cat_binprod x y) z) $o symmetricbraiding_binprod z (cat_binprod x y) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A
cat_pr2 (cat_prod (Bool_rec A x y)) $o (?Goal $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x y)) $o (cat_pr2 (cat_binprod (fst (z, cat_binprod x y)) (snd (z, cat_binprod x y))) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A x y)) $o cat_pr2 (cat_binprod z (cat_binprod x y)) $o cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z) $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A z y)) $o cat_pr2 (cat_binprod x (cat_binprod z y)) $o fmap01 cat_binprod x (symmetricbraiding_binprod y z) $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_prod (Bool_rec A z y)) $o (symmetricbraiding_binprod y z $o cat_pr2 (cat_binprod x (cat_binprod y z))) $== cat_pr1 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
exact (cat_assoc_opp _ _ _ $@ (cat_binprod_beta_pr2 _ _ _ $@R _)). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_binprod (cat_binprod x y) z) $o associator_cat_binprod x y z $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_binprod (cat_binprod x y) z) $o associator_cat_binprod x y z $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr2 (cat_binprod (cat_binprod x y) z) $o (symmetricbraiding_binprod z (cat_binprod x y) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z))) $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_binprod z (cat_binprod x y)) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z)) $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A z y)) $o cat_pr2 (cat_binprod x (cat_binprod z y)) $o fmap01 cat_binprod x (symmetricbraiding_binprod y z) $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
x, y, z: A

cat_pr1 (cat_prod (Bool_rec A z y)) $o (symmetricbraiding_binprod y z $o cat_pr2 (cat_binprod x (cat_binprod y z))) $== cat_pr2 (cat_prod (Bool_rec A y z)) $o cat_pr2 (cat_binprod x (cat_binprod y z))
exact (cat_assoc_opp _ _ _ $@ (cat_binprod_beta_pr1 _ _ _ $@R _)). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

associator_cat_binprod x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

associator_cat_binprod x y z $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

symmetricbraiding_binprod z (cat_binprod x y) $o (cat_binprod_twist x z y $o fmap01 cat_binprod x (symmetricbraiding_binprod y z)) $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

fmap01 cat_binprod x (symmetricbraiding_binprod y z) $o cat_binprod_corec (cat_binprod x (cat_binprod y z)) f (cat_binprod_corec (cat_binprod y z) g h) $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
?Goal0 $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
symmetricbraiding_binprod z (cat_binprod x y) $o cat_binprod_twist x z y $o ?Goal $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_binprod_corec (cat_binprod x (cat_binprod z y)) f (symmetricbraiding_binprod y z $o cat_binprod_corec (cat_binprod y z) g h) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
symmetricbraiding_binprod z (cat_binprod x y) $o cat_binprod_twist x z y $o ?Goal $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

symmetricbraiding_binprod y z $o cat_binprod_corec (cat_binprod y z) g h $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
symmetricbraiding_binprod z (cat_binprod x y) $o cat_binprod_twist x z y $o cat_binprod_corec (cat_binprod x (cat_binprod z y)) f ?Goal0 $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

symmetricbraiding_binprod z (cat_binprod x y) $o cat_binprod_twist x z y $o cat_binprod_corec (cat_binprod x (cat_binprod z y)) f (cat_binprod_corec (cat_binprod z y) h g) $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

cat_binprod_twist x z y $o cat_binprod_corec (cat_binprod x (cat_binprod z y)) f (cat_binprod_corec (cat_binprod z y) h g) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z
symmetricbraiding_binprod z (cat_binprod x y) $o ?Goal $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
w, x, y, z: A
f: w $-> x
g: w $-> y
h: w $-> z

symmetricbraiding_binprod z (cat_binprod x y) $o cat_binprod_corec (cat_binprod z (cat_binprod x y)) h (cat_binprod_corec (cat_binprod x y) f g) $== cat_binprod_corec (cat_binprod (cat_binprod x y) z) (cat_binprod_corec (cat_binprod x y) f g) h
napply cat_binprod_swap_corec. Defined. Context (unit : A) `{!IsTerminal unit}.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

RightUnitor cat_binprod unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

RightUnitor cat_binprod unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

forall a : A, flip cat_binprod unit a $<~> idmap a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
Is1Natural (flip cat_binprod unit) idmap (fun a : A => ?e a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

forall a : A, flip cat_binprod unit a $<~> idmap a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_binprod a unit $<~> a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_binprod a unit $-> a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A
a $-> cat_binprod a unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A
?f $o ?g $== Id a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A
?g $o ?f $== Id (cat_binprod a unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_binprod a unit $-> a
exact (cat_pr1 _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

a $-> cat_binprod a unit
exact (cat_binprod_corec _ (Id _) (mor_terminal _ _)).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_pr1 (cat_binprod a unit) $o cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $== Id a
exact (cat_binprod_beta_pr1 _ _ _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $o cat_pr1 (cat_binprod a unit) $== Id (cat_binprod a unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_pr1 (cat_binprod a unit) $o (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $o cat_pr1 (cat_binprod a unit)) $== cat_pr1 (cat_binprod a unit) $o Id (cat_binprod a unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A
cat_pr2 (cat_binprod a unit) $o (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $o cat_pr1 (cat_binprod a unit)) $== cat_pr2 (cat_binprod a unit) $o Id (cat_binprod a unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_pr1 (cat_binprod a unit) $o (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $o cat_pr1 (cat_binprod a unit)) $== cat_pr1 (cat_binprod a unit) $o Id (cat_binprod a unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

Id a $o cat_pr1 (cat_binprod a unit) $== cat_pr1 (cat_binprod a unit) $o Id (cat_binprod a unit)
exact (cat_idl _ $@ (cat_idr _)^$).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

cat_pr2 (cat_binprod a unit) $o (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $o cat_pr1 (cat_binprod a unit)) $== cat_pr2 (cat_binprod a unit) $o Id (cat_binprod a unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a: A

mor_terminal a unit $o cat_pr1 (cat_binprod a unit) $== cat_pr2 (cat_binprod a unit) $o Id (cat_binprod a unit)
exact ((mor_terminal_unique _ _ _)^$ $@ mor_terminal_unique _ _ _).
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

Is1Natural (flip cat_binprod unit) idmap (fun a : A => (fun a0 : A => cate_adjointify (cat_pr1 (cat_binprod a0 unit)) (cat_binprod_corec (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit)) (cat_binprod_beta_pr1 (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit)) (cat_binprod_eta_pr (cat_binprod a0 unit) (cat_binprod_corec (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit) $o cat_pr1 (cat_binprod a0 unit)) (Id (cat_binprod a0 unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod a0 unit)) (cat_binprod_corec (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit)) (cat_pr1 (cat_binprod a0 unit)) $@ (cat_binprod_beta_pr1 (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit) $@R cat_pr1 (cat_binprod a0 unit))) $@ (cat_idl (cat_pr1 (cat_binprod a0 unit)) $@ (cat_idr (cat_pr1 (cat_binprod a0 unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod a0 unit)) (cat_binprod_corec (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit)) (cat_pr2 (cat_binprod a0 unit)) $@ (cat_binprod_beta_pr2 (cat_binprod a0 unit) (Id a0) (mor_terminal a0 unit) $@R cat_pr1 (cat_binprod a0 unit))) $@ ((mor_terminal_unique (cat_binprod a0 unit) unit (mor_terminal a0 unit $o cat_pr1 (cat_binprod a0 unit)))^$ $@ mor_terminal_unique (cat_binprod a0 unit) unit (cat_pr2 (cat_binprod a0 unit) $o Id (cat_binprod a0 unit))))) : flip cat_binprod unit a0 $<~> idmap a0) a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

forall (a a' : A) (f : a $-> a'), (fun a0 : A => cate_fun ((fun a1 : A => cate_adjointify (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_eta_pr (cat_binprod a1 unit) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $o cat_pr1 (cat_binprod a1 unit)) (Id (cat_binprod a1 unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr1 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ (cat_idl (cat_pr1 (cat_binprod a1 unit)) $@ (cat_idr (cat_pr1 (cat_binprod a1 unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr2 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr2 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ ((mor_terminal_unique (cat_binprod a1 unit) unit (mor_terminal a1 unit $o cat_pr1 (cat_binprod a1 unit)))^$ $@ mor_terminal_unique (cat_binprod a1 unit) unit (cat_pr2 (cat_binprod a1 unit) $o Id (cat_binprod a1 unit))))) : flip cat_binprod unit a1 $<~> idmap a1) a0)) a' $o fmap (flip cat_binprod unit) f $== fmap idmap f $o (fun a0 : A => cate_fun ((fun a1 : A => cate_adjointify (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_eta_pr (cat_binprod a1 unit) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $o cat_pr1 (cat_binprod a1 unit)) (Id (cat_binprod a1 unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr1 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ (cat_idl (cat_pr1 (cat_binprod a1 unit)) $@ (cat_idr (cat_pr1 (cat_binprod a1 unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr2 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr2 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ ((mor_terminal_unique (cat_binprod a1 unit) unit (mor_terminal a1 unit $o cat_pr1 (cat_binprod a1 unit)))^$ $@ mor_terminal_unique (cat_binprod a1 unit) unit (cat_pr2 (cat_binprod a1 unit) $o Id (cat_binprod a1 unit))))) : flip cat_binprod unit a1 $<~> idmap a1) a0)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
f: a $-> b

(fun a0 : A => cate_fun ((fun a1 : A => cate_adjointify (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_eta_pr (cat_binprod a1 unit) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $o cat_pr1 (cat_binprod a1 unit)) (Id (cat_binprod a1 unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr1 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ (cat_idl (cat_pr1 (cat_binprod a1 unit)) $@ (cat_idr (cat_pr1 (cat_binprod a1 unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr2 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr2 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ ((mor_terminal_unique (cat_binprod a1 unit) unit (mor_terminal a1 unit $o cat_pr1 (cat_binprod a1 unit)))^$ $@ mor_terminal_unique (cat_binprod a1 unit) unit (cat_pr2 (cat_binprod a1 unit) $o Id (cat_binprod a1 unit))))) : flip cat_binprod unit a1 $<~> idmap a1) a0)) b $o fmap (flip cat_binprod unit) f $== fmap idmap f $o (fun a0 : A => cate_fun ((fun a1 : A => cate_adjointify (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_binprod_eta_pr (cat_binprod a1 unit) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $o cat_pr1 (cat_binprod a1 unit)) (Id (cat_binprod a1 unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr1 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr1 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ (cat_idl (cat_pr1 (cat_binprod a1 unit)) $@ (cat_idr (cat_pr1 (cat_binprod a1 unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod a1 unit)) (cat_binprod_corec (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit)) (cat_pr2 (cat_binprod a1 unit)) $@ (cat_binprod_beta_pr2 (cat_binprod a1 unit) (Id a1) (mor_terminal a1 unit) $@R cat_pr1 (cat_binprod a1 unit))) $@ ((mor_terminal_unique (cat_binprod a1 unit) unit (mor_terminal a1 unit $o cat_pr1 (cat_binprod a1 unit)))^$ $@ mor_terminal_unique (cat_binprod a1 unit) unit (cat_pr2 (cat_binprod a1 unit) $o Id (cat_binprod a1 unit))))) : flip cat_binprod unit a1 $<~> idmap a1) a0)) a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
f: a $-> b

cate_adjointify (cat_pr1 (cat_binprod b unit)) (cat_binprod_corec (cat_binprod b unit) (Id b) (mor_terminal b unit)) (cat_binprod_beta_pr1 (cat_binprod b unit) (Id b) (mor_terminal b unit)) (cat_binprod_eta_pr (cat_binprod b unit) (cat_binprod_corec (cat_binprod b unit) (Id b) (mor_terminal b unit) $o cat_pr1 (cat_binprod b unit)) (Id (cat_binprod b unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod b unit)) (cat_binprod_corec (cat_binprod b unit) (Id b) (mor_terminal b unit)) (cat_pr1 (cat_binprod b unit)) $@ (cat_binprod_beta_pr1 (cat_binprod b unit) (Id b) (mor_terminal b unit) $@R cat_pr1 (cat_binprod b unit))) $@ (cat_idl (cat_pr1 (cat_binprod b unit)) $@ (cat_idr (cat_pr1 (cat_binprod b unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod b unit)) (cat_binprod_corec (cat_binprod b unit) (Id b) (mor_terminal b unit)) (cat_pr2 (cat_binprod b unit)) $@ (cat_binprod_beta_pr2 (cat_binprod b unit) (Id b) (mor_terminal b unit) $@R cat_pr1 (cat_binprod b unit))) $@ ((mor_terminal_unique (cat_binprod b unit) unit (mor_terminal b unit $o cat_pr1 (cat_binprod b unit)))^$ $@ mor_terminal_unique (cat_binprod b unit) unit (cat_pr2 (cat_binprod b unit) $o Id (cat_binprod b unit))))) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
f: a $-> b
?Goal $o fmap (flip cat_binprod unit) f $== fmap idmap f $o ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
f: a $-> b
cate_adjointify (cat_pr1 (cat_binprod a unit)) (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit)) (cat_binprod_beta_pr1 (cat_binprod a unit) (Id a) (mor_terminal a unit)) (cat_binprod_eta_pr (cat_binprod a unit) (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit) $o cat_pr1 (cat_binprod a unit)) (Id (cat_binprod a unit)) ((cat_assoc_opp (cat_pr1 (cat_binprod a unit)) (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit)) (cat_pr1 (cat_binprod a unit)) $@ (cat_binprod_beta_pr1 (cat_binprod a unit) (Id a) (mor_terminal a unit) $@R cat_pr1 (cat_binprod a unit))) $@ (cat_idl (cat_pr1 (cat_binprod a unit)) $@ (cat_idr (cat_pr1 (cat_binprod a unit)))^$)) ((cat_assoc_opp (cat_pr1 (cat_binprod a unit)) (cat_binprod_corec (cat_binprod a unit) (Id a) (mor_terminal a unit)) (cat_pr2 (cat_binprod a unit)) $@ (cat_binprod_beta_pr2 (cat_binprod a unit) (Id a) (mor_terminal a unit) $@R cat_pr1 (cat_binprod a unit))) $@ ((mor_terminal_unique (cat_binprod a unit) unit (mor_terminal a unit $o cat_pr1 (cat_binprod a unit)))^$ $@ mor_terminal_unique (cat_binprod a unit) unit (cat_pr2 (cat_binprod a unit) $o Id (cat_binprod a unit))))) $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
f: a $-> b

cat_pr1 (cat_binprod b unit) $o fmap (flip cat_binprod unit) f $== fmap idmap f $o cat_pr1 (cat_binprod a unit)
napply cat_binprod_beta_pr1. Defined. Local Existing Instance left_unitor_twist.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

TriangleIdentity cat_binprod unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

TriangleIdentity cat_binprod unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

forall a b : A, fmap01 cat_binprod a (right_unitor_binprod b) $== symmetricbraiding_binprod b a $o fmap01 cat_binprod b (right_unitor_binprod a) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

fmap01 cat_binprod a (right_unitor_binprod b) $== symmetricbraiding_binprod b a $o fmap01 cat_binprod b (right_unitor_binprod a) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

right_unitor_binprod b $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
fmap01 cat_binprod a ?Goal $== symmetricbraiding_binprod b a $o fmap01 cat_binprod b ?Goal2 $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
right_unitor_binprod a $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

fmap01 cat_binprod a (cat_pr1 (cat_binprod b unit)) $== symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod a b) $o fmap01 cat_binprod a (cat_pr1 (cat_binprod b unit)) $== cat_pr1 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
cat_pr2 (cat_binprod a b) $o fmap01 cat_binprod a (cat_pr1 (cat_binprod b unit)) $== cat_pr2 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod a b) $o fmap01 cat_binprod a (cat_pr1 (cat_binprod b unit)) $== cat_pr1 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod a (flip cat_binprod unit b)) $== cat_pr1 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit))) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod a (flip cat_binprod unit b)) $== ?Goal1 $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
cat_pr1 (cat_binprod a b) $o symmetricbraiding_binprod b a $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod a (flip cat_binprod unit b)) $== cat_pr2 (cat_binprod (fst (b, a)) (snd (b, a))) $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr2 (cat_binprod b a) $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
?Goal0 $o cat_binprod_twist a b unit $== cat_pr1 (cat_binprod a (flip cat_binprod unit b))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod a unit) $o cat_pr2 (cat_binprod b (flip cat_binprod unit a)) $o cat_binprod_twist a b unit $== cat_pr1 (cat_binprod a (flip cat_binprod unit b))
napply cat_binprod_pr1_pr2_twist.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr2 (cat_binprod a b) $o fmap01 cat_binprod a (cat_pr1 (cat_binprod b unit)) $== cat_pr2 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod b unit) $o cat_pr2 (cat_binprod a (flip cat_binprod unit b)) $== cat_pr2 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit))) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod b unit) $o cat_pr2 (cat_binprod a (flip cat_binprod unit b)) $== cat_pr1 (cat_binprod b a) $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $o cat_binprod_twist a b unit
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod b a) $o fmap01 cat_binprod b (cat_pr1 (cat_binprod a unit)) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A
?Goal $o cat_binprod_twist a b unit $== cat_pr1 (cat_binprod b unit) $o cat_pr2 (cat_binprod a (flip cat_binprod unit b))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b: A

cat_pr1 (cat_binprod b (flip cat_binprod unit a)) $o cat_binprod_twist a b unit $== cat_pr1 (cat_binprod b unit) $o cat_pr2 (cat_binprod a (flip cat_binprod unit b))
napply cat_binprod_beta_pr1. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

PentagonIdentity cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

PentagonIdentity cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d) $== fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o associator_cat_binprod (cat_binprod a b) c d $== ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
?Goal1 $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (?Goal2 $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o fmap10 cat_binprod (associator_cat_binprod a b c) d $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr1 (cat_binprod a b) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_binprod a b) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr1 (cat_binprod a b) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== ?Goal4
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
?Goal4 $== ?Goal7 $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o associator_cat_binprod a b c $-> ?Goal7
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a (cat_binprod b (cat_binprod c d))) $== cat_pr1 (cat_binprod a (cat_binprod b c)) $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a (cat_binprod b (cat_binprod c d))) $== cat_pr1 (cat_binprod a (cat_binprod b c)) $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

?Goal3 $o fmap01 cat_binprod a (associator_cat_binprod b c d) $-> cat_pr1 (cat_binprod a (cat_binprod b (cat_binprod c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr1 (cat_binprod a (cat_binprod b c)) $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $-> ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_binprod a (cat_binprod (cat_binprod b c) d)) $o fmap01 cat_binprod a (associator_cat_binprod b c d) $-> cat_pr1 (cat_binprod a (cat_binprod b (cat_binprod c d)))
napply cat_pr1_fmap01_binprod.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_binprod a b) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
?Goal1 $== ?Goal4 $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o associator_cat_binprod a b c $-> ?Goal4
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d))) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d))) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d))) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o ?Goal4 $o ?Goal3 $o fmap01 cat_binprod a (associator_cat_binprod b c d)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod a (cat_binprod b c)) $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $-> ?Goal4 $o ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d))) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o cat_pr2 (cat_binprod a (cat_binprod (cat_binprod b c) d)) $o fmap01 cat_binprod a (associator_cat_binprod b c d)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o ?Goal2 $-> cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod a (cat_binprod (cat_binprod b c) d)) $o fmap01 cat_binprod a (associator_cat_binprod b c d) $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o (associator_cat_binprod b c d $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $-> cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o associator_cat_binprod b c d $== cat_pr1 (cat_prod (Bool_rec A b (cat_binprod c d)))
napply cat_pr1_pr1_associator_binprod.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o associator_cat_binprod (cat_binprod a b) c d $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
?Goal0 $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o cat_pr2 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (?Goal1 $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr1 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o fmap10 cat_binprod (associator_cat_binprod a b c) d $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o (associator_cat_binprod a b c $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== ?Goal1 $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_prod (Bool_rec A (cat_binprod a b) c)) $o associator_cat_binprod a b c $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o (cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o (?Goal1 $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod a (cat_binprod b c)) $o cat_pr1 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o cat_pr2 (cat_binprod a (cat_binprod (cat_binprod b c) d)) $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o ?Goal1)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod a (cat_binprod (cat_binprod b c) d)) $o fmap01 cat_binprod a (associator_cat_binprod b c d) $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr1 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o (cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o (associator_cat_binprod b c d $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o associator_cat_binprod b c d $-> cat_pr1 (cat_prod (Bool_rec A c d)) $o cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d)))
napply cat_pr2_pr1_associator_binprod.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (associator_cat_binprod (cat_binprod a b) c d $o associator_cat_binprod a b (cat_binprod c d)) $== cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A c d)) $o cat_pr2 (cat_binprod (cat_binprod a b) (cat_binprod c d)) $o associator_cat_binprod a b (cat_binprod c d) $== cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o (fmap10 cat_binprod (associator_cat_binprod a b c) d $o associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== ?Goal0 $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod (cat_binprod (cat_binprod a b) c) d) $o fmap10 cat_binprod (associator_cat_binprod a b c) d $-> ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o (associator_cat_binprod a (cat_binprod b c) d $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== ?Goal2 $o (?Goal1 $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A
cat_pr2 (cat_binprod (cat_binprod a (cat_binprod b c)) d) $o associator_cat_binprod a (cat_binprod b c) d $-> ?Goal2 $o ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A c d)) $o (cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d))) $o cat_pr2 (cat_binprod a (cat_binprod b (cat_binprod c d)))) $== cat_pr2 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o (cat_pr2 (cat_binprod a (cat_binprod (cat_binprod b c) d)) $o fmap01 cat_binprod a (associator_cat_binprod b c d))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c, d: A

cat_pr2 (cat_prod (Bool_rec A (cat_binprod b c) d)) $o associator_cat_binprod b c d $-> cat_pr2 (cat_prod (Bool_rec A c d)) $o cat_pr2 (cat_prod (Bool_rec A b (cat_binprod c d)))
napply cat_pr2_associator_binprod. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

HexagonIdentity cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit

HexagonIdentity cat_binprod
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== associator_cat_binprod a b c $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)) $== associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod (cat_binprod a b) c) $o (fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod (cat_binprod a b) c) $o (fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr2 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod (cat_binprod a b) c) $o (fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

symmetricbraiding_binprod b a $o cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)) $== cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)))) $== cat_pr1 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)))) $== cat_pr2 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)))) $== cat_pr1 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod a b) $o symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod a b) $o symmetricbraiding_binprod b a $== ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
?Goal3 $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== ?Goal6 $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $-> ?Goal6
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (fst (b, a)) (snd (b, a))) $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== ?Goal2 $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr1 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (fst (b, a)) (snd (b, a))) $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr1 (cat_binprod a (cat_binprod b c)) $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod b a) $o cat_pr1 (cat_binprod (cat_binprod b a) c) $o associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr1 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod b a) $o cat_pr1 (cat_binprod (cat_binprod b a) c) $o associator_cat_binprod b a c $== ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
?Goal1 $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== ?Goal4 $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr1 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $-> ?Goal4
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_prod (Bool_rec A a c)) $o cat_pr2 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== ?Goal2 $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr1 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_prod (Bool_rec A a c)) $o cat_pr2 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr2 (cat_binprod (fst (cat_binprod b c, a)) (snd (cat_binprod b c, a))) $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== ?Goal4 $o ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr1 (cat_prod (Bool_rec A a c)) $o ?Goal4 $== ?Goal5
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod (cat_binprod b c) a) $o associator_cat_binprod b c a $-> ?Goal5 $o ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_prod (Bool_rec A a c)) $o symmetricbraiding_binprod c a $== ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod (cat_binprod b c) a) $o associator_cat_binprod b c a $-> ?Goal1 $o cat_pr2 (cat_binprod b (cat_binprod c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_prod (Bool_rec A a c)) $o symmetricbraiding_binprod c a $== cat_pr2 (cat_prod (Bool_rec A c a))
napply cat_binprod_beta_pr1.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod a b) $o (symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)))) $== cat_pr2 (cat_binprod a b) $o (cat_pr1 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod a b) $o symmetricbraiding_binprod b a $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod a b) $o symmetricbraiding_binprod b a $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
?Goal0 $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== ?Goal3 $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $-> ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod (fst (b, a)) (snd (b, a))) $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== ?Goal1 $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod a b) $o cat_pr1 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod (fst (b, a)) (snd (b, a))) $o (cat_pr1 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod b a) $o cat_pr1 (cat_binprod (cat_binprod b a) c) $o associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod b a) $o cat_pr1 (cat_binprod (cat_binprod b a) c) $o associator_cat_binprod b a c $== ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
?Goal0 $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o ?Goal3 $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $-> ?Goal3
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o ?Goal1 $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $-> ?Goal1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_binprod (fst (cat_binprod b c, a)) (snd (cat_binprod b c, a))) $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr1 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_binprod (cat_binprod b c) a) $o associator_cat_binprod b c a $-> cat_pr1 (cat_binprod b (cat_binprod c a))
napply cat_pr1_pr1_associator_binprod.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (cat_binprod a b) c) $o (fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a))) $== cat_pr2 (cat_binprod (cat_binprod a b) c) $o (associator_cat_binprod a b c $o (symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (cat_binprod a b) c) $o fmap10 cat_binprod (symmetricbraiding_binprod b a) c $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)) $== cat_pr2 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (cat_binprod a b) c) $o fmap10 cat_binprod (symmetricbraiding_binprod b a) c $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
?Goal $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)) $== ?Goal2 $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)) $== ?Goal0 $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod (cat_binprod a b) c) $o associator_cat_binprod a b c $-> ?Goal0
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod (cat_binprod b a) c) $o (associator_cat_binprod b a c $o fmap01 cat_binprod b (symmetricbraiding_binprod c a)) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_prod (Bool_rec A a c)) $o cat_pr2 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_binprod b (cat_binprod a c)) $o fmap01 cat_binprod b (symmetricbraiding_binprod c a) $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_prod (Bool_rec A a c)) $o ?Goal $== cat_pr2 (cat_prod (Bool_rec A b c)) $o (cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a) $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_prod (Bool_rec A a c)) $o (symmetricbraiding_binprod c a $o cat_pr2 (cat_binprod b (cat_binprod c a))) $== cat_pr2 (cat_prod (Bool_rec A b c)) $o (cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a) $o associator_cat_binprod b c a
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_prod (Bool_rec A a c)) $o symmetricbraiding_binprod c a $== ?Goal
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_prod (Bool_rec A b c)) $o ?Goal2 $o associator_cat_binprod b c a $-> ?Goal $o cat_pr2 (cat_binprod b (cat_binprod c a))
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A
cat_pr2 (cat_binprod a (cat_binprod b c)) $o symmetricbraiding_binprod (cat_binprod b c) a $-> ?Goal2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: HasEquivs A
hbp: HasBinaryProducts A
unit: A
IsTerminal0: IsTerminal unit
a, b, c: A

cat_pr2 (cat_prod (Bool_rec A b c)) $o cat_pr1 (cat_binprod (fst (cat_binprod b c, a)) (snd (cat_binprod b c, a))) $o associator_cat_binprod b c a $-> cat_pr1 (cat_binprod (fst (c, a)) (snd (c, a))) $o cat_pr2 (cat_binprod b (cat_binprod c a))
napply cat_pr2_pr1_associator_binprod. Defined. Local Instance ismonoidal_cat_binprod : IsMonoidal A cat_binprod unit := {}. (** Many of the above instances are declared to be local because they follow from this one. *) #[export] Instance issymmetricmonoidal_cat_binprod : IsSymmetricMonoidal A cat_binprod unit := {}. End Associativity. (** ** Examples *) (** *** Products in Type *) (** Since we use the Yoneda lemma in this file, we therefore depend on WildCat.Universe which means these instances have to live here. *) (** Assuming [Funext], [Type] has all products. *)
H: Funext

HasAllProducts Type
H: Funext

HasAllProducts Type
H: Funext
I: Type
x: I -> Type

Product x
H: Funext
I: Type
x: I -> Type

Type
H: Funext
I: Type
x: I -> Type
forall i : I, ?cat_prod $-> x i
H: Funext
I: Type
x: I -> Type
forall z : Type, (forall i : I, z $-> x i) -> z $-> ?cat_prod
H: Funext
I: Type
x: I -> Type
forall (z : Type) (f : forall i : I, z $-> x i) (i : I), ?cat_pr i $o ?cat_prod_corec z f $== f i
H: Funext
I: Type
x: I -> Type
forall (z : Type) (f g : z $-> ?cat_prod), (forall i : I, ?cat_pr i $o f $== ?cat_pr i $o g) -> f $== g
H: Funext
I: Type
x: I -> Type

Type
exact (forall (i : I), x i).
H: Funext
I: Type
x: I -> Type

forall i : I, (forall i0 : I, x i0) $-> x i
H: Funext
I: Type
x: I -> Type
i: I
f: forall i0 : I, x i0

x i
exact (f i).
H: Funext
I: Type
x: I -> Type

forall z : Type, (forall i : I, z $-> x i) -> z $-> (forall i : I, x i)
H: Funext
I: Type
x: I -> Type
Z: Type
f: forall i0 : I, Z $-> x i0
a: Z
i: I

x i
exact (f i a).
H: Funext
I: Type
x: I -> Type

forall (z : Type) (f : forall i : I, z $-> x i) (i : I), (fun i0 : I => (fun f0 : forall i1 : I, x i1 => f0 i0) : (forall i1 : I, x i1) $-> x i0) i $o (fun (Z : Type) (f0 : forall i0 : I, Z $-> x i0) => (fun (a : Z) (i0 : I) => f0 i0 a) : Z $-> (forall i0 : I, x i0)) z f $== f i
reflexivity.
H: Funext
I: Type
x: I -> Type

forall (z : Type) (f g : z $-> (forall i : I, x i)), (forall i : I, (fun i0 : I => (fun f0 : forall i1 : I, x i1 => f0 i0) : (forall i1 : I, x i1) $-> x i0) i $o f $== (fun i0 : I => (fun f0 : forall i1 : I, x i1 => f0 i0) : (forall i1 : I, x i1) $-> x i0) i $o g) -> f $== g
H: Funext
I: Type
x: I -> Type
Z: Type
f, g: Z $-> (forall i : I, x i)
p: forall i : I, (fun i0 : I => (fun f0 : forall i1 : I, x i1 => f0 i0) : (forall i1 : I, x i1) $-> x i0) i $o f $== (fun i0 : I => (fun f0 : forall i1 : I, x i1 => f0 i0) : (forall i1 : I, x i1) $-> x i0) i $o g
a: Z

f a = g a
exact (path_forall _ _ (fun i => p i a)). Defined. (** It follows that [Type] has binary products, but we prove this separately to avoid [Funext]. *)

HasBinaryProducts Type

HasBinaryProducts Type
X, Y: Type

BinaryProduct X Y
X, Y: Type

Type
X, Y: Type
?cat_binprod $-> X
X, Y: Type
?cat_binprod $-> Y
X, Y: Type
forall z : Type, (z $-> X) -> (z $-> Y) -> z $-> ?cat_binprod
X, Y: Type
forall (z : Type) (f : z $-> X) (g : z $-> Y), ?cat_pr1 $o ?cat_binprod_corec z f g $== f
X, Y: Type
forall (z : Type) (f : z $-> X) (g : z $-> Y), ?cat_pr2 $o ?cat_binprod_corec z f g $== g
X, Y: Type
forall (z : Type) (f g : z $-> ?cat_binprod), ?cat_pr1 $o f $== ?cat_pr1 $o g -> ?cat_pr2 $o f $== ?cat_pr2 $o g -> f $== g
X, Y: Type

Type
exact (X * Y).
X, Y: Type

X * Y $-> X
exact fst.
X, Y: Type

X * Y $-> Y
exact snd.
X, Y: Type

forall z : Type, (z $-> X) -> (z $-> Y) -> z $-> X * Y
X, Y, Z: Type
f: Z $-> X
g: Z $-> Y
z: Z

X * Y
exact (f z, g z).
X, Y: Type

forall (z : Type) (f : z $-> X) (g : z $-> Y), fst $o (fun (Z : Type) (f0 : Z $-> X) (g0 : Z $-> Y) => (fun z0 : Z => (f0 z0, g0 z0)) : Z $-> X * Y) z f g $== f
reflexivity.
X, Y: Type

forall (z : Type) (f : z $-> X) (g : z $-> Y), snd $o (fun (Z : Type) (f0 : Z $-> X) (g0 : Z $-> Y) => (fun z0 : Z => (f0 z0, g0 z0)) : Z $-> X * Y) z f g $== g
reflexivity.
X, Y: Type

forall (z : Type) (f g : z $-> X * Y), fst $o f $== fst $o g -> snd $o f $== snd $o g -> f $== g
X, Y, Z: Type
f, g: Z $-> X * Y
p: fst $o f $== fst $o g
q: snd $o f $== snd $o g
x: Z

f x = g x
X, Y, Z: Type
f, g: Z $-> X * Y
p: fst $o f $== fst $o g
q: snd $o f $== snd $o g
x: Z

fst (f x) = fst (g x)
X, Y, Z: Type
f, g: Z $-> X * Y
p: fst $o f $== fst $o g
q: snd $o f $== snd $o g
x: Z
snd (f x) = snd (g x)
X, Y, Z: Type
f, g: Z $-> X * Y
p: fst $o f $== fst $o g
q: snd $o f $== snd $o g
x: Z

fst (f x) = fst (g x)
exact (p x).
X, Y, Z: Type
f, g: Z $-> X * Y
p: fst $o f $== fst $o g
q: snd $o f $== snd $o g
x: Z

snd (f x) = snd (g x)
exact (q x). Defined. (** *** Products in ZeroGpd *) (** Since we use products in ZeroGpd to define general products, we must depend on ZeroGroupoid, which means that these instances have to live here. *) (** Note that this does not rely on [Funext], since the 1-cells in the product 0-groupoid are *defined* to be homotopies. *)

HasAllProducts ZeroGpd

HasAllProducts ZeroGpd
I: Type
x: I -> ZeroGpd

Product x
I: Type
x: I -> ZeroGpd

ZeroGpd
I: Type
x: I -> ZeroGpd
forall i : I, ?cat_prod $-> x i
I: Type
x: I -> ZeroGpd
forall z : ZeroGpd, (forall i : I, z $-> x i) -> z $-> ?cat_prod
I: Type
x: I -> ZeroGpd
forall (z : ZeroGpd) (f : forall i : I, z $-> x i) (i : I), ?cat_pr i $o ?cat_prod_corec z f $== f i
I: Type
x: I -> ZeroGpd
forall (z : ZeroGpd) (f g : z $-> ?cat_prod), (forall i : I, ?cat_pr i $o f $== ?cat_pr i $o g) -> f $== g
I: Type
x: I -> ZeroGpd

ZeroGpd
exact (prod_0gpd I x).
I: Type
x: I -> ZeroGpd

forall i : I, prod_0gpd I x $-> x i
exact prod_0gpd_pr.
I: Type
x: I -> ZeroGpd

forall z : ZeroGpd, (forall i : I, z $-> x i) -> z $-> prod_0gpd I x
I: Type
x: I -> ZeroGpd
G: ZeroGpd

(forall i : I, G $-> x i) -> G $-> prod_0gpd I x
apply equiv_prod_0gpd_corec.
I: Type
x: I -> ZeroGpd

forall (z : ZeroGpd) (f : forall i : I, z $-> x i) (i : I), prod_0gpd_pr i $o (fun G : ZeroGpd => let X := equiv_fun equiv_prod_0gpd_corec in X) z f $== f i
reflexivity.
I: Type
x: I -> ZeroGpd

forall (z : ZeroGpd) (f g : z $-> prod_0gpd I x), (forall i : I, prod_0gpd_pr i $o f $== prod_0gpd_pr i $o g) -> f $== g
I: Type
x: I -> ZeroGpd
G: ZeroGpd
f, g: G $-> prod_0gpd I x
p: forall i : I, prod_0gpd_pr i $o f $== prod_0gpd_pr i $o g

f $== g
I: Type
x: I -> ZeroGpd
G: ZeroGpd
f, g: G $-> prod_0gpd I x
p: forall i : I, prod_0gpd_pr i $o f $== prod_0gpd_pr i $o g
a: zerogpd_graph G

f a $-> g a
I: Type
x: I -> ZeroGpd
G: ZeroGpd
f, g: G $-> prod_0gpd I x
p: forall i0 : I, prod_0gpd_pr i0 $o f $== prod_0gpd_pr i0 $o g
a: zerogpd_graph G
i: I

f a i $-> g a i
exact (p i a). Defined. (** This follows from the previous result, but we prove it separately because using these custom binary products can make certain things easier, and can sometimes avoid the need to use [Funext]. *)

HasBinaryProducts ZeroGpd

HasBinaryProducts ZeroGpd
G, H: ZeroGpd

BinaryProduct G H
G, H: ZeroGpd

ZeroGpd
G, H: ZeroGpd
?cat_binprod $-> G
G, H: ZeroGpd
?cat_binprod $-> H
G, H: ZeroGpd
forall z : ZeroGpd, (z $-> G) -> (z $-> H) -> z $-> ?cat_binprod
G, H: ZeroGpd
forall (z : ZeroGpd) (f : z $-> G) (g : z $-> H), ?cat_pr1 $o ?cat_binprod_corec z f g $== f
G, H: ZeroGpd
forall (z : ZeroGpd) (f : z $-> G) (g : z $-> H), ?cat_pr2 $o ?cat_binprod_corec z f g $== g
G, H: ZeroGpd
forall (z : ZeroGpd) (f g : z $-> ?cat_binprod), ?cat_pr1 $o f $== ?cat_pr1 $o g -> ?cat_pr2 $o f $== ?cat_pr2 $o g -> f $== g
G, H: ZeroGpd

ZeroGpd
exact (binprod_0gpd G H).
G, H: ZeroGpd

binprod_0gpd G H $-> G
apply binprod_0gpd_pr1.
G, H: ZeroGpd

binprod_0gpd G H $-> H
apply binprod_0gpd_pr2.
G, H: ZeroGpd

forall z : ZeroGpd, (z $-> G) -> (z $-> H) -> z $-> binprod_0gpd G H
G, H, K: ZeroGpd
f: K $-> G
g: K $-> H

K $-> binprod_0gpd G H
exact (equiv_binprod_0gpd_corec G H K (f, g)).
G, H: ZeroGpd

forall (z : ZeroGpd) (f : z $-> G) (g : z $-> H), binprod_0gpd_pr1 G H $o (fun (K : ZeroGpd) (f0 : K $-> G) (g0 : K $-> H) => equiv_binprod_0gpd_corec G H K (f0, g0)) z f g $== f
reflexivity.
G, H: ZeroGpd

forall (z : ZeroGpd) (f : z $-> G) (g : z $-> H), binprod_0gpd_pr2 G H $o (fun (K : ZeroGpd) (f0 : K $-> G) (g0 : K $-> H) => equiv_binprod_0gpd_corec G H K (f0, g0)) z f g $== g
reflexivity.
G, H: ZeroGpd

forall (z : ZeroGpd) (f g : z $-> binprod_0gpd G H), binprod_0gpd_pr1 G H $o f $== binprod_0gpd_pr1 G H $o g -> binprod_0gpd_pr2 G H $o f $== binprod_0gpd_pr2 G H $o g -> f $== g
G, H, K: ZeroGpd
f, g: K $-> binprod_0gpd G H
p: binprod_0gpd_pr1 G H $o f $== binprod_0gpd_pr1 G H $o g
q: binprod_0gpd_pr2 G H $o f $== binprod_0gpd_pr2 G H $o g
k: zerogpd_graph K

f k $-> g k
exact (p k, q k). Defined.