Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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.
(** * Induced functors between comma categories *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Category.Dual.Require Import Category.Prod.Require Import NaturalTransformation.Identity.Require Import FunctorCategory.Core Cat.Core.Require Import InitialTerminalCategory.Core InitialTerminalCategory.Functors.Require Comma.Core.Local Set Warnings"-notation-overridden". (* work around bug #5567, https://coq.inria.fr/bugs/show_bug.cgi?id=5567, notation-overridden,parsing should not trigger for only printing notations *)Import Comma.Core.Local Set Warnings"notation-overridden".Require Import HoTT.Tactics.Require Import Basics.Tactics.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope functor_scope.LocalOpen Scope category_scope.(** ** Morphisms in [(A โ C)แตแต ร (B โ C)] from [(sโ, sโ)] to [(dโ, dโ)] induce functors [(sโ / sโ) โ (dโ / dโ)] *)Sectioncomma_category_induced_functor.Context `{Funext}.VariablesABC : PreCategory.Definitioncomma_category_induced_functor_object_ofsd
(m : morphism ((A -> C)^op * (B -> C)) s d)
(x : fst s / snd s)
: (fst d / snd d)
:= CommaCategory.Build_object
(fst d) (snd d)
(CommaCategory.a x)
(CommaCategory.b x)
((snd m) (CommaCategory.b x) o CommaCategory.f x o (fst m) (CommaCategory.a x)).
H: Funext A, B, C: PreCategory s: (A -> C)^op * (B -> C) x: fst s / snd s
comma_category_induced_functor_object_of 1 x = x
H: Funext A, B, C: PreCategory s: (A -> C)^op * (B -> C) x: fst s / snd s
comma_category_induced_functor_object_of 1 x = x
H: Funext A, B, C: PreCategory s: (A -> C)^op * (B -> C) x: fst s / snd s
transport
(funX : A =>
morphism C ((fst s) _0 X)%object
((snd s) _0 (CommaCategory.b x))%object) 1
(transport
(funY : B =>
morphism C
((fst s)
_0 (CommaCategory.a
(comma_category_induced_functor_object_of
1 x)))%object ((snd s) _0 Y)%object)
1
(CommaCategory.f
(comma_category_induced_functor_object_of 1 x))) =
CommaCategory.f x
H: Funext A, B, C: PreCategory s: (A -> C)^op * (B -> C) x: fst s / snd s
(1 o CommaCategory.f x o 1)%morphism =
CommaCategory.f x
H: Funext A, B, C: PreCategory s, d, d': (A -> C)^op * (B -> C) m: morphism ((A -> C)^op * (B -> C)) d d' m': morphism ((A -> C)^op * (B -> C)) s d x: fst s / snd s
comma_category_induced_functor_object_of (m o m') x =
comma_category_induced_functor_object_of m
(comma_category_induced_functor_object_of m' x)
H: Funext A, B, C: PreCategory s, d, d': (A -> C)^op * (B -> C) m: morphism ((A -> C)^op * (B -> C)) d d' m': morphism ((A -> C)^op * (B -> C)) s d x: fst s / snd s
comma_category_induced_functor_object_of (m o m') x =
comma_category_induced_functor_object_of m
(comma_category_induced_functor_object_of m' x)
H: Funext A, B, C: PreCategory s, d, d': (A -> C)^op * (B -> C) m: morphism ((A -> C)^op * (B -> C)) d d' m': morphism ((A -> C)^op * (B -> C)) s d x: fst s / snd s
transport
(funX : A =>
morphism C ((fst d') _0 X)%object
((snd d')
_0 (CommaCategory.b
(comma_category_induced_functor_object_of
m
(comma_category_induced_functor_object_of
m' x))))%object) 1
(transport
(funY : B =>
morphism C
((fst d')
_0 (CommaCategory.a
(comma_category_induced_functor_object_of
(m o m') x)))%object
((snd d') _0 Y)%object) 1
(CommaCategory.f
(comma_category_induced_functor_object_of
(m o m') x))) =
CommaCategory.f
(comma_category_induced_functor_object_of m
(comma_category_induced_functor_object_of m' x))
H: Funext A, B, C: PreCategory s, d: (CC_Functor' A C * CC_Functor' B C)%type m: morphism ((A -> C)^op * (B -> C)) s d s0, d0: fst s / snd s m0: morphism (fst s / snd s) s0 d0
morphism (fst d / snd d)
(comma_category_induced_functor_object_of m s0)
(comma_category_induced_functor_object_of m d0)
H: Funext A, B, C: PreCategory s, d: (CC_Functor' A C * CC_Functor' B C)%type m: morphism ((A -> C)^op * (B -> C)) s d s0, d0: fst s / snd s m0: morphism (fst s / snd s) s0 d0
morphism (fst d / snd d)
(comma_category_induced_functor_object_of m s0)
(comma_category_induced_functor_object_of m d0)
H: Funext A, B, C: PreCategory s, d: (CC_Functor' A C * CC_Functor' B C)%type m: morphism ((A -> C)^op * (B -> C)) s d s0, d0: fst s / snd s m0: morphism (fst s / snd s) s0 d0
CommaCategory.morphism
(comma_category_induced_functor_object_of m s0)
(comma_category_induced_functor_object_of m d0)
A, B, C: PreCategory s, d: (Functor A C * Functor B C)%type m: (NaturalTransformation (fst d) (fst s) *
NaturalTransformation (snd s) (snd d))%type s0, d0: CommaCategory.object (fst s) (snd s) m0: CommaCategory.morphism s0 d0
((snd d) _1 (CommaCategory.h m0)
o (snd m (CommaCategory.b s0) o CommaCategory.f s0
o fst m (CommaCategory.a s0)))%morphism =
(snd m (CommaCategory.b d0) o CommaCategory.f d0
o fst m (CommaCategory.a d0)
o (fst d) _1 (CommaCategory.g m0))%morphism
H: Funext A, B, C: PreCategory s, d: (A -> C)^op * (B -> C) m: morphism ((A -> C)^op * (B -> C)) s d
Functor (fst s / snd s) (fst d / snd d)
H: Funext A, B, C: PreCategory s, d: (A -> C)^op * (B -> C) m: morphism ((A -> C)^op * (B -> C)) s d
Functor (fst s / snd s) (fst d / snd d)
refine (Build_Functor (fst s / snd s) (fst d / snd d)
(@comma_category_induced_functor_object_of s d m)
(@comma_category_induced_functor_morphism_of s d m)
_
_
);
abstract (
intros; apply CommaCategory.path_morphism; reflexivity
).Defined.Endcomma_category_induced_functor.(** ** Morphisms in [C] from [a] to [a'] induce functors [(C / a) โ (C / a')] *)Sectionslice_category_induced_functor.Context `{Funext}.VariableC : PreCategory.Sectionslice_coslice.VariableD : PreCategory.(** TODO(JasonGross): See if this can be recast as an exponential law functor about how [1 โ Cat] is isomorphic to [Cat], or something *)
H: Funext C, D: PreCategory s, d: D m: morphism D s d
NaturalTransformation !s !d
H: Funext C, D: PreCategory s, d: D m: morphism D s d
NaturalTransformation !s !d
exists (fun_ : Unit => m);
simpl; intros; clear;
abstract (autorewrite with category; reflexivity).Defined.VariableF : Functor C D.Variablea : D.Sectionslice.Definitionslice_category_induced_functorF'a'
(m : morphism D a a')
(T : NaturalTransformation F' F)
: Functor (F / a) (F' / a')
:= comma_category_induced_functor
(s := (F, !a))
(d := (F', !a'))
(T, @slice_category_induced_functor_nt a a' m).Definitionslice_category_nt_induced_functorF'T
:= @slice_category_induced_functor F' a 1 T.Definitionslice_category_morphism_induced_functora'm
:= @slice_category_induced_functor F a' m 1.Endslice.Sectioncoslice.Definitioncoslice_category_induced_functorF'a'
(m : morphism D a' a)
(T : NaturalTransformation F F')
: Functor (a / F) (a' / F')
:= comma_category_induced_functor
(s := (!a, F))
(d := (!a', F'))
(@slice_category_induced_functor_nt a' a m, T).Definitioncoslice_category_nt_induced_functorF'T
:= @coslice_category_induced_functor F' a 1 T.Definitioncoslice_category_morphism_induced_functora'm
:= @coslice_category_induced_functor F a' m 1.Endcoslice.Endslice_coslice.Definitionslice_category_over_induced_functoraa' (m : morphism C a a')
: Functor (C / a) (C / a')
:= Evalhnfin slice_category_morphism_induced_functor _ _ _ m.Definitioncoslice_category_over_induced_functoraa' (m : morphism C a' a)
: Functor (a \ C) (a' \ C)
:= Evalhnfin coslice_category_morphism_induced_functor _ _ _ m.Endslice_category_induced_functor.(** ** Functors [A โ A'] functors [(cat / A) โ (cat / A')] *)Sectioncat_over_induced_functor.LocalOpen Scope type_scope.Context `{Funext}.VariableP : PreCategory -> Type.Context `{H0 : forallCD, P C -> P D -> IsHSet (Functor C D)}.Local Notationcat := (@sub_pre_cat _ P H0).Definitioncat_over_induced_functoraa' (m : morphism cat a a')
: Functor (cat / a) (cat / a')
:= slice_category_over_induced_functor cat a a' m.Definitionover_cat_induced_functoraa' (m : morphism cat a' a)
: Functor (a \ cat) (a' \ cat)
:= coslice_category_over_induced_functor cat a a' m.Endcat_over_induced_functor.