{-# LANGUAGE DeriveDataTypeable #-}
module QBF.Sublogic
    (
     slBasicSpec                  
    , QBFFormulae (..)             
    , QBFSL (..)                   
    , sublogicsMax                 
    , top                           
    , bottom                        
    , sublogicsAll                 
    , sublogicsName                
    , slSig                        
    , slForm                       
    , slSym                        
    , slSymit                      
    , slMor                        
    , slSymmap                     
    , prSymbolM                     
    , prSig                         
    , prMor                         
    , prSymMapM                     
    , prSymM                        
    , prFormulaM                    
    , prBasicSpec                   
    , isProp
    , isHC
    )
    where
import qualified QBF.Tools as Tools
import qualified QBF.AS_BASIC_QBF as AS_BASIC
import qualified QBF.Symbol as Symbol
import qualified QBF.Morphism as Morphism
import qualified Propositional.Sign as Sign
import qualified Common.Lib.State as State
import qualified Common.AS_Annotation as AS_Anno
import Data.Data
data QBFFormulae = PlainFormula      
                  | HornClause        
                  deriving (Int -> QBFFormulae -> ShowS
[QBFFormulae] -> ShowS
QBFFormulae -> String
(Int -> QBFFormulae -> ShowS)
-> (QBFFormulae -> String)
-> ([QBFFormulae] -> ShowS)
-> Show QBFFormulae
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [QBFFormulae] -> ShowS
$cshowList :: [QBFFormulae] -> ShowS
show :: QBFFormulae -> String
$cshow :: QBFFormulae -> String
showsPrec :: Int -> QBFFormulae -> ShowS
$cshowsPrec :: Int -> QBFFormulae -> ShowS
Show, QBFFormulae -> QBFFormulae -> Bool
(QBFFormulae -> QBFFormulae -> Bool)
-> (QBFFormulae -> QBFFormulae -> Bool) -> Eq QBFFormulae
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: QBFFormulae -> QBFFormulae -> Bool
$c/= :: QBFFormulae -> QBFFormulae -> Bool
== :: QBFFormulae -> QBFFormulae -> Bool
$c== :: QBFFormulae -> QBFFormulae -> Bool
Eq, Eq QBFFormulae
Eq QBFFormulae =>
(QBFFormulae -> QBFFormulae -> Ordering)
-> (QBFFormulae -> QBFFormulae -> Bool)
-> (QBFFormulae -> QBFFormulae -> Bool)
-> (QBFFormulae -> QBFFormulae -> Bool)
-> (QBFFormulae -> QBFFormulae -> Bool)
-> (QBFFormulae -> QBFFormulae -> QBFFormulae)
-> (QBFFormulae -> QBFFormulae -> QBFFormulae)
-> Ord QBFFormulae
QBFFormulae -> QBFFormulae -> Bool
QBFFormulae -> QBFFormulae -> Ordering
QBFFormulae -> QBFFormulae -> QBFFormulae
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
min :: QBFFormulae -> QBFFormulae -> QBFFormulae
$cmin :: QBFFormulae -> QBFFormulae -> QBFFormulae
max :: QBFFormulae -> QBFFormulae -> QBFFormulae
$cmax :: QBFFormulae -> QBFFormulae -> QBFFormulae
>= :: QBFFormulae -> QBFFormulae -> Bool
$c>= :: QBFFormulae -> QBFFormulae -> Bool
> :: QBFFormulae -> QBFFormulae -> Bool
$c> :: QBFFormulae -> QBFFormulae -> Bool
<= :: QBFFormulae -> QBFFormulae -> Bool
$c<= :: QBFFormulae -> QBFFormulae -> Bool
< :: QBFFormulae -> QBFFormulae -> Bool
$c< :: QBFFormulae -> QBFFormulae -> Bool
compare :: QBFFormulae -> QBFFormulae -> Ordering
$ccompare :: QBFFormulae -> QBFFormulae -> Ordering
$cp1Ord :: Eq QBFFormulae
Ord, Typeable, Typeable QBFFormulae
Constr
DataType
Typeable QBFFormulae =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> QBFFormulae -> c QBFFormulae)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c QBFFormulae)
-> (QBFFormulae -> Constr)
-> (QBFFormulae -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c QBFFormulae))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c QBFFormulae))
-> ((forall b. Data b => b -> b) -> QBFFormulae -> QBFFormulae)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r)
-> (forall u. (forall d. Data d => d -> u) -> QBFFormulae -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> QBFFormulae -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae)
-> Data QBFFormulae
QBFFormulae -> Constr
QBFFormulae -> DataType
(forall b. Data b => b -> b) -> QBFFormulae -> QBFFormulae
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFFormulae -> c QBFFormulae
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFFormulae
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> QBFFormulae -> u
forall u. (forall d. Data d => d -> u) -> QBFFormulae -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFFormulae
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFFormulae -> c QBFFormulae
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c QBFFormulae)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c QBFFormulae)
$cHornClause :: Constr
$cPlainFormula :: Constr
$tQBFFormulae :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
gmapMp :: (forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
gmapM :: (forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QBFFormulae -> m QBFFormulae
gmapQi :: Int -> (forall d. Data d => d -> u) -> QBFFormulae -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> QBFFormulae -> u
gmapQ :: (forall d. Data d => d -> u) -> QBFFormulae -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> QBFFormulae -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QBFFormulae -> r
gmapT :: (forall b. Data b => b -> b) -> QBFFormulae -> QBFFormulae
$cgmapT :: (forall b. Data b => b -> b) -> QBFFormulae -> QBFFormulae
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c QBFFormulae)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c QBFFormulae)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c QBFFormulae)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c QBFFormulae)
dataTypeOf :: QBFFormulae -> DataType
$cdataTypeOf :: QBFFormulae -> DataType
toConstr :: QBFFormulae -> Constr
$ctoConstr :: QBFFormulae -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFFormulae
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFFormulae
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFFormulae -> c QBFFormulae
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFFormulae -> c QBFFormulae
$cp1Data :: Typeable QBFFormulae
Data)
data QBFSL = QBFSL
    {
      QBFSL -> QBFFormulae
format :: QBFFormulae     
    } deriving (Int -> QBFSL -> ShowS
[QBFSL] -> ShowS
QBFSL -> String
(Int -> QBFSL -> ShowS)
-> (QBFSL -> String) -> ([QBFSL] -> ShowS) -> Show QBFSL
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [QBFSL] -> ShowS
$cshowList :: [QBFSL] -> ShowS
show :: QBFSL -> String
$cshow :: QBFSL -> String
showsPrec :: Int -> QBFSL -> ShowS
$cshowsPrec :: Int -> QBFSL -> ShowS
Show, QBFSL -> QBFSL -> Bool
(QBFSL -> QBFSL -> Bool) -> (QBFSL -> QBFSL -> Bool) -> Eq QBFSL
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: QBFSL -> QBFSL -> Bool
$c/= :: QBFSL -> QBFSL -> Bool
== :: QBFSL -> QBFSL -> Bool
$c== :: QBFSL -> QBFSL -> Bool
Eq, Eq QBFSL
Eq QBFSL =>
(QBFSL -> QBFSL -> Ordering)
-> (QBFSL -> QBFSL -> Bool)
-> (QBFSL -> QBFSL -> Bool)
-> (QBFSL -> QBFSL -> Bool)
-> (QBFSL -> QBFSL -> Bool)
-> (QBFSL -> QBFSL -> QBFSL)
-> (QBFSL -> QBFSL -> QBFSL)
-> Ord QBFSL
QBFSL -> QBFSL -> Bool
QBFSL -> QBFSL -> Ordering
QBFSL -> QBFSL -> QBFSL
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
min :: QBFSL -> QBFSL -> QBFSL
$cmin :: QBFSL -> QBFSL -> QBFSL
max :: QBFSL -> QBFSL -> QBFSL
$cmax :: QBFSL -> QBFSL -> QBFSL
>= :: QBFSL -> QBFSL -> Bool
$c>= :: QBFSL -> QBFSL -> Bool
> :: QBFSL -> QBFSL -> Bool
$c> :: QBFSL -> QBFSL -> Bool
<= :: QBFSL -> QBFSL -> Bool
$c<= :: QBFSL -> QBFSL -> Bool
< :: QBFSL -> QBFSL -> Bool
$c< :: QBFSL -> QBFSL -> Bool
compare :: QBFSL -> QBFSL -> Ordering
$ccompare :: QBFSL -> QBFSL -> Ordering
$cp1Ord :: Eq QBFSL
Ord, Typeable, Typeable QBFSL
Constr
DataType
Typeable QBFSL =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> QBFSL -> c QBFSL)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c QBFSL)
-> (QBFSL -> Constr)
-> (QBFSL -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c QBFSL))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QBFSL))
-> ((forall b. Data b => b -> b) -> QBFSL -> QBFSL)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r)
-> (forall u. (forall d. Data d => d -> u) -> QBFSL -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> QBFSL -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> QBFSL -> m QBFSL)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> QBFSL -> m QBFSL)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> QBFSL -> m QBFSL)
-> Data QBFSL
QBFSL -> Constr
QBFSL -> DataType
(forall b. Data b => b -> b) -> QBFSL -> QBFSL
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFSL -> c QBFSL
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFSL
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> QBFSL -> u
forall u. (forall d. Data d => d -> u) -> QBFSL -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFSL
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFSL -> c QBFSL
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c QBFSL)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QBFSL)
$cQBFSL :: Constr
$tQBFSL :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
gmapMp :: (forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
gmapM :: (forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QBFSL -> m QBFSL
gmapQi :: Int -> (forall d. Data d => d -> u) -> QBFSL -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> QBFSL -> u
gmapQ :: (forall d. Data d => d -> u) -> QBFSL -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> QBFSL -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QBFSL -> r
gmapT :: (forall b. Data b => b -> b) -> QBFSL -> QBFSL
$cgmapT :: (forall b. Data b => b -> b) -> QBFSL -> QBFSL
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QBFSL)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QBFSL)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c QBFSL)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c QBFSL)
dataTypeOf :: QBFSL -> DataType
$cdataTypeOf :: QBFSL -> DataType
toConstr :: QBFSL -> Constr
$ctoConstr :: QBFSL -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFSL
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c QBFSL
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFSL -> c QBFSL
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QBFSL -> c QBFSL
$cp1Data :: Typeable QBFSL
Data)
isProp :: QBFSL -> Bool
isProp :: QBFSL -> Bool
isProp sl :: QBFSL
sl = QBFSL -> QBFFormulae
format QBFSL
sl QBFFormulae -> QBFFormulae -> Bool
forall a. Eq a => a -> a -> Bool
== QBFFormulae
PlainFormula
isHC :: QBFSL -> Bool
isHC :: QBFSL -> Bool
isHC sl :: QBFSL
sl = QBFSL -> QBFFormulae
format QBFSL
sl QBFFormulae -> QBFFormulae -> Bool
forall a. Eq a => a -> a -> Bool
== QBFFormulae
HornClause
compareLE :: QBFSL -> QBFSL -> Bool
compareLE :: QBFSL -> QBFSL -> Bool
compareLE p1 :: QBFSL
p1 p2 :: QBFSL
p2 =
    let f1 :: QBFFormulae
