module TPDB.Data where

data Identifier = Identifier { name :: String , arity :: Int }
    deriving ( Eq, Ord, Show )

data Term v s = Var v 
              | Node s [ Term v s ]
    deriving Show

data Rule a = Rule { lhs :: a, rhs :: a 
                   , strict :: Bool
                   , top :: Bool
                   }
    deriving Show

data RS s r = 
     RS { signature :: [ s ] -- ^ better keep order in signature (?)
         , rules :: [ Rule r ]
        , separate :: Bool -- ^ if True, write comma between rules
         }
    deriving Show

type TRS v s = RS s ( Term v s )

type SRS s = RS s [ s ]

data Problem v s = 
     Problem { trs :: TRS v s
             , strategy :: Strategy
             -- , metainformation :: Metainformation
             , type_ :: Type 
             }
     deriving Show

data Type = Termination | Complexity
     deriving Show 

data Strategy = Full | Innermost | Outermost
     deriving Show