open import Algebra.Group.Notation
open import Algebra.Ring.Module
open import Algebra.Group.Ab
open import Algebra.Group
open import Algebra.Ring
open import Cat.Prelude hiding (_+_ ; _*_)
module Algebra.Ring.Module.Notation where
record Module-notation {ℓ ℓm} (R : Ring ℓ) (T : Type ℓm) : Type (ℓ ⊔ ℓm) where
private module R = Ring-on (R .snd)
field
instance additive-group : Abelian-group-on T
private
_+_ : T → T → T
_+_ = Abelian-group-on._*_ additive-group
field
+-comm : (a b : T) → a + b ≡ b + a
_⋆_ : ⌞ R ⌟ → T → T
⋆-distribl : ∀ r x y → r ⋆ (x + y) ≡ (r ⋆ x) + (r ⋆ y)
⋆-distribr : ∀ r s x → (r R.+ s) ⋆ x ≡ (r ⋆ x) + (s ⋆ x)
⋆-assoc : ∀ r s x → r ⋆ (s ⋆ x) ≡ (r R.* s) ⋆ x
⋆-id : ∀ x → R.1r ⋆ x ≡ x
infixr 25 _⋆_
module-notation : ∀ {ℓ ℓm} {R : Ring ℓ} (M : Module R ℓm) → Module-notation R ⌞ M ⌟
module-notation M .Module-notation.additive-group = Module-on→Abelian-group-on (M .snd)
module-notation M .Module-notation.+-comm a b = Module-on.+-comm (M .snd)
module-notation M .Module-notation._⋆_ = Module-on._⋆_ (M .snd)
module-notation M .Module-notation.⋆-distribl = Module-on.⋆-distribl (M .snd)
module-notation M .Module-notation.⋆-distribr = Module-on.⋆-distribr (M .snd)
module-notation M .Module-notation.⋆-assoc = Module-on.⋆-assoc (M .snd)
module-notation M .Module-notation.⋆-id = Module-on.⋆-id (M .snd)