In logic and computer science, specifically automated reasoning, unification is an algorithmic process of solving equations between symbolic expressions, each of the form Left-hand side = Right-hand side. For example, using x,y,z as variables, and taking f to be an uninterpreted function, the singleton equation set { f(1,y) = f(x,2) } is a syntactic first-order unification problem that has the substitution { x↦ 1, y ↦ 2 } as its only solution.
Conventions differ on what values variables may assume and which expressions are considered equivalent. In first-order syntactic unification, variables range over first-order terms and equivalence is syntactic. This version of unification has a unique "best" answer and is used in logic programming and programming language type system implementation, especially in Hindley–Milner based type inference algorithms. In higher-order unification, possibly restricted to higher-order pattern unification, terms may include lambda expressions, and equivalence is up to beta-reduction. This version is used in proof assistants and higher-order logic programming, for example Isabelle, Twelf, and lambdaProlog. Finally, in semantic unification or E-unification, equality is subject to background knowledge and variables range over a variety of domains. This version is used in SMT solvers, term rewriting algorithms, and cryptographic protocol analysis.
Formal definition
A unification problem is a finite set E={ l1 ≐ r1, ..., ln ≐ rn } of equations to solve, where li, ri are in the set de términos o expresiones . Dependiendo de qué expresiones o términos se permiten en un conjunto de ecuaciones o problema de unificación, y qué expresiones se consideran iguales, se distinguen varios marcos de unificación. Si se permiten variables de orden superior, es decir, variables que representan funciones , en una expresión, el proceso se llama unificación de orden superior , de lo contrario unificación de primer orden . Si se requiere una solución para hacer que ambos lados de cada ecuación sean literalmente iguales, el proceso se llama unificación sintáctica o libre , de lo contrario unificación semántica o ecuacional , o E-unificación , o unificación módulo teoría .
Si el lado derecho de cada ecuación es cerrado (sin variables libres), el problema se denomina coincidencia de patrones . El lado izquierdo (con variables) de cada ecuación se denomina patrón . [ 1 ]
Requisitos previos
Formalmente, un enfoque de unificación presupone
- Un conjunto infinitode variables . Para una unificación de orden superior, es conveniente elegirdisjunto del conjunto de variables ligadas de términos lambda .
- Un conjuntode términos tales que. Para la unificación de primer orden,es normalmente el conjunto de términos de primer orden (términos construidos a partir de símbolos de variables y funciones). Para la unificación de orden superiorConsta de términos de primer orden y términos lambda (términos que contienen algunas variables de orden superior).
- Un mapeo, asignando a cada términoel conjuntode variables libres que ocurren en.
- Una teoría o relación de equivalenciaen, indicando qué términos se consideran iguales. Para la E-unificación de primer orden,refleja el conocimiento previo sobre ciertos símbolos de función; por ejemplo, sise considera conmutativo,siresultados deintercambiando los argumentos deen algunas (posiblemente todas) las ocurrencias. [ nota 1 ] En el caso más típico en el que no hay ningún conocimiento previo, entonces solo se consideran iguales los términos idénticos literal o sintácticamente. En este caso, ≡ se denomina teoría libre (porque es un objeto libre ), teoría vacía (porque el conjunto de oraciones de igualdad , o el conocimiento previo, está vacío), teoría de funciones no interpretadas (porque la unificación se realiza sobre términos no interpretados ) o teoría de constructores (porque todos los símbolos de función simplemente construyen términos de datos, en lugar de operar sobre ellos). Para la unificación de orden superior, generalmentesiyson alfa equivalentes .
Como ejemplo de cómo el conjunto de términos y la teoría afectan al conjunto de soluciones, el problema de unificación sintáctica de primer orden { y = cons (2, y ) } no tiene solución sobre el conjunto de términos finitos . Sin embargo, tiene la única solución { y ↦ cons (2, cons (2, cons (2,...))) } sobre el conjunto de términos de árbol infinitos . De manera similar, el problema de unificación semántica de primer orden { a ⋅ x = x ⋅ a } tiene cada sustitución de la forma { x ↦ a ⋅...⋅ a } como solución en un semigrupo , es decir, si (⋅) se considera asociativo . Pero el mismo problema, visto en un grupo abeliano , donde (⋅) también se considera conmutativo , tiene cualquier sustitución como solución.
Como ejemplo de unificación de orden superior, el conjunto unitario { a = y ( x ) } es un problema de unificación sintáctica de segundo orden, ya que y es una variable de función. Una solución es { x ↦ a , y ↦ ( función identidad ) }; otra es { y ↦ ( función constante que asigna cada valor a a ), x ↦ (cualquier valor) }.
Sustitución
Una sustitución es una asignaciónde variables a términos; la notaciónse refiere a una asignación de sustitución para cada variableal término, paray cualquier otra variable a sí misma; ladeben ser distintos por pares. Aplicando esa sustitución a un términose escribe en notación posfija como; significa reemplazar (simultáneamente) cada aparición de cada variableen el términoporEl resultadode aplicar una sustitucióna un términose denomina un ejemplo de ese término. Como ejemplo de primer orden, aplicando la sustitución { x ↦ h ( a , y ), z ↦ b } al término
Generalización, especialización
Si un términotiene una instancia equivalente a un término, es decir, sipor alguna sustitución, entoncesse llama más general que, yse denomina más especial que, o subsumido por,. Por ejemplo,es más general quesi ⊕ es conmutativo , ya que entonces.
Si ≡ es la identidad literal (sintáctica) de términos, un término puede ser a la vez más general y más especial que otro solo si ambos términos difieren únicamente en sus nombres de variables, no en su estructura sintáctica; tales términos se denominan variantes o renombramientos entre sí. Por ejemplo, es una variante de , desde y Sin embargo,no es una variante de Dado que ninguna sustitución puede transformar el segundo término en el primero, el segundo término es, por lo tanto, más especial que el primero.
Para arbitrario, un término puede ser a la vez más general y más especial que un término estructuralmente diferente. Por ejemplo, si ⊕ es idempotente , es decir, si siempre, entonces el términoes más general que, [ nota 2 ] y viceversa, [ nota 3 ] aunqueyson de diferente estructura.
Una sustituciónes más especial que, o está subsumido por, una sustituciónsiestá subsumido porpara cada términoTambién decimos quees más general que. De forma más formal, tomemos un conjunto infinito no vacío.de variables auxiliares tales que ninguna ecuaciónen el problema de unificación contiene variables deLuego una sustituciónqueda subsumido por otra sustitución.si hay una sustituciónde tal manera que para todos los términos,. [ 2 ] Por ejemploestá subsumido por, usando, pero no está subsumido por, comono es un caso de . [ 3 ]
Conjunto de soluciones
Una sustitución σ es una solución del problema de unificación E si l i σ ≡ r i σ para. Dicha sustitución también se denomina unificador de E. Por ejemplo, si ⊕ es asociativo , el problema de unificación { x ⊕ a ≐ a ⊕ x } tiene las soluciones { x ↦ a }, { x ↦ a ⊕ a }, { x ↦ a ⊕ a ⊕ a }, etc., mientras que el problema { x ⊕ a ≐ a } no tiene solución.
Para un problema de unificación E dado , un conjunto S de unificadores se denomina completo si cada sustitución de solución está incluida en alguna sustitución de S. Siempre existe un conjunto de sustitución completo (por ejemplo, el conjunto de todas las soluciones), pero en algunos marcos (como la unificación de orden superior sin restricciones) el problema de determinar si existe alguna solución (es decir, si el conjunto de sustitución completo no está vacío) es indecidible.
El conjunto S se llama mínimo si ninguno de sus miembros engloba a otro. Dependiendo del marco, un conjunto de sustitución completo y mínimo puede tener cero, uno, un número finito o infinito de miembros, o puede no existir en absoluto debido a una cadena infinita de miembros redundantes. [ 4 ] Por lo tanto, en general, los algoritmos de unificación calculan una aproximación finita del conjunto completo, que puede o no ser mínimo, aunque la mayoría de los algoritmos evitan los unificadores redundantes cuando es posible. [ 2 ] Para la unificación sintáctica de primer orden, Martelli y Montanari [ 5 ] dieron un algoritmo que informa la insolubilidad o calcula un único unificador que por sí mismo forma un conjunto de sustitución completo y mínimo, llamado el unificador más general .
Unificación sintáctica de términos de primer orden

