Martin Escardo and Paulo Oliva, April 2024
The type of lists without repetitions over a discrete type forms a
discrete graphic monoid. In another module, we prove that it gives the
free discrete graphic monoid.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import UF.FunExt
module DiscreteGraphicMonoids.LWRDGM
(fe : Fun-Ext)
where
open import DiscreteGraphicMonoids.ListsWithoutRepetitions fe
open import DiscreteGraphicMonoids.Type
open import MLTT.List
renaming (_∷_ to _•_ ;
_++_ to _◦_ ;
++-assoc to ◦-assoc)
open import MLTT.Spartan
open import UF.DiscreteAndSeparated
module _
{𝓤 : Universe}
{X : 𝓤 ̇ }
{{d' : is-discrete' X}}
where
private
d : is-discrete X
d = discrete'-gives-discrete
graphical⁻ : graphical (_·_ {𝓤} {X})
graphical⁻ (xs , a) (ys , b) =
to-List⁻-=
(ρ (ρ (xs ◦ ys) ◦ xs) =⟨ ρ-left (xs ◦ ys) xs ⟩
ρ ((xs ◦ ys) ◦ xs) =⟨ ρ-◦ (xs ◦ ys) xs ⟩
ρ (xs ◦ ys) ◦ (Δ (xs ◦ ys) (ρ xs)) =⟨ ap (ρ (xs ◦ ys) ◦_) (ρ-all xs ys) ⟩
ρ (xs ◦ ys) ◦ [] =⟨ ([]-right-neutral (ρ (xs ◦ ys)))⁻¹ ⟩
ρ (xs ◦ ys) ∎)
\end{code}
The discrete graphic monoid of lists without repetition over a
discrete type.
\begin{code}
List⁻-DGM : (X : 𝓤 ̇) {{d : is-discrete' X}} → DGM 𝓤
List⁻-DGM X =
List⁻ X ,
([]⁻ , _·_) ,
List⁻-is-discrete ,
[]⁻-left-neutral ,
[]⁻-right-neutral ,
·-assoc ,
graphical⁻
\end{code}