-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | An equational theorem prover -- -- Twee is an experimental equational theorem prover based on -- Knuth-Bendix completion. -- -- Given a set of equational axioms and a set of equational conjectures -- it will try to prove the conjectures. It will terminate if the -- conjectures are true but normally fail to terminate if they are false. -- -- The input problem should be in TPTP format (see http://www.tptp.org). -- You can use types and quantifiers, but apart from that the problem -- must be equational. @package twee @version 0.1 -- | Miscellaneous utility functions. module Twee.Utils repeatM :: Monad m => m a -> m [a] partitionBy :: Ord b => (a -> b) -> [a] -> [[a]] collate :: Ord a => ([b] -> c) -> [(a, b)] -> [(a, c)] isSorted :: Ord a => [a] -> Bool isSortedBy :: Ord b => (a -> b) -> [a] -> Bool usort :: Ord a => [a] -> [a] usortBy :: (a -> a -> Ordering) -> [a] -> [a] sortBy' :: Ord b => (a -> b) -> [a] -> [a] usortBy' :: Ord b => (a -> b) -> [a] -> [a] orElse :: Ordering -> Ordering -> Ordering unbuffered :: IO a -> IO a newtype Max a Max :: Maybe a -> Max a [getMax] :: Max a -> Maybe a getMaxWith :: Ord a => a -> Max a -> a newtype Min a Min :: Maybe a -> Min a [getMin] :: Min a -> Maybe a getMinWith :: Ord a => a -> Min a -> a labelM :: Monad m => (a -> m b) -> [a] -> m [(a, b)] instance GHC.Classes.Ord a => GHC.Base.Monoid (Twee.Utils.Max a) instance GHC.Classes.Ord a => GHC.Base.Monoid (Twee.Utils.Min a) module Twee.Term.Core data Symbol Symbol :: Bool -> Int -> Int -> Symbol [isFun] :: Symbol -> Bool [index] :: Symbol -> Int [size] :: Symbol -> Int toSymbol :: Int64 -> Symbol fromSymbol :: Symbol -> Int64 data TermList f TermList :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !ByteArray -> TermList f [low] :: TermList f -> {-# UNPACK #-} !Int [high] :: TermList f -> {-# UNPACK #-} !Int [array] :: TermList f -> {-# UNPACK #-} !ByteArray at :: Int -> TermList f -> Term f lenList :: TermList f -> Int data Term f Term :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !(TermList f) -> Term f [root] :: Term f -> {-# UNPACK #-} !Int64 [termlist] :: Term f -> {-# UNPACK #-} !(TermList f) unsafePatHead :: TermList f -> Maybe (Term f, TermList f, TermList f) patHead :: TermList f -> Maybe (Term f, TermList f, TermList f) newtype Fun f MkFun :: Int -> Fun f newtype Var MkVar :: Int -> Var patRoot :: Int64 -> Either Var (Fun f) patNext :: TermList f -> TermList f singleton :: Term f -> TermList f eqSameLength :: TermList f -> TermList f -> Bool compareContents :: TermList f -> TermList f -> Ordering newtype Builder f Builder :: (forall s. Builder1 s) -> Builder f [unBuilder] :: Builder f -> forall s. Builder1 s type Builder1 s = State# s -> MutableByteArray# s -> Int# -> Int# -> (# State# s, Int# #) buildTermList :: Builder f -> TermList f getArray :: (MutableByteArray s -> Builder1 s) -> Builder1 s getSize :: (Int -> Builder1 s) -> Builder1 s getIndex :: (Int -> Builder1 s) -> Builder1 s putIndex :: Int -> Builder1 s liftST :: ST s () -> Builder1 s built :: Builder1 s then_ :: Builder1 s -> Builder1 s -> Builder1 s checked :: Int -> Builder1 s -> Builder1 s emitSymbolBuilder :: Symbol -> Builder f -> Builder f emitFun :: Fun f -> Builder f -> Builder f emitVar :: Var -> Builder f emitTermList :: TermList f -> Builder f instance GHC.Enum.Enum Twee.Term.Core.Var instance GHC.Classes.Ord Twee.Term.Core.Var instance GHC.Classes.Eq Twee.Term.Core.Var instance GHC.Classes.Eq (Twee.Term.Core.Fun f) instance GHC.Show.Show Twee.Term.Core.Symbol instance GHC.Classes.Eq (Twee.Term.Core.Term f) instance GHC.Classes.Ord (Twee.Term.Core.Term f) instance GHC.Show.Show (Twee.Term.Core.Fun f) instance GHC.Show.Show Twee.Term.Core.Var instance GHC.Classes.Eq (Twee.Term.Core.TermList f) instance GHC.Classes.Ord (Twee.Term.Core.TermList f) instance GHC.Base.Monoid (Twee.Term.Core.Builder f) module Twee.Term class Build f a | a -> f builder :: Build f a => a -> Builder f build :: Build f a => a -> Term f buildList :: Build f a => a -> TermList f con :: Fun f -> Builder f fun :: Build f a => Fun f -> a -> Builder f var :: Var -> Builder f listSubstList :: Subst f -> [(Var, TermList f)] listSubst :: Subst f -> [(Var, Term f)] foldSubst :: (Var -> TermList f -> b -> b) -> b -> Subst f -> b allSubst :: (Var -> TermList f -> Bool) -> Subst f -> Bool forMSubst_ :: Monad m => Subst f -> (Var -> TermList f -> m ()) -> m () class Substitution f s | s -> f evalSubst :: Substitution f s => s -> Var -> Builder f subst :: Substitution f s => s -> Term f -> Builder f substList :: Substitution f s => s -> TermList f -> Builder f newtype Subst f Subst :: IntMap (TermList f) -> Subst f [unSubst] :: Subst f -> IntMap (TermList f) substSize :: Subst f -> Int lookupList :: Var -> Subst f -> Maybe (TermList f) extendList :: Var -> TermList f -> Subst f -> Maybe (Subst f) retract :: Var -> Subst f -> Subst f unsafeExtendList :: Var -> TermList f -> Subst f -> Subst f substCompose :: Substitution f s => Subst f -> s -> Subst f substCompatible :: Subst f -> Subst f -> Bool substUnion :: Subst f -> Subst f -> Subst f idempotent :: Subst f -> Bool idempotentOn :: Subst f -> TermList f -> Bool close :: TriangleSubst f -> Subst f canonicalise :: [TermList f] -> Subst f emptySubst :: Subst f flattenSubst :: [(Var, Term f)] -> Maybe (Subst f) match :: Term f -> Term f -> Maybe (Subst f) matchList :: TermList f -> TermList f -> Maybe (Subst f) newtype TriangleSubst f Triangle :: Subst f -> TriangleSubst f [unTriangle] :: TriangleSubst f -> Subst f substTri :: Subst f -> Var -> Builder f unify :: Term f -> Term f -> Maybe (Subst f) unifyList :: TermList f -> TermList f -> Maybe (Subst f) unifyTri :: Term f -> Term f -> Maybe (TriangleSubst f) unifyListTri :: TermList f -> TermList f -> Maybe (TriangleSubst f) children :: Term f -> TermList f fromTermList :: TermList f -> [Term f] lookup :: Var -> Subst f -> Maybe (Term f) extend :: Var -> Term f -> Subst f -> Maybe (Subst f) len :: Term f -> Int emitTerm :: Term f -> Builder f bound :: Term f -> Int boundList :: TermList f -> Int occurs :: Var -> Term f -> Bool occursList :: Var -> TermList f -> Bool termListToList :: TermList f -> [Term f] emptyTermList :: TermList f subtermsList :: TermList f -> [Term f] subterms :: Term f -> [Term f] properSubtermsList :: TermList f -> [Term f] properSubterms :: Term f -> [Term f] isFun :: Term f -> Bool isVar :: Term f -> Bool isInstanceOf :: Term f -> Term f -> Bool isVariantOf :: Term f -> Term f -> Bool mapFun :: (Fun f -> Fun g) -> Term f -> Builder g mapFunList :: (Fun f -> Fun g) -> TermList f -> Builder g class Numbered f fromInt :: Numbered f => Int -> f toInt :: Numbered f => f -> Int fromFun :: Numbered f => Fun f -> f toFun :: Numbered f => f -> Fun f app :: Numbered a => a -> [Term a] -> Term a data Term f data TermList f at :: Int -> TermList f -> Term f lenList :: TermList f -> Int newtype Fun f MkFun :: Int -> Fun f newtype Var MkVar :: Int -> Var singleton :: Term f -> TermList f data Builder f instance GHC.Show.Show (Twee.Term.TriangleSubst f) instance Twee.Term.Build f (Twee.Term.Core.Builder f) instance Twee.Term.Build f (Twee.Term.Core.Term f) instance Twee.Term.Build f (Twee.Term.Core.TermList f) instance Twee.Term.Build f a => Twee.Term.Build f [a] instance (Twee.Term.Build f a, v ~ Twee.Term.Core.Var) => Twee.Term.Substitution f (v -> a) instance Twee.Term.Substitution f (Twee.Term.Subst f) instance Twee.Term.Substitution f (Twee.Term.TriangleSubst f) instance GHC.Show.Show (Twee.Term.Core.Term f) instance GHC.Show.Show (Twee.Term.Core.TermList f) instance GHC.Show.Show (Twee.Term.Subst f) instance (GHC.Classes.Ord f, Twee.Term.Numbered f) => GHC.Classes.Ord (Twee.Term.Core.Fun f) -- | Pretty-printing of terms and assorted other values. module Twee.Pretty prettyPrint :: Pretty a => a -> IO () pPrintParen :: Bool -> Doc -> Doc pPrintTuple :: [Doc] -> Doc pPrintSet :: [Doc] -> Doc -- | Generate a list of candidate names for pretty-printing. supply :: [String] -> [String] -- | A class for customising the printing of function symbols. class Pretty f => PrettyTerm f where termStyle _ = curried termStyle :: PrettyTerm f => f -> TermStyle -- | Defines how to print out a function symbol. newtype TermStyle TermStyle :: (forall a. Pretty a => PrettyLevel -> Rational -> Doc -> [a] -> Doc) -> TermStyle -- | Takes the pretty-printing level, precedence, pretty-printed function -- symbol and list of arguments and prints the term. [pPrintTerm] :: TermStyle -> forall a. Pretty a => PrettyLevel -> Rational -> Doc -> [a] -> Doc -- | For operators like $ that should be printed as a blank space. invisible :: TermStyle -- | For functions that should be printed curried. curried :: TermStyle -- | For functions that should be printed uncurried. uncurried :: TermStyle -- | For prefix operators. prefix :: TermStyle -- | For postfix operators. postfix :: TermStyle -- | A helper function that deals with under- and oversaturated -- applications. fixedArity :: Int -> TermStyle -> TermStyle -- | A helper function that drops a certain number of arguments. implicitArguments :: Int -> TermStyle -> TermStyle -- | For infix operators. infixStyle :: Int -> TermStyle -- | For tuples. tupleStyle :: TermStyle -- | Pretty printing class. The precedence level is used in a similar way -- as in the Show class. Minimal complete definition is either -- pPrintPrec or pPrint. class Pretty a pPrintPrec :: Pretty a => PrettyLevel -> Rational -> a -> Doc pPrint :: Pretty a => a -> Doc pPrintList :: Pretty a => PrettyLevel -> [a] -> Doc instance Text.PrettyPrint.HughesPJClass.Pretty Text.PrettyPrint.HughesPJ.Doc instance Text.PrettyPrint.HughesPJClass.Pretty a => Text.PrettyPrint.HughesPJClass.Pretty (Data.Set.Base.Set a) instance Text.PrettyPrint.HughesPJClass.Pretty Twee.Term.Core.Var instance (Text.PrettyPrint.HughesPJClass.Pretty k, Text.PrettyPrint.HughesPJClass.Pretty v) => Text.PrettyPrint.HughesPJClass.Pretty (Data.Map.Base.Map k v) instance (GHC.Classes.Eq a, GHC.Real.Integral a, Text.PrettyPrint.HughesPJClass.Pretty a) => Text.PrettyPrint.HughesPJClass.Pretty (GHC.Real.Ratio a) instance (Twee.Term.Numbered f, Text.PrettyPrint.HughesPJClass.Pretty f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Term.Core.Fun f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Term.Core.Term f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Term.Core.TermList f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Term.Subst f) -- | Assignment of unique IDs to values. Inspired by the intern -- package. module Twee.Label class Ord a => Labelled a where initialId _ = 0 cache :: Labelled a => Cache a initialId :: Labelled a => a -> Int type Cache a = IORef (CacheState a) data CacheState a CacheState :: {-# UNPACK #-} !Int -> !(IntMap a) -> !(Map a Int) -> CacheState a [nextId] :: CacheState a -> {-# UNPACK #-} !Int [to] :: CacheState a -> !(IntMap a) [from] :: CacheState a -> !(Map a Int) mkCache :: forall a. Labelled a => Cache a label :: Labelled a => a -> Int find :: Labelled a => Int -> Maybe a instance GHC.Show.Show a => GHC.Show.Show (Twee.Label.CacheState a) module Twee.Constraints data Atom f Constant :: (Fun f) -> Atom f Variable :: Var -> Atom f atoms :: Term f -> [Atom f] toTerm :: Atom f -> Term f fromTerm :: Term f -> Maybe (Atom f) data Formula f Less :: (Atom f) -> (Atom f) -> Formula f LessEq :: (Atom f) -> (Atom f) -> Formula f And :: [Formula f] -> Formula f Or :: [Formula f] -> Formula f negateFormula :: Formula f -> Formula f conj :: (Foldable t, Numbered f, Ord f) => t (Formula f) -> Formula f disj :: (Foldable t, Numbered f, Ord f) => t (Formula f) -> Formula f (&&&) :: (Ord f, Numbered f) => Formula f -> Formula f -> Formula f (|||) :: (Ord f, Numbered f) => Formula f -> Formula f -> Formula f true :: Formula f false :: Formula f data Branch f Branch :: [Fun f] -> [(Atom f, Atom f)] -> [(Atom f, Atom f)] -> Branch f [funs] :: Branch f -> [Fun f] [less] :: Branch f -> [(Atom f, Atom f)] [equals] :: Branch f -> [(Atom f, Atom f)] trueBranch :: Branch f norm :: Eq f => Branch f -> Atom f -> Atom f contradictory :: (Numbered f, Minimal f, Ord f) => Branch f -> Bool formAnd :: (Numbered f, Minimal f, Ord f) => Formula f -> [Branch f] -> [Branch f] branches :: (Numbered f, Minimal f, Ord f) => Formula f -> [Branch f] addLess :: (Numbered f, Minimal f, Ord f) => Atom f -> Atom f -> Branch f -> [Branch f] addEquals :: (Numbered f, Minimal f, Ord f) => Atom f -> Atom f -> Branch f -> [Branch f] addTerm :: (Numbered f, Minimal f, Ord f) => Atom f -> Branch f -> Branch f newtype Model f Model :: (Map (Atom f) (Int, Int)) -> Model f modelToLiterals :: Model f -> [Formula f] modelFromOrder :: (Numbered f, Minimal f, Ord f) => [Atom f] -> Model f weakenModel :: Ord (Fun f) => Model f -> [Model f] varInModel :: (Numbered f, Minimal f, Ord f) => Model f -> Var -> Bool varGroups :: (Numbered f, Minimal f, Ord f) => Model f -> [(Fun f, [Var], Maybe (Fun f))] class Minimal a minimal :: Minimal a => a lessEqInModel :: (Numbered f, Minimal f, Ord f) => Model f -> Atom f -> Atom f -> Maybe Strictness solve :: (Numbered f, Minimal f, Ord f, PrettyTerm f) => [Atom f] -> Branch f -> Either (Model f) (Subst f) class Ord f => Ordered f where orientTerms t u | t == u = Just EQ | lessEq t u = Just LT | lessEq u t = Just GT | otherwise = Nothing orientTerms :: Ordered f => Term f -> Term f -> Maybe Ordering lessEq :: Ordered f => Term f -> Term f -> Bool lessIn :: Ordered f => Model f -> Term f -> Term f -> Maybe Strictness data Strictness Strict :: Strictness Nonstrict :: Strictness instance GHC.Show.Show Twee.Constraints.Strictness instance GHC.Classes.Eq Twee.Constraints.Strictness instance GHC.Show.Show (Twee.Constraints.Model f) instance GHC.Show.Show (Twee.Constraints.Formula f) instance GHC.Show.Show (Twee.Constraints.Atom f) instance GHC.Classes.Eq (Twee.Term.Core.Fun f) => GHC.Classes.Eq (Twee.Constraints.Atom f) instance GHC.Classes.Ord (Twee.Term.Core.Fun f) => GHC.Classes.Ord (Twee.Constraints.Atom f) instance GHC.Classes.Eq (Twee.Term.Core.Fun f) => GHC.Classes.Eq (Twee.Constraints.Formula f) instance GHC.Classes.Ord (Twee.Term.Core.Fun f) => GHC.Classes.Ord (Twee.Constraints.Formula f) instance GHC.Classes.Eq (Twee.Term.Core.Fun f) => GHC.Classes.Eq (Twee.Constraints.Branch f) instance GHC.Classes.Ord (Twee.Term.Core.Fun f) => GHC.Classes.Ord (Twee.Constraints.Branch f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Constraints.Atom f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Constraints.Formula f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Constraints.Branch f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Constraints.Model f) instance (Twee.Term.Numbered f, Twee.Constraints.Minimal f) => Twee.Constraints.Minimal (Twee.Term.Core.Fun f) module Twee.Base class Symbolic a where type ConstantOf a where { type family ConstantOf a; } term :: Symbolic a => a -> TermOf a termsDL :: Symbolic a => a -> DList (TermListOf a) replace :: Symbolic a => (TermListOf a -> BuilderOf a) -> a -> a terms :: Symbolic a => a -> [TermListOf a] subst :: (Symbolic a, Substitution (ConstantOf a) s) => s -> a -> a type TermOf a = Term (ConstantOf a) type TermListOf a = TermList (ConstantOf a) type SubstOf a = Subst (ConstantOf a) type BuilderOf a = Builder (ConstantOf a) type FunOf a = Fun (ConstantOf a) vars :: Symbolic a => a -> [Var] isGround :: Symbolic a => a -> Bool funs :: Symbolic a => a -> [FunOf a] occ :: Symbolic a => FunOf a -> a -> Int canonicalise :: Symbolic a => a -> a class Minimal a minimal :: Minimal a => a minimalTerm :: (Numbered f, Minimal f) => Term f isMinimal :: (Numbered f, Minimal f) => Term f -> Bool class Skolem f skolem :: Skolem f => Var -> f class Arity f arity :: Arity f => f -> Int class Sized a size :: Sized a => a -> Int class Ord f => Ordered f where orientTerms t u | t == u = Just EQ | lessEq t u = Just LT | lessEq u t = Just GT | otherwise = Nothing orientTerms :: Ordered f => Term f -> Term f -> Maybe Ordering lessEq :: Ordered f => Term f -> Term f -> Bool lessIn :: Ordered f => Model f -> Term f -> Term f -> Maybe Strictness data Strictness Strict :: Strictness Nonstrict :: Strictness class (Numbered f, Ordered f, Arity f, Sized f, Minimal f, Skolem f, PrettyTerm f) => Function f data Extended f Minimal :: Extended f Skolem :: Int -> Extended f Function :: f -> Extended f extended :: Numbered f => TermList f -> Builder (Extended f) unextended :: Numbered f => TermList (Extended f) -> Builder f instance GHC.Base.Functor Twee.Base.Extended instance GHC.Show.Show f => GHC.Show.Show (Twee.Base.Extended f) instance GHC.Classes.Ord f => GHC.Classes.Ord (Twee.Base.Extended f) instance GHC.Classes.Eq f => GHC.Classes.Eq (Twee.Base.Extended f) instance Twee.Base.Symbolic (Twee.Term.Core.Term f) instance Twee.Base.Symbolic (Twee.Term.Core.TermList f) instance (Twee.Base.ConstantOf a ~ Twee.Base.ConstantOf b, Twee.Base.Symbolic a, Twee.Base.Symbolic b) => Twee.Base.Symbolic (a, b) instance (Twee.Base.ConstantOf a ~ Twee.Base.ConstantOf b, Twee.Base.ConstantOf a ~ Twee.Base.ConstantOf c, Twee.Base.Symbolic a, Twee.Base.Symbolic b, Twee.Base.Symbolic c) => Twee.Base.Symbolic (a, b, c) instance Twee.Base.Symbolic a => Twee.Base.Symbolic [a] instance (Twee.Term.Numbered f, Twee.Base.Skolem f) => Twee.Base.Skolem (Twee.Term.Core.Fun f) instance (Twee.Term.Numbered f, Twee.Base.Arity f) => Twee.Base.Arity (Twee.Term.Core.Fun f) instance (Twee.Base.Sized f, Twee.Term.Numbered f) => Twee.Base.Sized (Twee.Term.Core.Fun f) instance (Twee.Base.Sized f, Twee.Term.Numbered f) => Twee.Base.Sized (Twee.Term.Core.TermList f) instance (Twee.Base.Sized f, Twee.Term.Numbered f) => Twee.Base.Sized (Twee.Term.Core.Term f) instance (Twee.Term.Numbered f, Twee.Constraints.Ordered f, Twee.Base.Arity f, Twee.Base.Sized f, Twee.Constraints.Minimal f, Twee.Base.Skolem f, Twee.Pretty.PrettyTerm f) => Twee.Base.Function f instance Twee.Constraints.Minimal (Twee.Base.Extended f) instance Twee.Base.Skolem (Twee.Base.Extended f) instance Twee.Term.Numbered f => Twee.Term.Numbered (Twee.Base.Extended f) instance Text.PrettyPrint.HughesPJClass.Pretty f => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Base.Extended f) instance Twee.Pretty.PrettyTerm f => Twee.Pretty.PrettyTerm (Twee.Base.Extended f) instance Twee.Base.Sized f => Twee.Base.Sized (Twee.Base.Extended f) instance Twee.Base.Arity f => Twee.Base.Arity (Twee.Base.Extended f) module Twee.KBO lessEq :: Function f => Term f -> Term f -> Bool lessIn :: Function f => Model f -> Term f -> Term f -> Maybe Strictness sizeLessIn :: Function f => Model f -> Term f -> Term f -> Maybe Strictness minimumIn :: Function f => Model f -> Map Var Int -> Maybe Int lexLessIn :: Function f => Model f -> Term f -> Term f -> Maybe Strictness module Twee.LPO lessEq :: Function f => Term f -> Term f -> Bool lessIn :: Function f => Model f -> Term f -> Term f -> Maybe Strictness module Twee.Queue class Heuristic h where reinsert = insert members = unfoldr remove insert :: (Heuristic h, Ord a) => a -> h a -> h a remove :: (Heuristic h, Ord a) => h a -> Maybe (a, h a) reinsert :: (Heuristic h, Ord a) => a -> h a -> h a members :: (Heuristic h, Ord a) => h a -> [a] emptyHeap :: Heap a data FIFO a FIFO :: [a] -> [a] -> FIFO a emptyFIFO :: FIFO a data Either1 h1 h2 a Left1 :: (h1 a) -> Either1 h1 h2 a Right1 :: (h2 a) -> Either1 h1 h2 a data Mix h a Mix :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> !(h a) -> !(h a) -> Mix h a [takeLeft] :: Mix h a -> {-# UNPACK #-} !Int [takeRight] :: Mix h a -> {-# UNPACK #-} !Int [takeNext] :: Mix h a -> {-# UNPACK #-} !Int [left] :: Mix h a -> !(h a) [right] :: Mix h a -> !(h a) emptyMix :: Int -> Int -> h a -> h a -> Mix h a data Queue h a Queue :: !(h a) -> h a -> Set Label -> Label -> Queue h a [queue] :: Queue h a -> !(h a) [emptyQueue] :: Queue h a -> h a [queueLabels] :: Queue h a -> Set Label [nextLabel] :: Queue h a -> Label class Ord a => Labels a labels :: Labels a => a -> [Label] empty :: h a -> Queue h a emptyFrom :: Queue q a -> Queue q a enqueue :: (Heuristic h, Labels a) => a -> Queue h a -> Queue h a reenqueue :: (Heuristic h, Labels a) => a -> Queue h a -> Queue h a dequeue :: (Heuristic h, Labels a) => Queue h a -> Maybe (a, Queue h a) queueSize :: (Heuristic h, Labels a) => Queue h a -> Int toList :: (Heuristic h, Labels a) => Queue h a -> [a] newtype Label Label :: Int -> Label noLabel :: Label newLabel :: Queue h a -> (Label, Queue h a) deleteLabel :: Label -> Queue h a -> Queue h a data Labelled a Labelled :: Label -> a -> Labelled a [labelOf] :: Labelled a -> Label [peel] :: Labelled a -> a moveLabel :: Functor f => Labelled (f a) -> f (Labelled a) unlabelled :: a -> Labelled a -- | A min-heap of values of type a. data Heap a :: * -> * instance GHC.Base.Functor Twee.Queue.Labelled instance GHC.Show.Show a => GHC.Show.Show (Twee.Queue.Labelled a) instance GHC.Show.Show (h a) => GHC.Show.Show (Twee.Queue.Queue h a) instance GHC.Real.Real Twee.Queue.Label instance GHC.Enum.Enum Twee.Queue.Label instance GHC.Real.Integral Twee.Queue.Label instance GHC.Show.Show Twee.Queue.Label instance GHC.Num.Num Twee.Queue.Label instance GHC.Classes.Ord Twee.Queue.Label instance GHC.Classes.Eq Twee.Queue.Label instance GHC.Show.Show (h a) => GHC.Show.Show (Twee.Queue.Mix h a) instance (GHC.Show.Show (h2 a), GHC.Show.Show (h1 a)) => GHC.Show.Show (Twee.Queue.Either1 h1 h2 a) instance GHC.Show.Show a => GHC.Show.Show (Twee.Queue.FIFO a) instance Twee.Queue.Heuristic Data.Heap.Heap instance Twee.Queue.Heuristic Twee.Queue.FIFO instance (Twee.Queue.Heuristic h1, Twee.Queue.Heuristic h2) => Twee.Queue.Heuristic (Twee.Queue.Either1 h1 h2) instance Twee.Queue.Heuristic h => Twee.Queue.Heuristic (Twee.Queue.Mix h) instance GHC.Classes.Eq (Twee.Queue.Labelled a) instance GHC.Classes.Ord (Twee.Queue.Labelled a) instance Twee.Base.Symbolic a => Twee.Base.Symbolic (Twee.Queue.Labelled a) instance Text.PrettyPrint.HughesPJClass.Pretty a => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Queue.Labelled a) module Twee.Array data Array a Array :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !(Array a) -> Array a [arraySize] :: Array a -> {-# UNPACK #-} !Int [arrayContents] :: Array a -> {-# UNPACK #-} !(Array a) class Default a def :: Default a => a toList :: Array a -> [(Int, a)] newArray :: Default a => Array a (!) :: Default a => Array a -> Int -> a update :: Default a => Int -> a -> Array a -> Array a instance GHC.Show.Show a => GHC.Show.Show (Twee.Array.Array a) module Twee.Index data Index a Index :: {-# UNPACK #-} !Int -> [Entry a] -> {-# UNPACK #-} !(Array (Index a)) -> !(Index a) -> Index a [size] :: Index a -> {-# UNPACK #-} !Int [here] :: Index a -> [Entry a] [fun] :: Index a -> {-# UNPACK #-} !(Array (Index a)) [var] :: Index a -> !(Index a) Singleton :: {-# UNPACK #-} !(TermListOf a) -> {-# UNPACK #-} !(Entry a) -> Index a [key] :: Index a -> {-# UNPACK #-} !(TermListOf a) [value] :: Index a -> {-# UNPACK #-} !(Entry a) Nil :: Index a data Entry a Entry :: {-# UNPACK #-} !(TermOf a) -> a -> Entry a [e_key] :: Entry a -> {-# UNPACK #-} !(TermOf a) [e_value] :: Entry a -> a null :: Index a -> Bool singleton :: Symbolic a => a -> Index a insert :: Symbolic a => a -> Index a -> Index a expand :: TermListOf a -> Entry a -> Index a delete :: (Eq a, Symbolic a) => a -> Index a -> Index a elem :: (Eq a, Symbolic a) => a -> Index a -> Bool data Match a Match :: a -> SubstOf a -> Match a [matchResult] :: Match a -> a [matchSubst] :: Match a -> SubstOf a newtype Frozen a Frozen :: (TermListOf a -> [Match a]) -> Frozen a [matchesList_] :: Frozen a -> TermListOf a -> [Match a] matchesList :: TermListOf a -> Frozen a -> [Match a] lookup :: Symbolic a => TermOf a -> Frozen a -> [a] matches :: TermOf a -> Frozen a -> [Match a] freeze :: Index a -> Frozen a find :: TermListOf a -> Index a -> [Match a] -> [Match a] elems :: Index a -> [a] map :: (ConstantOf a ~ ConstantOf b) => (a -> b) -> Frozen a -> Frozen b filter :: (a -> Bool) -> Frozen a -> Frozen a union :: Frozen a -> Frozen a -> Frozen a instance GHC.Show.Show a => GHC.Show.Show (Twee.Index.Index a) instance GHC.Show.Show a => GHC.Show.Show (Twee.Index.Entry a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Twee.Index.Entry a) instance Twee.Array.Default (Twee.Index.Index a) module Twee.Indexes class Rated a rating :: Rated a => a -> Int maxRating :: Rated a => a -> Int newtype Indexes a Indexes :: Array Int (Index a) -> Indexes a [unIndexes] :: Indexes a -> Array Int (Index a) empty :: forall a. Rated a => Indexes a singleton :: (Symbolic a, Rated a) => a -> Indexes a insert :: forall a. (Symbolic a, Rated a) => a -> Indexes a -> Indexes a delete :: forall a. (Eq a, Symbolic a, Rated a) => a -> Indexes a -> Indexes a freeze :: Int -> Indexes a -> Frozen a elems :: forall a. Rated a => Indexes a -> [a] instance GHC.Show.Show a => GHC.Show.Show (Twee.Indexes.Indexes a) module Twee.Rule data Rule f Rule :: Orientation f -> Term f -> Term f -> Rule f [orientation] :: Rule f -> Orientation f [lhs] :: Rule f -> Term f [rhs] :: Rule f -> Term f data Orientation f Oriented :: Orientation f WeaklyOriented :: [Term f] -> Orientation f Permutative :: [(Term f, Term f)] -> Orientation f Unoriented :: Orientation f oriented :: Orientation f -> Bool pPrintRule :: (Numbered f, PrettyTerm f) => Term f -> Term f -> Doc data Equation f (:=:) :: Term f -> Term f -> Equation f type EquationOf a = Equation (ConstantOf a) order :: Function f => Equation f -> Equation f unorient :: Rule f -> Equation f orient :: Function f => Equation f -> [Rule f] rule :: Function f => Term f -> Term f -> Rule f bothSides :: (Term f -> Term f') -> Equation f -> Equation f' trivial :: Eq f => Equation f -> Bool type Strategy f = Term f -> [Reduction f] data Reduction f Step :: (Rule f) -> (Subst f) -> Reduction f Trans :: (Reduction f) -> (Reduction f) -> Reduction f Parallel :: [(Int, Reduction f)] -> (Term f) -> Reduction f result :: Reduction f -> Term f pPrintReduction :: (Numbered f, PrettyTerm f) => Reduction f -> Doc steps :: Reduction f -> [(Rule f, Subst f)] anywhere1 :: (Numbered f, PrettyTerm f) => Strategy f -> Reduction f -> Maybe (Reduction f) normaliseWith :: (Numbered f, PrettyTerm f) => Strategy f -> Term f -> Reduction f normalForms :: Function f => Strategy f -> [Term f] -> Set (Term f) anywhere :: Strategy f -> Strategy f nested :: Strategy f -> Strategy f rewrite :: Function f => String -> (Rule f -> Subst f -> Bool) -> Frozen (Rule f) -> Strategy f tryRule :: Function f => (Rule f -> Subst f -> Bool) -> Rule f -> Strategy f simplifies :: Function f => Rule f -> Subst f -> Bool reducesWith :: Function f => (Term f -> Term f -> Bool) -> Rule f -> Subst f -> Bool reduces :: Function f => Rule f -> Subst f -> Bool reducesInModel :: Function f => Model f -> Rule f -> Subst f -> Bool reducesSkolem :: Function f => Rule f -> Subst f -> Bool reducesSub :: Function f => Term f -> Rule f -> Subst f -> Bool instance GHC.Show.Show (Twee.Rule.Reduction f) instance GHC.Show.Show (Twee.Rule.Equation f) instance GHC.Classes.Ord (Twee.Rule.Equation f) instance GHC.Classes.Eq (Twee.Rule.Equation f) instance GHC.Show.Show (Twee.Rule.Rule f) instance GHC.Classes.Ord (Twee.Rule.Rule f) instance GHC.Classes.Eq (Twee.Rule.Rule f) instance GHC.Show.Show (Twee.Rule.Orientation f) instance GHC.Classes.Eq (Twee.Rule.Orientation f) instance GHC.Classes.Ord (Twee.Rule.Orientation f) instance Twee.Base.Symbolic (Twee.Rule.Rule f) instance Twee.Base.Symbolic (Twee.Rule.Orientation f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Rule.Rule f) instance Twee.Base.Symbolic (Twee.Rule.Equation f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Rule.Equation f) instance (Twee.Term.Numbered f, Twee.Base.Sized f) => Twee.Base.Sized (Twee.Rule.Equation f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Rule.Reduction f) module Twee data Twee f Twee :: Maybe Int -> {-# UNPACK #-} !(Indexes (Labelled (Modelled (Critical (Rule f))))) -> {-# UNPACK #-} !(Indexes (Rule f)) -> !(Index (Labelled (CancellationRule f))) -> [Set (Term f)] -> Int -> Int -> Int -> Int -> Int -> !(Queue (Mix (Either1 FIFO Heap)) (Passive f)) -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Int -> Int -> Map JoinReason Int -> Twee f [maxSize] :: Twee f -> Maybe Int [labelledRules] :: Twee f -> {-# UNPACK #-} !(Indexes (Labelled (Modelled (Critical (Rule f))))) [extraRules] :: Twee f -> {-# UNPACK #-} !(Indexes (Rule f)) [cancellationRules] :: Twee f -> !(Index (Labelled (CancellationRule f))) [goals] :: Twee f -> [Set (Term f)] [totalCPs] :: Twee f -> Int [processedCPs] :: Twee f -> Int [renormaliseAt] :: Twee f -> Int [minimumCPSetSize] :: Twee f -> Int [cpSplits] :: Twee f -> Int [queue] :: Twee f -> !(Queue (Mix (Either1 FIFO Heap)) (Passive f)) [useGeneralSuperpositions] :: Twee f -> Bool [useGroundJoining] :: Twee f -> Bool [useConnectedness] :: Twee f -> Bool [useSetJoining] :: Twee f -> Bool [useSetJoiningForGoals] :: Twee f -> Bool [useCancellation] :: Twee f -> Bool [maxCancellationSize] :: Twee f -> Maybe Int [atomicCancellation] :: Twee f -> Bool [unifyConstantsInCancellation] :: Twee f -> Bool [useInterreduction] :: Twee f -> Bool [useUnsafeInterreduction] :: Twee f -> Bool [skipCompositeSuperpositions] :: Twee f -> Bool [tracing] :: Twee f -> Bool [moreTracing] :: Twee f -> Bool [lhsWeight] :: Twee f -> Int [rhsWeight] :: Twee f -> Int [joinStatistics] :: Twee f -> Map JoinReason Int initialState :: Int -> Int -> Twee f addGoals :: [Set (Term f)] -> Twee f -> Twee f report :: Function f => Twee f -> String enqueueM :: Function f => Passive f -> State (Twee f) () reenqueueM :: Function f => Passive f -> State (Twee f) () dequeueM :: Function f => State (Twee f) (Maybe (Passive f)) newLabelM :: State (Twee f) Label data Modelled a Modelled :: Model (ConstantOf a) -> [Int] -> a -> Modelled a [model] :: Modelled a -> Model (ConstantOf a) [positions] :: Modelled a -> [Int] [modelled] :: Modelled a -> a rulesFor :: Function f => Int -> Twee f -> Frozen (Rule f) easyRules :: Function f => Twee f -> Frozen (Rule f) rules :: Function f => Twee f -> Frozen (Rule f) allRules :: Function f => Twee f -> Frozen (Rule f) normaliseQuickly :: Function f => Twee f -> Term f -> Reduction f normalise :: Function f => Twee f -> Term f -> Reduction f normaliseIn :: Function f => Twee f -> Model f -> Term f -> Reduction f normaliseSub :: Function f => Twee f -> Term f -> Term f -> Reduction f normaliseSkolem :: Function f => Twee f -> Term f -> Reduction f reduceCP :: Function f => Twee f -> JoinStage -> (Term f -> Term f) -> Critical (Equation f) -> Either JoinReason (Critical (Equation f)) data JoinStage Initial :: JoinStage Simplification :: JoinStage Reducing :: JoinStage Subjoining :: JoinStage data JoinReason Trivial :: JoinStage -> JoinReason Subsumed :: JoinStage -> JoinReason SetJoining :: JoinReason GroundJoined :: JoinReason normaliseCPQuickly :: Function f => Twee f -> Critical (Equation f) -> Either JoinReason (Critical (Equation f)) normaliseCPReducing :: Function f => Twee f -> Critical (Equation f) -> Either JoinReason (Critical (Equation f)) normaliseCP :: Function f => Twee f -> Critical (Equation f) -> Either JoinReason (Critical (Equation f)) complete :: Function f => State (Twee f) () complete1 :: Function f => State (Twee f) Bool renormaliseGoals :: Function f => State (Twee f) () normaliseCPs :: forall f. Function f => State (Twee f) () consider :: Function f => Int -> Label -> Label -> Critical (Equation f) -> State (Twee f) Bool groundJoinableEq :: Function f => Twee f -> Equation f -> Bool groundJoinable :: Function f => Twee f -> Critical (Equation f) -> Bool groundJoin :: Function f => Twee f -> [Branch f] -> Critical (Equation f) -> Either (Model f) [Critical (Equation f)] valid :: Function f => Model f -> Reduction f -> Bool optimise :: a -> (a -> [a]) -> (a -> Bool) -> a addRule :: Function f => Modelled (Critical (Rule f)) -> State (Twee f) Label addExtraRule :: Function f => Rule f -> State (Twee f) () extraRuleSafe :: Function f => Twee f -> Rule f -> Bool deleteRule :: Function f => Label -> Modelled (Critical (Rule f)) -> State (Twee f) () data Simplification f Simplify :: (Model f) -> (Modelled (Critical (Rule f))) -> Simplification f Reorient :: (Modelled (Critical (Rule f))) -> Simplification f interreduce :: Function f => Rule f -> State (Twee f) () reduceWith :: Function f => Twee f -> Label -> Rule f -> Modelled (Critical (Rule f)) -> Maybe (Simplification f) simplifyRule :: Function f => Label -> Model f -> Modelled (Critical (Rule f)) -> State (Twee f) () newEquation :: Function f => Equation f -> State (Twee f) () noCritInfo :: Function f => CritInfo f data CancellationRule f CancellationRule :: [[Term f]] -> {-# UNPACK #-} !(Rule f) -> CancellationRule f [cr_unified] :: CancellationRule f -> [[Term f]] [cr_rule] :: CancellationRule f -> {-# UNPACK #-} !(Rule f) toCancellationRule :: Function f => Twee f -> Rule f -> Maybe (CancellationRule f) addCancellationRule :: Function f => Label -> Rule f -> Twee f -> Twee f deleteCancellationRule :: Function f => Label -> Rule f -> Twee f -> Twee f data Critical a Critical :: CritInfo (ConstantOf a) -> a -> Critical a [critInfo] :: Critical a -> CritInfo (ConstantOf a) [critical] :: Critical a -> a data CritInfo f CritInfo :: Term f -> Int -> CritInfo f [top] :: CritInfo f -> Term f [overlap] :: CritInfo f -> Int data CPInfo CPInfo :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Label -> {-# UNPACK #-} !Label -> CPInfo [cpWeight] :: CPInfo -> {-# UNPACK #-} !Int [cpWeight2] :: CPInfo -> {-# UNPACK #-} !Int [cpAge1] :: CPInfo -> {-# UNPACK #-} !Label [cpAge2] :: CPInfo -> {-# UNPACK #-} !Label data CP f CP :: {-# UNPACK #-} !CPInfo -> {-# UNPACK #-} !(Critical (Equation f)) -> {-# UNPACK #-} !Label -> {-# UNPACK #-} !Label -> CP f [info] :: CP f -> {-# UNPACK #-} !CPInfo [cp] :: CP f -> {-# UNPACK #-} !(Critical (Equation f)) [l1] :: CP f -> {-# UNPACK #-} !Label [l2] :: CP f -> {-# UNPACK #-} !Label data CPs f CPs :: {-# UNPACK #-} !CPInfo -> {-# UNPACK #-} !Label -> {-# UNPACK #-} !Label -> {-# UNPACK #-} !Label -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !(Labelled (Rule f)) -> CPs f [best] :: CPs f -> {-# UNPACK #-} !CPInfo [label] :: CPs f -> {-# UNPACK #-} !Label [lower] :: CPs f -> {-# UNPACK #-} !Label [upper] :: CPs f -> {-# UNPACK #-} !Label [count] :: CPs f -> {-# UNPACK #-} !Int [from] :: CPs f -> {-# UNPACK #-} !(Labelled (Rule f)) data Passive f SingleCP :: {-# UNPACK #-} !(CP f) -> Passive f ManyCPs :: {-# UNPACK #-} !(CPs f) -> Passive f passiveCount :: Passive f -> Int data InitialCP f InitialCP :: (Term f, Label) -> Bool -> Labelled (Critical (Equation f)) -> InitialCP f [cpId] :: InitialCP f -> (Term f, Label) [cpOK] :: InitialCP f -> Bool [cpCP] :: InitialCP f -> Labelled (Critical (Equation f)) criticalPairs :: Function f => Twee f -> Label -> Label -> Rule f -> [Labelled (Critical (Equation f))] ruleOverlaps :: Twee f -> Term f -> [Int] overlaps :: [Int] -> Term f -> Term f -> [(Subst f, Int)] emitReplacement :: Int -> Term f -> TermList f -> Builder f criticalPairs1 :: Function f => Twee f -> [Int] -> Rule f -> [Labelled (Rule f)] -> [Labelled (Critical (Equation f))] queueCP :: Function f => (Passive f -> State (Twee f) ()) -> (Equation f -> Bool) -> Label -> Label -> Critical (Equation f) -> State (Twee f) () queueCPs :: (Function f, Ord a) => (Passive f -> State (Twee f) ()) -> Label -> Label -> (Label -> a) -> Labelled (Rule f) -> State (Twee f) () queueCPsSplit :: Function f => (Passive f -> State (Twee f) ()) -> Label -> Label -> Labelled (Rule f) -> State (Twee f) () toCPs :: Function f => Twee f -> Label -> Label -> Labelled (Rule f) -> [CP f] toCP :: Function f => Twee f -> Label -> Label -> (Equation f -> Bool) -> Critical (Equation f) -> Maybe (CP f) cancelledWeight :: Function f => Twee f -> (Equation f -> Bool) -> Equation f -> Int bestCancellation :: Function f => Twee f -> (Equation f -> Bool) -> Equation f -> (Int, Equation f) weight :: Function f => Twee f -> Equation f -> Int weight' :: Function f => Twee f -> Equation f -> Int cancellations :: Function f => Twee f -> (Equation f -> Bool) -> Equation f -> [Equation f] data Event f NewRule :: (Rule f) -> Event f ExtraRule :: (Rule f) -> Event f NewCP :: (Passive f) -> Event f Reduce :: (Simplification f) -> (Rule f) -> Event f Consider :: (Critical (Equation f)) -> Event f Joined :: (Critical (Equation f)) -> JoinReason -> Event f Delay :: (Critical (Equation f)) -> Event f Cancel :: (Critical (Equation f)) -> (Equation f) -> Event f Discharge :: (Critical (Equation f)) -> (Model f) -> Event f NormaliseCPs :: (Twee f) -> Event f trace :: Function f => Twee f -> Event f -> a -> a traceM :: Function f => Event f -> State (Twee f) () traceIf :: Bool -> Doc -> a -> a instance GHC.Show.Show f => GHC.Show.Show (Twee.Twee f) instance GHC.Show.Show f => GHC.Show.Show (Twee.Passive f) instance GHC.Classes.Eq (Twee.Passive f) instance GHC.Show.Show (Twee.CPs f) instance GHC.Show.Show f => GHC.Show.Show (Twee.CP f) instance GHC.Show.Show Twee.CPInfo instance GHC.Classes.Ord Twee.CPInfo instance GHC.Classes.Eq Twee.CPInfo instance GHC.Show.Show f => GHC.Show.Show (Twee.Simplification f) instance GHC.Show.Show (Twee.CancellationRule f) instance GHC.Show.Show Twee.JoinReason instance GHC.Classes.Ord Twee.JoinReason instance GHC.Classes.Eq Twee.JoinReason instance GHC.Show.Show Twee.JoinStage instance GHC.Classes.Ord Twee.JoinStage instance GHC.Classes.Eq Twee.JoinStage instance (GHC.Show.Show a, GHC.Show.Show (Twee.Base.ConstantOf a)) => GHC.Show.Show (Twee.Modelled a) instance (GHC.Show.Show a, GHC.Show.Show (Twee.Base.ConstantOf a)) => GHC.Show.Show (Twee.Critical a) instance GHC.Show.Show f => GHC.Show.Show (Twee.CritInfo f) instance GHC.Classes.Eq a => GHC.Classes.Eq (Twee.Modelled a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Twee.Modelled a) instance (Twee.Pretty.PrettyTerm (Twee.Base.ConstantOf a), Text.PrettyPrint.HughesPJClass.Pretty a) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Modelled a) instance Twee.Base.Symbolic a => Twee.Base.Symbolic (Twee.Modelled a) instance Twee.Indexes.Rated a => Twee.Indexes.Rated (Twee.Queue.Labelled a) instance Twee.Indexes.Rated a => Twee.Indexes.Rated (Twee.Modelled a) instance Twee.Indexes.Rated a => Twee.Indexes.Rated (Twee.Critical a) instance Twee.Indexes.Rated (Twee.Rule.Rule f) instance Text.PrettyPrint.HughesPJClass.Pretty Twee.JoinStage instance Text.PrettyPrint.HughesPJClass.Pretty Twee.JoinReason instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Simplification f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.CancellationRule f) instance Twee.Base.Symbolic (Twee.CancellationRule f) instance GHC.Classes.Eq a => GHC.Classes.Eq (Twee.Critical a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Twee.Critical a) instance (Twee.Pretty.PrettyTerm (Twee.Base.ConstantOf a), Text.PrettyPrint.HughesPJClass.Pretty a) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Critical a) instance Twee.Base.Symbolic a => Twee.Base.Symbolic (Twee.Critical a) instance Twee.Base.Symbolic (Twee.CritInfo f) instance GHC.Classes.Eq (Twee.CP f) instance GHC.Classes.Ord (Twee.CP f) instance Twee.Queue.Labels (Twee.CP f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.CP f) instance GHC.Classes.Eq (Twee.CPs f) instance GHC.Classes.Ord (Twee.CPs f) instance Twee.Queue.Labels (Twee.CPs f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.CPs f) instance GHC.Classes.Ord (Twee.Passive f) instance Twee.Queue.Labels (Twee.Passive f) instance (Twee.Term.Numbered f, Twee.Pretty.PrettyTerm f) => Text.PrettyPrint.HughesPJClass.Pretty (Twee.Passive f)