La unificación sintáctica de términos de primer orden es el marco de unificación más utilizado. Se basa en que T sea el conjunto de términos de primer orden (sobre un conjunto dado V de variables, C de constantes y F n de símbolos de funciones n -arias) y en que ≡ sea la igualdad sintáctica . En este marco, cada problema de unificación resoluble { l 1 ≐ r 1 , ..., l n ≐ r n } tiene un conjunto de soluciones unitarias completo y obviamente mínimo { σ } . Su miembro σ se llama el unificador más general ( mgu ) del problema. Los términos del lado izquierdo y derecho de cada ecuación potencial se vuelven sintácticamente iguales cuando se aplica el mgu, es decir, l 1 σ = r 1 σ ∧ ... ∧ l n σ = r n σ . Cualquier unificador del problema está subsumido [ nota 4 ] por el mgu σ . El mgu es único salvo variantes: si S 1 y S 2 son conjuntos de soluciones completas y mínimas del mismo problema de unificación sintáctica, entonces S 1 = { σ 1 } y S 2 = { σ 2 } para algunas sustituciones σ 1 y σ 2 , y xσ 1 es una variante de xσ 2 para cada variable x que aparece en el problema.
Por ejemplo, el problema de unificación { x ≐ z , y ≐ f ( x ) } tiene un unificador { x ↦ z , y ↦ f ( z ) }, porque
This is also the most general unifier. Other unifiers for the same problem are e.g. { x ↦ f(x1), y ↦ f(f(x1)), z ↦ f(x1) }, { x ↦ f(f(x1)), y ↦ f(f(f(x1))), z ↦ f(f(x1)) }, and so on; there are infinitely many similar unifiers.
As another example, the problem g(x,x) ≐ f(y) has no solution with respect to ≡ being literal identity, since any substitution applied to the left and right hand side will keep the outermost g and f, respectively, and terms with different outermost function symbols are syntactically different.
Unification algorithms
Symbols are ordered such that variables precede function symbols. Terms are ordered by increasing written length; equally long terms are ordered lexicographically.[6] For a set T of terms, its disagreement path p is the lexicographically least path where two member terms of T differ. Its disagreement set is the set of subterms starting at p, formally: { t|p : t∈T}.[7]
Algorithm:[8]
Given a set T of terms to be unified Let σ initially be the identity substitution do forever if Tσ is a singleton set then return σ fi let D be the disagreement set of Tσ let s, t be the two lexicographically least terms in D if s is not a variable or s occurs in t then return "NONUNIFIABLE" fi done
Jacques Herbrand analizó los conceptos básicos de la unificación y esbozó un algoritmo en 1930. [ 9 ] [ 10 ] [ 11 ] Pero la mayoría de los autores atribuyen el primer algoritmo de unificación a John Alan Robinson (véase el recuadro). [ 12 ] [ 13 ] [ nota 5 ] El algoritmo de Robinson tenía un comportamiento exponencial en el peor de los casos, tanto en el tiempo como en el espacio. [ 11 ] [ 15 ] Numerosos autores han propuesto algoritmos de unificación más eficientes. [ 16 ] Los algoritmos con comportamiento de tiempo lineal en el peor caso fueron descubiertos independientemente por Martelli y Montanari (1976) y Paterson y Wegman (1976) [ nota 6 ] Baader y Snyder (2001) utiliza una técnica similar a la de Paterson-Wegman, por lo tanto es lineal, [ 17 ] pero como la mayoría de los algoritmos de unificación de tiempo lineal es más lento que la versión de Robinson en entradas de tamaño pequeño debido a la sobrecarga del preprocesamiento de las entradas y el posprocesamiento de la salida, como la construcción de una representación DAG . de Champeaux (2022) también tiene una complejidad lineal en el tamaño de la entrada pero es competitivo con el algoritmo de Robinson en entradas de tamaño pequeño. La aceleración se obtiene utilizando una representación orientada a objetos del cálculo de predicados que evita la necesidad de pre y posprocesamiento, haciendo en cambio que los objetos variables sean responsables de crear una sustitución y de lidiar con el aliasing. De Champeaux afirma que la capacidad de agregar funcionalidad al cálculo de predicados representado como objetos programáticos brinda oportunidades para optimizar también otras operaciones lógicas. [ 15 ]
El siguiente algoritmo se presenta comúnmente y proviene de Martelli y Montanari (1982) . [ nota 7 ] Dado un conjunto finitode ecuaciones potenciales, el algoritmo aplica reglas para transformarlo en un conjunto equivalente de ecuaciones de la forma { x 1 ≐ u 1 , ..., x m ≐ u m } donde x 1 , ..., x m son variables distintas y u 1 , ..., u m son términos que no contienen ninguno de los x i . Un conjunto de esta forma puede leerse como una sustitución. Si no hay solución, el algoritmo termina con ⊥; otros autores usan "Ω" o " fail " en ese caso. La operación de sustituir todas las ocurrencias de la variable x en el problema G con el término t se denota G { x ↦ t }. Para simplificar, los símbolos constantes se consideran símbolos de función con cero argumentos.
Se produce una comprobación
Un intento de unificar una variable x con un término que contenga x como subtérmino estricto x ≐ f (..., x , ...) daría como resultado un término infinito como solución para x , ya que x aparecería como subtérmino de sí mismo. En el conjunto de términos de primer orden (finitos) definidos anteriormente, la ecuación x ≐ f (..., x , ...) no tiene solución; por lo tanto, la regla de eliminación solo se puede aplicar si x ∉ vars ( t ). Dado que esta comprobación adicional, denominada comprobación de ocurrencia , ralentiza el algoritmo, se omite, por ejemplo, en la mayoría de los sistemas Prolog. Desde un punto de vista teórico, omitir la comprobación equivale a resolver ecuaciones sobre árboles infinitos, véase #Unificación de términos infinitos más adelante.
Prueba de terminación
Para la prueba de terminación del algoritmo, considérese una tripleta donde n var es el número de variables que aparecen más de una vez en el conjunto de ecuaciones, n lhs es el número de símbolos de función y constantes en los lados izquierdos de las ecuaciones potenciales, y n eqn es el número de ecuaciones. Cuando se aplica la regla delete , n var disminuye, ya que x se elimina de G y se conserva solo en { x ≐ t }. Aplicar cualquier otra regla nunca puede aumentar n var de nuevo. Cuando se aplica la regla decompose , conflict o swap , n lhs disminuye, ya que al menos la f más externa del lado izquierdo desaparece. Aplicar cualquiera de las reglas restantes delete o check no puede aumentar n lhs , pero disminuye n eqn . Por lo tanto, cualquier aplicación de regla disminuye la tripletacon respecto al orden lexicográfico , que solo es posible un número finito de veces.
Conor McBride observa [ 18 ] que "al expresar la estructura que explota la unificación" en un lenguaje de tipos dependientes como Epigram , el algoritmo de unificación de Robinson puede hacerse recursivo en el número de variables , en cuyo caso una prueba de terminación separada se vuelve innecesaria.
Ejemplos de unificación sintáctica de términos de primer orden
En la sintaxis de Prolog, un símbolo que comienza con mayúscula es un nombre de variable; un símbolo que comienza con minúscula es un símbolo de función; la coma se usa como operador lógico AND . En notación matemática , x, y, z se usan como variables, f, g como símbolos de función y a, b como constantes.

