-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Unification and Matching in an Abelian Group
--
-- The unification problem is given the problem statement t =? t', find a
-- most general substitution s such that s(t) = s(t') modulo the axioms
-- of an Abelian group. The matching problem is to find a most general
-- substitution s such that s(t) = t' modulo the axioms. Substitition s
-- is more general than s' if there is a substitition s" such that s' =
-- s" o s.
@package agum
@version 2.0
-- | This module provides unification and matching in an Abelian group.
--
-- In this module, an Abelian group is a free algebra over a signature
-- with three function symbols:
--
--
-- - the binary symbol +, the group operator,
-- - a constant 0, the identity element, and
-- - the unary symbol -, the inverse operator.
--
--
-- The algebra is generated by a set of variables. Syntactically, a
-- variable is an identifer such as x and y (see isVar).
--
-- The axioms associated with the algebra are:
--
--
-- - Communtativity x + y = y + x
-- - Associativity (x + y) + z = x + (y + z)
-- - Group Identity x + 0 = x
-- - Cancellation x + -x = 0
--
--
-- A substitution maps variables to terms. A substitution s is applied to
-- a term as follows.
--
--
-- - s(0) = 0
-- - s(-t) = -s(t)
-- - s(t + t') = s(t) + s(t')
--
--
-- The unification problem is given the problem statement t =? t', find a
-- most general substitution s such that s(t) = s(t') modulo the axioms
-- of the algebra. The matching problem is to find a most general
-- substitution s such that s(t) = t' modulo the axioms. Substitition s
-- is more general than s' if there is a substitition s" such that s' =
-- s" o s.
module Algebra.AbelianGroup.UnificationMatching
-- | A term in an Abelian group is represented by the group identity
-- element, or as the sum of factors. A factor is the product of a
-- non-zero integer coefficient and a variable. No variable occurs twice
-- in a term. For the show and read methods, zero is the group identity,
-- the plus sign is the group operation, and the minus sign is the group
-- inverse.
data Term
-- | ide represents the identity element (zero).
ide :: Term
-- | A variable is an alphabetic Unicode character followed by a sequence
-- of alphabetic or numeric digit Unicode characters. The show method for
-- a term works correctly when variables satisfy the isVar
-- predicate.
isVar :: String -> Bool
-- | Return a term that consists of a single variable.
var :: String -> Term
-- | Multiply every coefficient in a term by an integer.
mul :: Int -> Term -> Term
-- | Add two terms.
add :: Term -> Term -> Term
-- | Return all variable-coefficient pairs in the term in ascending
-- variable order.
assocs :: Term -> [(String, Int)]
-- | An equation is a pair of terms. For the show and read methods, the two
-- terms are separated by an equal sign.
newtype Equation
Equation :: (Term, Term) -> Equation
-- | A substitution maps variables into terms. For the show and read
-- methods, the substitution is a list of maplets, and the variable and
-- the term in each element of the list are separated by a colon.
data Substitution
-- | Construct a substitution from a list of variable-term pairs.
subst :: [(String, Term)] -> Substitution
-- | Return all variable-term pairs in ascending variable order.
maplets :: Substitution -> [(String, Term)]
-- | Return the result of applying a substitution to a term.
apply :: Substitution -> Term -> Term
-- | Given Equation (t0, t1), return a most general substitution s
-- such that s(t0) = s(t1) modulo the equational axioms of an Abelian
-- group.
unify :: (Monad m) => Equation -> m Substitution
-- | Given Equation (t0, t1), return a most general substitution s
-- such that s(t0) = t1 modulo the equational axioms of an Abelian group.
match :: (Monad m) => Equation -> m Substitution
instance Eq Maplet
instance Eq Substitution
instance Eq Equation
instance Eq Term
instance Read Substitution
instance Show Substitution
instance Read Maplet
instance Show Maplet
instance Read Equation
instance Show Equation
instance Read Term
instance Show Term