Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ New modules

* `Data.List.Relation.Binary.Permutation.Declarative{.Properties}` for the least congruence on `List` making `_++_` commutative, and its equivalence with the `Setoid` definition.

* `Data.Vec.Functional.Algebra(.{Base|Properties})` - structures and bundles about functional vectors and modules.
Comment thread
JacquesCarette marked this conversation as resolved.
Outdated

Additions to existing modules
-----------------------------

Expand Down
139 changes: 139 additions & 0 deletions src/Data/Vec/Functional/Algebra/Base.agda
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
------------------------------------------------------------------------
-- The Agda standard library
--
-- Some Vector-related module Definitions
------------------------------------------------------------------------

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

module Data.Vec.Functional.Algebra.Base where

open import Level using (Level; suc; _⊔_)
open import Function using (_$_)
open import Data.Nat using (ℕ)
open import Data.Fin using (Fin)
open import Data.Vec.Functional
open import Algebra.Core
open import Algebra.Bundles

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

using , here and below?

open import Algebra.Module
open import Relation.Binary using (Rel)
open import Data.Vec.Functional.Relation.Binary.Pointwise using (Pointwise)

private variable
a ℓ : Level
A : Set a
n : ℕ

------------------------------------------------------------------------
-- Vector-lifted relations & operators

pointwiseᵛ : ( _≈_ : Rel A ℓ ) → Rel (Vector A n) ℓ
pointwiseᵛ _≈_ = Pointwise _≈_
Comment thread
e-mniang marked this conversation as resolved.
Outdated

zipWithᵛ : Op₂ A → Op₂ (Vector A n)
zipWithᵛ _∙_ = zipWith _∙_

mapᵛ : Op₁ A → Op₁ (Vector A n)
mapᵛ f = map f
Comment thread
e-mniang marked this conversation as resolved.
Outdated

------------------------------------------------------------------------
-- Vector-lifted raw structures

rawMagmaᵛ : RawMagma a ℓ → (n : ℕ) → RawMagma a ℓ
rawMagmaᵛ M n =
Comment thread
e-mniang marked this conversation as resolved.
Outdated
record
{ Carrier = Vector M.Carrier n
; _≈_ = pointwiseᵛ M._≈_
; _∙_ = zipWithᵛ M._∙_
}
where module M = RawMagma M

rawMonoidᵛ : RawMonoid a ℓ → (n : ℕ) → RawMonoid a ℓ
rawMonoidᵛ M n =
record
{ RawMagma (rawMagmaᵛ M.rawMagma n)
; ε = λ _ → M.ε
}
where module M = RawMonoid M

rawGroupᵛ : RawGroup a ℓ → (n : ℕ) → RawGroup a ℓ
rawGroupᵛ G n =
record
{ RawMonoid (rawMonoidᵛ G.rawMonoid n)
; _⁻¹ = mapᵛ G._⁻¹
}
where module G = RawGroup G

rawNearSemiringᵛ : RawNearSemiring a ℓ → (n : ℕ) → RawNearSemiring a ℓ
rawNearSemiringᵛ NS n =
record
{ Carrier = Vector NS.Carrier n
; _≈_ = pointwiseᵛ NS._≈_
; _+_ = zipWithᵛ NS._+_
; _*_ = zipWithᵛ NS._*_
; 0# = λ _ → NS.0#
}
where module NS = RawNearSemiring NS

rawSemiringᵛ : RawSemiring a ℓ → (n : ℕ) → RawSemiring a ℓ
rawSemiringᵛ S n =
record
{ RawNearSemiring (rawNearSemiringᵛ S.rawNearSemiring n)
; 1# = λ _ → S.1#
}
where module S = RawSemiring S

rawRingᵛ : RawRing a ℓ → (n : ℕ) → RawRing a ℓ
rawRingᵛ R n =
record
{ RawSemiring (rawSemiringᵛ R.rawSemiring n)
; -_ = mapᵛ R.-_
}
where module R = RawRing R

Comment thread
e-mniang marked this conversation as resolved.
------------------------------------------------------------------------
-- Vector actions (left/right scalar multiplication)

_*ₗᵛ_ : {S : Set a} → Op₂ S → Opₗ S (Vector S n)
_*ₗᵛ_ _*_ r xs = map (r *_) xs
Comment thread
e-mniang marked this conversation as resolved.
Outdated

_*ᵣᵛ_ : {S : Set a} → Op₂ S → Opᵣ S (Vector S n)
_*ᵣᵛ_ _*_ xs r = map (_* r) xs
Comment thread
e-mniang marked this conversation as resolved.
Outdated

------------------------------------------------------------------------
-- Vector-lifted semimodule bundles

rawLeftSemimoduleᵛ : (NS : RawNearSemiring a ℓ) (n : ℕ) → RawLeftSemimodule (RawNearSemiring.Carrier NS) a ℓ
rawLeftSemimoduleᵛ NS n =
record
{ Carrierᴹ = Vector NS.Carrier n
; _≈ᴹ_ = pointwiseᵛ NS._≈_
; _+ᴹ_ = zipWithᵛ NS._+_
; _*ₗ_ = _*ₗᵛ_ NS._*_
; 0ᴹ = λ _ → NS.0#
}
where module NS = RawNearSemiring NS

rawRightSemimoduleᵛ : (NS : RawNearSemiring a ℓ) (n : ℕ) → RawRightSemimodule (RawNearSemiring.Carrier NS) a ℓ
rawRightSemimoduleᵛ NS n =
record
{ Carrierᴹ = Vector NS.Carrier n
; _≈ᴹ_ = pointwiseᵛ NS._≈_
; _+ᴹ_ = zipWithᵛ NS._+_
; _*ᵣ_ = _*ᵣᵛ_ NS._*_
; 0ᴹ = λ _ → NS.0#
}
where module NS = RawNearSemiring NS

rawBisemimoduleᵛ : (NS : RawNearSemiring a ℓ) (n : ℕ) → RawBisemimodule (RawNearSemiring.Carrier NS)
(RawNearSemiring.Carrier NS) a ℓ
rawBisemimoduleᵛ NS n =
record
{ Carrierᴹ = Vector NS.Carrier n
; _≈ᴹ_ = pointwiseᵛ NS._≈_
; _+ᴹ_ = zipWithᵛ NS._+_
; _*ₗ_ = _*ₗᵛ_ NS._*_
; _*ᵣ_ = _*ᵣᵛ_ NS._*_
; 0ᴹ = λ _ → NS.0#
}
where module NS = RawNearSemiring NS
Loading