diff options
Diffstat (limited to 'NaturalTransformation')
| -rw-r--r-- | NaturalTransformation/Instance/EmptyMultiset.agda | 25 | ||||
| -rw-r--r-- | NaturalTransformation/Instance/MultisetAppend.agda | 41 |
2 files changed, 38 insertions, 28 deletions
diff --git a/NaturalTransformation/Instance/EmptyMultiset.agda b/NaturalTransformation/Instance/EmptyMultiset.agda index 9c3a779..bfec451 100644 --- a/NaturalTransformation/Instance/EmptyMultiset.agda +++ b/NaturalTransformation/Instance/EmptyMultiset.agda @@ -1,6 +1,6 @@ {-# OPTIONS --without-K --safe #-} -open import Level using (Level) +open import Level using (Level; _⊔_) module NaturalTransformation.Instance.EmptyMultiset {c ℓ : Level} where @@ -8,16 +8,27 @@ import Function.Construct.Constant as Const open import Categories.NaturalTransformation using (NaturalTransformation; ntHelper) open import Categories.Functor using (Functor) -open import Categories.Category.Instance.SingletonSet using (SingletonSetoid) +open import Data.Setoid.Unit {c} {c ⊔ ℓ} using (⊤ₛ) open import Categories.Functor.Construction.Constant using (const) -open import Data.List using ([]) +open import Data.Opaque.Multiset using (Multisetₛ; []ₛ; mapₛ) open import Functor.Instance.Multiset {c} {ℓ} using (Multiset) +open import Function.Construct.Constant using () renaming (function to Const) open import Relation.Binary using (Setoid) +open import Data.Setoid using (_⇒ₛ_) +open import Function using (Func; _⟶ₛ_) +open import Function.Construct.Setoid using (_∙_) -module Multiset = Functor Multiset +opaque + unfolding mapₛ + map-[]ₛ + : {A B : Setoid c ℓ} + → (f : A ⟶ₛ B) + → (open Setoid (⊤ₛ ⇒ₛ Multisetₛ B)) + → []ₛ ≈ mapₛ f ∙ []ₛ + map-[]ₛ {B = B} f = Setoid.refl (Multisetₛ B) -⊤⇒[] : NaturalTransformation (const SingletonSetoid) Multiset +⊤⇒[] : NaturalTransformation (const ⊤ₛ) Multiset ⊤⇒[] = ntHelper record - { η = λ X → Const.function SingletonSetoid (Multiset.₀ X) [] - ; commute = λ {_} {B} f → Setoid.refl (Multiset.₀ B) + { η = λ X → []ₛ {Aₛ = X} + ; commute = map-[]ₛ } diff --git a/NaturalTransformation/Instance/MultisetAppend.agda b/NaturalTransformation/Instance/MultisetAppend.agda index b0e8bc4..f786124 100644 --- a/NaturalTransformation/Instance/MultisetAppend.agda +++ b/NaturalTransformation/Instance/MultisetAppend.agda @@ -4,43 +4,42 @@ open import Level using (Level; _⊔_) module NaturalTransformation.Instance.MultisetAppend {c ℓ : Level} where -open import Categories.NaturalTransformation using (NaturalTransformation; ntHelper) -open import Categories.Category.Product using (_※_) +import Data.Opaque.List as L + open import Categories.Category.BinaryProducts using (module BinaryProducts) -open import Categories.Category.Monoidal.Instance.Setoids using (Setoids-Cartesian) open import Categories.Category.Cartesian using (Cartesian) +open import Categories.Category.Monoidal.Instance.Setoids using (Setoids-Cartesian) +open import Categories.Category.Product using (_※_) open import Categories.Functor using (Functor; _∘F_) -open import Data.List using (List; _++_; map) +open import Categories.NaturalTransformation using (NaturalTransformation; ntHelper) open import Data.List.Properties using (map-++) open import Data.List.Relation.Binary.Permutation.Setoid.Properties using (++⁺) -open import Data.Product.Relation.Binary.Pointwise.NonDependent using (_×ₛ_) +open import Data.Opaque.Multiset using (Multisetₛ; mapₛ; ++ₛ) open import Data.Product using (_,_) +open import Data.Product.Relation.Binary.Pointwise.NonDependent using (_×ₛ_) +open import Function using (Func; _⟶ₛ_; _⟨$⟩_) open import Functor.Instance.Multiset {c} {ℓ} using (Multiset) -open import Function using (Func; _⟶ₛ_) open import Relation.Binary using (Setoid) -module Multiset = Functor Multiset - open Cartesian (Setoids-Cartesian {c} {c ⊔ ℓ}) using (products) open BinaryProducts products using (-×-) open Func -++ₛ : {X : Setoid c ℓ} → Multiset.₀ X ×ₛ Multiset.₀ X ⟶ₛ Multiset.₀ X -++ₛ .to (xs , ys) = xs ++ ys -++ₛ {A} .cong (≈xs , ≈ys) = ++⁺ A ≈xs ≈ys +opaque + unfolding ++ₛ mapₛ -map-++ₛ - : {A B : Setoid c ℓ} - (f : Func A B) - (xs ys : List (Setoid.Carrier A)) - → (open Setoid (Multiset.₀ B)) - → map (to f) xs ++ map (to f) ys ≈ map (to f) (xs ++ ys) -map-++ₛ {_} {B} f xs ys = sym (reflexive (map-++ (to f) xs ys)) - where - open Setoid (Multiset.₀ B) + map-++ₛ + : {A B : Setoid c ℓ} + (f : Func A B) + (xs ys : Setoid.Carrier (Multiset.₀ A)) + → (open Setoid (Multiset.₀ B)) + → ++ₛ ⟨$⟩ (mapₛ f ⟨$⟩ xs , mapₛ f ⟨$⟩ ys) ≈ mapₛ f ⟨$⟩ (++ₛ ⟨$⟩ (xs , ys)) + map-++ₛ {A} {B} f xs ys = sym (reflexive (map-++ (to f) xs ys)) + where + open Setoid (Multiset.₀ B) ++ : NaturalTransformation (-×- ∘F (Multiset ※ Multiset)) Multiset ++ = ntHelper record - { η = λ X → ++ₛ {X} + { η = λ X → ++ₛ ; commute = λ { {A} {B} f {xs , ys} → map-++ₛ f xs ys } } |
