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.
(** * Dependent Product Category *)
Require Import Category.Strict.
Require Import Basics.Trunc.

Set Implicit Arguments.
Generalizable All Variables.

Local Open Scope category_scope.
Local Open Scope morphism_scope.

(** ** Definition of [∀], or [∏], for categories *)
Section pi.
  Context `{Funext}.
  Variable A : Type.
  Variable P : A -> PreCategory.

  
H: Funext
A: Type
P: A -> PreCategory

PreCategory
refine (@Build_PreCategory (forall a : A, P a) (fun s d => forall a : A, morphism (P a) (s a) (d a)) (fun x => fun a => identity (x a)) (fun s d d' m2 m1 => fun a => m2 a o m1 a) _ _ _ _); abstract ( repeat (intro || apply path_forall); auto with morphism ). Defined. End pi. Local Notation "'forall' x .. y , P" := (forall x, .. (forall y, P) ..) : type_scope. Local Notation "'forall' x .. y , P" := (pi (fun x => .. (pi (fun y => P)) .. )) : category_scope. (** ** The product of strict categories is strict *)
H: Funext
A: Type
P: A -> PreCategory
H0: forall a : A, IsStrictCategory (P a)

IsStrictCategory (forall a : A, P a)
H: Funext
A: Type
P: A -> PreCategory
H0: forall a : A, IsStrictCategory (P a)

IsStrictCategory (forall a : A, P a)
typeclasses eauto. Qed. Local Set Warnings "-notation-overridden". Module Export CategoryPiNotations. Notation "'forall' x .. y , P" := (forall x, .. (forall y, P) ..)%type : type_scope. Notation "'forall' x .. y , P" := (pi (fun x => .. (pi (fun y => P)) .. )) : category_scope. End CategoryPiNotations.