Alberto Martelli 2026-11-05
Alberto Martelli coauthored An Efficient Unification Algorithm by Alberto Martelli and Ugo Montanari in 1982. With Ugo Montanari, he developed a term-equation algorithm whose acyclicity check is built into the implementation rather than treated as an expensive separate afterthought.[ref]
Unification asks for a substitution making terms identical; the most general unifier captures every solution through further substitution. This is stronger than finding one arbitrary matching assignment. The paper's equation transformations preserve the solution set while detecting incompatible constructors and cyclic finite-term requirements, connecting a declarative specification to an efficient procedure.
Automated deduction 2026-11-05
Automated deduction uses an algorithm to construct or check a mathematical proof from explicit assumptions and inference rules. The representation might use propositional logic, first-order logic or a specialized theory such as linear arithmetic. Soundness means the rules preserve truth; finding a proof additionally requires a search strategy.
For a small resolution example, the clauses , and yield and then the empty clause. This is a contradiction, so the original clauses cannot all hold. To prove a conclusion from assumptions, a refutation method adds its negation and searches for such a contradiction. In first-order logic, unification determines which terms can instantiate matching predicates. A procedure that eventually finds every valid proof need not terminate on every invalid claim: this distinction explains why proof search and proof checking have different computational costs.
J. A. Robinson 2026-11-05
J. A. Robinson introduced the resolution principle in his 1965 paper on machine-oriented logic. His clause-based resolution calculus, using unification, supports a complete refutation procedure for first-order logic: an unsatisfiable clause set has a derivation of the empty clause.[ref]
For example, resolving with uses the first-order substitution and produces . The rule separates the logical justification of a step from the search for useful clauses. A complete search procedure can still run indefinitely on a satisfiable input; completeness does not supply a decision algorithm for all first-order logic.
Jean Gallier Created 2026-10-14 Updated 2026-11-05
Jean Gallier is a computer scientist whose research connects mathematical foundations with computer programming and geometric applications. His earlier work includes formal verification, automated deduction and unification; his later interests include computer graphics, computer vision, robotics and the geometry of curves and surfaces.[ref]
His Curves and Surfaces in Geometric Modeling: Theory and Algorithms by Jean Gallier develops geometric constructions with explicit mathematical foundations. For example, its account of affine maps separates the geometry of points from the linear maps acting on displacement vectors, a distinction useful when describing transformations in computer graphics.[ref]
Curves and Surfaces in Geometric Modeling: Theory and Algorithms by Jean Gallier. Sections 2.4 and 2.7, affine constructions
Homepage: www.cis.upenn.edu/~jean/
Logic programming Created 2026-10-31 Updated 2026-11-05
Logic programming represents knowledge and queries through logical clauses, letting an inference procedure search for substitutions making a query true. A fact such as
parent(ada, ben) and a rule saying that a parent of a parent is a grandparent can answer a grandparent query without listing every answer explicitly. Prolog commonly combines unification with ordered goal search and backtracking. Declarative meaning and execution strategy must be distinguished: two logically equivalent rule orders can have different termination behaviour. The method connects mathematical logic to executable symbolic inference. Prolog 2026-11-05
Prolog expresses programs through facts and rules and answers queries by solving goals. A rule such as
ancestor(X,Y) :- parent(X,Y). provides one way to establish a relationship. A recursive rule can search through intermediate parents. Unification matches a goal with a rule head and propagates bindings; backtracking explores alternative matches when a branch fails or another answer is requested.[ref]Getting started quickly in the SWI-Prolog manual. §2.1, rules and queries
The logical core is associated with Horn clauses and SLD resolution, but clause order and goal order also determine a conventional Prolog program's search behavior. A logically valid recursive specification can loop before reaching an available answer. Predicates with input/output effects and control operations add further operational behavior. Arithmetic evaluation is also distinct from term matching:
X = 1+2 builds a term, whereas X is 1+2 evaluates arithmetic in the usual Prolog interface. Rational tree 2026-11-05
A rational tree is a possibly infinite tree with only finitely many distinct rooted subtrees. It therefore has a finite representation as a term graph, possibly with cycles. Here “rational” describes finite representability, not values in the rational numbers.
For example, the equation describes the infinite expression . A single node labeled with an edge back to itself represents it. There is no solution among finite first-order terms: the occurs check rejects binding a variable to a first-order term containing that variable. Unification over rational trees instead admits this cyclic representation, so implementations must specify which semantics they use. SWI-Prolog explicitly supports cyclic terms for many term operations.[ref]
Robin Milner 2026-11-05
Robin Milner presented a polymorphic type discipline and its inference algorithm in 1978. Algorithm W derives types from program structure while using unification to satisfy type constraints; suitable let-bound expressions receive reusable type schemes. This work is a foundation of Hindley-Milner type inference.[ref]
A Theory of Type Polymorphism in Programming by Robin Milner. §4.1, Algorithm W; §4.2, syntactic soundness
For example, an identity function has type . Generalizing a let-bound identity permits separate uses at integer and Boolean types, whereas one lambda-bound parameter has one shared type within its scope. The discipline therefore gives precise rules for reuse rather than treating every occurrence as independently polymorphic. Its type-soundness claim concerns specified runtime type errors, not every possible program failure.
Robinson unification algorithm Created 2026-10-20 Updated 2026-11-05
The Robinson unification algorithm solves equations between first-order terms by finding a substitution making them identical. Repeatedly delete equal terms, decompose equal function symbols into argument equations, reject incompatible symbols, and substitute a variable by its proposed term. The occurs check rejects for finite-term unification, since no finite term equals a proper term containing itself. For it returns , . Successful finite-term unification yields a most general unifier: every other unifier is obtained by further substitution. Implementations that omit the occurs check instead admit a different cyclic-term interpretation.
Term graph 2026-11-05
A term graph represents the structure of first-order terms with labelled nodes and ordered argument graph edges. For finite acyclic first-order terms, the representation can be a directed acyclic graph, allowing identical subterms to share nodes rather than being copied into separate branches of a tree.
The first-order term has five occurrences in its ordinary syntax tree: one , two and two . A shared term graph can use only three nodes, with the two argument graph edges of pointing to the same node. Sharing a variable node is also useful: identifications made by a unification algorithm can be represented once and followed from every occurrence.[ref]
An Efficient Unification Algorithm by Alberto Martelli and Ugo Montanari. Section2 and implementation discussion, sharing and the acyclicity test
Sharing changes storage, not the meaning of an acyclic finite first-order term. A cycle is different. A node labelled whose argument points back to itself unfolds to an infinite rational tree; it cannot represent a finite solution to . An implementation must therefore state whether it supports infinite rational trees or enforces the finite-term occurs check.
Ugo Montanari 2026-11-05
Ugo Montanari coauthored the 1982 unification algorithm with Alberto Martelli. Their paper treats first-order terms as equations and derives an efficient implementation from simpler transformation rules, integrating the acyclicity test needed for finite terms.[ref]
An Efficient Unification Algorithm by Alberto Martelli and Ugo Montanari. abstract, §2 and Algorithm1
For example, decomposing gives and , whereas has no finite-term solution and must be rejected. The point is to compute a most general unifier without expanding or repeatedly traversing shared term structure unnecessarily. Such unification supports automated deduction and logic programming.
Unification Created 2026-10-20 Updated 2026-11-05
Unification finds a substitution making given first-order terms syntactically identical. In first-order unification, a substitution replaces variables by first-order terms while leaving function symbols fixed. A most general unifier captures the necessary identifications: every other unifier follows by a further substitution.[ref]
For example, and have most general unifier . The variable remains free; assigning it a particular first-order term gives a more specific unifier. Requiring forces both and , so distinct constant symbols make it impossible.
Syntactic identity is essential. With addition treated as a binary function symbol, the first-order terms and are different even though their values agree under ordinary arithmetic. Equational unification incorporates specified identities and is a different problem. For finite first-order terms, the occurs check rejects : a finite first-order term cannot equal one of its proper subterms. Unification makes resolution possible by aligning atomic formulas before inference.