{-# OPTIONS --cubical --safe #-}
module Algebra where
open import Prelude
module _ {โ} (๐ : Type โ) where
record Magma : Type โ where
infixl 6 _โ_
field
_โ_ : ๐ โ ๐ โ ๐
infix 4 _โ_
_โ_ : ๐ โ ๐ โ Type _
x โ y = โ z ร y โก x โ z
record UnitalMagma : Type โ where
infixl 6 _โ_
field
_โ_ : ๐ โ ๐ โ ๐
ฮต : ๐
magma : Magma
magma = record { _โ_ = _โ_ }
open Magma magma using (_โ_) public
record Semigroup : Type โ where
infixl 6 _โ_
field
_โ_ : ๐ โ ๐ โ ๐
assoc : โ x y z โ (x โ y) โ z โก x โ (y โ z)
magma : Magma
magma = record { _โ_ = _โ_ }
open Magma magma using (_โ_) public
โ-trans : โ x y z โ x โ y โ y โ z โ x โ z
โ-trans x y z xโy yโz .fst = xโy .fst โ yโz .fst
โ-trans x y z xโy yโz .snd = yโz .snd โจพ cong (_โ _) (xโy .snd) โจพ assoc x _ _
record Monoid : Type โ where
infixl 6 _โ_
field
_โ_ : ๐ โ ๐ โ ๐
ฮต : ๐
assoc : โ x y z โ (x โ y) โ z โก x โ (y โ z)
ฮตโ : โ x โ ฮต โ x โก x
โฮต : โ x โ x โ ฮต โก x
semigroup : Semigroup
semigroup = record
{ _โ_ = _โ_; assoc = assoc }
unitalMagma : UnitalMagma
unitalMagma = record
{ _โ_ = _โ_; ฮต = ฮต }
open Semigroup semigroup using (_โ_; โ-trans) public
record CommutativeMonoid : Type โ where
field
monoid : Monoid
open Monoid monoid public
field
comm : โ x y โ x โ y โก y โ x
record Semilattice : Type โ where
field
commutativeMonoid : CommutativeMonoid
open CommutativeMonoid commutativeMonoid public
field
idem : โ x โ x โ x โก x