{-# OPTIONS --safe #-} module Cubical.Categories.NaturalTransformation.More where open import Cubical.Foundations.Prelude open import Cubical.Foundations.Univalence open import Cubical.Foundations.HLevels open import Cubical.Foundations.Isomorphism renaming (iso to iIso) open import Cubical.Data.Sigma open import Cubical.Categories.Category renaming (isIso to isIsoC) open import Cubical.Categories.Functor.Base open import Cubical.Categories.Functor.Properties open import Cubical.Categories.Commutativity open import Cubical.Categories.Morphism open import Cubical.Categories.Isomorphism open import Cubical.Categories.NaturalTransformation.Base open import Cubical.Categories.NaturalTransformation.Properties open import Cubical.Categories.Instances.Functors private variable ℓA ℓA' ℓB ℓB' ℓC ℓC' ℓD ℓD' ℓE ℓE' : Level ℓ ℓ' ℓ'' : Level B C D E : Category ℓ ℓ' open Category open NatTrans open NatIso open isIsoC infixl 8 _∘ᵛ_ infixl 8 _∘ʰ_ _∘ᵛ_ = compTrans _∘ʰ_ = whiskerTrans module _ {B : Category ℓB ℓB'} {C : Category ℓC ℓC'} {D : Category ℓD ℓD'} where open NatTrans whiskerTrans' : {F F' : Functor B C} {G G' : Functor C D} (β : NatTrans G G') (α : NatTrans F F') → NatTrans (G ∘F F) (G' ∘F F') whiskerTrans' {F}{F'}{G}{G'} β α = compTrans (G' ∘ʳ α) (β ∘ˡ F) whiskerTrans≡whiskerTrans' : {F F' : Functor B C} {G G' : Functor C D} (β : NatTrans G G') (α : NatTrans F F') → whiskerTrans β α ≡ whiskerTrans' β α whiskerTrans≡whiskerTrans' β α = makeNatTransPath (funExt (λ x → β .N-hom _)) _∘ʰ'_ = whiskerTrans' α : {F : Functor B C} {G : Functor C D} {H : Functor D E} → NatTrans (H ∘F (G ∘F F)) ((H ∘F G) ∘F F) α = pathToNatTrans F-assoc α⁻¹ : {F : Functor B C} {G : Functor C D} {H : Functor D E} → NatTrans ((H ∘F G) ∘F F) (H ∘F (G ∘F F)) α⁻¹ = pathToNatTrans (sym F-assoc) module _ {C : Category ℓC ℓC'} {D : Category ℓD ℓD'} where module _ {F F' G G' : Functor C D} {α : NatIso F G} {β : NatIso F' G'} where open Functor makeNatIsoPathP : ∀ (p : F ≡ F') (q : G ≡ G') → PathP (λ i → (x : C .ob) → D [ (p i) .F-ob x , (q i) .F-ob x ]) (α .trans .N-ob) (β .trans .N-ob) → PathP (λ i → NatIso (p i) (q i)) α β makeNatIsoPathP p q P i .trans = makeNatTransPathP {α = α .trans} {β = β .trans} p q P i makeNatIsoPathP p q P i .nIso x = isProp→PathP (λ i → isPropIsIso (makeNatIsoPathP p q P i .trans .N-ob x)) (α .nIso _) (β .nIso _) i module _ {A : Category ℓA ℓA'} {B : Category ℓB ℓB'} {C : Category ℓC ℓC'} {D : Category ℓD ℓD'} where preservesNatIsosF : ∀ (𝔽 : Functor (FUNCTOR A B) (FUNCTOR C D)) → {F G : Functor A B} → (β : NatIso F G) → NatIso (𝔽 ⟅ F ⟆) (𝔽 ⟅ G ⟆) preservesNatIsosF 𝔽 β = FUNCTORIso→NatIso C D (preserveIsosF {F = 𝔽} (NatIso→FUNCTORIso A B β) ) module _ {C : Category ℓC ℓC'} {D : Category ℓD ℓD'} {F G : Functor C D} (α : NatTrans F G) where isNatIso : Type _ isNatIso = ∀ x → isIsoC D (α .N-ob x)