{-# OPTIONS --safe --without-K #-} module Categories.Functor.Dagger where open import Categories.Category.Dagger using (DaggerCategory) open import Categories.Functor using (Functor; _∘F_) renaming (id to idF) open import Level using (Level; _⊔_) private variable o ℓ e o′ ℓ′ e′ o″ ℓ″ e″ : Level record DaggerFunctor (C : DaggerCategory o ℓ e) (D : DaggerCategory o′ ℓ′ e′) : Set (o ⊔ ℓ ⊔ e ⊔ o′ ⊔ ℓ′ ⊔ e′) where private module C = DaggerCategory C module D = DaggerCategory D field functor : Functor C.C D.C open Functor functor public field F-resp-† : ∀ {X Y} {f : X C.⇒ Y} → F₁ f D.† D.≈ F₁ (f C.†) id : ∀ {C : DaggerCategory o ℓ e} → DaggerFunctor C C id {C = C} = record { functor = idF ; F-resp-† = DaggerCategory.Equiv.refl C } _∘F†_ : ∀ {C : DaggerCategory o ℓ e} {D : DaggerCategory o′ ℓ′ e′} {E : DaggerCategory o″ ℓ″ e″} → DaggerFunctor D E → DaggerFunctor C D → DaggerFunctor C E _∘F†_ {E = E} F G = record { functor = F.functor ∘F G.functor ; F-resp-† = DaggerCategory.Equiv.trans E F.F-resp-† (F.F-resp-≈ G.F-resp-†) } where module F = DaggerFunctor F module G = DaggerFunctor G