# Anti-unification (computer science)

Anti-unification is the process of constructing a generalization common to two given symbolic expressions. As in unification, several frameworks are distinguished depending on which expressions (also called terms) are allowed, and which expressions are considered equal. If variables representing functions are allowed in an expression, the process is called "higher-order anti-unification", otherwise "first-order anti-unification". If the generalization is required to have an instance literally equal to each input expression, the process is called "syntactical anti-unification", otherwise "E-anti-unification", or "anti-unification modulo theory".

An anti-unification algorithm should compute for given expressions a complete, and minimal generalization set, that is, a set covering all generalizations, and containing no redundant members, respectively. Depending on the framework, a complete and minimal generalization set may have one, finitely many, or possibly infinitely many members, or may not exist at all;[note 1] it cannot be empty, since a trivial generalization exists in any case. For first-order syntactical anti-unification, Gordon Plotkin gave an algorithm that computes a complete and minimal singleton generalization set containing the so-called "least general generalization" (lgg).

Anti-unification should not be confused with dis-unification. The latter means the process of solving systems of inequations, that is of finding values for the variables such that all given inequations are satisfied.[note 2] This task is quite different from finding generalizations.

## Prerequisites

Formally, an anti-unification approach presupposes

• An infinite set V of variables. For higher-order anti-unification, it is convenient to choose V disjoint from the set of lambda-term bound variables.
• A set T of terms such that VT. For first-order and higher-order anti-unification, T is usually the set of first-order terms (terms built from variable and function symbols) and lambda terms (terms containing some higher-order variables), respectively.
• An equivalence relation $\equiv$ on $T$ , indicating which terms are considered equal. For higher-order anti-unification, usually $t\equiv u$ if $t$ and $u$ are alpha equivalent. For first-order E-anti-unification, $\equiv$ reflects the background knowledge about certain function symbols; for example, if $\oplus$ is considered commutative, $t\equiv u$ if $u$ results from $t$ by swapping the arguments of $\oplus$ at some (possibly all) occurrences.[note 3] If there is no background knowledge at all, then only literally, or syntactically, identical terms are considered equal.

### First-order term

Given a set $V$ of variable symbols, a set $C$ of constant symbols and sets $F_{n}$ of $n$ -ary function symbols, also called operator symbols, for each natural number $n\geq 1$ , the set of (unsorted first-order) terms $T$ is recursively defined to be the smallest set with the following properties:

• every variable symbol is a term: VT,
• every constant symbol is a term: CT,
• from every n terms t1,...,tn, and every n-ary function symbol fFn, a larger term $f(t_{1},\ldots ,t_{n})$ can be built.

For example, if x ∈ V is a variable symbol, 1 ∈ C is a constant symbol, and add ∈ F2 is a binary function symbol, then x ∈ T, 1 ∈ T, and (hence) add(x,1) ∈ T by the first, second, and third term building rule, respectively. The latter term is usually written as x+1, using Infix notation and the more common operator symbol + for convenience.

### Substitution

A substitution is a mapping $\sigma :V\longrightarrow T$ from variables to terms; the notation $\{x_{1}\mapsto t_{1},\ldots ,x_{k}\mapsto t_{k}\}$ refers to a substitution mapping each variable $x_{i}$ to the term $t_{i}$ , for $i=1,\ldots ,k$ , and every other variable to itself. Applying that substitution to a term t is written in postfix notation as $t\{x_{1}\mapsto t_{1},\ldots ,x_{k}\mapsto t_{k}\}$ ; it means to (simultaneously) replace every occurrence of each variable $x_{i}$ in the term t by $t_{i}$ . The result of applying a substitution σ to a term t is called an instance of that term t. As a first-order example, applying the substitution $\{x\mapsto h(a,y),z\mapsto b\}$ to the term

 f( x , a, g( z ), y) yields f( h(a,y) , a, g( b ), y) .

### Generalization, specialization

