{-# OPTIONS --safe --without-K #-}
module Categories.Category.Dagger.Construction.DaggerFunctors where
open import Categories.Category.Dagger using (DaggerCategory)
import Categories.Category.Construction.DaggerFunctors as cat
open import Categories.Functor.Dagger using (DaggerFunctor)
open import Categories.NaturalTransformation using (NaturalTransformation)
open import Function.Base using (_$_)
open import Level using (Level; _⊔_)
private
variable
o ℓ e o′ ℓ′ e′ : Level
DaggerFunctors : (C : DaggerCategory o ℓ e) (D : DaggerCategory o′ ℓ′ e′)
→ DaggerCategory (o ⊔ ℓ ⊔ e ⊔ o′ ⊔ ℓ′ ⊔ e′) (o ⊔ ℓ ⊔ ℓ′ ⊔ e′) (o ⊔ e′)
DaggerFunctors C D = record
{ C = cat.DaggerFunctors C D
; hasDagger = record
{ _† = λ {F} {G} α → dagger F G α
; †-identity = †-identity
; †-homomorphism = †-homomorphism
; †-resp-≈ = λ α≈β → †-resp-≈ α≈β
; †-involutive = λ α → †-involutive (NaturalTransformation.η α _)
}
}
where
open DaggerCategory C using () renaming (_† to _‡)
open DaggerCategory D hiding (C)
open HomReasoning
dagger : ∀ (F G : DaggerFunctor C D)
→ NaturalTransformation (DaggerFunctor.functor F) (DaggerFunctor.functor G)
→ NaturalTransformation (DaggerFunctor.functor G) (DaggerFunctor.functor F)
dagger F G α = record
{ η = λ X → α.η X †
; commute = λ {X Y} f → begin
α.η Y † ∘ G.₁ f ≈˘⟨ †-involutive _ ⟩
(α.η Y † ∘ G.₁ f) † † ≈⟨ †-resp-≈ $ begin
(α.η Y † ∘ G.₁ f) † ≈⟨ †-homomorphism ⟩
G.₁ f † ∘ α.η Y † † ≈⟨ G.F-resp-† ⟩∘⟨ †-involutive _ ⟩
G.₁ (f ‡) ∘ α.η Y ≈⟨ α.sym-commute (f ‡) ⟩
α.η X ∘ F.₁ (f ‡) ≈˘⟨ †-involutive _ ⟩∘⟨ F.F-resp-† ⟩
α.η X † † ∘ F.₁ f † ≈˘⟨ †-homomorphism ⟩
(F.₁ f ∘ α.η X †) † ∎ ⟩
(F.₁ f ∘ α.η X †) † † ≈⟨ †-involutive _ ⟩
F.₁ f ∘ α.η X † ∎
; sym-commute = λ {X Y} f → begin
F.₁ f ∘ α.η X † ≈˘⟨ †-involutive _ ⟩
(F.₁ f ∘ α.η X †) † † ≈⟨ †-resp-≈ $ begin
(F.₁ f ∘ α.η X †) † ≈⟨ †-homomorphism ⟩
α.η X † † ∘ F.₁ f † ≈⟨ †-involutive _ ⟩∘⟨ F.F-resp-† ⟩
α.η X ∘ F.₁ (f ‡) ≈⟨ α.commute (f ‡) ⟩
G.₁ (f ‡) ∘ α.η Y ≈˘⟨ G.F-resp-† ⟩∘⟨ †-involutive _ ⟩
G.₁ f † ∘ α.η Y † † ≈˘⟨ †-homomorphism ⟩
(α.η Y † ∘ G.₁ f) † ∎ ⟩
(α.η Y † ∘ G.₁ f) † † ≈⟨ †-involutive _ ⟩
α.η Y † ∘ G.₁ f ∎
}
where
module F = DaggerFunctor F
module G = DaggerFunctor G
module α = NaturalTransformation α