Martin Escardo and Paulo Oliva, 20th August 2024.
Affine relative monad of non-empty lists without repetitions, assume a
discrete type (a type with decidable equality).
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import Notation.General
open import MLTT.Spartan
open import UF.DiscreteAndSeparated
open import UF.Equiv
open import UF.FunExt
open import RelativeMonadOnStructuredTypes.OneSigmaStructure
open import RelativeMonadOnStructuredTypes.Definition {{discrete-π-Ξ£-structure}}
module RelativeMonadOnStructuredTypes.NELWR
(fe : Fun-Ext)
where
open import DiscreteGraphicMonoids.AffineMonad fe
open π-Ξ£-structure discrete-π-Ξ£-structure
instance
π-is-discrete' : {π€ : Universe} {π§ : π π€} β is-discrete' β¨ π§ β©
π-is-discrete' {π€} {π§} = discrete-gives-discrete' (underlying-structure π§)
NELWR : Relative-Monad {Ξ» π€ β π€}
NELWR =
record {
functor = Ξ» π§ β Listβ»βΊ β¨ π§ β©
; Ξ· = Ξ» {π€} {π§} β Ξ·β»βΊ {π€} {β¨ π§ β©}
; ext = Ξ» {π€} {π₯} {π§} {π¨} β extβ»βΊ {π€} {π₯} {β¨ π§ β©} {β¨ π¨ β©}
; ext-Ξ· = Ξ» {π€} {π§} β ext-Ξ·β»βΊ {π€} {β¨ π§ β©} {{π-is-discrete' {π€} {π§}}}
; unit = Ξ» {π€} {π₯} {π§} {π¨}
β unitβ»βΊ {π€} {π₯} {β¨ π§ β©} {{π-is-discrete' {π€} {π§}}} {β¨ π¨ β©}
; assoc = Ξ» {π€} {π₯} {π¦} {π§} {π¨} {π©}
β assocβ»βΊ {π€} {π₯} {π¦} {β¨ π§ β©} {β¨ π¨ β©} {β¨ π© β©}
}
NELWR-is-affine : is-affine NELWR
NELWR-is-affine = affineβ»βΊ
\end{code}