f1 = QBFSL -> QBFFormulae
format QBFSL
p1
        f2 :: QBFFormulae
f2 = QBFSL -> QBFFormulae
format QBFSL
p2
    in
      case (QBFFormulae
f1, QBFFormulae
f2) of
        (_, PlainFormula) -> Bool
True
        (HornClause, HornClause) -> Bool
True
        (_, HornClause) -> Bool
False
top :: QBFSL
top :: QBFSL
top = QBFFormulae -> QBFSL
QBFSL QBFFormulae
PlainFormula
bottom :: QBFSL
bottom :: QBFSL
bottom = QBFFormulae -> QBFSL
QBFSL QBFFormulae
HornClause
needPF :: QBFSL
needPF :: QBFSL
needPF = QBFSL
bottom { format :: QBFFormulae
format = QBFFormulae
PlainFormula }
sublogicsJoin :: (QBFFormulae -> QBFFormulae -> QBFFormulae)
                  -> QBFSL -> QBFSL -> QBFSL
sublogicsJoin :: (QBFFormulae -> QBFFormulae -> QBFFormulae)
-> QBFSL -> QBFSL -> QBFSL
sublogicsJoin pfF :: QBFFormulae -> QBFFormulae -> QBFFormulae
pfF a :: QBFSL
a b :: QBFSL
b = QBFSL :: QBFFormulae -> QBFSL
QBFSL
                         {
                           format :: QBFFormulae
format = QBFFormulae -> QBFFormulae -> QBFFormulae
pfF (QBFSL -> QBFFormulae
format QBFSL
a) (QBFSL -> QBFFormulae
format QBFSL
b)
                         }
