{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Eta reduce" #-}
module Hermod.ReCon.Presburger.Formula(BinRel(..), Formula(..), unfoldImplies) where
import Hermod.ReCon.Common.Types (BinRel (..), NatValue)
import Hermod.ReCon.Integer.Polynomial.Term
data Formula =
Or Formula Formula
| And Formula Formula
| Not Formula
| Implies Formula Formula
| Top
| Bottom
| IntForall VariableIdentifier Formula
| IntExists VariableIdentifier Formula
| IntBinRel BinRel IntTerm IntTerm
| IntDiv NatValue IntTerm deriving (Int -> Formula -> ShowS
[Formula] -> ShowS
Formula -> String
(Int -> Formula -> ShowS)
-> (Formula -> String) -> ([Formula] -> ShowS) -> Show Formula
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Formula -> ShowS
showsPrec :: Int -> Formula -> ShowS
$cshow :: Formula -> String
show :: Formula -> String
$cshowList :: [Formula] -> ShowS
showList :: [Formula] -> ShowS
Show, Formula -> Formula -> Bool
(Formula -> Formula -> Bool)
-> (Formula -> Formula -> Bool) -> Eq Formula
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Formula -> Formula -> Bool
== :: Formula -> Formula -> Bool
$c/= :: Formula -> Formula -> Bool
/= :: Formula -> Formula -> Bool
Eq, Eq Formula
Eq Formula =>
(Formula -> Formula -> Ordering)
-> (Formula -> Formula -> Bool)
-> (Formula -> Formula -> Bool)
-> (Formula -> Formula -> Bool)
-> (Formula -> Formula -> Bool)
-> (Formula -> Formula -> Formula)
-> (Formula -> Formula -> Formula)
-> Ord Formula
Formula -> Formula -> Bool
Formula -> Formula -> Ordering
Formula -> Formula -> Formula
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Formula -> Formula -> Ordering
compare :: Formula -> Formula -> Ordering
$c< :: Formula -> Formula -> Bool
< :: Formula -> Formula -> Bool
$c<= :: Formula -> Formula -> Bool
<= :: Formula -> Formula -> Bool
$c> :: Formula -> Formula -> Bool
> :: Formula -> Formula -> Bool
$c>= :: Formula -> Formula -> Bool
>= :: Formula -> Formula -> Bool
$cmax :: Formula -> Formula -> Formula
max :: Formula -> Formula -> Formula
$cmin :: Formula -> Formula -> Formula
min :: Formula -> Formula -> Formula
Ord)
unfoldImplies :: Formula -> Formula -> Formula
unfoldImplies :: Formula -> Formula -> Formula
unfoldImplies Formula
a Formula
b = Formula -> Formula -> Formula
Or (Formula -> Formula
Not Formula
a) Formula
b