packages feed

logic-classes-1.1: Data/Logic/Tests/Harrison/Meson.hs

{-# LANGUAGE FlexibleContexts, RankNTypes, ScopedTypeVariables, TypeFamilies #-}
{-# OPTIONS_GHC -Wall #-}
module Data.Logic.Tests.Harrison.Meson where

import Control.Applicative.Error (Failing(..))
import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.Logic.Classes.Skolem (Skolem(..))
import Data.Logic.Classes.Term (Term(vt, fApp))
import Data.Logic.Harrison.Meson(meson)
import Data.Logic.Harrison.Skolem (runSkolem)
import Data.Logic.Tests.Harrison.Resolution (dpExampleFm)
import Data.Logic.Tests.Harrison.HUnit
import Data.Logic.Types.Harrison.Equal (FOLEQ)
import Data.Logic.Types.Harrison.Formulas.FirstOrder (Formula)
import Data.String (IsString(fromString))
import Prelude hiding (negate)
-- import Test.HUnit (Test(TestCase, TestLabel), assertEqual)

-- ------------------------------------------------------------------------- 
-- Example.                                                                  
-- ------------------------------------------------------------------------- 

test01 :: Test (Formula FOLEQ)
test01 = TestLabel "Data.Logic.Tests.Harrison.Meson" $ TestCase $ assertEqual "meson dp example (p. 220)" expected input
    where input = runSkolem (meson (Just 10) (dpExampleFm :: Formula FOLEQ))
          expected = Set.singleton (
                                    -- Success ((Map.empty, 0, 0), 8)
                                    Success ((Map.fromList [(fromString "_0",vt' "_6"),
                                                            (fromString "_1",vt' "_2"),
                                                            (fromString "_10",fApp (toSkolem 1) [vt' "_6",vt' "_7"]),
                                                            (fromString "_11",fApp (toSkolem 1) [vt' "_6",vt' "_7"]),
                                                            (fromString "_12",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_13",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_14",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_15",fApp (toSkolem 1) [vt' "_12",vt' "_13"]),
                                                            (fromString "_16",fApp (toSkolem 1) [vt' "_12",vt' "_13"]),
                                                            (fromString "_17",fApp (toSkolem 1) [vt' "_12",vt' "_13"]),
                                                            (fromString "_3",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_4",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_5",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_7",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_8",fApp (toSkolem 1) [vt' "_0",vt' "_1"]),
                                                            (fromString "_9",fApp (toSkolem 1) [vt' "_6",vt' "_7"])],0,18),8)
                                   )
          vt' = vt . fromString