{-# LANGUAGE OverloadedStrings #-} module KBO where import Language.REST.OCAlgebra import Language.REST.KBO import Language.REST.SMT import Language.REST.RuntimeTerm import Nat () -- IsString RuntimeTerm tests :: SolverHandle -> [(String, IO Bool)] tests solver = testList where gte :: RuntimeTerm -> RuntimeTerm -> IO Bool gte t u = isSat (kbo solver) (kboGTE t u) testList = [ ("Comm" , gte "f(a, b)" "f(b, a)") , ("Assoc" , gte "f(a, f(b, c))" "f((a b), c)") , ("Dist" , not <$> gte "f(a, g(b, c))" "g(f(a, b), f(a, c))") ]