ContentsIndex
Engine.Unification.MM
Portabilityportable
Stabilityexperimental
Maintaineregallego@babel.ls.fi.upm.es
Description
Martelli Montanary unification algorithm.
Synopsis
type MultiSet a = [a]
type MultiEq = [(Set STerm, Set STerm)]
mgumm :: MultiSet STerm -> Maybe MultiEq
unifymm :: MultiSet STerm -> Maybe MultiEq
unifyloop :: MultiEq -> MultiEq -> Maybe MultiEq
substitute :: (Set STerm, Set STerm) -> MultiEq -> MultiEq
sub :: Substitution -> [(Set STerm, Set STerm)] -> [(Set STerm, Set STerm)]
selecteq :: MultiEq -> Maybe ((Set STerm, Set STerm), MultiEq)
toposelect :: MultiEq -> Maybe ((Set STerm, Set STerm), MultiEq)
getrhsvars :: (Set STerm, Set STerm) -> Set STerm -> Set STerm
vars_set :: Set STerm -> Set STerm
notLHS :: Set STerm -> (Set STerm, Set STerm) -> Bool
compacteq :: MultiEq -> MultiEq
mered :: (Set STerm, Set STerm) -> Maybe MultiEq
splitTerms :: MultiSet STerm -> Maybe (STerm, MultiEq)
check_common_head :: MultiSet STerm -> Maybe STerm
makemulteq :: MultiSet STerm -> MultiEq
type Eqt = (STerm, STerm)
type EqSet = [Eqt]
type Unifier = EqSet
unifynd :: String -> String -> (Unifier, Unifier)
unify1 :: STerm -> STerm -> (Unifier, Unifier)
reduceEqSet :: (EqSet, EqSet) -> (EqSet, EqSet)
data Action
= Kill
| New EqSet
| VarElim Substitution
reduceEq :: Eqt -> Action
mergeEqSet :: EqSet -> EqSet -> EqSet
type Substitution = String -> STerm
apply :: Substitution -> STerm -> STerm
subVar :: String -> STerm -> Substitution
Documentation
type MultiSet a = [a]
unify :: String -> String -> (Unifier, Unifier) unify s1 s2 = let (Right t1, Right t2) = (trans_term s1, trans_term s2) in unifymm t1 t2
type MultiEq = [(Set STerm, Set STerm)]
mgumm :: MultiSet STerm -> Maybe MultiEq
unifymm :: MultiSet STerm -> Maybe MultiEq
MM algorithm Keep in mind that this returns the triangular multiequation, not the MGU.
unifyloop :: MultiEq -> MultiEq -> Maybe MultiEq
substitute :: (Set STerm, Set STerm) -> MultiEq -> MultiEq
sub :: Substitution -> [(Set STerm, Set STerm)] -> [(Set STerm, Set STerm)]
selecteq :: MultiEq -> Maybe ((Set STerm, Set STerm), MultiEq)
toposelect :: MultiEq -> Maybe ((Set STerm, Set STerm), MultiEq)
getrhsvars :: (Set STerm, Set STerm) -> Set STerm -> Set STerm
vars_set :: Set STerm -> Set STerm
notLHS :: Set STerm -> (Set STerm, Set STerm) -> Bool
compacteq :: MultiEq -> MultiEq
mered :: (Set STerm, Set STerm) -> Maybe MultiEq
splitTerms :: MultiSet STerm -> Maybe (STerm, MultiEq)
Returns (Common part, Frontier)
check_common_head :: MultiSet STerm -> Maybe STerm
makemulteq :: MultiSet STerm -> MultiEq
type Eqt = (STerm, STerm)
Non deterministic algorithm. Without occurs check. Able to partially handle infinite terms.
type EqSet = [Eqt]
type Unifier = EqSet
unifynd :: String -> String -> (Unifier, Unifier)
unify1 :: STerm -> STerm -> (Unifier, Unifier)
reduceEqSet :: (EqSet, EqSet) -> (EqSet, EqSet)
data Action
Constructors
Kill
New EqSet
VarElim Substitution
reduceEq :: Eqt -> Action
mergeEqSet :: EqSet -> EqSet -> EqSet
type Substitution = String -> STerm
apply :: Substitution -> STerm -> STerm
subVar :: String -> STerm -> Substitution
Produced by Haddock version 0.8