Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
(** * Product Category *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Category.Strict. Require Import Types.Prod. Set Universe Polymorphism. Set Implicit Arguments. Generalizable All Variables. Set Asymmetric Patterns. Local Open Scope category_scope. Local Open Scope morphism_scope. (** ** Definition of [*] for categories *) Section prod. Variables C D : PreCategory.
C, D: PreCategory

PreCategory
refine (@Build_PreCategory (C * D)%type (fun s d => (morphism C (fst s) (fst d) * morphism D (snd s) (snd d))%type) (fun x => (identity (fst x), identity (snd x))) (fun s d d' m2 m1 => (fst m2 o fst m1, snd m2 o snd m1)) _ _ _ _); abstract ( repeat (simpl || intros [] || intro); try f_ap; auto with morphism ). Defined. End prod. Local Infix "*" := 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

IsStrictCategory (C * D)
typeclasses eauto. Qed. Module Export CategoryProdNotations. Infix "*" := prod : category_scope. End CategoryProdNotations.