{-# OPTIONS --safe --without-K #-} open import Categories.Category using (Category) module Categories.Adjoint.Instance.Slice {o ℓ e} (C : Category o ℓ e) where open import Categories.Adjoint using (_⊣_) open import Categories.Category.Slice C using (SliceObj; Slice⇒; slicearr) open import Categories.Functor.Slice C using (TotalSpace; ConstantFamily) open import Categories.NaturalTransformation using (ntHelper) open import Categories.Object.Product C open Category C open HomReasoning open SliceObj open Slice⇒ module _ {A : Obj} (product : ∀ {X} → Product A X) where private module product {X} = Product (product {X}) open product TotalSpace⊣ConstantFamily : TotalSpace ⊣ ConstantFamily product TotalSpace⊣ConstantFamily = record { unit = ntHelper record { η = λ _ → slicearr project₁ ; commute = λ {X} {Y} f → begin ⟨ arr Y , id ⟩ ∘ h f ≈⟨ ∘-distribʳ-⟨⟩ ⟩ ⟨ arr Y ∘ h f , id ∘ h f ⟩ ≈⟨ ⟨⟩-cong₂ (△ f) identityˡ ⟩ ⟨ arr X , h f ⟩ ≈˘⟨ ⟨⟩-cong₂ identityˡ identityʳ ⟩ ⟨ id ∘ arr X , h f ∘ id ⟩ ≈˘⟨ [ product ⇒ product ]×∘⟨⟩ ⟩ [ product ⇒ product ] id × h f ∘ ⟨ arr X , id ⟩ ∎ } ; counit = ntHelper record { η = λ _ → π₂ ; commute = λ _ → project₂ } ; zig = project₂ ; zag = begin [ product ⇒ product ]id× π₂ ∘ ⟨ π₁ , id ⟩ ≈⟨ [ product ⇒ product ]×∘⟨⟩ ⟩ ⟨ id ∘ π₁ , π₂ ∘ id ⟩ ≈⟨ ⟨⟩-cong₂ identityˡ identityʳ ⟩ ⟨ π₁ , π₂ ⟩ ≈⟨ η ⟩ id ∎ }