← Back

Modules

Leios

  • Abstract
  • Base
  • Blocks
  • ChannelCat
  • Config
  • FFD
  • KeyRegistration
  • Linear
  • Linear.Trace.Verifier
  • Linear.Trace.Verifier.Test
  • NetworkShim
  • Prelude
  • Protocol
  • SpecStructure
  • Voting
  • VRF

Network

  • BasicBroadcast
  • DelayedDiffuse
  • Leios
123456789101112131415161718192021222324252627282930313233343536373839404142
{-# OPTIONS --without-K --safe #-}
module Categories.Monad where
 
open import Level
 
open import Categories.Category using (Category)
open import Categories.Functor using (Functor; Endofunctor; _∘F_) renaming (id to idF)
open import Categories.NaturalTransformation renaming (id to idN)
open import Categories.NaturalTransformation.NaturalIsomorphism hiding (_≃_)
open import Categories.NaturalTransformation.Equivalence
open NaturalIsomorphism
 
record Monad {o ℓ e} (C : Category o ℓ e) : Set (o ⊔ ℓ ⊔ e) where
field
F : Endofunctor C
η : NaturalTransformation idF F
μ : NaturalTransformation (F ∘F F) F
 
module F = Functor F
module η = NaturalTransformation η
module μ = NaturalTransformation μ
 
open Category C
open F
 
field
assoc : ∀ {X : Obj} → μ.η X ∘ F₁ (μ.η X) ≈ μ.η X ∘ μ.η (F₀ X)
sym-assoc : ∀ {X : Obj} → μ.η X ∘ μ.η (F₀ X) ≈ μ.η X ∘ F₁ (μ.η X)
identityˡ : ∀ {X : Obj} → μ.η X ∘ F₁ (η.η X) ≈ id
identityʳ : ∀ {X : Obj} → μ.η X ∘ η.η (F₀ X) ≈ id
 
module _ {o ℓ e} (C : Category o ℓ e) where
open Monad
open Category C hiding (id)
id : Monad C
id .F = idF
id .η = idN
id .μ = unitor² .F⇒G
id .assoc = Equiv.refl
id .sym-assoc = Equiv.refl
id .identityˡ = identity²
id .identityʳ = identity²