joinType :: QBFFormulae -> QBFFormulae -> QBFFormulae
joinType :: QBFFormulae -> QBFFormulae -> QBFFormulae
joinType HornClause HornClause = QBFFormulae
HornClause
joinType _ _ = QBFFormulae
PlainFormula
sublogicsMax :: QBFSL -> QBFSL -> QBFSL
sublogicsMax :: QBFSL -> QBFSL -> QBFSL
sublogicsMax = (QBFFormulae -> QBFFormulae -> QBFFormulae)
-> QBFSL -> QBFSL -> QBFSL
sublogicsJoin QBFFormulae -> QBFFormulae -> QBFFormulae
joinType
compList :: [QBFSL] -> QBFSL
compList :: [QBFSL] -> QBFSL
compList = (QBFSL -> QBFSL -> QBFSL) -> QBFSL -> [QBFSL] -> QBFSL
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
bottom
slSymmap :: QBFSL -> AS_BASIC.SYMBMAPITEMS -> QBFSL
slSymmap :: QBFSL -> SYMBMAPITEMS -> QBFSL
slSymmap ps :: QBFSL
ps _ = QBFSL
ps
slMor :: QBFSL -> Morphism.Morphism -> QBFSL
slMor :: QBFSL -> Morphism -> QBFSL
slMor ps :: QBFSL
ps _ = QBFSL
ps
slSig :: QBFSL -> Sign.Sign -> QBFSL
slSig :: QBFSL -> Sign -> QBFSL
slSig ps :: QBFSL
ps _ = QBFSL
ps
slSymit :: QBFSL -> AS_BASIC.SYMBITEMS -> QBFSL
slSymit :: QBFSL -> SYMBITEMS -> QBFSL
slSymit ps :: QBFSL
ps _ = QBFSL
ps
slSym :: QBFSL -> Symbol.Symbol -> QBFSL
slSym :: QBFSL -> Symbol -> QBFSL
slSym ps :: QBFSL
ps _ = QBFSL
ps
slForm :: QBFSL -> AS_BASIC.FORMULA -> QBFSL
slForm :: QBFSL -> FORMULA -> QBFSL
slForm ps :: QBFSL
ps = QBFSL -> [FORMULA] -> QBFSL
slFlForm QBFSL
ps ([FORMULA] -> QBFSL) -> (FORMULA -> [FORMULA]) -> FORMULA -> QBFSL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FORMULA -> [FORMULA]
Tools.flatten
slFlForm :: QBFSL -> [AS_BASIC.FORMULA] -> QBFSL
slFlForm :: QBFSL -> [FORMULA] -> QBFSL
slFlForm ps :: QBFSL
ps = (QBFSL -> QBFSL -> QBFSL) -> QBFSL -> [QBFSL] -> QBFSL
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
ps
  ([QBFSL] -> QBFSL) -> ([FORMULA] -> [QBFSL]) -> [FORMULA] -> QBFSL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FORMULA -> QBFSL) -> [FORMULA] -> [QBFSL]
