packages feed

cpsa-4.4.6: src/CPSA/DL/Simplifier.hs

module CPSA.DL.Simplifier (simplify) where

import CPSA.DL.Structs

simplify :: Query -> Query
simplify (Query name args f) =
    Query name args (simpForm f)

simpForm :: Formula -> Formula
simpForm f@(Atom _ _ _) =
    f
simpForm (Not _ (Not _ f)) =
    simpForm f
simpForm (Not vs f) =
    (Not vs (simpForm f))
simpForm (And _ [f]) =
    simpForm f
simpForm (And vs fs) =
    And vs (map simpForm fs)
simpForm (Or _ [f]) =
    simpForm f
simpForm (Or vs fs) =
    Or vs (map simpForm fs)
simpForm (Exists vs vars f) =
    Exists vs vars (simpForm f)
simpForm (Diamond vs act f) =
    Diamond vs act (simpForm f)