El unificador más general de un problema de unificación sintáctica de primer orden de tamaño n puede tener un tamaño de 2 n . Por ejemplo, el problema Tiene el unificador más general . , cf. imagen. Para evitar la complejidad temporal exponencial causada por tal explosión, los algoritmos de unificación avanzados trabajan con grafos acíclicos dirigidos (DAG) en lugar de árboles. [ 19 ]
Aplicación: unificación en programación lógica
El concepto de unificación es una de las ideas principales de la programación lógica . Específicamente, la unificación es un componente básico de la resolución , una regla de inferencia para determinar la satisfacibilidad de una fórmula. En Prolog , el símbolo de igualdad =implica una unificación sintáctica de primer orden. Representa el mecanismo de vinculación del contenido de las variables y puede considerarse como una asignación única.
En Prolog:
- Una variable puede unificarse con una constante, un término u otra variable, convirtiéndose así efectivamente en su alias. En muchos dialectos modernos de Prolog y en la lógica de primer orden , una variable no puede unificarse con un término que la contenga; esta es la llamada comprobación de ocurrencias .
- Dos constantes solo pueden unificarse si son idénticas.
- De forma similar, un término puede unificarse con otro si los símbolos de función principales y las aridades de ambos términos son idénticos y si los parámetros pueden unificarse simultáneamente. Cabe destacar que se trata de un comportamiento recursivo.
- La mayoría de las operaciones, incluidas
+,-,*,/, no son evaluadas por=. Por ejemplo,1+2 = 3no es satisfacible porque son sintácticamente diferentes. El uso de restricciones aritméticas enteras#=introduce una forma de E-unificación para la cual estas operaciones son interpretadas y evaluadas. [ 20 ]
Aplicación: inferencia de tipos
Los algoritmos de inferencia de tipos se basan típicamente en la unificación, en particular la inferencia de tipos de Hindley-Milner que utilizan los lenguajes funcionales Haskell y ML . Por ejemplo, al intentar inferir el tipo de la expresión de Haskell , el compilador utilizará el tipo de la función de construcción de listas , el tipo del primer argumento y el tipo del segundo argumento . La variable de tipo polimórfico se unificará con y el segundo argumento se unificará con . no puede ser ambos y al mismo tiempo, por lo tanto, esta expresión no está correctamente tipada.True : ['x']a -> [a] -> [a](:)BoolTrue[Char]['x']aBool[a][Char]aBoolChar
Al igual que en Prolog, se puede proporcionar un algoritmo para la inferencia de tipos:
- Cualquier variable de tipo se unifica con cualquier expresión de tipo y se instancia según esa expresión. Una teoría específica podría restringir esta regla con una comprobación de ocurrencia.
- Dos constantes de tipo se unifican solo si son del mismo tipo.
- Dos construcciones de tipos se unifican solo si son aplicaciones del mismo constructor de tipos y todos sus tipos componentes se unifican recursivamente.
Aplicación: Unificación de la estructura de características
La unificación se ha utilizado en diferentes áreas de investigación de la lingüística computacional. [ 21 ] [ 22 ]
Unificación ordenada
La lógica de ordenación permite asignar untipo a cada término y declarar un tipo s 1 como subtipo de otro tipo s 2 , comúnmente escrito como s 1 ⊆ s 2 . Por ejemplo, al razonar sobre criaturas biológicas, es útil declarar un tipo perro como subtipo de un tipo animal . Siempre que se requieraun término de algún tipo s , se puede proporcionar en su lugar un término de cualquier subtipo de s . Por ejemplo, suponiendo una declaración de función madre : animal → animal , y una declaración de constante lassie : perro , el término madre ( lassie ) es perfectamente válido y tiene el tipo animal . Para proporcionar la información de que la madre de un perro es a su vez un perro, se puede emitir otra declaración madre : perro → perro ; esto se llama sobrecarga de funciones , similar a la sobrecarga en los lenguajes de programación .
Walther dio un algoritmo de unificación para términos en lógica ordenada, que requiere que para cualesquiera dos tipos declarados s 1 , s 2 su intersección s 1 ∩ s 2 también se declare: si x 1 y x 2 es una variable de tipo s 1 y s 2 , respectivamente, la ecuación x 1 ≐ x 2 tiene la solución { x 1 = x , x 2 = x }, donde x : s 1 ∩ s 2 . [ 23 ] Después de incorporar este algoritmo en un demostrador de teoremas automatizado basado en cláusulas, pudo resolver un problema de referencia traduciéndolo a lógica ordenada, reduciéndolo así en un orden de magnitud, ya que muchos predicados unarios se convirtieron en tipos.
Smolka generalizó la lógica de ordenación para permitir el polimorfismo paramétrico . [ 24 ] En su marco, las declaraciones de subordenación se propagan a expresiones de tipo complejas. Como ejemplo de programación, se puede declarar una lista de ordenación paramétrica ( X ) (donde X es un parámetro de tipo como en una plantilla de C++ ), y a partir de una declaración de subordenación int ⊆ float se infiere automáticamente la relación list ( int ) ⊆ list ( float ), lo que significa que cada lista de enteros es también una lista de floats.
Schmidt-Schauß generalizó la lógica de ordenación para permitir declaraciones de términos. [ 25 ] Como ejemplo, suponiendo declaraciones de suborden par ⊆ int e impar ⊆ int , una declaración de término como ∀ i : int . ( i + i ) : par permite declarar una propiedad de la suma de enteros que no podría expresarse mediante sobrecarga ordinaria.
Unificación de términos infinitos
Información general sobre árboles infinitos:
- B. Courcelle (1983). "Propiedades fundamentales de los árboles infinitos" . Theoret. Comput. Sci . 25 (2): 95– 169. doi : 10.1016/0304-3975(83)90059-2 .
- Michael J. Maher (julio de 1988). "Axiomatizaciones completas de las álgebras de árboles finitos, racionales e infinitos". Actas del 3er Simposio Anual de la IEEE sobre Lógica en Ciencias de la Computación, Edimburgo . págs. 348–357 .
- Joxan Jaffar; Peter J. Stuckey (1986). "Semántica de la programación lógica de árboles infinitos" . Theoretical Computer Science . 46 : 141–158 . doi : 10.1016/0304-3975(86)90027-7 .
Algoritmo de unificación, Prolog II:
- A. Colmerauer (1982). KL Clark; S.-A. Tarnlund (eds.). Prolog y árboles infinitos . Academic Press.
- Alain Colmerauer (1984). "Ecuaciones e inecuaciones en árboles finitos e infinitos". En ICOT (ed.). Actas de la Conferencia Internacional sobre Sistemas Informáticos de Quinta Generación . págs. 85–99 .
Aplicaciones:
- Francis Giannesini; Jacques Cohen (1984). "Generación de analizadores sintácticos y manipulación de gramáticas usando árboles infinitos de Prolog" . Journal of Logic Programming . 1 (3): 253– 265. doi : 10.1016/0743-1066(84)90013-X .
Unificación electrónica
La unificación de ecuaciones consiste en encontrar soluciones a un conjunto dado de ecuaciones , teniendo en cuenta un conocimiento previo sobre dichas ecuaciones , denominado E. Este conocimiento previo se expresa como un conjunto de igualdades universales . Para algunos conjuntos particulares de E , se han desarrollado algoritmos para la resolución de ecuaciones (también conocidos como algoritmos de unificación de ecuaciones ); para otros, se ha demostrado que no existen tales algoritmos.
Por ejemplo, si a y b son constantes distintas, la ecuación no tiene solución con respecto a la unificación puramente sintáctica , donde no se sabe nada sobre el operador . Sin embargo, si el Se sabe que es conmutativa , entonces la sustitución { x ↦ b , y ↦ a } resuelve la ecuación anterior, ya que
El conocimiento previo E podría indicar la conmutatividad de por la igualdad universalpara todo u , v ".
Conjuntos de conocimientos previos particulares E
Se dice que una teoría es decidible si se ha diseñado un algoritmo de unificación que finaliza para cualquier problema de entrada. Se dice que una teoría es semidecidible si se ha diseñado un algoritmo de unificación que finaliza para cualquier problema de entrada resoluble , pero que puede seguir buscando indefinidamente soluciones para un problema de entrada irresoluble.
La unificación es decidible para las siguientes teorías:
- A [ 26 ]
- A , C [ 27 ]
- A , C , I [ 28 ]
- A , C , N l [ nota 9 ] [ 28 ]
- A , yo [ 29 ]
- A , N l , N r (monoide) [ 30 ]
- C [ 28 ]
- Anillos booleanos [ 31 ] [ 32 ]
- Grupos abelianos , incluso si la signatura se expande con símbolos adicionales arbitrarios (pero no axiomas) [ 33 ].
- Álgebras modales K4 [ 34 ]
La unificación es semidecidible para las siguientes teorías:
- A , D l , Dr [ 35 ]
- A , C , D l [ nota 9 ] [ 36 ]
- Anillos conmutativos [ 33 ]
Paramodulación unilateral
Si hay un sistema de reescritura de términos convergente R disponible para E , el algoritmo de paramodulación unilateral [ 37 ] se puede utilizar para enumerar todas las soluciones de ecuaciones dadas.
Partiendo de G como el problema de unificación a resolver y S como la sustitución identidad, se aplican reglas de forma no determinista hasta que el conjunto vacío aparece como el G real , en cuyo caso el S real es una sustitución unificadora. Dependiendo del orden en que se aplican las reglas de paramodulación, de la elección de la ecuación real de G y de la elección de las reglas de R en mutate , son posibles diferentes rutas de cálculo. Solo algunas conducen a una solución, mientras que otras terminan en un G ≠ {} donde no se aplica ninguna otra regla (por ejemplo, G = { f (...) ≐ g (...) }).
Por ejemplo, se utiliza un sistema de reescritura de términos R que define el operador de adición de listas construidas a partir de cons y nil ; donde cons ( x , y ) se escribe en notación infija como x . y para abreviar; por ejemplo, app ( a . b . nil , c . d . nil ) → a . app ( b . nil , c . d . nil ) → a . b . app ( nil , c . d . nil ) → a . b . c . d . nil demuestra la concatenación de las listas a . b . nil y c . d . nil , empleando la regla de reescritura 2,2 y 1. La teoría ecuacional E correspondiente a R es el cierre de congruencia de R , ambos vistos como relaciones binarias sobre términos. Por ejemplo, app ( a . b . nil , c . d . nil ) ≡ a . b . c . d . nil ≡ app ( a . b . c . d . nil , nil ). El algoritmo de paramodulación enumera soluciones a ecuaciones con respecto a esa E cuando se le proporciona el ejemplo R .
A continuación se muestra un ejemplo exitoso de ruta de cálculo para el problema de unificación { app ( x , app ( y , x )) ≐ a . a . nil }. Para evitar conflictos de nombres de variables, las reglas de reescritura se renombran consistentemente cada vez antes de su uso por regla mutate ; v 2 , v 3 , ... son nombres de variables generados por computadora para este propósito. En cada línea, la ecuación elegida de G se resalta en rojo. Cada vez que se aplica la regla mutate , la regla de reescritura elegida ( 1 o 2 ) se indica entre paréntesis. De la última línea, se puede obtener la sustitución unificadora S = { y ↦ nil , x ↦ a . nil }. De hecho, app ( x , app ( y , x )) { y ↦ nil , x ↦ a . nil } = app ( a . nil , app ( nil , a . nil )) ≡ app ( a . nil , a . nil ) ≡ a . app ( nil , a . nil ) ≡ a . a . nil resuelve el problema dado. Una segunda ruta de cálculo exitosa, obtenible al elegir "mutate(1), mutate(2), mutate(2), mutate(1)", conduce a la sustitución S = { y ↦ a . a . nil , x ↦ nil }; no se muestra aquí. Ninguna otra ruta conduce al éxito.
Estrechamiento

