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.
(** * Classify the path space of natural transformations *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Equivalences HoTT.Types Trunc Basics.Tactics.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope morphism_scope.LocalOpen Scope natural_transformation_scope.Sectionpath_natural_transformation.Context `{Funext}.VariablesCD : PreCategory.VariablesFG : Functor C D.(** ** Equivalence between record and sigma versions of natural transformation *)
H: Funext C, D: PreCategory F, G: Functor C D
{CO
: forallx : C,
morphism D (F _0 x)%object (G _0 x)%object &
forall (sd : C) (m : morphism C s d),
CO d o F _1 m = G _1 m o CO s} <~>
NaturalTransformation F G
H: Funext C, D: PreCategory F, G: Functor C D
{CO
: forallx : C,
morphism D (F _0 x)%object (G _0 x)%object &
forall (sd : C) (m : morphism C s d),
CO d o F _1 m = G _1 m o CO s} <~>
NaturalTransformation F G
letbuild := constr:(@Build_NaturalTransformation _ _ F G) inletpr1 := constr:(@components_of _ _ F G) inletpr2 := constr:(@commutes _ _ F G) inapply (equiv_adjointify (funu => build u.1 u.2)
(funv => (pr1 v; pr2 v)));
hnf;
[ intros []; intros; simpl; expand; f_ap; exact (center _)
| intros; apply eta_sigma ].Defined.(** ** The type of natural transformations is an hSet *)
H: Funext C, D: PreCategory F, G: Functor C D
IsHSet (NaturalTransformation F G)
H: Funext C, D: PreCategory F, G: Functor C D
IsHSet (NaturalTransformation F G)
H: Funext C, D: PreCategory F, G: Functor C D
IsHSet
{CO
: forallx : C,
morphism D (F _0 x)%object (G _0 x)%object &
forall (sd : C) (m : morphism C s d),
CO d o F _1 m = G _1 m o CO s}
typeclasses eauto.Qed.Sectionpath.VariablesTU : NaturalTransformation F G.(** ** Equality of natural transformations is implied by equality of components *)
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G
T = U -> T = U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G
T = U -> T = U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G X: T = U
T = U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G components_of: forallc : C,
morphism D (F _0 c)%object
(G _0 c)%object commutes: forall (sd : C) (m : morphism C s d),
components_of d o F _1 m =
G _1 m o components_of s commutes_sym: forall (sd : C) (m : morphism C s d),
G _1 m o components_of s =
components_of d o F _1 m components_of0: forallc : C,
morphism D (F _0 c)%object
(G _0 c)%object commutes0: forall (sd : C) (m : morphism C s d),
components_of0 d o F _1 m =
G _1 m o components_of0 s commutes_sym0: forall (sd : C) (m : morphism C s d),
G _1 m o components_of0 s =
components_of0 d o F _1 m X: components_of = components_of0
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G components_of: forallc : C,
morphism D (F _0 c)%object
(G _0 c)%object commutes: forall (sd : C) (m : morphism C s d),
components_of d o F _1 m =
G _1 m o components_of s commutes_sym: forall (sd : C) (m : morphism C s d),
G _1 m o components_of s =
components_of d o F _1 m commutes0: forall (sd : C) (m : morphism C s d),
components_of d o F _1 m =
G _1 m o components_of s commutes_sym0: forall (sd : C) (m : morphism C s d),
G _1 m o components_of s =
components_of d o F _1 m
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G
T == U -> T = U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G
T == U -> T = U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G X: T == U
T = U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G X: T == U
T = U
apply path_forall; assumption.Qed.Letpath_inv
: T = U -> components_of T == components_of U
:= (funH_ => match H with idpath => idpath end).
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
path_inv o path_natural_transformation == idmap
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
path_inv o path_natural_transformation == idmap
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U x: T == U
path_inv (path_natural_transformation x) = x
exact (center _).Qed.
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
path_natural_transformation o path_inv == idmap
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
path_natural_transformation o path_inv == idmap
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U x: T = U
path_natural_transformation (path_inv x) = x
exact (center _).Qed.
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
forallx : T = U,
eisretr_path_natural_transformation (path_inv x) =
ap path_inv (eissect_path_natural_transformation x)
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
forallx : T = U,
eisretr_path_natural_transformation (path_inv x) =
ap path_inv (eissect_path_natural_transformation x)
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U x: T = U
eisretr_path_natural_transformation (path_inv x) =
ap path_inv (eissect_path_natural_transformation x)
exact (center _).Qed.(** ** Equality of natural transformations is equivalent to equality of components *)
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
T = U <~> T == U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
T = U <~> T == U
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
IsEquiv ?equiv_fun
H: Funext C, D: PreCategory F, G: Functor C D T, U: NaturalTransformation F G path_inv:= fun (H : T = U) (x : C) =>
match H in (_ = n) return (T x = n x) with
| 1%path => 1%path
end: T = U -> T == U
forallx : T = U,
?eisretr (?equiv_fun x) = ap ?equiv_fun (?eissect x)
exact eisadj_path_natural_transformation.Defined.Endpath.Endpath_natural_transformation.(** ** Tactic for proving equality of natural transformations *)Ltacpath_natural_transformation :=
repeatmatch goal with
| _ => intro
| _ => apply path_natural_transformation; simplend.