abides-0.0.1: src/Test/Abides/Data/Semiring.hs
module Test.Abides.Data.Semiring where
import qualified Test.Abides.Properties as P
commutativeMonoid :: Num a => Eq a => a -> a -> a -> Bool
commutativeMonoid x y z = a && b && c
where
a = P.associative (+) x y z
b = (0 + x == x + 0) && (x + 0 == x)
c = P.commutative (+) x y
monoid :: Num a => Eq a => a -> a -> a -> Bool
monoid x y z = a && b
where
a = P.associative (*) x y z
b = (1 * x == x * 1) && (x * 1 == x)
leftDistributive :: Num a => Eq a => a -> a -> a -> Bool
leftDistributive x = P.distributive (x *) (+)
rightDistributive :: Num a => Eq a => a -> a -> a -> Bool
rightDistributive x = P.distributive (* x) (+)
annihilation :: Num a => Eq a => a -> Bool
annihilation x = (x * 0 == 0 * x) && (x * 0 == 0)