liquid-fixpoint-0.9.0.2.1: src/Language/Fixpoint/Solver/Common.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wno-name-shadowing #-}
module Language.Fixpoint.Solver.Common (askSMT, toSMT) where
import Language.Fixpoint.Types.Config (Config)
import Language.Fixpoint.Smt.Interface (Context(..), checkValidWithContext)
import Language.Fixpoint.Types
import Language.Fixpoint.Types.Visitor (kvarsExpr)
import Language.Fixpoint.Defunctionalize (defuncAny)
import Language.Fixpoint.SortCheck (elaborate)
mytracepp :: (PPrint a) => String -> a -> a
mytracepp = notracepp
askSMT :: Config -> Context -> [(Symbol, Sort)] -> Expr -> IO Bool
askSMT cfg ctx bs e
-- | isContraPred e = return False
| isTautoPred e = return True
| null (kvarsExpr e) = checkValidWithContext ctx [] PTrue e'
| otherwise = return False
where
e' = toSMT "askSMT" cfg ctx bs e
toSMT :: String -> Config -> Context -> [(Symbol, Sort)] -> Expr -> Pred
toSMT msg cfg ctx bs e =
defuncAny cfg senv .
elaborate (dummyLoc msg) (elabEnv bs) .
mytracepp ("toSMT from " ++ msg ++ showpp e) $
e
where
elabEnv = insertsSymEnv senv
senv = ctxSymEnv ctx