forall a b. (a -> b) -> [a] -> [b]
map (\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) 0)
anaForm :: QBFSL -> AS_BASIC.FORMULA -> State.State Int QBFSL
anaForm :: QBFSL -> FORMULA -> State Int QBFSL
anaForm ps :: QBFSL
ps f :: FORMULA
f =
    case FORMULA
f of
      AS_BASIC.Conjunction l :: [FORMULA]
l _ ->
          do
            Int
st <- State Int Int
forall s. State s s
State.get
            QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return (QBFSL -> State Int QBFSL) -> QBFSL -> State Int QBFSL
forall a b. (a -> b) -> a -> b
$ QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
needPF (QBFSL -> QBFSL) -> QBFSL -> QBFSL
forall a b. (a -> b) -> a -> b
$ [QBFSL] -> QBFSL
compList ([QBFSL] -> QBFSL) -> [QBFSL] -> QBFSL
forall a b. (a -> b) -> a -> b
$ (FORMULA -> QBFSL) -> [FORMULA] -> [QBFSL]
forall a b. (a -> b) -> [a] -> [b]
map
              (\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)) [FORMULA]
l
      AS_BASIC.Implication l :: FORMULA
l m :: FORMULA
m _ ->
          do
             Int
st <- State Int Int
forall s. State s s
State.get
             let analyze :: QBFSL
analyze = QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
needPF (QBFSL -> QBFSL) -> QBFSL -> QBFSL
forall a b. (a -> b) -> a -> b
$ QBFSL -> QBFSL -> QBFSL
sublogicsMax
                   ((\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)) FORMULA
l)
                   ((\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)) FORMULA
m)
             QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return (QBFSL -> State Int QBFSL) -> QBFSL -> State Int QBFSL
forall a b. (a -> b) -> a -> b
$
                    if Int
st Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< 1 Bool -> Bool -> Bool
&& QBFSL -> QBFFormulae
format QBFSL
ps QBFFormulae -> QBFFormulae -> Bool
forall a. Eq a => a -> a -> Bool
== QBFFormulae
HornClause Bool -> Bool -> Bool
&& FORMULA -> FORMULA -> Bool
checkHornPos FORMULA
l FORMULA
m
                    then
                        QBFSL
ps
                    else
                        QBFSL
analyze
      AS_BASIC.Equivalence l :: FORMULA
l m :: FORMULA
m _ ->
           do
             Int
st <- State Int Int
forall s. State s s
State.get
             QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return (QBFSL -> State Int QBFSL) -> QBFSL -> State Int QBFSL
forall a b. (a -> b) -> a -> b
$ QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
needPF (QBFSL -> QBFSL) -> QBFSL -> QBFSL
forall a b. (a -> b) -> a -> b
$ QBFSL -> QBFSL -> QBFSL
sublogicsMax
               ((\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)) FORMULA
l)
               ((\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)) FORMULA
m)
      AS_BASIC.Negation l :: FORMULA
l _ ->
          if FORMULA -> Bool
isLiteral FORMULA
l
          then
                QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return QBFSL
ps
          else
              do
                Int
st <- State Int Int
forall s. State s s
State.get
                QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return (QBFSL -> State Int QBFSL) -> QBFSL -> State Int QBFSL
forall a b. (a -> b) -> a -> b
$ (\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)) FORMULA
l
      AS_BASIC.Disjunction l :: [FORMULA]
l _ ->
                    let lprime :: [FORMULA]
lprime = (FORMULA -> [FORMULA]) -> [FORMULA] -> [FORMULA]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap FORMULA -> [FORMULA]
Tools.flattenDis [FORMULA]
l in
                    if (FORMULA -> Bool) -> [FORMULA] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all FORMULA -> Bool
isLiteral [FORMULA]
lprime
                    then QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return (QBFSL -> State Int QBFSL) -> QBFSL -> State Int QBFSL
forall a b. (a -> b) -> a -> b
$
                        if [FORMULA] -> Int -> Bool
moreThanNLit [FORMULA]
lprime 1
                          then QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
needPF QBFSL
ps
                          else QBFSL
ps
                    else
                        do
                          Int
st <- State Int Int
forall s. State s s
State.get
                          QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return (QBFSL -> State Int QBFSL) -> QBFSL -> State Int QBFSL
forall a b. (a -> b) -> a -> b
$ QBFSL -> QBFSL -> QBFSL
sublogicsMax QBFSL
needPF (QBFSL -> QBFSL) -> QBFSL -> QBFSL
forall a b. (a -> b) -> a -> b
$ [QBFSL] -> QBFSL
compList ([QBFSL] -> QBFSL) -> [QBFSL] -> QBFSL
forall a b. (a -> b) -> a -> b
$ (FORMULA -> QBFSL) -> [FORMULA] -> [QBFSL]
forall a b. (a -> b) -> [a] -> [b]
map
                            (\ x :: FORMULA
x -> State Int QBFSL -> Int -> QBFSL
forall s a. State s a -> s -> a
State.evalState (QBFSL -> FORMULA -> State Int QBFSL
anaForm QBFSL
ps FORMULA
x) (Int
st Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1))
                                      [FORMULA]
lprime
      AS_BASIC.TrueAtom _ -> QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return QBFSL
ps
      AS_BASIC.FalseAtom _ -> QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return QBFSL
ps
      AS_BASIC.Predication _ -> QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return QBFSL
ps
      AS_BASIC.ForAll {} -> QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return QBFSL
needPF
      AS_BASIC.Exists {} -> QBFSL -> State Int QBFSL
forall (m :: * -> *) a. Monad m => a -> m a
return QBFSL
needPF
moreThanNLit :: [AS_BASIC.FORMULA] -> Int -> Bool
moreThanNLit :: [FORMULA] -> Int -> Bool
moreThanNLit = Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
(>) (Int -> Int -> Bool)
-> ([FORMULA] -> Int) -> [FORMULA] -> Int -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Bool -> Int) -> Int -> [Bool] -> Int
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\ y :: Int
y x :: Bool
x -> if Bool
x then Int
y Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1 else Int
y) 0
  ([Bool] -> Int) -> ([FORMULA] -> [Bool]) -> [FORMULA] -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FORMULA -> Bool) -> [FORMULA] -> [Bool]