Si R es un sistema de reescritura de términos convergente para E , un enfoque alternativo a la sección anterior consiste en la aplicación sucesiva de " pasos de estrechamiento "; esto eventualmente enumerará todas las soluciones de una ecuación dada. Un paso de estrechamiento (véase la imagen) consiste en
- escogiendo un subtérmino no variable del término actual,
- unificándolo sintácticamente con el lado izquierdo de una regla de R y
- reemplazar el lado derecho de la regla instanciada en el término instanciado.
Formalmente, si l → r es una copia renombrada de una regla de reescritura de R , que no tiene variables en común con un término s , y el subtérmino s | p no es una variable y es unificable con l a través del mgu σ , entonces s puede reducirse al término t = sσ [ rσ ] p , es decir, al término sσ , con el subtérmino en p reemplazado por rσ . La situación en la que s puede reducirse a t se denota comúnmente como s ↝ t . Intuitivamente, una secuencia de pasos de estrechamiento t 1 ↝ t 2 ↝ ... ↝ t n puede pensarse como una secuencia de pasos de reescritura t 1 → t 2 → ... → t n , pero con el término inicial t 1 instanciado cada vez más, según sea necesario para que cada una de las reglas utilizadas sea aplicable.
El ejemplo de cálculo de paramodulación anterior corresponde a la siguiente secuencia de estrechamiento ("↓" indica instanciación aquí):
El último término, v 2 . v 2 . nil, puede unificarse sintácticamente con el término original del lado derecho a . a . nil .
El lema de estrechamiento [ 38 ] garantiza que siempre que una instancia de un término s pueda ser reescrita a un término t por un sistema de reescritura de términos convergente, entonces s y t pueden ser estrechados y reescritos a un término s ′ y t ′ , respectivamente, de tal manera que t ′ sea una instancia de s ′ .
Formalmente: siempre que sσ → ∗ t se cumpla para alguna sustitución σ, entonces existen términos s ′ , t ′ tales que s ↝ ∗ s ′ y t → ∗ t ′ y s ′ τ = t ′ para alguna sustitución τ.
Unificación de orden superior

