packages feed

GenZ-0.1.0.0: bench/memory.hs

module Main (main) where

import System.Environment (getArgs)
import Data.List
import Weigh
import General
import Logic.Propositional.CPL
import Logic.Propositional.IPL
import Logic.Modal.K
import Logic.Modal.K4
import Logic.Modal.GL
import Logic.Modal.S4
import FormM
import FormP

main :: IO ()
main = do
  args <- getArgs
  mainWith $
    if "--all-formulas" `elem` args
    then do
      -- all formulas:
      makeCases [ ("CPL", classical), ("IPL", intui) ] allFormulasP [100]
      makeCases [ ("K", k), ("K4", kfour), ("GL", gl), ("S4", sfour) ] propFormulasM [10]
      makeCases [ ("K", k), ("K4", kfour), ("GL", gl), ("S4", sfour) ] boxesFormulasM [10]
      makeCases [ ("K", k) ] kFormulasM [2]
      makeCases [ ("K4", kfour) ] k4FormulasM [2]
      makeCases [ ("GL", gl) ] glFormulasM [2]
      makeCases [ ("S4", sfour) ] s4FormulasM [5]
    else do
      -- selected four formulas:
      makeCases [ ("IPL", intui) ] [("conPeiL",conPeiL), ("conPeiR",conPeiR)] [100] -- not provable
      makeCases [ ("K", k) ] [("boxesTop",boxesTop)] [1000] -- provable
      makeCases [ ("K4", kfour) ] [("lobBoxes",lobBoxes)] [10] -- not provable
      makeCases [ ("GL", gl) ] [("lobBoxes",lobBoxes)] [100] -- provable

makeCases :: (Ord f, Show f) => [(String, Logic f)] -> [(String, Int -> f)] -> [Int] -> Weigh ()
makeCases logics forms sizes = mapM_ (\ (label, logic, method, form, n) -> func label (method logic . form) n)
  [ (intercalate "|" [logicStr, formStr, methodStr, show n, show result], logic, method, formFor, n)
  | (logicStr, logic)   <- logics
  , (formStr, formFor)  <- forms
  , (methodStr, method) <- [ ("GenT", isProvableT)
                           , ("GenZ ", isProvableZ) ]
  , n <- sizes
  , let result = method logic (formFor n)
  ]