weighted-regexp-0.1.0.0: src/Data/Semiring/Properties.hs
-- |
-- Module : Data.Semiring.Properties
-- Copyright : Sebastian Fischer <mailto:mail@sebfisch.de>
-- License : BSD3
--
-- This library provides properties for the 'Semiring' type class that
-- can be checked using libraries like QuickCheck or SmallCheck.
--
module Data.Semiring.Properties (
module Data.Semiring, module Data.Semiring.Properties
) where
import Data.Semiring
-- | > a .+. b == b .+. a
plus'comm :: Semiring s => s -> s -> Bool
plus'comm a b = a .+. b == b .+. a
-- | > zero .+. a == a
left'zero :: Semiring s => s -> Bool
left'zero a = zero .+. a == a
-- | > (a .+. b) .+. c == a .+. (b .+. c)
add'assoc :: Semiring s => s -> s -> s -> Bool
add'assoc a b c = (a .+. b) .+. c == a .+. (b .+. c)
-- | > one .*. a == a
left'one :: Semiring s => s -> Bool
left'one a = one .*. a == a
-- | > a .*. one == a
right'one :: Semiring s => s -> Bool
right'one a = a .*. one == a
-- | > (a .*. b) .*. c == a .*. (b .*. c)
mul'assoc :: Semiring s => s -> s -> s -> Bool
mul'assoc a b c = (a .*. b) .*. c == a .*. (b .*. c)
-- | > a .*. (b .+. c) == (a .*. b) .+. (a .*. c)
left'distr :: Semiring s => s -> s -> s -> Bool
left'distr a b c = a .*. (b .+. c) == (a .*. b) .+. (a .*. c)
-- | > (a .+. b) .*. c == (a .*. c) .+. (b .*. c)
right'distr :: Semiring s => s -> s -> s -> Bool
right'distr a b c = (a .+. b) .*. c == (a .*. c) .+. (b .*. c)
-- | > zero .*. a == zero
left'ann :: Semiring s => s -> Bool
left'ann a = zero .*. a == zero
-- | > a .*. zero == zero
right'ann :: Semiring s => s -> Bool
right'ann a = a .*. zero == zero