Articulo de referencia

Unification (computer science)

In logic and computer science , specifically automated reasoning , unification is an algorithmic process of solving equations between symbolic expressions , each of the form Lef...

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={ l1r1, ..., lnrn } of equations to solve, where li, ri are in the set T{\displaystyle T}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 infinitoV{\displaystyle V}de variables . Para una unificación de orden superior, es conveniente elegirV{\displaystyle V}disjunto del conjunto de variables ligadas de términos lambda .
  • Un conjuntoT{\displaystyle T}de términos tales queVT{\displaystyle V\subseteq T}. Para la unificación de primer orden,T{\displaystyle T}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 superiorT{\displaystyle T}Consta de términos de primer orden y términos lambda (términos que contienen algunas variables de orden superior).
  • Un mapeovars:T{\displaystyle {\text{vars}}\colon T\rightarrow }PAG{\displaystyle \mathbb {P} }(V){\displaystyle (V)}, asignando a cada términot{\displaystyle t}el conjuntovars(t)V{\displaystyle {\text{vars}}(t)\subsetneq V}de variables libres que ocurren ent{\displaystyle t}.
  • Una teoría o relación de equivalencia{\displaystyle \equiv }enT{\displaystyle T}, indicando qué términos se consideran iguales. Para la E-unificación de primer orden,{\displaystyle \equiv }refleja el conocimiento previo sobre ciertos símbolos de función; por ejemplo, si{\displaystyle \oplus }se considera conmutativo,t{\displaystyle t\equiv u}si{\displaystyle u}resultados det{\displaystyle t}intercambiando los argumentos de{\displaystyle \oplus }en 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, generalmentet{\displaystyle t\equiv u}sit{\displaystyle t}y{\displaystyle u}son 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 { ycons (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 { ax = xa } tiene cada sustitución de la forma { xa ⋅...⋅ 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 { xa , 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ónσ:VT{\displaystyle \sigma :V\rightarrow T}de variables a términos; la notación{incógnita1t1,...,incógnitaktk}{\displaystyle \{x_{1}\mapsto t_{1},...,x_{k}\mapsto t_{k}\}}se refiere a una asignación de sustitución para cada variableincógnitai{\displaystyle x_{i}}al términoti{\displaystyle t_{i}}, parai=1,...,k{\displaystyle i=1,...,k}y cualquier otra variable a sí misma; laincógnitai{\displaystyle x_{i}}deben ser distintos por pares. Aplicando esa sustitución a un términot{\displaystyle t}se escribe en notación posfija comot{incógnita1t1,...,incógnitaktk}{\displaystyle t\{x_{1}\mapsto t_{1},...,x_{k}\mapsto t_{k}\}}; significa reemplazar (simultáneamente) cada aparición de cada variableincógnitai{\displaystyle x_{i}}en el términot{\displaystyle t}porti{\displaystyle t_{i}}El resultadotτ{\displaystyle t\tau }de aplicar una sustituciónτ{\displaystyle \tau }a un términot{\displaystyle t}se denomina un ejemplo de ese términot{\displaystyle t}. Como ejemplo de primer orden, aplicando la sustitución { xh ( a , y ), zb } al término

Generalización, especialización

Si un términot{\displaystyle t}tiene una instancia equivalente a un término{\displaystyle u}, es decir, sitσ{\displaystyle t\sigma \equiv u}por alguna sustituciónσ{\displaystyle \sigma }, entoncest{\displaystyle t}se llama más general que{\displaystyle u}, y{\displaystyle u}se denomina más especial que, o subsumido por,t{\displaystyle t}. Por ejemplo,incógnitaa{\displaystyle x\oplus a}es más general queab{\displaystyle a\oplus b}si ⊕ es conmutativo , ya que entonces(incógnitaa){incógnitab}=baab{\displaystyle (x\oplus a)\{x\mapsto b\}=b\oplus a\equiv a\oplus b}.

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, F(incógnita1,a,gramo(z1),y1){\displaystyle f(x_{1},a,g(z_{1}),y_{1})} es una variante de F(incógnita2,a,gramo(z2),y2){\displaystyle f(x_{2},a,g(z_{2}),y_{2})}, desde F(incógnita1,a,gramo(z1),y1){incógnita1incógnita2,y1y2,z1z2}=F(incógnita2,a,gramo(z2),y2){\displaystyle 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})} y F(incógnita2,a,gramo(z2),y2){incógnita2incógnita1,y2y1,z2z1}=F(incógnita1,a,gramo(z1),y1).{\displaystyle 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}).} Sin embargo,F(incógnita1,a,gramo(z1),y1){\displaystyle f(x_{1},a,g(z_{1}),y_{1})}no es una variante de F(incógnita2,a,gramo(incógnita2),incógnita2){\displaystyle f(x_{2},a,g(x_{2}),x_{2})}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{\displaystyle \equiv }, 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 siempreincógnitaincógnitaincógnita{\displaystyle x\oplus x\equiv x}, entonces el términoincógnitay{\displaystyle x\oplus y}es más general quez{\displaystyle z}, [ nota 2 ] y viceversa, [ nota 3 ] aunqueincógnitay{\displaystyle x\oplus y}yz{\displaystyle z}son de diferente estructura.

