12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- {-# LANGUAGE TemplateHaskell #-}
- module Internal.Termination.Semiring
- ( semiringInvariant
- , tests
- ) where
- import Agda.Termination.Semiring
- import Internal.Helpers
- semiringInvariant :: Eq a
- => Semiring a
- -> a -> a -> a -> Bool
- semiringInvariant (Semiring { add = (+), mul = (*)
- , zero = zero
- }) = \x y z ->
- isAssociative (+) x y z &&
- isIdentity zero (+) x &&
- isCommutative (+) x y &&
- isAssociative (*) x y z &&
- isLeftDistributive (*) (+) x y z &&
- isRightDistributive (*) (+) x y z &&
- isZero zero (*) x
- prop_integerSemiring :: Integer -> Integer -> Integer -> Bool
- prop_integerSemiring = semiringInvariant integerSemiring
- prop_intSemiring :: Int -> Int -> Int -> Bool
- prop_intSemiring = semiringInvariant intSemiring
- prop_boolSemiring :: Bool -> Bool -> Bool -> Bool
- prop_boolSemiring = semiringInvariant boolSemiring
- return []
- tests :: TestTree
- tests = testProperties "Internal.Termination.Semiring" $allProperties
|