{-# LANGUAGE OverloadedStrings #-}
module SMTLib2.Core where

import SMTLib2.AST

tBool :: Type
tBool = "Bool"

true :: Expr
true = app "true" []

false :: Expr
false = app "false" []

not :: Expr -> Expr
not p = app "not" [p]

(==>) :: Expr -> Expr -> Expr
p ==> q = app "=>" [p,q]

and :: Expr -> Expr -> Expr
and p q = app "and" [p,q]

or :: Expr -> Expr -> Expr
or p q = app "or" [p,q]

xor :: Expr -> Expr -> Expr
xor p q = app "xor" [p,q]

(===) :: Expr -> Expr -> Expr
x === y = app "=" [x,y]

(=/=) :: Expr -> Expr -> Expr
x =/= y = app "distinct" [x,y]

ite :: Expr -> Expr -> Expr -> Expr
ite b x y = app "ite" [b,x,y]