If a term $t$ has an instance equivalent to a term $u$ , that is, if $t\sigma \equiv u$ for some substitution $\sigma$ , then $t$ is called more general than $u$ , and $u$ is called more special than, or subsumed by, $t$ . For example, $x\oplus a$ is more general than $a\oplus b$ if $\oplus$ is commutative, since then $(x\oplus a)\{x\mapsto b\}=b\oplus a\equiv a\oplus b$ .

If $\equiv$ is literal (syntactic) identity of terms, a term may be both more general and more special than another one only if both terms differ just in their variable names, not in their syntactic structure; such terms are called variants, or renamings of each other. For example, $f(x_{1},a,g(z_{1}),y_{1})$ is a variant of $f(x_{2},a,g(z_{2}),y_{2})$ , since $f(x_{1},a,g(z_{1}),y_{1})\{x_{1}\mapsto x_{2},y_{1}\mapsto y_{2},z_{1}\mapsto z_{2}\}=f(x_{2},a,g(z_{2}),y_{2})$ and $f(x_{2},a,g(z_{2}),y_{2})\{x_{2}\mapsto x_{1},y_{2}\mapsto y_{1},z_{2}\mapsto z_{1}\}=f(x_{1},a,g(z_{1}),y_{1})$ . However, $f(x_{1},a,g(z_{1}),y_{1})$ is not a variant of $f(x_{2},a,g(x_{2}),x_{2})$ , since no substitution can transform the latter term into the former one, although $\{x_{1}\mapsto x_{2},z_{1}\mapsto x_{2},y_{1}\mapsto x_{2}\}$ achieves the reverse direction. The latter term is hence properly more special than the former one.

A substitution $\sigma$ is more special than, or subsumed by, a substitution $\tau$ if $x\sigma$ is more special than $x\tau$ for each variable $x$ . For example, $\{x\mapsto f(u),y\mapsto f(f(u))\}$ is more special than $\{x\mapsto z,y\mapsto f(z)\}$ , since $f(u)$ and $f(f(u))$ is more special than $z$ and $f(z)$ , respectively.

### Anti-unification problem, generalization set

An anti-unification problem is a pair $\langle t_{1},t_{2}\rangle$ of terms. A term $t$ is a common generalization, or anti-unifier, of $t_{1}$ and $t_{2}$ if $t\sigma _{1}\equiv t_{1}$ and $t\sigma _{2}\equiv t_{2}$ for some substitutions $\sigma _{1},\sigma _{2}$ . For a given anti-unification problem, a set $S$ of anti-unifiers is called complete if each generalization subsumes some term $t\in S$ ; the set $S$ is called minimal if none of its members subsumes another one.

## First-order syntactical anti-unification

The framework of first-order syntactical anti-unification is based on $T$ being the set of first-order terms (over some given set $V$ of variables, $C$ of constants and $F_{n}$ of $n$ -ary function symbols) and on $\equiv$ being syntactic equality. In this framework, each anti-unification problem $\langle t_{1},t_{2}\rangle$ has a complete, and obviously minimal, singleton solution set $\{t\}$ . Its member $t$ is called the least general generalization (lgg) of the problem, it has an instance syntactically equal to $t_{1}$ and another one syntactically equal to $t_{2}$ . Any common generalization of $t_{1}$ and $t_{2}$ subsumes $t$ . The lgg is unique up to variants: if $S_{1}$ and $S_{2}$ are both complete and minimal solution sets of the same syntactical anti-unification problem, then $S_{1}=\{s_{1}\}$ and $S_{2}=\{s_{2}\}$ for some terms $s_{1}$ and $s_{2}$ , that are renamings of each other.

