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.
(** * Product Category *)Require Import Basics.Tactics.Require Import Category.Strict.Require Import Types.Prod.Set Implicit Arguments.Generalizable All Variables.LocalOpen Scope category_scope.LocalOpen Scope morphism_scope.(** ** Definition of [*] for categories *)Sectionprod.VariablesCD : PreCategory.
C, D: PreCategory
PreCategory
refine (@Build_PreCategory
(C * D)
(funsd => morphism C (fst s) (fst d)
* morphism D (snd s) (snd d))
(funx => (identity (fst x), identity (snd x)))
(funsdd'm2m1 => (fst m2 o fst m1, snd m2 o snd m1))
_
_
_
_);
abstract (
repeat (simpl || intros [] || intro);
try f_ap; auto with morphism
).Defined.Endprod.LocalInfix"*" := prod : category_scope.(** ** The product of strict categories is strict *)
C: PreCategory IsStrictCategory0: IsStrictCategory C D: PreCategory IsStrictCategory1: IsStrictCategory D
IsStrictCategory (C * D)
C: PreCategory IsStrictCategory0: IsStrictCategory C D: PreCategory IsStrictCategory1: IsStrictCategory D