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.
(** * The functor [แตแต : cat โ cat] *)Require Import Category.Core Functor.Core.Require Import Category.Dual Functor.Dual.Require Import Functor.Composition.Core Functor.Identity.Require Import Cat.Core Functor.Paths.Require Import Basics.Trunc Types.Sigma HoTT.Tactics Types.Forall.Set Implicit Arguments.Generalizable All Variables.LocalOpen Scope category_scope.Sectionopposite.Context `{Funext}.VariableP : PreCategory -> Type.Context `{forallC, IsHProp (P C)}.Context `{HF : forallCD, P C -> P D -> IsHSet (Functor C D)}.Letcat := (@sub_pre_cat _ P HF).Hypothesishas_op : forallC : cat, P C.1^op.Definitionopposite_functor : Functor cat cat
:= Build_Functor
cat cat
(funC => (C.1^op; has_op _))
(fun__F => F^op)%functor
(fun_____ => idpath)
(fun_ => idpath).Letopposite_functor_involutive_helper (x : cat)
: (x.1^op^op; has_op (_; has_op _)) = x
:= path_sigma_uncurried
P
(((x.1^op)^op)%category;
has_op ((x.1^op)%category;
has_op x))
x
(Category.Dual.opposite_involutive x.1;
path_ishprop _ _).LocalOpen Scope functor_scope.LocalArguments path_sigma_uncurried : simpl never.
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) cat:= sub_pre_cat P: PreCategory has_op: forallC : cat, P (C.1)^op opposite_functor_involutive_helper:= funx : cat =>
path_sigma_uncurried P
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)) x
(Category.Dual.opposite_involutive x.1;
path_ishprop
(transport P (Category.Dual.opposite_involutive x.1)
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)).2)
x.2): forallx : cat,
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)) = x
opposite_functor o opposite_functor = 1
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) cat:= sub_pre_cat P: PreCategory has_op: forallC : cat, P (C.1)^op opposite_functor_involutive_helper:= funx : cat =>
path_sigma_uncurried P
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)) x
(Category.Dual.opposite_involutive x.1;
path_ishprop
(transport P (Category.Dual.opposite_involutive x.1)
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)).2)
x.2): forallx : cat,
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)) = x
opposite_functor o opposite_functor = 1
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) cat:= sub_pre_cat P: PreCategory has_op: forallC : cat, P (C.1)^op opposite_functor_involutive_helper:= funx : cat =>
path_sigma_uncurried P
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)) x
(Category.Dual.opposite_involutive x.1;
path_ishprop
(transport P (Category.Dual.opposite_involutive x.1)
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)).2)
x.2): forallx : cat,
(((x.1)^op)^op%category; has_op ((x.1)^op%category; has_op x)) = x
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) cat:= sub_pre_cat P: PreCategory has_op: forallC : {x : _ & P x}, P (C.1)^op opposite_functor_involutive_helper:= funx2 : {x : _ & P x} =>
path_sigma_uncurried P
(((x2.1)^op)^op%category; has_op ((x2.1)^op%category; has_op x2)) x2
(Category.Dual.opposite_involutive x2.1;
path_ishprop (has_op ((x2.1)^op%category; has_op x2)) x2.2): forallx2 : {x : _ & P x},
(((x2.1)^op)^op%category; has_op ((x2.1)^op%category; has_op x2)) = x2 x, x0: {x : _ & P x} x1: Functor x.1 x0.1
(x1^op)^op = x1
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) cat:= {|
object := {C : PreCategory & P C};
morphism :=
fun (C : {C : PreCategory & P C}) (D : {C0 : PreCategory & P C0}) =>
Functor C.1 D.1;
Core.identity := funC : {C : PreCategory & P C} => 1;
Category.Core.compose :=
fun (sdd' : {C : PreCategory & P C}) (F : Functor d.1 d'.1)
(G : Functor s.1 d.1) =>
F o G;
associativity :=
fun (x2x3x4x5 : {C : PreCategory & P C}) (m1 : Functor x2.1 x3.1)
(m2 : Functor x3.1 x4.1) (m3 : Functor x4.1 x5.1) =>
Laws.associativity m1 m2 m3;
associativity_sym :=
fun (x2x3x4x5 : {C : PreCategory & P C}) (m1 : Functor x2.1 x3.1)
(m2 : Functor x3.1 x4.1) (m3 : Functor x4.1 x5.1) =>
symmetry (m3 o m2 o m1) (m3 o (m2 o m1)) (Laws.associativity m1 m2 m3);
left_identity :=
fun (ab : {C : PreCategory & P C}) (f : Functor a.1 b.1) =>
Laws.left_identity f;
right_identity :=
fun (ab : {C : PreCategory & P C}) (f : Functor a.1 b.1) =>
Laws.right_identity f;
identity_identity :=
funx2 : {C : PreCategory & P C} => Laws.left_identity 1;
trunc_morphism := funsd : {C : PreCategory & P C} => HF s.2 d.2
|}: PreCategory has_op: forallC : {x : _ & P x}, P (C.1)^op opposite_functor_involutive_helper:= funx2 : {x : _ & P x} =>
path_sigma_uncurried P
(((x2.1)^op)^op%category; has_op ((x2.1)^op%category; has_op x2)) x2
(Category.Dual.opposite_involutive x2.1;
path_ishprop (has_op ((x2.1)^op%category; has_op x2)) x2.2): forallx2 : {x : _ & P x},
(((x2.1)^op)^op%category; has_op ((x2.1)^op%category; has_op x2)) = x2 x, x0: {x : _ & P x} x1: Functor x.1 x0.1
(x1^op)^op = x1
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) has_op: forallC : {x : _ & P x}, P (C.1)^op x, x0: {x : _ & P x} x1: Functor x.1 x0.1
(x1^op)^op = x1
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) has_op: forallC : {x : _ & P x}, P (C.1)^op proj0: PreCategory proj3: P proj0 proj1: PreCategory proj2: P proj1 x1: Functor proj0 proj1
(x1^op)^op = x1
H: Funext P: PreCategory -> Type H0: forallC : PreCategory, IsHProp (P C) HF: forallCD : PreCategory, P C -> P D -> IsHSet (Functor C D) has_op: forallC : {x : _ & P x}, P (C.1)^op proj0: PreCategory proj3: P proj0 proj1: PreCategory proj2: P proj1 object_of: proj0 -> proj1 morphism_of: forallsd : proj0,
morphism proj0 s d -> morphism proj1 (object_of s) (object_of d) composition_of: forall (sdd' : proj0) (m1 : morphism proj0 s d)
(m2 : morphism proj0 d d'),
morphism_of s d' (m2 o m1)%morphism =
(morphism_of d d' m2 o morphism_of s d m1)%morphism identity_of: forallx : proj0, morphism_of x x 1%morphism = 1%morphism