Plotkin has given an algorithm to compute the lgg of two given terms. It presupposes an injective mapping $\phi :T\times T\longrightarrow V$ , that is, a mapping assigning each pair $s,t$ of terms an own variable $\phi (s,t)$ , such that no two pairs share the same variable. [note 4] The algorithm consists of two rules:

 $f(s_{1},\dots ,s_{n})\sqcup f(t_{1},\ldots ,t_{n})$ $\rightsquigarrow$ $f(s_{1}\sqcup t_{1},\ldots ,s_{n}\sqcup t_{n})$ $s\sqcup t$ $\rightsquigarrow$ $\phi (s,t)$ if previous rule not applicable

For example, $(0*0)\sqcup (4*4)\rightsquigarrow (0\sqcup 4)*(0\sqcup 4)\rightsquigarrow \phi (0,4)*\phi (0,4)\rightsquigarrow x*x$ ; this least general generalization reflects the common property of both inputs of being square numbers.

Plotkin used his algorithm to compute the "relative least general generalization (rlgg)" of two clause sets in first-order logic, which was the basis of the Golem approach to inductive logic programming.

## First-order anti-unification modulo theory

• Jacobsen, Erik (Jun 1991), Unification and Anti-Unification (PDF), Technical Report
• Østvold, Bjarte M. (Apr 2004), A Functional Reconstruction of Anti-Unification (PDF), NR Note, vol. DART/04/04, Norwegian Computing Center
• Boytcheva, Svetla; Markov, Zdravko (2002). "An Algorithm for Inducing Least Generalization Under Relative Implication" (PDF). {{cite journal}}: Cite journal requires |journal= (help)
• Kutsia, Temur; Levy, Jordi; Villaret, Mateu (2014). "Anti-Unification for Unranked Terms and Hedges" (PDF). Journal of Automated Reasoning. 52 (2): 155–190. doi:10.1007/s10817-013-9285-6. Software.

### Nominal anti-unification

• Baumgartner, Alexander; Kutsia, Temur; Levy, Jordi; Villaret, Mateu (Jun 2013). Nominal Anti-Unification. Proc. RTA 2015. Vol. 36 of LIPIcs. Schloss Dagstuhl, 57-73. Software.

### Applications

• Program analysis: Bulychev, Peter; Minea, Marius (2008). "Duplicate Code Detection Using Anti-Unification". {{cite journal}}: Cite journal requires |journal= (help); Bulychev, Peter E.; Kostylev, Egor V.; Zakharov, Vladimir A. (2009). "Anti-Unification Algorithms and their Applications in Program Analysis". {{cite journal}}: Cite journal requires |journal= (help)
• Code factoring: Cottrell, Rylan (Sep 2008), Semi-automating Small-Scale Source Code Reuse via Structural Correspondence (PDF), Univ. Calgary
• Induction proving: Heinz, Birgit (1994), Lemma Discovery by Anti-Unification of Regular Sorts, Technical Report, vol. 94–21, TU Berlin
• Information Extraction: Thomas, Bernd (1999). "Anti-Unification Based Learning of T-Wrappers for Information Extraction" (PDF). AAAI Technical Report. WS-99-11: 15–20.
• Case-based reasoning: Armengol, Eva; Plaza, Enric (2005). "Using Symbolic Descriptions to Explain Similarity on CBR" (PDF). {{cite journal}}: Cite journal requires |journal= (help)
• Program synthesis: The idea of generalizing terms with respect to an equational theory can be traced back to Manna and Waldinger (1978, 1980) who desired to apply it in program synthesis. In section "Generalization", they suggest (on p. 119 of the 1980 article) to generalize reverse(l) and reverse(tail(l))<>[head(l)] to obtain reverse(l')<>m' . This generalization is only possible if the background equation u<>[]=u is considered.
Zohar Manna; Richard Waldinger (Dec 1978). A Deductive Approach to Program Synthesis (PDF) (Technical Note). SRI International. — preprint of the 1980 article
Zohar Manna and Richard Waldinger (Jan 1980). "A Deductive Approach to Program Synthesis". ACM Transactions on Programming Languages and Systems. 2: 90–121. doi:10.1145/357084.357090.