|
Engine.Unification.MM | Portability | portable | Stability | experimental | Maintainer | egallego@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) | | | | 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 |
|
|
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 |