forall a b. (a -> b) -> [a] -> [b]
map FORMULA -> Bool
isPosLiteral
isLiteral :: AS_BASIC.FORMULA -> Bool
isLiteral :: FORMULA -> Bool
isLiteral (AS_BASIC.Predication _) = Bool
True
isLiteral (AS_BASIC.Negation (AS_BASIC.Predication _) _ ) = Bool
True
isLiteral (AS_BASIC.Negation _ _) = Bool
False
isLiteral (AS_BASIC.Conjunction _ _) = Bool
False
isLiteral (AS_BASIC.Implication {}) = Bool
False
isLiteral (AS_BASIC.Equivalence {}) = Bool
False
isLiteral (AS_BASIC.Disjunction _ _) = Bool
False
isLiteral (AS_BASIC.ForAll {}) = Bool
False
isLiteral (AS_BASIC.Exists {}) = Bool
False
isLiteral (AS_BASIC.TrueAtom _) = Bool
True
isLiteral (AS_BASIC.FalseAtom _) = Bool
True
isPosLiteral :: AS_BASIC.FORMULA -> Bool
isPosLiteral :: FORMULA -> Bool
isPosLiteral (AS_BASIC.Predication _) = Bool
True
isPosLiteral (AS_BASIC.Negation _ _) = Bool
False
isPosLiteral (AS_BASIC.Conjunction _ _) = Bool
False
isPosLiteral (AS_BASIC.Implication {}) = Bool
False
isPosLiteral (AS_BASIC.Equivalence {}) = Bool
False
isPosLiteral (AS_BASIC.Disjunction _ _) = Bool
False
isPosLiteral (AS_BASIC.ForAll {}) = Bool
False
isPosLiteral (AS_BASIC.Exists {}) = Bool
False
isPosLiteral (AS_BASIC.TrueAtom _ ) = Bool
True
isPosLiteral (AS_BASIC.FalseAtom _) = Bool
True
slBasicItems :: QBFSL -> AS_BASIC.BASICITEMS -> QBFSL
slBasicItems :: QBFSL -> BASICITEMS -> QBFSL
slBasicItems ps :: QBFSL
ps bi :: BASICITEMS
bi =
    case BASICITEMS
bi of
      AS_BASIC.PredDecl _ -> QBFSL
ps
      AS_BASIC.AxiomItems xs :: [Annoted FORMULA]
xs -> [QBFSL] -> QBFSL
compList ([QBFSL] -> QBFSL) -> [QBFSL] -> QBFSL
forall a b. (a -> b) -> a -> b
$ (Annoted FORMULA -> QBFSL) -> [Annoted FORMULA] -> [QBFSL]
forall a b. (a -> b) -> [a] -> [b]
map (QBFSL -> FORMULA -> QBFSL
slForm QBFSL
ps (FORMULA -> QBFSL)
-> (Annoted FORMULA -> FORMULA) -> Annoted FORMULA -> QBFSL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Annoted FORMULA -> FORMULA
forall a. Annoted a -> a
AS_Anno.item) [Annoted FORMULA]
xs
slBasicSpec :: QBFSL -> AS_BASIC.BASICSPEC -> QBFSL
slBasicSpec :: QBFSL -> BASICSPEC -> QBFSL
slBasicSpec ps :: QBFSL
ps (AS_BASIC.BasicSpec spec :: [Annoted BASICITEMS]
spec) =
    [QBFSL] -> QBFSL
compList ([QBFSL] -> QBFSL) -> [QBFSL] -> QBFSL
forall a b. (a -> b) -> a -> b
$ (Annoted BASICITEMS -> QBFSL) -> [Annoted BASICITEMS] -> [QBFSL]
forall a b. (a -> b) -> [a] -> [b]
map (QBFSL -> BASICITEMS -> QBFSL
slBasicItems QBFSL
ps (BASICITEMS -> QBFSL)
-> (Annoted BASICITEMS -> BASICITEMS)
-> Annoted BASICITEMS
-> QBFSL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Annoted BASICITEMS -> BASICITEMS
forall a. Annoted a -> a
AS_Anno.item) [Annoted BASICITEMS]
spec
sublogicsAll :: [QBFSL]
sublogicsAll :: [QBFSL]
sublogicsAll =
    [QBFSL :: QBFFormulae -> QBFSL
QBFSL
     {
       format :: QBFFormulae
format = QBFFormulae
HornClause
     }
    , QBFSL :: QBFFormulae -> QBFSL
QBFSL
     {
       format :: QBFFormulae
format = QBFFormulae
PlainFormula
     }
    ]