Muchas aplicaciones requieren que se considere la unificación de términos lambda tipados en lugar de términos de primer orden. Dicha unificación se denomina a menudo unificación de orden superior . La unificación de orden superior es indecidible , [ 39 ] [ 40 ] [ 41 ] y tales problemas de unificación no tienen la mayoría de los unificadores generales. Por ejemplo, el problema de unificación { f ( a , b , a ) ≐ d ( b , a , c )}, donde la única variable es f , tiene las soluciones { f ↦ λ x .λ y .λ z . d ( y , x , c )}, { f ↦ λ x .λ y .λ z . d ( y , z , c )}, { f ↦ λ x .λ y .λ z . d ( y , a , c ) }, { f ↦ λ x .λ y .λ z . d ( b , x , c ) }, { f ↦ λ x .λ y .λ z . d ( b , z , c ) } y { f ↦ λ x .λ y .λ z . d ( b , a , c ) }. Una rama bien estudiada de la unificación de orden superior es el problema de unificar términos lambda simplemente tipados módulo la igualdad determinada por conversiones αβη. Gérard Huet dio un algoritmo de (pre)unificación semidecidible [ 42 ] que permite una búsqueda sistemática del espacio de unificadores (generalizando el algoritmo de unificación de Martelli-Montanari [ 5 ] con reglas para términos que contienen variables de orden superior) que parece funcionar suficientemente bien en la práctica. Huet [ 43 ] y Gilles Dowek [ 44 ]He escrito artículos que analizan este tema.
Varios subconjuntos de la unificación de orden superior se comportan bien, ya que son decidibles y poseen un unificador más general para problemas resolubles. Uno de estos subconjuntos son los términos de primer orden descritos anteriormente. La unificación de patrones de orden superior , debida a Dale Miller, [ 45 ] es otro de estos subconjuntos. Los lenguajes de programación lógica de orden superior λProlog y Twelf han pasado de la unificación completa de orden superior a implementar solo el fragmento de patrón; sorprendentemente, la unificación de patrones es suficiente para casi todos los programas, si cada problema de unificación que no sea de patrón se suspende hasta que una sustitución posterior coloca la unificación en el fragmento de patrón. Un superconjunto de la unificación de patrones, denominado unificación de funciones como constructores, también se comporta bien. [ 46 ] El demostrador de teoremas Zipperposition tiene un algoritmo que integra estos subconjuntos bien comportados en un algoritmo completo de unificación de orden superior. [ 2 ]
En lingüística computacional, una de las teorías más influyentes sobre la construcción de elipsis postula que estas se representan mediante variables libres cuyos valores se determinan utilizando la Unificación de Orden Superior. Por ejemplo, la representación semántica de "Jon le gusta Mary y Peter también" es like( j , m ) ∧ R( p ) , y el valor de R (la representación semántica de la elipsis) se determina mediante la ecuación like( j , m ) = R( j ) . El proceso de resolución de estas ecuaciones se denomina Unificación de Orden Superior. [ 47 ]
Wayne Snyder dio una generalización tanto de la unificación de orden superior como de la E-unificación, es decir, un algoritmo para unificar términos lambda módulo una teoría ecuacional. [ 48 ]
Véase también
- Reescritura
- Regla admisible
- Sustitución explícita en el cálculo lambda
- Resolución de ecuaciones matemáticas
- Desunificación : resolución de inequidades entre expresiones simbólicas
- Antiunificación : cálculo de una generalización menos general (lgg) de dos términos, dual al cálculo de una instancia más general (mgu).
- Retículo de subsunción , un retículo cuya unificación es el punto de encuentro y cuya antiunificación es el punto de unión.
- Alineación de ontologías (utilizar la unificación con equivalencia semántica )
Notas
- ↑E.g. a ⊕ (b ⊕ f(x)) ≡ a ⊕ (f(x) ⊕ b) ≡ (b ⊕ f(x)) ⊕ a ≡ (f(x) ⊕ b) ⊕ a
- ↑since
- ↑since z {z ↦ x ⊕ y} = x ⊕ y
- ↑formally: each unifier τ satisfies ∀x: xτ = (xσ)ρ for some substitution ρ
- ↑Robinson used first-order syntactical unification as a basic building block of his resolution procedure for first-order logic, a great step forward in automated reasoning technology, as it eliminated one source of combinatorial explosion: searching for instantiation of terms.[14]
- ↑Independent discovery is stated in Martelli & Montanari (1982) sect.1, p.259. The journal publisher received Paterson & Wegman (1978) in Sep.1976.
- ↑Alg.1, p.261. Their rule (a) corresponds to rule swap here, (b) to delete, (c) to both decompose and conflict, and (d) to both eliminate and check.
- ↑Although the rule keeps x ≐ t in G, it cannot loop forever since its precondition x∈vars(G) is invalidated by its first application. More generally, the algorithm is guaranteed to terminate always, see below.
- 12in the presence of equality C, equalities Nl and Nr are equivalent, similar for Dl and Dr
References
- ↑Dowek, Gilles (1 January 2001). "Higher-order unification and matching". Handbook of automated reasoning. Elsevier Science Publishers B. V. pp. 1009–1062. ISBN 978-0-444-50812-6Archivado del original el 15 de mayo de 2019. Consultado el 15 de mayo de 2019 .
- 1 2 3 Vukmirović, Petar; Bentkamp, Alexander; Nummelin, Visa (14 de diciembre de 2021). "Unificación eficiente de orden superior completa" . Métodos lógicos en informática . 17 (4): 6919. arXiv : 2011.09507 . doi : 10.46298/lmcs-17(4:18)2021 .
- ↑ Apt, Krzysztof R. (1997). De la programación lógica a Prolog (1.ª ed. publicada). Londres Múnich: Prentice Hall. pág. 24. ISBN 013230368X.
- ^ Fages, François; Huet, Gerard (1986). "Conjuntos completos de unificadores y emparejadores en teorías ecuacionales" . Informática Teórica . 43 : 189– 200. doi : 10.1016/0304-3975(86)90175-1 .
- 1 2 Martelli, Alberto; Montanari, Ugo (abril de 1982). "Un algoritmo de unificación eficiente". ACM Trans. Program. Lang. Syst . 4 (2): 258– 282. doi : 10.1145/357162.357169 . S2CID 10921306 .
- ↑ Robinson (1965) n.º 2.5, 2.14, p. 25
- ↑ Robinson (1965) n.º 5.6, pág. 32
- ↑ Robinson (1965) n.º 5.8, pág. 32
- ↑ J. Herbrand: Investigaciones sobre la teoría de la demostración. Travaux de la société des Sciences et des Lettres de Varsovie , Clase III, Sciences Mathématiques et Physiques, 33, 1930.
- ↑ Jacques Herbrand (1930). Investigaciones sobre la teoría de la demostración (PDF) (tesis doctoral). A. vol. 1252. Universidad de París. Aquí: págs. 96-97
- 1 2 Claus-Peter Wirth; Jörg Siekmann; Christoph Benzmüller; Serge Autexier (2009). Conferencias sobre Jacques Herbrand como lógico (Informe SEKI). DFKI. arXiv : 0902.4682 .Aquí: pág. 56
- ↑ Robinson, JA (enero de 1965). "Una lógica orientada a máquinas basada en el principio de resolución" . Journal of the ACM . 12 (1): 23– 41. doi : 10.1145/321250.321253 . S2CID 14389185 . Aquí: sección 5.8, pág. 32
- ↑ JA Robinson (1971). "Lógica computacional: La computación de unificación" . Inteligencia de máquinas . 6 : 63–72 .
- ↑ David A. Duffy (1991). Principios de la demostración automatizada de teoremas . Nueva York: Wiley. ISBN 0-471-92784-8.Aquí: Introducción de la sección 3.3.3 "Unificación" , pág. 72.
- 1 2 de Champeaux, Dennis (agosto de 2022). "Algoritmo de unificación lineal más rápido" (PDF) . Journal of Automated Reasoning . 66 (4): 845– 860. doi : 10.1007/s10817-022-09635-1 .
- ^ Por Martelli y Montanari (1982) :
- Lewis Denver Baxter (febrero de 1976). Un algoritmo de unificación prácticamente lineal (PDF) (Informe de investigación). Vol. CS-76-13. Universidad de Waterloo, Ontario.
- Gérard Huet (septiembre de 1976). Resolución de ecuaciones en idiomas de orden 1,2,...ω (Estos estados). Universidad de París VII.
- Martelli, Alberto y Montanari, Ugo (julio de 1976). Unificación en tiempo y espacio lineal: una presentación estructurada (Nota interna). vol. IEI-B76-16. Consiglio Nazionale delle Ricerche, Pisa. Archivado desde el original el 15 de enero de 2015.
- Paterson, MS; Wegman, MN (mayo de 1976). Chandra, Ashok K.; Wotschke, Detlef; Friedman, Emily P.; Harrison, Michael A. (eds.). Unificación lineal . Actas del octavo simposio anual de la ACM sobre teoría de la computación (STOC). ACM. págs. 181–186 . doi : 10.1145/800113.803646 .
- Paterson, MS ; Wegman, MN (abril de 1978). "Unificación lineal" . J. Comput. Syst. Sci . 16 (2): 158–167 . doi : 10.1016/0022-0000(78)90043-0 .
- JA Robinson (enero de 1976). "Unificación rápida". En Woodrow W. Bledsoe , Michael M. Richter (eds.). Actas del Taller de Demostración de Teoremas de Oberwolfach . Informe del Taller de Oberwolfach. Vol. 1976/3.
- M. Venturini-Zilli (octubre de 1975). "Complejidad del algoritmo de unificación para expresiones de primer orden". Calcolo . 12 (4): 361–372 . doi : 10.1007/BF02575754 . S2CID 189789152 .
- ↑ Baader, Franz; Snyder, Wayne (2001). «Teoría de la unificación» (PDF) . Manual de razonamiento automatizado . págs. 445–533 . doi : 10.1016/B978-044450813-3/50010-2 . ISBN 978-0-444-50813-3.
- ↑ McBride, Conor (octubre de 2003). "Unificación de primer orden mediante recursión estructural" . Journal of Functional Programming . 13 (6): 1061– 1076. CiteSeerX 10.1.1.25.1516 . doi : 10.1017/S0956796803004957 . ISSN 0956-7968 . S2CID 43523380. Consultado el 30 de marzo de 2012 .
- ↑ p. ej. Paterson y Wegman (1978) sección 2, pág. 159
- ↑ "Aritmética declarativa de enteros" . SWI-Prolog . Consultado el 18 de febrero de 2024 .
- ↑ Jonathan Calder, Mike Reape y Hank Zeevat, Un algoritmo para la generación en gramática categorial de unificación . En Actas de la 4.ª Conferencia del Capítulo Europeo de la Asociación de Lingüística Computacional, páginas 233-240, Manchester, Inglaterra (10-12 de abril), Instituto de Ciencia y Tecnología de la Universidad de Manchester, 1989.
- ↑ Graeme Hirst y David St-Onge,Las cadenas léxicas como representaciones del contexto para la detección y corrección de malapropismos, 1998.
- ↑ Walther, Christoph (1985). "Una solución mecánica de la apisonadora de Schubert mediante resolución de múltiples tipos" (PDF) . Artif. Intell . 26 (2): 217– 224. doi : 10.1016/0004-3702(85)90029-3 . Archivado del original (PDF) el 8 de julio de 2011. Consultado el 28 de junio de 2013 .
- ↑ Smolka, Gert (noviembre de 1988). Programación lógica con tipos ordenados polimórficamente (PDF) . Taller internacional de programación algebraica y lógica. LNCS. Vol. 343. Springer. págs. 53–70 . doi : 10.1007/3-540-50667-5_58 .
- ↑ Schmidt-Schauß, Manfred (abril de 1988). Aspectos computacionales de una lógica ordenada con declaraciones de términos . Lecture Notes in Artificial Intelligence (LNAI). Vol. 395. Springer.
- ↑ Gordon D. Plotkin , Propiedades teóricas reticulares de la subsunción , Memorándum MIP-R-77, Univ. Edimburgo, junio de 1970
- ↑ Mark E. Stickel , Un algoritmo de unificación para funciones asociativas-conmutativas , Journal of the Association for Computing Machinery, vol. 28, n.º 3, págs. 423-434, 1981
- 1 2 3 F. Fages (1987). "Unificación asociativa-conmutativa" (PDF) . J. Symbolic Comput . 3 (3): 257– 275. doi : 10.1016/s0747-7171(87)80004-4 . S2CID 40499266 .
- ↑ Franz Baader, Unification in Idempotent Semigroups is of Type Zero , J. Automat. Reasoning, vol.2, no.3, 1986
- ↑ J. Makanin, El problema de la resolubilidad de ecuaciones en un semigrupo libre , Akad. Nauk SSSR, vol. 233, n.º 2, 1977
- ↑ Martin, U., Nipkow, T. (1986). "Unificación en anillos booleanos". En Jörg H. Siekmann (ed.). Actas del 8.º CADE . LNCS. Vol. 230. Springer. pp. 506–513 .
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ A. Boudet; JP Jouannaud; M. Schmidt-Schauß (1989). "Unificación de anillos booleanos y grupos abelianos" . Journal of Symbolic Computation . 8 (5): 449– 477. doi : 10.1016/s0747-7171(89)80054-9 .
- ^ Baader y Snyder (2001), pág. 486.
- ↑ F. Baader y S. Ghilardi, Unificación en lógicas modales y descriptivas , Logic Journal of the IGPL 19 (2011), n.º 6, págs. 705–730.
- ^ P. Szabo, Unifikationstheorie erster Ordnung ( Teoría de la unificación de primer orden ), Tesis, Univ. Karlsruhe, Alemania Occidental, 1982
- ↑ Jörg H. Siekmann, Unificación Universal , Actas de la 7.ª Conferencia Internacional sobre Deducción Automatizada, Springer LNCS, vol. 170, págs. 1-42, 1984
- ↑ N. Dershowitz y G. Sivakumar, Solving Goals in Equational Languages , Proc. 1st Int. Workshop on Conditional Term Rewriting Systems, Springer LNCS vol.308, pp. 45–55, 1988
- ↑ Fay (1979). "Unificación de primer orden en una teoría ecuacional". Actas del 4.º Taller sobre Deducción Automatizada . págs. 161–167 .
- 1 2 Warren D. Goldfarb (1981). "La indecidibilidad del problema de unificación de segundo orden" . TCS . 13 (2): 225– 230. doi : 10.1016/0304-3975(81)90040-2 .
- ↑ Gérard P. Huet (1973). "La indecidibilidad de la unificación en la lógica de tercer orden" . Information and Control . 22 (3): 257– 267. doi : 10.1016/S0019-9958(73)90301-X .
- ↑ Claudio Lucchesi: La indecidibilidad del problema de unificación para lenguajes de tercer orden (Informe de investigación CSRR 2059; Departamento de Ciencias de la Computación, Universidad de Waterloo, 1972)
- ↑ Gérard Huet: (1 de junio de 1975) Un algoritmo de unificación para el cálculo lambda tipado , Theoretical Computer Science
- ↑ Gérard Huet: Unificación del orden superior 30 años después
- ↑ Gilles Dowek: Unificación y correspondencia de orden superior. Manual de razonamiento automatizado 2001: 1009–1062
- ↑ Miller, Dale (1991). "Un lenguaje de programación lógica con abstracción lambda, variables de función y unificación simple" (PDF) . Journal of Logic and Computation . 1 (4): 497– 536. doi : 10.1093/logcom/1.4.497 .
- ↑ Libal, Tomer; Miller, Dale (mayo de 2022). "Unificación de orden superior de funciones como constructores: unificación de patrones extendida" . Annals of Mathematics and Artificial Intelligence . 90 (5): 455– 479. doi : 10.1007/s10472-021-09774-y .
- ↑ Gardent, Claire ; Kohlhase, Michael ; Konrad, Karsten (1997). "Un enfoque de unificación de orden superior y multinivel para la elipsis". Presentado a la Asociación Europea de Lingüística Computacional (EACL) . CiteSeerX 10.1.1.55.9018 .
- ↑ Wayne Snyder (julio de 1990). "Unificación electrónica de orden superior". Actas de la 10.ª Conferencia sobre Deducción Automatizada . LNAI. Vol. 449. Springer. págs. 573–587 .
Lecturas adicionales
- Franz Baader y Wayne Snyder (2001). «Teoría de la unificación» . En John Alan Robinson y Andrei Voronkov , editores, Manual de razonamiento automatizado , volumen I, páginas 447-533. Elsevier Science Publishers.
- Gilles Dowek (2001). "Unificación y correspondencia de orden superior" Archivado el 15 de mayo de 2019 en Wayback Machine . En Handbook of Automated Reasoning .
- Franz Baader y Tobias Nipkow (1998). Reescritura de términos y todo eso . Cambridge University Press.
- Franz Baader y Jörg H. Siekmann (1993). "Teoría de la unificación". En Manual de lógica en inteligencia artificial y programación lógica .
- Jean-Pierre Jouannaud y Claude Kirchner (1991). "Resolución de ecuaciones en álgebras abstractas: un estudio de unificación basado en reglas". En Lógica computacional: ensayos en honor de Alan Robinson .
- Nachum Dershowitz y Jean-Pierre Jouannaud , Sistemas de reescritura , en: Jan van Leeuwen (ed.), Manual de informática teórica , volumen B Modelos formales y semántica , Elsevier, 1990, págs. 243–320
- Jörg H. Siekmann (1990). "Teoría de la Unificación". En Claude Kirchner (editor) Unificación . Academic Press.
- Kevin Knight (marzo de 1989). "Unificación: una revisión multidisciplinaria" (PDF) . ACM Computing Surveys . 21 (1): 93–124 . CiteSeerX 10.1.1.64.8967 . doi : 10.1145/62029.62030 . S2CID 14619034 .
- Gérard Huet y Derek C. Oppen (1980). "Ecuaciones y reglas de reescritura: una encuesta" . Informe técnico. Universidad de Stanford.
- Raulefs, Peter; Siekmann, Jörg; Szabó, P.; Unvericht, E. (1979). "Una breve revisión del estado del arte en problemas de emparejamiento y unificación". Boletín ACM SIGSAM . 13 (2): 14– 20. doi : 10.1145/1089208.1089210 . S2CID 17033087 .
- Claude Kirchner y Hélène Kirchner. Reescritura, resolución, demostración . En preparación.
- Unificación (informática)
- Demostración automatizada de teoremas
- Lógica en informática
- Programación lógica
- Sistemas de reescritura
- teoría de tipos