Martin Escardo and Paulo Oliva, April 2024 Lists without repetitions over a discrete types form a monad, as a corollary of the fact that lists without repetitions over a discrete type form the free discrete graphic monoid. \begin{code} {-# OPTIONS --safe --without-K #-} open import UF.FunExt module DiscreteGraphicMonoids.Monad (fe : Fun-Ext) where open import DiscreteGraphicMonoids.Free fe open import DiscreteGraphicMonoids.LWRDGM fe open import DiscreteGraphicMonoids.ListsWithoutRepetitions fe open import DiscreteGraphicMonoids.Type open import MLTT.Spartan open import UF.DiscreteAndSeparated module _ {X : 𝓤 ̇ } {{X-is-discrete' : is-discrete' X}} {Y : 𝓥 ̇ } {{Y-is-discrete' : is-discrete' Y}} where ext⁻ : (X → List⁻ Y) → List⁻ X → List⁻ Y ext⁻ = extension (List⁻-DGM Y) unit⁻ : (f : X → List⁻ Y) → ext⁻ f ∘ η⁻ ∼ f unit⁻ = triangle (List⁻-DGM Y) module _ {X : 𝓤 ̇ } {{X-is-discrete' : is-discrete' X}} where ext⁻-η⁻ : ext⁻ η⁻ ∼ 𝑖𝑑 (List⁻ X) ext⁻-η⁻ = uniqueness (List⁻-DGM X) η⁻ id (id-is-hom (List⁻-DGM X)) (λ _ → refl) module _ {X : 𝓤 ̇ } {{X-is-discrete' : is-discrete' X}} {Y : 𝓥 ̇ } {{Y-is-discrete' : is-discrete' Y}} {Z : 𝓦 ̇ } {{Z-is-discrete' : is-discrete' Z}} where assoc⁻ : (g : Y → List⁻ Z) (f : X → List⁻ Y) → ext⁻ (ext⁻ g ∘ f) ∼ ext⁻ g ∘ ext⁻ f assoc⁻ g f = III where H : List⁻ X → List⁻ Z H = ext⁻ g ∘ ext⁻ f I : is-hom (List⁻-DGM X) (List⁻-DGM Z) H I = ∘-is-hom (List⁻-DGM X) (List⁻-DGM Y) (List⁻-DGM Z) (ext⁻ f) (ext⁻ g) (extension-is-hom (List⁻-DGM Y) f) (extension-is-hom (List⁻-DGM Z) g) II = H ∘ η⁻ ∼⟨ ∼-refl ⟩ ext⁻ g ∘ ext⁻ f ∘ η⁻ ∼⟨ ∼-ap-∘ (ext⁻ g) (triangle (List⁻-DGM Y) f) ⟩ ext⁻ g ∘ f ∼∎ III : ext⁻ (ext⁻ g ∘ f) ∼ H III = uniqueness (List⁻-DGM Z) (ext⁻ g ∘ f) H I II \end{code}