sublogicsName :: QBFSL -> String
sublogicsName :: QBFSL -> String
sublogicsName f :: QBFSL
f = case QBFSL -> QBFFormulae
format QBFSL
f of
      HornClause -> "HornClause"
      PlainFormula -> "Prop"
prSymbolM :: QBFSL -> Symbol.Symbol -> Maybe Symbol.Symbol
prSymbolM :: QBFSL -> Symbol -> Maybe Symbol
prSymbolM _ = Symbol -> Maybe Symbol
forall a. a -> Maybe a
Just
prSig :: QBFSL -> Sign.Sign -> Sign.Sign
prSig :: QBFSL -> Sign -> Sign
prSig _ sig :: Sign
sig = Sign
sig
prMor :: QBFSL -> Morphism.Morphism -> Morphism.Morphism
prMor :: QBFSL -> Morphism -> Morphism
prMor _ mor :: Morphism
mor = Morphism
mor
prSymMapM :: QBFSL
          -> AS_BASIC.SYMBMAPITEMS
          -> Maybe AS_BASIC.SYMBMAPITEMS
prSymMapM :: QBFSL -> SYMBMAPITEMS -> Maybe SYMBMAPITEMS
prSymMapM _ = SYMBMAPITEMS -> Maybe SYMBMAPITEMS
forall a. a -> Maybe a
Just
prSymM :: QBFSL -> AS_BASIC.SYMBITEMS -> Maybe AS_BASIC.SYMBITEMS
prSymM :: QBFSL -> SYMBITEMS -> Maybe SYMBITEMS
prSymM _ = SYMBITEMS -> Maybe SYMBITEMS
forall a. a -> Maybe a
Just
prFormulaM :: QBFSL -> AS_BASIC.FORMULA -> Maybe AS_BASIC.FORMULA
prFormulaM :: QBFSL -> FORMULA -> Maybe FORMULA
prFormulaM sl :: QBFSL
sl form :: FORMULA
form
           | QBFSL -> QBFSL -> Bool
compareLE (QBFSL -> FORMULA -> QBFSL
slForm QBFSL
bottom FORMULA
form) QBFSL
sl = FORMULA -> Maybe FORMULA
forall a. a -> Maybe a
Just FORMULA
form
           | Bool
otherwise = Maybe FORMULA
forall a. Maybe a
Nothing
prPredItem :: QBFSL -> AS_BASIC.PREDITEM -> AS_BASIC.PREDITEM
prPredItem :: QBFSL -> PREDITEM -> PREDITEM
prPredItem _ prI :: PREDITEM
prI = PREDITEM
prI
prBASICItems :: QBFSL -> AS_BASIC.BASICITEMS -> AS_BASIC.BASICITEMS
prBASICItems :: QBFSL -> BASICITEMS -> BASICITEMS
prBASICItems pSL :: QBFSL
pSL bI :: BASICITEMS
bI =
    case BASICITEMS
bI of
      AS_BASIC.PredDecl pI :: PREDITEM
pI -> PREDITEM -> BASICITEMS
AS_BASIC.PredDecl (PREDITEM -> BASICITEMS) -> PREDITEM -> BASICITEMS
forall a b. (a -> b) -> a -> b
$ QBFSL -> PREDITEM -> PREDITEM
prPredItem QBFSL
pSL PREDITEM
pI
      AS_BASIC.AxiomItems aIS :: [Annoted FORMULA]
aIS -> [Annoted FORMULA] -> BASICITEMS
AS_BASIC.AxiomItems ([Annoted FORMULA] -> BASICITEMS)
-> [Annoted FORMULA] -> BASICITEMS
forall a b. (a -> b) -> a -> b
$ (Annoted FORMULA -> [Annoted FORMULA])
-> [Annoted FORMULA] -> [Annoted FORMULA]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap Annoted FORMULA -> [Annoted FORMULA]
mapH [Annoted FORMULA]
aIS
    where
      mapH :: AS_Anno.Annoted AS_BASIC.FORMULA
           -> [AS_Anno.Annoted AS_BASIC.FORMULA]
      mapH :: Annoted FORMULA -> [Annoted FORMULA]
mapH annoForm :: Annoted FORMULA
annoForm = let formP :: Maybe FORMULA
formP = QBFSL -> FORMULA -> Maybe FORMULA
prFormulaM QBFSL
pSL (FORMULA -> Maybe FORMULA) -> FORMULA -> Maybe FORMULA
forall a b. (a -> b) -> a -> b
$ Annoted FORMULA -> FORMULA
forall a. Annoted a -> a
AS_Anno.item Annoted FORMULA
annoForm in
                      case Maybe FORMULA