Una sustituciónσ{\displaystyle \sigma }es más especial que, o está subsumido por, una sustituciónτ{\displaystyle \tau }sitσ{\displaystyle t\sigma }está subsumido portτ{\displaystyle t\tau }para cada términot{\displaystyle t}También decimos queτ{\displaystyle \tau }es más general queσ{\displaystyle \sigma }. De forma más formal, tomemos un conjunto infinito no vacío.V{\displaystyle V}de variables auxiliares tales que ninguna ecuaciónliri{\displaystyle l_{i}\doteq r_{i}}en el problema de unificación contiene variables deV{\displaystyle V}Luego una sustituciónσ{\displaystyle \sigma }queda subsumido por otra sustitución.τ{\displaystyle \tau }si hay una sustituciónθ{\displaystyle \theta }de tal manera que para todos los términosincógnitaV{\displaystyle X\notin V},incógnitaσincógnitaτθ{\displaystyle X\sigma \equiv X\tau \theta }. [ 2 ] Por ejemplo{incógnitaa,ya}{\displaystyle \{x\mapsto a,y\mapsto a\}}está subsumido porτ={incógnitay}{\displaystyle \tau =\{x\mapsto y\}}, usandoθ={ya}{\displaystyle \theta =\{y\mapsto a\}}, pero σ={incógnitaa}{\displaystyle \sigma =\{x\mapsto a\}}no está subsumido porτ={incógnitay}{\displaystyle \tau =\{x\mapsto y\}}, comoF(incógnita,y)σ=F(a,y){\displaystyle f(x,y)\sigma =f(a,y)}no es un caso de F(incógnita,y)τ=F(y,y){\displaystyle f(x,y)\tau =f(y,y)}. [ 3 ]

Conjunto de soluciones

Una sustitución σ es una solución del problema de unificación E si l i σ ≡ r i σ parai=1,...,norte{\displaystyle i=1,...,n}. Dicha sustitución también se denomina unificador de E. Por ejemplo, si ⊕ es asociativo , el problema de unificación { xaax } tiene las soluciones { xa }, { xaa }, { xaaa }, etc., mientras que el problema { xaa } 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

Diagrama triangular esquemático de los términos sintácticamente unificadores t 1 y t 2 mediante una sustitución σ

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 1r 1 , ..., l nr 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 1 es una variante de 2 para cada variable x que aparece en el problema.

Por ejemplo, el problema de unificación { xz , yf ( x ) } tiene un unificador { xz , yf ( z ) }, porque

