Skip to content

Commit

Permalink
Add the Setoid-based Monoid on (List, [], _++_) (#2393)
Browse files Browse the repository at this point in the history
* refactored from #2350

* enriched the `module` contents in response to review comments
  • Loading branch information
jamesmckinna authored May 30, 2024
1 parent 4da2da6 commit 59d7b2e
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ New modules
Algebra.Module.Bundles.Raw
```

* Properties of `List` modulo `Setoid` equality (currently only the ([],++) monoid):
```
Data.List.Relation.Binary.Equality.Setoid.Properties
```

* Refactoring of `Data.List.Base.{scanr|scanl}` and their properties:
```
Data.List.Scans.Base
Expand Down
59 changes: 59 additions & 0 deletions src/Data/List/Relation/Binary/Equality/Setoid/Properties.agda
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
------------------------------------------------------------------------
-- The Agda standard library
--
-- Properties of List modulo ≋
------------------------------------------------------------------------

{-# OPTIONS --cubical-compatible --safe #-}

open import Relation.Binary.Bundles using (Setoid)

module Data.List.Relation.Binary.Equality.Setoid.Properties
{c ℓ} (S : Setoid c ℓ)
where

open import Algebra.Bundles using (Magma; Semigroup; Monoid)
import Algebra.Structures as Structures
open import Data.List.Base using (List; []; _++_)
import Data.List.Properties as List
import Data.List.Relation.Binary.Equality.Setoid as ≋
open import Data.Product.Base using (_,_)
open import Function.Base using (_∘_)
open import Level using (_⊔_)

open S using (_≋_; ≋-refl; ≋-reflexive; ≋-isEquivalence; ++⁺)
open Structures _≋_ using (IsMagma; IsSemigroup; IsMonoid)

------------------------------------------------------------------------
-- The []-++-Monoid

-- Structures

isMagma : IsMagma _++_
isMagma = record
{ isEquivalence = ≋-isEquivalence
; ∙-cong = ++⁺
}

isSemigroup : IsSemigroup _++_
isSemigroup = record
{ isMagma = isMagma
; assoc = λ xs ys zs ≋-reflexive (List.++-assoc xs ys zs)
}

isMonoid : IsMonoid _++_ []
isMonoid = record
{ isSemigroup = isSemigroup
; identity = (λ _ ≋-refl) , ≋-reflexive ∘ List.++-identityʳ
}

-- Bundles

magma : Magma c (c ⊔ ℓ)
magma = record { isMagma = isMagma }

semigroup : Semigroup c (c ⊔ ℓ)
semigroup = record { isSemigroup = isSemigroup }

monoid : Monoid c (c ⊔ ℓ)
monoid = record { isMonoid = isMonoid }

0 comments on commit 59d7b2e

Please sign in to comment.