formP of
                        Nothing -> []
                        Just f :: FORMULA
f -> [ Annoted :: forall a. a -> Range -> [Annotation] -> [Annotation] -> Annoted a
AS_Anno.Annoted
                                   {
                                     item :: FORMULA
AS_Anno.item = FORMULA
f
                                   , opt_pos :: Range
AS_Anno.opt_pos = Annoted FORMULA -> Range
forall a. Annoted a -> Range
AS_Anno.opt_pos Annoted FORMULA
annoForm
                                   , l_annos :: [Annotation]
AS_Anno.l_annos = Annoted FORMULA -> [Annotation]
forall a. Annoted a -> [Annotation]
AS_Anno.l_annos Annoted FORMULA
annoForm
                                   , r_annos :: [Annotation]
AS_Anno.r_annos = Annoted FORMULA -> [Annotation]
forall a. Annoted a -> [Annotation]
AS_Anno.r_annos Annoted FORMULA
annoForm
                                   }
                                   ]
prBasicSpec :: QBFSL -> AS_BASIC.BASICSPEC -> AS_BASIC.BASICSPEC
prBasicSpec :: QBFSL -> BASICSPEC -> BASICSPEC
prBasicSpec pSL :: QBFSL
pSL (AS_BASIC.BasicSpec bS :: [Annoted BASICITEMS]
bS) =
    [Annoted BASICITEMS] -> BASICSPEC
AS_BASIC.BasicSpec ([Annoted BASICITEMS] -> BASICSPEC)
-> [Annoted BASICITEMS] -> BASICSPEC
forall a b. (a -> b) -> a -> b
$ (Annoted BASICITEMS -> Annoted BASICITEMS)
-> [Annoted BASICITEMS] -> [Annoted BASICITEMS]
forall a b. (a -> b) -> [a] -> [b]
map Annoted BASICITEMS -> Annoted BASICITEMS
mapH [Annoted BASICITEMS]
bS
    where
      mapH :: AS_Anno.Annoted AS_BASIC.BASICITEMS
           -> AS_Anno.Annoted AS_BASIC.BASICITEMS
      mapH :: Annoted BASICITEMS -> Annoted BASICITEMS
mapH aBI :: Annoted BASICITEMS
aBI = Annoted :: forall a. a -> Range -> [Annotation] -> [Annotation] -> Annoted a
AS_Anno.Annoted
                 {
                   item :: BASICITEMS
AS_Anno.item = QBFSL -> BASICITEMS -> BASICITEMS
prBASICItems QBFSL
pSL (BASICITEMS -> BASICITEMS) -> BASICITEMS -> BASICITEMS
forall a b. (a -> b) -> a -> b
$ Annoted BASICITEMS -> BASICITEMS
forall a. Annoted a -> a
AS_Anno.item Annoted BASICITEMS
aBI
                 , opt_pos :: Range
AS_Anno.opt_pos = Annoted BASICITEMS -> Range
forall a. Annoted a -> Range
AS_Anno.opt_pos Annoted BASICITEMS
aBI
                 , l_annos :: [Annotation]
AS_Anno.l_annos = Annoted BASICITEMS -> [Annotation]
forall a. Annoted a -> [Annotation]
AS_Anno.l_annos Annoted BASICITEMS
aBI
                 , r_annos :: [Annotation]
AS_Anno.r_annos = Annoted BASICITEMS -> [Annotation]
forall a. Annoted a -> [Annotation]
AS_Anno.r_annos Annoted BASICITEMS
aBI
                 }
checkHornPos :: AS_BASIC.FORMULA -> AS_BASIC.FORMULA -> Bool
checkHornPos :: FORMULA -> FORMULA -> Bool
checkHornPos fc :: FORMULA
fc fl :: FORMULA
fl =
    case FORMULA
fc of
      AS_BASIC.Conjunction _ _ -> (FORMULA -> Bool) -> [FORMULA] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all FORMULA -> Bool
isPosLiteral ([FORMULA] -> Bool) -> [FORMULA] -> Bool
forall a b. (a -> b) -> a -> b
$ FORMULA -> [FORMULA]
Tools.flatten FORMULA
fc
      _ -> Bool
False
    Bool -> Bool -> Bool
&&
    FORMULA -> Bool
isPosLiteral FORMULA
fl