This is also the most general unifier. Other unifiers for the same problem are e.g. { xf(x1), yf(f(x1)), zf(x1) }, { xf(f(x1)), yf(f(f(x1))), zf(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

Robinson's 1965 unification algorithm

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 : tT}.[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   σ:=σ{st}{\displaystyle \sigma :=\sigma \{s\mapsto t\}} 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 finitoGRAMO={s1t1,...,snortetnorte}{\displaystyle G=\{s_{1}\doteq t_{1},...,s_{n}\doteq t_{n}\}}de ecuaciones potenciales, el algoritmo aplica reglas para transformarlo en un conjunto equivalente de ecuaciones de la forma { x 1u 1 , ..., x mu 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 { xt }. 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 xf (..., 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 xf (..., x , ...) no tiene solución; por lo tanto, la regla de eliminación solo se puede aplicar si xvars ( 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 tripletanortevar,nortelhs,nortemiqnorte{\displaystyle \langle n_{var},n_{lhs},n_{eqn}\rangle } 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 { xt }. 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 tripletanortevar,nortelhs,nortemiqnorte{\displaystyle \langle n_{var},n_{lhs},n_{eqn}\rangle }con 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.

Dos términos con un árbol exponencialmente más grande para su instancia menos común. Su representación DAG (extremo derecho, parte naranja) sigue siendo de tamaño lineal.

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 (((az)y)incógnita)ww(incógnita(y(za))){\displaystyle (((a*z)*y)*x)*w\doteq w*(x*(y*(z*a)))}Tiene el unificador más general .{za,yaa,incógnita(aa)(aa),w((aa)(aa))((aa)(aa))}{\displaystyle \{z\mapsto a,y\mapsto a*a,x\mapsto (a*a)*(a*a),w\mapsto ((a*a)*(a*a))*((a*a)*(a*a))\}} , 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:

  1. 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 .
  2. Dos constantes solo pueden unificarse si son idénticas.
  3. 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.
  4. 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:

  1. 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.
  2. Dos constantes de tipo se unifican solo si son del mismo tipo.
  3. 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 1s 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 1x 2 tiene la solución { x 1 = x , x 2 = x }, donde x : s 1s 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 intfloat 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 parint e imparint , 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ónincógnitaayb{\displaystyle x*a\doteq y*b} no tiene solución con respecto a la unificación puramente sintáctica , donde no se sabe nada sobre el operador{\displaystyle *} . Sin embargo, si el{\displaystyle *}Se sabe que es conmutativa , entonces la sustitución { xb , ya } resuelve la ecuación anterior, ya que

El conocimiento previo E podría indicar la conmutatividad de {\displaystyle *}por la igualdad universalv=v{\displaystyle u*v=v*u}para 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:

La unificación es semidecidible para las siguientes teorías:

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 . nilapp ( 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 = { ynil , xa . nil }. De hecho, app ( x , app ( y , x )) { ynil , xa . 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 = { ya . a . nil , xnil }; no se muestra aquí. Ninguna otra ruta conduce al éxito.

Estrechamiento

Diagrama triangular del paso de estrechamiento st en la posición p del término s , con sustitución unificadora σ (fila inferior), utilizando una regla de reescritura lr (fila superior).

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 lr 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 = [ ] p , es decir, al término , con el subtérmino en p reemplazado por . La situación en la que s puede reducirse a t se denota comúnmente como st . Intuitivamente, una secuencia de pasos de estrechamiento t 1t 2 ↝ ... ↝ t n puede pensarse como una secuencia de pasos de reescritura t 1t 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 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

En la reducción de Goldfarb [ 39 ] del décimo problema de Hilbert a unificabilidad de segundo orden, la ecuaciónincógnita1incógnita2=incógnita3{\displaystyle X_{1}*X_{2}=X_{3}}corresponde al problema de unificación representado, con variables de funciónFi{\displaystyle F_{i}}correspondiente aincógnitai{\displaystyle X_{i}}yGRAMO{\displaystyle G}fresco .

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 ↦ λ xyz . d ( y , x , c )}, { f ↦ λ xyz . d ( y , z , c )}, { f ↦ λ xyz . d ( y , a , c ) }, { f ↦ λ xyz . d ( b , x , c ) }, { f ↦ λ xyz . d ( b , z , c ) } y { f ↦ λ xyz . 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

Notas

  1. E.g. a ⊕ (bf(x)) ≡ a ⊕ (f(x) ⊕ b) ≡ (bf(x)) ⊕ a ≡ (f(x) ⊕ b) ⊕ a
  2. since (xy){xz,yz}=zzz{\displaystyle (x\oplus y)\{x\mapsto z,y\mapsto z\}=z\oplus z\equiv z}
  3. since z {zxy} = xy
  4. formally: each unifier τ satisfies x: = ()ρ for some substitution ρ
  5. 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]
  6. Independent discovery is stated in Martelli & Montanari (1982) sect.1, p.259. The journal publisher received Paterson & Wegman (1978) in Sep.1976.
  7. 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.
  8. Although the rule keeps xt in G, it cannot loop forever since its precondition xvars(G) is invalidated by its first application. More generally, the algorithm is guaranteed to terminate always, see below.
  9. 12in the presence of equality C, equalities Nl and Nr are equivalent, similar for Dl and Dr

References

  1. 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 .
  2. 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 .
  3. 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.
  4. ^ 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 .
  5. 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 . 
  6. Robinson (1965) n.º 2.5, 2.14, p. 25
  7. Robinson (1965) n.º 5.6, pág. 32
  8. Robinson (1965) n.º 5.8, pág. 32
  9. 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.
  10. 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
  11. 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
  12. 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
  13. JA Robinson (1971). "Lógica computacional: La computación de unificación" . Inteligencia de máquinas . 6 : 63–72 .
  14. 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.
  15. 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 .
  16. ^ 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 . 
  17. 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.
  18. 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 .   
  19. p. ej. Paterson y Wegman (1978) sección 2, pág. 159
  20. "Aritmética declarativa de enteros" . SWI-Prolog . Consultado el 18 de febrero de 2024 .
  21. 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.
  22. Graeme Hirst y David St-Onge,Las cadenas léxicas como representaciones del contexto para la detección y corrección de malapropismos, 1998.
  23. 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 .
  24. 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 .  
  25. 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. 
  26. Gordon D. Plotkin , Propiedades teóricas reticulares de la subsunción , Memorándum MIP-R-77, Univ. Edimburgo, junio de 1970
  27. 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
  28. 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 . 
  29. Franz Baader, Unification in Idempotent Semigroups is of Type Zero , J. Automat. Reasoning, vol.2, no.3, 1986
  30. J. Makanin, El problema de la resolubilidad de ecuaciones en un semigrupo libre , Akad. Nauk SSSR, vol. 233, n.º 2, 1977
  31. 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 )
  32. 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 .
  33. ^ Baader y Snyder (2001), pág. 486.
  34. 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.
  35. ^ P. Szabo, Unifikationstheorie erster Ordnung ( Teoría de la unificación de primer orden ), Tesis, Univ. Karlsruhe, Alemania Occidental, 1982
  36. 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
  37. 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
  38. Fay (1979). "Unificación de primer orden en una teoría ecuacional". Actas del 4.º Taller sobre Deducción Automatizada . págs. 161–167 . 
  39. 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 .
  40. 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 .
  41. 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)
  42. Gérard Huet: (1 de junio de 1975) Un algoritmo de unificación para el cálculo lambda tipado , Theoretical Computer Science
  43. Gérard Huet: Unificación del orden superior 30 años después
  44. Gilles Dowek: Unificación y correspondencia de orden superior. Manual de razonamiento automatizado 2001: 1009–1062
  45. 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 .
  46. 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 .
  47. 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 . 
  48. 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.