{- | Module: $Header$ Description: Testing the OpenTheory standard theory library License: MIT Maintainer: Joe Leslie-Hurd Stability: provisional Portability: portable -} module Main ( main ) where import OpenTheory.Primitive.Natural import OpenTheory.Primitive.Test assertion0 :: Bool assertion0 = True assertion1 :: Bool assertion1 = (2 :: Natural) + 2 == 4 proposition0 :: Bool -> Bool proposition0 p = p || not p proposition1 :: Natural -> Natural -> Bool proposition1 m n = m + n == n + m proposition2 :: Natural -> Natural -> Bool proposition2 n k = shiftLeft n k == (2 ^ k) * n proposition3 :: Natural -> Natural -> Bool proposition3 n k = shiftRight n k == n `div` (2 ^ k) main :: IO () main = do assert "Assertion 0:\n T\n " assertion0 assert "Assertion 1:\n 2 + 2 = 4\n " assertion1 check "Proposition 0:\n !p. p \\/ ~p\n " proposition0 check "Proposition 1:\n !m n. m + n = n + m\n " proposition1 check "Proposition 2:\n !n k. shiftLeft n k = 2 ^ k * n\n " proposition2 check "Proposition 3:\n !n k. shiftRight n k = n div 2 ^ k\n " proposition3 return ()