El indeterminismo en programaci´
on
l´
ogico-funcional:
un enfoque basado en reescritura
1
Trabajo de investigaci´
on
Autor:
Juan Rodr´ıguez Hortal´
a
Directores:
Francisco J. L´
opez Fraguas
Jaime S´
anchez Hern´
andez
Departamento de Sistemas Inform´
aticos y Computaci´
on
Universidad Complutense de Madrid
Junio de 2007
1Este trabajo ha sido financiado parcialmente por los proyectos TIN2005-09207-C03-03
2
Agradecimientos
Gracias a Jaime y a Paco por introducirme en el mundo de la investigaci´on, por guiar-me en mis priguiar-meros pasos, y por la confianza depositada y el esfuerzo dedicado para llevar a cabo este trabajo.
3
Resumen
Por su alto poder expresivo, el uso del indeterminismo ha despertado especial inter´es en el ´ambito de la programaci´on declarativa. En particular, est´a en la base del lenguaje Prolog [SS86], quiz´as el representante m´as conocido de los lenguajes indeterministas. Los lenguajes funcionales, tambi´en dentro del ´ambito declarativo, no suelen contemplar el inde-terminismo como parte constitutiva del lenguaje, aunque no son ajenos a su inter´es [SS92] y prescriben metodolog´ıas para simularlo utilizando sus propias construcciones [Wad85]. La programaci´on l´ogico-funcional (PLF) [Han94, Rod01, Han05], o m´as en general la programaci´on declarativa multiparadigma, constituye una corriente de investigaci´on im-portante, que persigue integrar en un solo lenguaje las principales virtudes de varios pa-radigmas independientes: programaci´on l´ogica, programa funcional perezosa, e incluso programaci´on con restricciones.
En este trabajo realizaremos una comparativa entre algunas de las descripciones sem´ an-ticas disponibles para lenguajes l´ogico-funcionales con funciones indeterministas, y pro-pondremos una nueva descripci´on sem´antica para programaci´on l´ogico-funcional basada en la reescritura. Los marcos abordados ser´an el de la reescritura de t´erminos [BN98] y el de la l´ogica de reescritura CRWL [GHLR99], como marcos consolidados; el de la sem´antica operacional FLC [AHH+05], como marco emergente; y por ´ultimo el nuevo marco de la let-reescritura [LRS07c], una de las constribuciones originales de este trabajo. Dedicare-mos un cap´ıtulo a cada uno de ellos.
Intentaremos obtener resultados t´ecnicamente precisos que puedan ser utilizados como herramientas para poder compartir t´ecnicas y extender conclusiones de un formalismo a otro. De esta forma, al plantear cada formalismo su modelo de la PLF desde una pers-pectiva distinta y a un nivel de abstracci´on diferente, podremos enfrentar cada problema relativo al an´alisis o transformaci´on de programas PLF que se nos presente en el futuro, desde el punto de vista m´as apropiado al problema en cuesti´on.
Algunos de estos resultados, en particular los que relacionan los marcos CRWL y FLC, as´ı como los que relacionan la nueva relaci´on de let-reescritura con CRWL y estos dos ´
ultimos marcos con la reescritura tradicional, son resultados originales publicados en [LRS06,LRS07a,LRS07c].
´
Indice general
1. Introducci´on 7
1.1. Indeterminismo . . . 7
1.2. Indeterminismo en programaci´on l´ogico-funcional . . . 8
1.3. Objetivos y estructura del trabajo . . . 9
1.3.1. Objetivos . . . 9
1.3.2. Estructura del trabajo . . . 10
2. Sistemas de reescritura 13 2.1. Sistemas Abstractos de Reducci´on . . . 13
2.2. Expresiones y Sustituciones . . . 17
2.3. Sistemas de Reescritura . . . 22
2.4. Variantes de la Reescritura . . . 25
2.4.1. Reescritura Basada en Constructoras . . . 25
2.4.2. Reescritura con Variables Extra. . . 26
2.5. Estrechamiento . . . 26
3. La l´ogica de reescritura CRWL 35 3.1. Preliminares. . . 36
3.2. Una l´ogica de reescritura condicional basada en constructoras . . . 39
4. FLC: una sem´antica operacional de bajo nivel 47 4.1. El lenguaje FLC y su sem´antica . . . 48
4.2. Relaci´on con CRWL . . . 56 4.2.1. El c´alculo de pruebas CRWLF LC . . . 57 4.2.2. Relaci´on entre CRWLF LC y FLC . . . 60 4.3. Conclusiones . . . 75 5. Let-reescritura 77 5.1. Let -reescritura . . . 79
5.1.1. Sintaxis de la let -reescritura . . . 79
5.1.2. Reglas de la let -reescritura . . . 84
5.1.3. Adecuaci´on de la let -reescritura a CRWL . . . 88
5.1.4. Adecuaci´on de la let -reescritura a CRWLlet . . . 101
5.1.5. Otras propiedades de la let -reescritura . . . 105
5.2. Let -estrechamiento . . . 109
5.2.1. Adecuaci´on del let -estrechamiento . . . 112
5.3. CRWL/let -reescritura vs. reescritura tradicional. . . 119
6 ´INDICE GENERAL
5.3.2. Completitud de CRWL respecto a la reescritura tradicional . . . 123
5.4. Trabajo relacionado y conclusiones . . . 128
6. Conclusiones finales y trabajo futuro 131
6.1. Aportaciones . . . 131
6.2. Trabajo futuro . . . 132
Cap´ıtulo 1
Introducci´
on
1.1.
Indeterminismo
Seg´un [TFE07a,TFE07b]:
“El determinismo es la propuesta filos´ofica seg´un la cual cualquier evento, inclu-yendo la cognici´on humana y su comportamiento, la decisi´on y la acci´on, es determinado causalmente por una cadena ininterrumpida de acontecimientos previos. El determinismo tambi´en puede definirse como la tesis de que en cualquier instante existe un ´unico futuro f´ısicamente posible”
El indeterminismo es la creencia filos´ofica opuesta al determinismo: la creencia seg´un la cual existen eventos que no corresponden con el determinismo (y por tanto, en alg´un sentido, no se deben a ninguna causa). Por ejemplo:
1. Ning´un evento tiene causa en absoluto. 2. Algunos eventos no tienen causa en absoluto. 3. Algunos eventos son causados s´olo parcialmente. 4. Cualquier evento es causado s´olo parcialmente.
En el ´ambito de los lenguajes de programaci´on com´unmente se considera que un len-guaje es determinista cuando la evaluaci´on de una expresi´on cualquiera calcula siempre los mismos valores para los mismos datos de entrada. De esta forma se considera que la mayor parte de los lenguajes imperativos (Pascal, C/C++, Java, C#, . . . ) son deterministas. Sin embargo esta afirmaci´on se puede considerar bastante imprecisa desde cierto punto de vista, pues en cualquiera de estos lenguajes es sencillo escribir un programa que no tenga par´ametros de entrada y que devuelva un n´umero pseudo-aleatorio o simplemente que nos diga qu´e hora es. Cualquiera de estos programas devolver´a valores diferentes seg´un el mo-mento en que se invoque, de forma independiente del valor de unos par´ametros de entrada que no tiene. Este indeterminismo se deber´a a la interacci´on del lenguaje con el sistema operativo, que hace de interfaz con el mundo exterior. Pero como el mundo exterior no es modelado por estos lenguajes de forma expl´ıcita entonces ser´ıa muy complicado utilizarlo para razonar sobre el comportamiento de los c´omputos.
Otra situaci´on com´un en la que surge el indeterminismo de forma natural es en el ´ambito de la programaci´on concurrente, en la que varios procesos se realizan a la vez por diversos
8 1. Introducci´on
agentes, en m´aquinas diferentes o en una misma m´aquina con capacidades multitarea. Normalmente estos agentes ejecutan tareas de forma independiente y utilizan ciertas pri-mitivas proporcionadas por los lenguajes para sincronizarse y colaborar entre s´ı. En estos espacios de tiempo en que los procesos se ejecutan de forma independiente es imposible afirmar de forma precisa qu´e proceso terminar´a antes su tarea, por ello son necesarias dichas primitivas de sincronizaci´on. Este indeterminismo es inevitable incluso cuando los procesos se ejecutan en una ´unica m´aquina, ya que no podemos saber de antemano como distribuir´a los recursos de la m´aquina el sistema operativo. E incluso, aunque muchos sistemas operativos proporcionan mecanismos para asegurar la provisi´on de ciertos recur-sos a procerecur-sos determinados, la naturaleza f´ısica de las propias m´aquinas hace imposible determinar con exactitud el momento en que se terminar´a la ejecuci´on de un ´unico proceso. Sin embargo, el indeterminismo que nos ocupa en este trabajo no es el que surge por la interacci´on con el exterior, ni el debido a procesos concurrentes o a las limitaciones f´ısicas del hardware. Este trabajo trata sobre el indeterminismo usado como recurso expre-sivo de un lenguaje. En los lenguajes indeterministas se proporcionan primitivas u otro tipo de recursos para expresar procesos cuyo resultado final no est´a totalmente determi-nado por los datos que emplean de entrada. En estos lenguajes, en los que la concurrencia no tiene por qu´e estar presente, el indeterminismo es parte del modelo de c´omputo. Distintas variantes del indeterminismo se han utilizado desde hace mucho tiempo en la especificaci´on de sistemas (e.g, m´aquinas de Turing o aut´omatas indeterministas) o la es-critura de programas (ejemplos cl´asicos son las construcciones de McCarthy [McC63] o Dijkstra [Dij97]). El indeterminismo es especialmente ´util en problemas que involucran alg´un proceso de b´usqueda, porque permite expresarlos de forma natural y directa: cada alternativa se plasma en el lenguaje como una regla del programa y es el propio sistema el que gestiona la exploraci´on de las distintas posibilidades. Si el lenguaje es determinista (como habitualmente ocurre en programaci´on imperativa) ser´a el programador quien deba codificar expresamente en su algoritmo la exploraci´on de las distintas alternativas, tarea que con frecuencia no es trivial y es proclive a introducir errores en el programa.
1.2.
Indeterminismo en programaci´
on l´
ogico-funcional
Por su alto poder expresivo, el uso del indeterminismo ha despertado especial inter´es en el ´ambito de la programaci´on declarativa. En particular, est´a en la base del lenguaje Pro-log, quiz´as el representante m´as conocido de los lenguajes indeterministas. Los lenguajes funcionales, tambi´en dentro del ´ambito declarativo, no suelen contemplar el indetermi-nismo como parte constitutiva del lenguaje, aunque no son ajenos a su inter´es [SS92] y prescriben metodolog´ıas para simularlo utilizando sus propias construcciones [Wad85].
La programaci´on l´ogico-funcional (PLF) [Han94, Rod01, Han05], o m´as en general la programaci´on declarativa multiparadigma, constituye una corriente de investigaci´on importante, que persigue integrar en un solo lenguaje las principales virtudes de varios paradigmas independientes: programaci´on l´ogica, programa funcional perezosa, e incluso programaci´on con restricciones. Dos lenguajes actuales representativos de esta corriente son Toy [LS99, CSe06] y Curry [Han06], que comparten sus principales caracter´ısticas. En ellos los programas son sistemas de reescritura [BN98] posiblemente no confluentes y no terminantes que definen por tanto funciones perezosas posiblemente no deterministas.
1.3. Objetivos y estructura del trabajo 9
La sem´antica adoptada para el no determinismo es la de elecci´on en la invocaci´on (call-time choice) [Hus93], por resultar m´as natural para la programaci´on y m´as eficaz en la ejecuci´on al corresponderse con el mecanismo de compartici´on (sharing) habitual en los lenguajes funcionales perezosos. La combinaci´on evaluaci´on perezosa/indeterminismo es una cuesti´on t´ecnica no trivial suscitada en [Hus93] a la que se dio respuesta en [GHLR99] con la propuesta de CRWL, un marco sem´antico muy detallado considerado como la fun-damentaci´on sem´antica m´as adecuada [Han05] para esta familia de lenguajes. CRWL ha dado lugar una amplia colecci´on de trabajos (ver [Rod01]) que abordan extensiones del marco original o su uso como base de la construcci´on de herramientas de desarrollo de programas (depuraci´on, verificaci´on, optimizaci´on,...).
La combinaci´on de indeterminismo y pereza, adem´as de plantear nuevos desaf´ıos en el ´
ambito de las descripciones sem´anticas de los programas, tambi´en abre nuevas v´ıas para el desarollo de algoritmos que exploten el uso combinado de estos dos recursos expresivos. En particular, es conocido emp´ıricamente por algunos ejemplos [GHLR99, Han06] que la interacci´on entre evaluaci´on perezosa e indeterminismo hace que algunos algoritmos formulados de una manera muy natural (declarativa) se comporten mucho m´as eficiente-mente que al usar evaluaci´on impaciente, o que al mantener la evaluaci´on perezosa pero simulando el indeterminismo mediante t´ecnicas puramente funcionales cl´asicas [Wad85]. Sin embargo, s´ı que es posible simular el indeterminismo en programaci´on funcional de forma eficiente, extrapolando las estructuras impl´ıcitas en los mecanismos operacionales de PLF, como mostramos en [LRS07b], un ejemplo de transferencia t´ecnica entre la PLF y la programaci´on funcional.
El mecanismo operacional propio de los lenguajes l´ogico-funcionales es el estrechamien-to (narrowing), que combina reescritura y unificaci´on (ver [BN98]). Aunque CRWL incluye tambi´en un c´alculo de estrechamiento perezoso, la noci´on que ha jugado un papel m´as im-portante ha sido la de estrechamiento necesario (needed narrowing) [AEH00], basada en ´
arboles definicionales [Ant92a] y nociones cl´asicas de la teor´ıa de reescritura . Establecer la relaci´on t´ecnica entre ambos enfoques -CRWL y estrechamiento necesario- resultar´ıa de gran inter´es, al conectar dos l´ıneas de trabajo que se han revelado muy fruct´ıferas por separado; pero no ha sido factible hasta la fecha porque en [AEH00] no se consideran siste-mas indeterministas, y en alguna secuela suya donde s´ı se hace [Ant97] el indeterminismo considerado es diferente (sem´antica de elecci´on en ejecuci´on o run-time choice).
Recientemente, sin embargo, se ha presentado en [AHH+05] un mecanismo operacional que esencialmente combina el estrechamiento necesario con el indeterminismo con elecci´on en la invocaci´on. Las nociones all´ı presentadas parecen herramientas adecuadas para es-tablecer una relaci´on entre CRWL y el estrechamiento necesario: esta ser´a precisamente una de las aportaciones de este trabajo.
1.3.
Objetivos y estructura del trabajo
1.3.1. Objetivos
En este trabajo realizaremos una comparativa entre algunas de las descripciones sem´ anti-cas disponibles para lenguajes l´ogico-funcionales con funciones indeterministas, y
propon-10 1. Introducci´on
dremos una nueva descripci´on sem´antica para PLF basada en la reescritura. Concreta-mente, nuestros objetivos son:
Revisar y presentar distintas descripciones sem´anticas existentes para el indetermi-nismo tal y como se entiende en la programaci´on l´ogico-funcional moderna. Expon-dremos los conceptos b´asicos en el campo de los sistemas abstractos de reducci´on y la reescritura de t´erminos [BN98], ya que ´estas ser´an las nociones en las que se fundamentan de una manera u otra el resto de descripciones sem´anticas expuestas. Tambi´en se presentar´an el marco CRWL [GHLR99] y la nueva sem´antica operacional propuesta en [AHH+05], que llamaremos FLC.
Para cada una de estas nociones se intentar´a explicar los conceptos subyacentes y dar intuiciones ´utiles acerca su naturaleza y sus mecanismos por medio de explica-ciones verbales y ejemplos. Tambi´en se presentar´an sus propiedades fundamentales y se motivar´a su utilidad.
Establecer una comparaci´on t´ecnica entre dichas descripciones, formulando y pro-bando resultados de equivalencia. Estos resultados se intentar´an formular de manera t´ecnica y precisa de forma que puedan ser utilizados como herramientas para poder compartir t´ecnicas y extender conclusiones de un formalismo a otro. De esta forma, al plantear cada formalismo su modelo de la PLF desde una perspectiva distinta y a un nivel de abstracci´on diferente, podremos enfrentar cada problema relativo al an´alisis o transformaci´on de programas PLF que se nos presente en el futuro, desde el punto de vista m´as apropiado al problema en cuesti´on.
Proponer una descripci´on sem´antica alternativa para PLF, ligada m´as estrechamente a la noci´on de reescritura. Por motivos que explicaremos m´as adelante la reescritura cl´asica no es un marco apropiado para la descripci´on de la sem´antica de la PLF moderna. Sin embargo la reescritura tiene grandes virtudes a la hora de describir c´omputos, ya que proporciona una noci´on precisa, simple y de alto nivel de abs-tracci´on de lo que es dar un paso en el proceso de reducci´on de una expresi´on a su valor asociado. Por ello desarrollaremos una modificaci´on de la reescritura, la let-reescritura, inspirada en [SH04,MOW98,Plu01], en la que se a˜naden las nociones de compartici´on de subexpresiones y elecci´on en la invocaci´on al marco de la reescritura. Tambi´en introduciremos la relaci´on de let-estrechamiento asociada, y probaremos su correcci´on y completitud respecto a la let-reescritura.
Estudiar la relaci´on entre la nueva noci´on de let-reescritura y el marco CRWL y el de la reescritura tradicional, buscando resultados de equivalencia que prueben la adecuaci´on de la let-reescritura para describir los c´omputos en PLF de forma simple y con un alto nivel de abstracci´on. De esta manera, al haber relacionado anteriormente la sem´antica operacional de [AHH+05] con el marco CRWL, habremos conseguido tender puentes entre cada uno de estos formalismos tan diversos.
1.3.2. Estructura del trabajo
Adem´as de la introducci´on y conclusiones, este trabajo consta de cuatro cap´ıtulos in-termedios dedicado cada uno a un formalismo diferente. En los cap´ıtulos segundo y tercero expondremos material est´andar sobre dos marcos ya consolidados como son la reescritura de t´erminos y la l´ogica de reescritura CRWL.
1.3.2 Estructura del trabajo 11
En el cap´ıtulo cuarto introduciremos la sem´antica FLC tal y como se presenta en [AHH+05], y los resultados originales (publicados) que hemos obtenido respecto a su re-laci´on t´ecnica con CRWL. Por ´ultimo en el cap´ıtulo quinto presentaremos m´as resultados originales: las nuevas nociones de let-reescritura y let-estrechamiento, y los resultados res-pecto a la adecuaci´on del let-estrechamiento a la let-reescritura, la adecuaci´on de la let-reescritura a CRWL y la adecuaci´on a la reescritura tradicional del marco com´un formado por CRWL y la let-reescritura, esta ´ultima para la clase de programas deterministas. Los resultados respecto a la relaci´on entre la let-reescritura, CRWL y la reescritura tradicional han sido publicados en [LRS07c].
Por ´ultimo en el cap´ıtulo sexto presentaremos las conclusiones, recapitulando las apor-taciones del trabajo y evaluando el grado de consecuci´on de los objetivos propuestos, y por ´ultimo planteando las l´ıneas de trabajo abiertas para un posible desarrollo futuro.
Cap´ıtulo 2
Sistemas de reescritura
En este cap´ıtulo revisaremos los conceptos fundamentales en el campo de la reescritura de t´erminos. Este material es material est´andar en la literatura del tema, y aqu´ı se expone bas´andose fundamentalmente en su presentaci´on en [BN98,Plu98,Vad02].
2.1.
Sistemas Abstractos de Reducci´
on
Definici´on 2.1.1 (Sistema abstracto de reducci´on (ARS )1).
Es cualquier par (A, →) formado por un conjunto A que llamaremos conjunto soporte y una relaci´on binaria sobre ´el, → ⊆ A × A que llamaremos relaci´on de reducci´on. Utilizaremos a → b para denotar (a, b) ∈→
El t´ermino “reducci´on” se debe a la manera en que se utilizan a menudo los ARS’s para modelar c´omputos. Dado un c´omputo en el que se calcula un valor v para una expresi´on e mediante una serie de pasos intermedios ij, podemos modelarlo definiendo un ARS en
el que cada paso involucrado en el proceso est´e relacionado con el paso que le sigue, lo que denotar´ıamos e → i1 → i2 → . . . → in→ v. Llamamos derivaci´on o secuencia de
reducci´on a cualquiera de estas cadenas de elementos relacionados.
En este modelo la relaci´on de reducci´on representa la acci´on de dar un paso de simplifica-ci´on de la expresi´on de entrada, con lo que se considera que en a → b la expresi´on b es m´as simple que a y por tanto su complejidad ha sido “reducida”. Aunque esta es una buena intuici´on para el modelado de c´omputos terminantes no lo es tanto cuando el c´omputo a modelar no termina, como en el caso de un c´omputo que enumere los n´umeros naturales: podr´ıamos modelar dicho c´omputo mediante la derivaci´on (infinita) 0 → 1 → 2 → . . . en la que ya no resulta tan natural considerar que la derivaci´on vaya reduciendo o simplificando los valores. En todo caso nos ce˜niremos a esta terminolog´ıa por compatibilidad con otros textos.
Dado que los sistemas de reducci´on tratan con relaciones, debemos clarificar el concepto de composici´on de relaciones:
Definici´on 2.1.2 (Composici´on de relaciones). Dadas dos relaciones R ⊆ B × C y S ⊆ A × B su composici´on se define como
14 2. Sistemas de reescritura
R ◦ S = {(x, z) ∈ A × C | ∃y ∈ B tal que (x, y) ∈ S, (y, z) ∈ R}2
Las siguientes nociones ser´an utilizadas con frecuencia a lo largo de este trabajo: Definici´on 2.1.3 (Nociones b´asicas para ARS s). Dado un ARS (A, →) se definen:
- Relaciones de reducci´on derivadas de →:
identidad →0 = {(x, x) | x ∈ A} (i+1)-composici´on →i+1 = → ◦ →i cierre reflexivo →= = →0∪ → cierre transitivo →+ = S i>0→i cierre reflexivo-transitivo →∗ = →0∪ →+ inversa ← = →−1= {(y, x) | x → y}
cierre sim´etrico ↔ = ← ∪ → cierre sim´etrico-transitivo ↔+ = (↔)+
cierre sim´etrico-reflexivo-transitivo ↔∗ = (↔)∗
Estas construcciones pueden entenderse como caminos, por ejemplo si a →n b en-tonces decimos que hay un camino de longitud n entre a y b.
- Propiedades de los elementos de A respecto a →: • x ∈ A es reducible sii ∃y ∈ A tal que x → y.
• x ∈ A est´a en forma normal o se dice que es irreducible sii @y ∈ A tal que x → y.
• y ∈ A es una forma normal de x ∈ A sii y est´a en forma normal y adem´as x →∗ y (hay camino de x a y). Si x tiene una ´unica forma normal entonces ´esta se denota por x ↓.
• y ∈ A es un sucesor directo de x ∈ A sii x → y. • y ∈ A es un sucesor o reducto de x ∈ A sii x →+y.
• x, y ∈ A son convertibles si x ↔∗ y.
• x, y ∈ A son reunibles si ∃z ∈ A tal que x →∗ z ←∗ y, lo cual denotamos
mediante x ↓ y.
- Propiedades de la relaci´on de reducci´on :
• → es terminante (o fuertemente normalizante o noetheriana) sii no existe ninguna derivaci´on infinita a0→ a1 → a2 → . . . de elementos de A.
• → es normalizante (o d´ebilmente normalizante) sii todo elemento de A tiene al menos una forma normal.
• → es Church-Rosser sii x ↔∗ y implica que x ↓ y, para todo x, y ∈ A. Debido
a que x ↓ y implica x ↔∗ y, la propiedad de Church-Rosser tambi´en puede entenderse como la equivalencia “x ↔∗ y sii x ↓ y”.
• → es confluente sii y1←∗x →∗y2 implica que y1 ↓ y2, para todo x, y1, y2 ∈ A.
2
Empleamos el criterio (f ◦ g)(x) = f (g(x)) que tambi´en se emplea en lenguajes como Haskell. El otro criterio posible (f ◦ g)(x) = g(f (x)) tambi´en es usado ampliamente en otros marcos.
2.1. Sistemas Abstractos de Reducci´on 15
• → es semi-confluente sii y1 ← x →∗ y2 implica que y1 ↓ y2, para todo
x, y1, y2 ∈ A.
• → es localmente confluente (o d´ebilmente confluente) sii y1 ← x → y2
implica que y1 ↓ y2, para todo x, y1, y2 ∈ A.
• → es fuertemente confluente sii y1 ← x → y2 implica que ∃z ∈ A tal que
y1 →=z ←∗y2.
• → es subconmutativa sii y1 ← x → y2 implica que ∃z ∈ A tal que y1 →=
z ←= y2.
• → tiene la propiedad del diamante sii y1← x → y2 implica que ∃z ∈ A tal que y1→ z ← y2.
• → es convergente sii es a la vez confluente y terminante.
Podemos ver una representaci´on gr´afica de algunas de estas propiedades en la figura
2.1 (p´agina 16), en la que se utilizan l´ıneas continuas para las reducciones cuantifi-cadas universalmente, y l´ıneas discontinuas para las cuantificuantifi-cadas existencialmente. Usaremos esta notaci´on de diagramas a lo largo del trabajo.
El campo de estudio de los ARS ’s ha sido muy explotado a lo largo de los a˜nos. Los siguientes son algunos de los resultados m´as importantes en dicho campo:
Teorema 2.1.1 (Resultados b´asicos sobre ARS ’s). Los siguientes resultados se cum-plen para cualquier ARS (A, →) (ver [BN98,Plu98]):
a) Terminaci´on implica normalizaci´on, aunque la implicaci´on contraria no se cumple en general (ver figura 2.2, p´agina 17).
b) La propiedad de Church-Rosser, la confluencia y la semi-confluencia son equivalen-tes.
c) La subconmutatividad implica confluencia. d) La confluencia implica confluencia local.
e) Si → es confluente entonces ning´un elemento de A tiene m´as de una forma normal. f ) Una relaci´on terminante es confluente sii es localmente confluente (lema de Newman [New42]). En ausencia de terminaci´on la confluencia local es estrictamente m´as d´ebil que la confluencia, como podemos ver en la figura 2.3, p´agina 17).
g) La confluencia fuerte implica confluencia. h) La subconmutatividad implica confluencia.
i) La propiedad del diamante implica confluencia fuerte, y por tanto tambi´en confluen-cia (por g)).
j) Si → es normalizante y confluente entonces todo elemento de A tiene una y s´olo una forma normal.
16 2. Sistemas de reescritura x y z ∗ ∗ ∗ x y1 y2 z ∗ ∗ ∗ ∗
a) Propiedad de Church-Rosser b) Confluencia
x y1 y2 z ∗ ∗ ∗ x y1 y2 z ∗ ∗
c) Semi-confluencia d) Confluencia local
x y1 y2 z = ∗ x y1 y2 z = =
e) Confluencia fuerte f) Subconmutatividad
x
y1 y2
z
g) Propiedad del diamante
2.2. Expresiones y Sustituciones 17
e0 e1 e2 e3 e4 e5 . . .
s
Figura 2.2: Confluente y normalizante, pero no terminante
x y
u v
Figura 2.3: Confluencia local sin confluencia
2.2.
Expresiones y Sustituciones
Definici´on 2.2.1 (Signatura). Una signatura Σ es un conjunto de s´ımbolos, donde cada f ∈ Σ tiene asociado un n´umero natural que llamamos su aridad. Se entiende cada s´ımbolo de la signatura como una funci´on con tantos argumentos como indica su aridad, por tanto los s´ımbolos con aridad cero corresponder´an a funciones constantes. Para cada natural n se define el conjunto Σn que corresponde al conjunto de s´ımbolos de la signatura cuya aridad asociada es n. Como convenci´on, utilizaremos f, g, . . . para denotar los s´ımbolos de la signatura.
Definici´on 2.2.2 (Variables). Supondremos tambi´en la existencia de un conjunto infini-to numerable de s´ımbolos de variable V, tal que Σ ∩ V = ∅. Como convenci´on utilizaremos x, y, X, Y, . . . para denotar variables3.
Definici´on 2.2.3 (Expresiones). A partir de Σ y V definimos el conjunto de expresiones Exp como:
Exp 3 e ::= x | f (e1, . . . , en)
donde x ∈ V, f ∈ Σn y e1, . . . , en ∈ Exp. En la comunidad de la reescritura es habitual
referirse a nuestras expresiones como t´erminos, pero en este trabajo se ha preferido uti-lizar esta terminolog´ıa por ser m´as habitual en los trabajos del marco CRWL [GHLR99]4.
3
A lo largo de este trabajo adoptaremos una convenci´on u otra (variables en may´uscula o variables en min´uscula) seg´un el cap´ıtulo en el que nos encontremos, siguiendo siempre la convenci´on correspondiente al marco sem´antico descrito en dicho cap´ıtulo. Por ejemplo para los marcos de reescritura y FLC utilizaremos variables en min´usculas, mientras que para el marcos CRWL y el de la let-reescritura emplearemos variables en may´usculas.
4
En todo caso debe quedar bien claro que Exp es exactamente el conjunto de t´erminos con los que trabajan los sistemas de reescritura.
18 2. Sistemas de reescritura
El conjunto de variables de una expresi´on e ∈ Exp, var(e), se define como:
var(x) = x
var(f (e1, . . . , en)) = S i∈{1,...,n}
var(ei)
Se dice que una expresi´on e ∈ Exp es b´asica o ground cuando var(e) = ∅. Por otra parte una expresi´on ser´a lineal cuando ninguna variable aparezca dos veces en dicha expresi´on.
A lo largo de este trabajo tambi´en utilizaremos la notaci´on o para referirnos a tuplas de elementos de cualquier de construcci´on sint´actica o.
Definici´on 2.2.4 (Posiciones y subexpresiones). Podemos ver las expresiones como ´
arboles cuya ra´ız es el s´ımbolo de la signatura m´as externo (o la propia expresi´on si esta es una variable) y cuyos hijos son los argumentos a los que se aplica este s´ımbolo (en el caso de que sea una variable o constante este ´arbol ser´ıa una hoja). Por ejemplo a la expresi´on f (g(x), h) le corresponder´ıa el siguiente ´arbol:
f
g
x
h
Siguiendo esta idea una posici´on en una expresi´on es una cadena de naturales sepa-rados por puntos que indican c´omo movernos por estos ´arboles empezando por la ra´ız. Por ejemplo en la expresi´on anterior la posici´on 1 corresponder´ıa a la subexpresi´on g(x) mientras que la posici´on 1.1 a la subexpresi´on x. Denotamos mediante a la cadena vac´ıa que corresponde a la posici´on de la ra´ız de la expresi´on. Entonces definimos el conjunto O(e) de posiciones de cualquier e ∈ Exp como:
O(e) = si e ≡ x ∈ V ∪ ( S i∈{1,...,n} S p∈O(ei) {i.p}) si e ≡ f (e1, . . . , en)
Podemos utilizar las posiciones en un t´ermino para apuntar a subt´erminos de ´este. Formalmente la subexpresi´on de una expresi´on e que aparece en la posici´on p ∈ O(e), e|p,
se define como:
e| = e
f (e1, . . . , en)|i.q = ei|q
2.2. Expresiones y Sustituciones 19 f g 1 x 1.1 h 2
La posici´on tambi´en es conocida por el nombre de posici´on ra´ız. Dada una expresi´on, su s´ımbolo ra´ız es el s´ımbolo que se encuentra en la ra´ız del ´arbol correspondiente a la expre-si´on. Adem´as el conjunto O(e) suele partirse en los conjuntos ˜O(e)= {p ∈ O(e) | e|p 6∈ V}
de posiciones en los que no hay variables, y OV(e)= {p ∈ O(e) | e|p ∈ V} de posiciones
de las variables. Por tanto O(e) = ˜O(e) ] OV(e).
Podemos ordenar parcialmente las posiciones en una expresi´on seg´un el orden de prefijo 4, que definimos como sigue, dados p, q ∈ O(e):
p 4 q si ∃r tal que p.r ≡ q
p ≺ q si p 4 q ∧ p 6≡ q
p || q y se dice que son paralelas si p 64 q ∧ q 64 p
Definici´on 2.2.5 (Contextos y reemplazamientos). Una noci´on relacionada con la de posici´on en un expresi´on es la de contexto, que se refiere expresiones a las que se les ha practicado uno o varios “huecos” en alguna posici´on. En este trabajo emplearemos contextos de un s´olo hueco, definimos el conjunto Cntxt de contextos con un solo hueco como:
Cntxt 3 C ::= [] | f (. . . , C, . . .)
donde f ∈ Σ. La aplicaci´on de un contexto C a una expresi´on e, denotada como C[e], corresponde con la acci´on de rellenar el hueco del contexto con dicha expresi´on, y se define como:
[][e] = e
f (. . . , C, . . .)[e] = f (. . . , C[e], . . .)
Una noci´on similar es la de reemplazamiento de una subexpresi´on por otra, dadas e, s ∈ Exp, p ∈ O(e), el remplazamiento de e|p por s en e se denota como e[s]py se define
como:
e[s] = s
f (e1, . . . , en)[s]i.q = f (e1, . . . , ei[s]q, . . . , en)
Definici´on 2.2.6 (Sustituciones). Una sustituci´on es una funci´on σ : V −→ Exp tal que {x ∈ V | σ(x) 6= x} es finito. Denotaremos mediante Subst al conjunto de sustituciones.
Aunque como funci´on matem´atica cualquier sustituci´on es una funci´on total y por tanto su dominio es siempre V, cuando hablemos del dominio de una sustituci´on nos referiremos al conjunto de variables de V cuya imagen es distinta de ellas mismas. Formalmente, dada σ ∈ Subst:
20 2. Sistemas de reescritura
Su dominio dom(σ)= {x ∈ V | σ(x) 6= x} ⊆ V. Su rango ran(σ)= {σ(x) | x ∈ dom(σ)} ⊆ Exp.
El conjunto de variables introducidas por la sustituci´on vRan(σ)= {var(σ(x)) | x ∈ dom(σ)} ⊆ V.
Como los dominios de las sustituciones son finitos por definici´on, podemos denotar las sustituciones mediante listas de parejas variable/valor, de la forma [x1/e1, x2/e2, . . .]. Por
ejemplo mediante [x/f, y/2, z/h] denotaremos la sustituci´on σ tal que dom(σ) = {x, y, z} y σ(x) = f , σ(y) = 2 y σ(z) = h. Siguiendo con la idea de esta notaci´on, dadas σ, θ ∈ Subst tales que dom(σ) ∩ dom(θ) = ∅, mediante σ ] θ denotaremos la uni´on disjunta de σ y θ, que es la ´unica sustituci´on tal que dom(σ ] θ) = dom(σ) ] dom(θ), ∀x ∈ dom(σ), (σ ] θ)(x) = σ(x) y ∀x ∈ dom(θ), (σ ] θ)(x) = θ(x). En el caso de la sustituci´on vac´ıa, que es aquella cuyo dominio es el conjunto vac´ıo, la denotaremos me-diante el s´ımbolo .
Dado D ⊆ V y σ ∈ Subst mediante σ|D denotamos la restricci´on de σ al dominio D,
sustituci´on definida como:
σ|D(x) =
σ(x) si x ∈ D x en otro caso
Adem´as emplearemos la notaci´on σ|\D como abreviatura de σ|(V\D) (donde “\” es el
operador de diferencia de conjuntos), y σ = θ[D] como abreviatura de σ|D= θ|D
Por abuso de notaci´on identificaremos cada sustituci´on σ con su extensi´on a expresiones σ : Exp −→ Exp, definida de la forma natural aplicando la sustituci´on a cada variable que aparece en la expresi´on argumento. En estos casos tambi´en usaremos la notaci´on posfija para la aplicaci´on de sustituciones a expresiones. Por tanto:
xσ = σ(x)
f (e1, . . . , en)σ = f (e1σ, . . . , enσ)
Denotamos la composici´on de dos sustituciones σ, θ ∈ Subst como (θ◦σ)(x) = θ(σ(x)). Decimos que σ ∈ Subst es idempotente sii σ ◦ σ = σ (se puede demostrar que σ ∈ Subst es idempotente sii dom(σ) ∩ vRan(σ) = ∅).
Tambi´en podemos definir el preorden de subsunci´on . para las sustituciones, seg´un el cual dadas σ, θ ∈ Subst se dice que σ es m´as general que θ, σ . θ, sii ∃µ ∈ Subst tal que µ ◦ σ = θ5. Como es habitual utilizaremos la abreviatura σ . θ[D] para denotar σ|D . θ|D. Este preorden induce un preorden parcial entre expresiones seg´un el
cual dadas e, s ∈ Exp se tiene que s e sii ∃σ ∈ Subst tal que sσ = e. En este caso se dice que e es una instancia de s o que e se ajusta al patr´on s (e matches s).
Una sustituci´on σ es un renombramiento si ran(σ) ⊆ V, y adem´as es biyectiva. Se dice que e, e0 ∈ Exp son variantes cada una de la otra si existe un renombramiento σ tal
5El criterio, como ocurr´ıa con el orden de prefijo de las posiciones, es que es menor el elemento que es
m´as general, es decir, que concreta menos y por tanto aporta menos informaci´on. El criterio intuitivo en todos los ´ordenes que utilizaremos ser´a considerar menor lo que aporte menos informaci´on.
2.2. Expresiones y Sustituciones 21
que eσ = e0. En este caso adem´as ocurre que cada una es instancia de la otra, es decir, e e0 y e0 e (lo que no implica que e = e0 necesariamente).
Es sencillo demostrar los siguientes lemas sobre reemplazamientos, sustituciones y po-siciones:
Lema 2.2.1. Para cualquier e, e0 ∈ Exp, o ∈ O(e), σ ∈ Subst se cumple que (e[e0]o)σ =
(eσ)[e0σ]o.
Demostraci´on. Por inducci´on en la longitud de o:
Caso base : o = . Entonces (e[e0])σ = e0σ = (eσ)[e0σ].
Paso inductivo : o = i.q. Como o ∈ O(e) entonces e debe ser de la forma e = f (s1, . . . ,
si, . . . , sn), por tanto:
(e[e0]o)σ = (f (s1, . . . , si, . . . , sn)[e0]i.q)σ
= f (s1, . . . , si[e0]q, . . . , sn)σ = f (s1σ, . . . , (si[e0]q)σ, . . . , snσ) = f (s1σ, . . . , (siσ)[e0σ]q, . . . , snσ) por HI = f (s1σ, . . . , siσ, . . . , snσ)[e0σ]i.q = (f (s1, . . . , si, . . . , sn)σ)[e0σ]i.q = (eσ)[e0σ]o
Lema 2.2.2. Para cualquier e ∈ Exp, o ∈ O(e), σ ∈ Subst se cumple que (eσ)|o= (e|o)σ.
Demostraci´on. Por inducci´on en la longitud de o: Caso base : o = . Entonces (eσ)|= eσ = (e|)σ.
Paso inductivo : o = i.q. Como o ∈ O(e) entonces e debe ser de la forma e = f (s1, . . . ,
si, . . . , sn), por tanto: (eσ)|o = (f (s1, . . . , si, . . . , sn)σ)|i.q = f (s1σ, . . . , siσ, . . . , snσ)|i.q = (siσ)|q= (si|q)σ por HI = (f (s1, . . . , si, . . . , sn)|i.q)σ = (e|o)σ
Como veremos Exp se utiliza muchas veces como el conjunto soporte de un ARS. En ese caso se definen las siguientes propiedades posibles del ARS resultante:
Definici´on 2.2.7 (Propiedades de un ARS con Exp como soporte). Dado un ARS (Exp, →):
→ es cerrada bajo sustituciones sii para todo e, e0 ∈ Exp, σ ∈ Susbst se tiene que e → e0 implica eσ → e0σ.
22 2. Sistemas de reescritura
→ es cerrada bajo Σ-operaciones sii para todo n ≥ 0, e1, . . . , en, e01, . . . , e0n ∈
Exp, f ∈ Σn se tiene que e1 → e01, . . . , en → e0n implica que f (e1, . . . , en) →
f (e01, . . . , e0n).
→ es compatible con Σ-operaciones sii para todo n ≥ 0, e1, . . . , ei−1, e, e0, ei+1. . .
, en ∈ Exp, f ∈ Σn se tiene que e → e0 implica que f (e1, . . . , ei−1, e, ei+1, . . . , en) →
f (e1, . . . , ei−1, e0, ei+1, . . . , en).
→ es compatible con Σ-contextos sii para todo s, e, e0 ∈ Exp, o ∈ O(s) e tiene que e → e0 implica que s[e]o → s[e0]o.
El siguiente lema relaciona las propiedades anteriores bajo supuestos diversos [BN98]: Lema 2.2.3. Dado un ARS (Exp, →):
→ es compatible con Σ-operaciones sii es compatible con Σ-contextos.
Si → es reflexiva y transitiva entonces es compatible con Σ-operaciones sii es cerrada bajo Σ-operaciones.
2.3.
Sistemas de Reescritura
A partir de una signatura Σ y un conjunto de variables V podemos definir el concep-to de Σ-ecuaci´on (o simplemente ecuaci´on), que no es m´as que un par de expresiones e, e0 ∈ Exp que consideramos que son iguales, lo cual expresamos mediante la notaci´on e ≈ e0. A partir de un conjunto (finito o infinito) E de Σ-ecuaciones sobre expresiones, que llamamos especificaci´on ecuacional, se puede definir la teor´ıa ecuacional de E , que es el conjunto de ecuaciones que se pueden deducir empleando todas las instancias de ecuaciones de E como axiomas, y considerando la reflexividad, simetr´ıa, transitividad y cierre bajo Σ-operaciones como reglas de inferencia. De esta forma decimos que la ecua-ci´on e ≈ e0 se puede deducir de E , denotado E |= e ≈ e0, sii e ≈ e0 pertenece a la teor´ıa ecuacional de E .
Podemos extender esta noci´on de deductibilidad a partir de una teor´ıa ecuacional a las sustituciones. De esta manera dada una especificaci´on ecuacional E y un par de sustitu-ciones σ, θ ∈ Subst decimos que E |= σ ≈ θ sii ∀x ∈ V, E |= xσ ≈ xθ, y que E |= σ . θ sii ∃µ ∈ Subst tal que E |= µ ◦ σ ≈ θ. Como es habitual utilizaremos E |= σ ≈ θ[D] como abreviatura de E |= σ|D ≈ θ|D, y E |= σ . θ[D] para abreviar E |= σ|D. θ|D.
En el momento en que aparecen nociones que definen un nuevo tipo de igualdad entre expresiones basada en criterios sem´anticos, como ocurre con estas nociones que acabamos de introducir, conviene definir otro tipo de igualdad entre expresiones basada solamente en criterios sint´acticos, la igualdad sint´actica (o identidad simb´olica o identidad s´ımbolo a s´ımbolo), que denotaremos mediante el s´ımbolo ≡. Esta se define como la menor relaci´on de equivalencia que relaciona dos expresiones si en ambas aparecen los mismos s´ımbolos en las mismas posiciones, es decir, la que s´olo relaciona a cada expresi´on consigo misma.
Un c´alculo ecuacional es un sistema de inferencia que nos permite computar la teor´ıa ecuacional correspondiente a una especificaci´on ecuacional dada. Los c´alculos operacionales m´as evidentes son muy ineficientes, por lo que a lo largo de los a˜nos se ha ido investigando sobre las distintas restricciones m´as operativas que se pueden imponer sobre las reglas de
2.3. Sistemas de Reescritura 23
inferencia de forma que el sistema siga siendo capaz de derivar la teor´ıa ecuacional completa para la especificaci´on ecuacional de entrada. Una de estas t´ecnicas consiste en considerar que las ecuaciones est´an orientadas de izquierda a derecha, para despu´es utilizarlas como criterio para reemplazar t´erminos por t´erminos m´as simples, considerando que los lados derechos de las ecuaciones orientadas son m´as simples que sus correspondientes lados izquierdos. Esta es la idea b´asica detr´as de los sistemas de reescritura.
Definici´on 2.3.1 (Reglas y sistemas de reescritura). Una regla de reescritura es una pareja (l, r) ∈ Exp × Exp, denotada l → r, tal que l 6∈ V y var(r) ⊆ var(l). Decimos que l es el lado lado izquierdo de la regla y r su lado derecho. De esta forma una regla de reescritura l → r no es m´as que la versi´on orientada de la ecuaci´on l ≈ r.
Un sistema de reescritura (TRS )6 es cualquier conjunto de reglas de reescritura. Ya que cada regla de reescritura es una ecuaci´on orientada, cada TRS tiene una especificaci´on ecuacional asociada, que no es m´as que la que resulta de considerar que sus reglas no est´an orientadas.
En algunos textos se omite la condici´on var(r) ⊆ var(l) de la definici´on de regla de reescritura, eliminando dicha restricci´on se obtiene una variante de la reescritura que contemplaremos en la secci´on 2.4.2. De todas formas la noci´on de regla de reescritura de la definici´on 2.3.1 es la que se utiliza m´as habitualmente y la que utilizaremos salvo que se indique otra cosa expl´ıcitamte.
Definici´on 2.3.2 (Paso de reescritura). Dado un sistema de reescritura R, ´este induce una relaci´on →R ⊆ Exp × Exp que llamamos relaci´on de reescritura de R, definida
como:
e →Re[rσ]o para cualquier e ∈ Exp, (l → r) ∈ R, σ ∈ Subst, o ∈ O(e) tales que e|o ≡ lσ.
En este caso diremos que e se reescribe a e[rσ]o mediante un paso de reescritura, utilizando
la regla l → r. El subt´ermino de lσ reemplazado en el paso de reescritura se denomina redex (reducible expression) y el proceso de encontrar un redex en una expresi´on se llama encaje de patrones o matching.
Cuando el sistema de reescritura utilizado quede impl´ıcito y se sepa claramente de cu´al se trata, a menudo omitiremos el sub´ındice R de la relaci´on de reescritura, escribiendo
simplemente e → e0. Tambi´en utilizaremos la notaci´on R ` e → e0 para hacer expl´ıcito que la reescritura se realiz´o empleando el TRS R.
N´otese tambi´en que el par (Exp, →R) constituye un ARS , al cual podemos por
tanto aplicar la terminolog´ıa usual (→0, →+, →∗, . . .), y las propiedades de cuya relaci´on
de reducci´on asociada podemos estudiar como tal (confluencia, terminaci´on, . . . ). N´otese c´omo al estar →R determinado por el conjunto de reglas R entonces estas propiedades
tambi´en depender´an de R. Debido a esto en un abuso del lenguaje identificaremos un TRS con su ARS asociado. Por ello tambi´en utilizaremos la notaci´on ` a las nociones propias de los ARS ’s (e ↓ e0, e ↓, e ↔∗ e0, . . .).
Ejemplo 2.3.1. Por ejemplo, dado el siguiente TRS :
R = {repeat(x) → x : repeat(x), heads(x : y : xs) → (x, y), coin → 0, coin → 1}
6
Term Rewriting System, ya que en terminolog´ıa cl´asica de reescritura nuestras expresiones reciben el nombre de t´erminos.
24 2. Sistemas de reescritura
podemos construir la siguiente derivaci´on de reescritura:
heads(repeat(coin)) → heads(coin : repeat(coin)) → heads(coin : coin : repeat(coin)) → (coin, coin) → (0, coin) → (0, 1)
Al ser Exp el conjunto soporte del ARS asociado a un TRS, podemos plantearnos si ´
este cumple alguna de las propiedades de las definici´on 2.2.7. El siguiente lema formula los resultados a ese respecto:
Lema 2.3.1. Para cualquier TRS R, se tiene que →R es cerrada bajo sustituciones y
compatible con Σ-operaciones y Σ-contextos. Por otra parte →R∗ es tambi´en cerrada bajo
sustituciones y compatible con Σ-operaciones y Σ-contextos, y adem´as es cerrada bajo Σ-operaciones.
No todas las propiedades de los TRS ’s se cumplen para TRS ’s arbitrarios, y algunas incluso son indecidibles, como muestra el siguiente teorema [BN98]:
Teorema 2.3.1 (Decidibilidad de las propiedades de los TRS ’s).
El problema de decidir cu´ando un TRS finito (constituido por un n´umero finito de reglas) es terminante es en general indecidible.
• Este problema es decidible para la clase de TRS’s finitos y b´asicos por la derecha. Un TRS R es b´asico por la derecha sii los lados derechos de todas sus reglas son b´asicos, es decir, ∀ (l → r) ∈ R, var(r) = ∅
El problema de decidir cu´ando un TRS finito es confluente es en general indecidible. • Este problema es decidible para la clase de TRS’s finitos y terminantes. • Existen condiciones suficientes para garantizar la confluencia, caracterizadas
mediante distintas clase de TRS’s7.
Podemos utilizar la reescritura como c´alculo ecuacional de la especificaci´on ecuacional asociada a un TRS, seg´un el siguiente teorema [Plu98].
Teorema 2.3.2 (Completitud de la reescritura como c´alculo ecuacional). Para todo TRS R, e, e0 ∈ Exp se tiene que
R |= e ≈ e0 sii R ` e ↔∗e0
Es decir, la deducibilidad de una ecuaci´on en una especificaci´on ecuacional es equiva-lente a la convertibilidad en un TRS asociado (puede haber varios correspondientes a las distintas orientaciones de las ecuaciones). Lamentablemente la relaci´on ↔∗ es indecidi-ble para TRS ’s arbitrarios, pero afortunadamente es decidiindecidi-ble para TRS ’s finitos y convergentes, como veremos en el siguiente teorema.
Teorema 2.3.3 (C´alculo ecuacional de reescritura). Dado un TRS R finito, confluen-te y confluen-terminanconfluen-te, y un par de expresiones e, e0∈ Exp como entrada, el siguiente algoritmo devuelve SI en el caso en que R |= e ≈ e0 y NO en otro caso:
7
Una de las clases de TRS ’s confluentes m´as popular es la clase de TRS ’s ortogonales (ver [BN98]), utilizada ampliamente en la teor´ıa de lenguajes funcionales.
2.4. Variantes de la Reescritura 25
1. Calcular las formas normales ´unicas e ↓, e0 ↓ correspondientes a las expresiones de entrada.
2. Si e ↓≡ e0 ↓ entonces devolver SI, en otro caso devolver NO.
Demostraci´on. Como R es terminate no puede existir ninguna cadena infinita e → e1 →
e2 → . . ., ni tampoco empezando desde e0, as´ı que podemos calcular una forma normal
para e y para e0 en un n´umero finito de pasos. Adem´as por el apartado a) del teorema
2.1.1 sabemos que terminaci´on implica normalizaci´on, por tanto por el apartado j) del mismo teorema sabemos que las formas normales de e y e0 son ´unicas, ya que R tambi´en es confluente. Por ´ultimo por el apartado k) del mismo teorema sabemos que x ↔∗ y sii x ↓≡ y ↓8, lo que combinado con el teorema2.3.2 resulta en que R |= e ≈ e0 sii x ↓≡ y ↓,
por tanto este algoritmo termina y es correcto y completo.
2.4.
Variantes de la Reescritura
En esta secci´on presentaremos un par de variantes de la reescritura que ser´an utili-zadas extensamente en el resto del trabajo, la reescritura basada en constructoras y la reescritura con variables extra. Ambas variantes se pueden combinar resultan-do la reescritura con variables extra basaresultan-dos en constructoras. De todas formas, excepto en los lugares en que se indique otra cosa expresamente, al hablar de reescritura nos referiremos a la variante ordinaria de la reescritura tal y como se establece en las definiciones 2.3.1y2.3.2(p´agina 23).
2.4.1. Reescritura Basada en Constructoras
Esta variante de la reescritura se basa en descomponer la signatura en dos subconjuntos disjuntos:
Definici´on 2.4.1 (Constructoras, funciones definidas, c-t´erminos y c-sustitucio-nes).
Σ = CS ] F S, donde CS es el conjunto de s´ımbolos de constructora y FS el de s´ımbolos de funciones definidas.
Para cada natural n se definen los conjuntos CSn y F Sn que corresponden a la intersecci´on del conjunto correspondiente con Σn
A partir de CS y V definimos el conjunto de c-t´erminos o t´erminos construidos CTerm como:
CT erm 3 t ::= x | c(t1, . . . , tn)
donde x ∈ V, c ∈ CSn y t1, . . . , tn∈ CT erm
El conjunto CSubst ⊆ Subst es el conjunto de sustituciones cuyo rango es subcon-junto de CT erm, es decir, CSubst = {θ ∈ Subst | ∀x ∈ dom(θ), σ(x) ∈ CT erm}. Llamamos c-sustituciones a los elementos de CSubst.
8N´otese que en la secci´on2.1todav´ıa no se hab´ıa formulado el concepto de igualdad sint´actica, por eso
el teorema 2.1.1 est´a formulado utilizando = en lugar de ≡, aunque se refiera igualmente a la igualdad sint´actica.
26 2. Sistemas de reescritura
Como convenci´on, normalmente utilizaremos c, d, . . . para denotar s´ımbolos de constructo-ra, f, g, . . . para los s´ımbolos de funci´on, e, e0 para las expresiones, t, t0 para los c-t´erminos, σ para sustituciones y θ para c-sustituciones.
El significado intuitivo es que Exp contiene las expresiones evaluables mientras que CTerm contiene los valores resultados de las evaluaciones. Para que este criterio sea efectivo, en esta variante de la reescritura se restringe la forma de las reglas de reescritura de la siguiente manera:
Definici´on 2.4.2 (Reglas y TRS ’s basados en constructoras). Una regla de rees-critura l → r est´a basada en constructoras si l ≡ f (t1, . . . , tn) para alg´un f ∈ F S, i ≥
0, {t1, . . . , tn} ⊆ CT erm.
Un TRS est´a basado en constructoras si todas sus reglas est´an basadas en constructoras. Por lo dem´as la reescritura basada en constructoras funciona igual que la reescritura tradicional, s´olo se restringe la forma de las reglas de reescritura.
2.4.2. Reescritura con Variables Extra
En esta variante en vez de restringir la forma de las reglas de los TRS ’s se es m´as flexible con estas, permitiendo que aparezcan variables en los lados derechos que no aparecen en los lados izquierdos:
Definici´on 2.4.3 (Reglas y TRS ’s con variables extra, variables extra de una regla). Una regla de reescritura con variables extra es una pareja (l, r) ∈ Exp × Exp, denotada l → r, tal que l 6∈ V.
Un TRS con variables extra es cualquier conjunto de reglas de reescritura con variables extra.
Denotamos el conjunto de variables extra de una regla de reescritura mediante EV (l → r)= var(r)\var(l).
La noci´on de reescritura para TRS ’s con variables extra se define igual que la noci´on de reescritura. N´otese que en este caso en un paso e ≡ e[lσ]o →Re[rσ]o≡ e0 la sustituci´on
σ puede instanciar libremente las variables extra en l → r.
Ejemplo 2.4.1. El siguiente es un ejemplo de TRS con variables extra: R = { siEntonces(cierto, X) → X
ajunta(pepe, pipo) → cierto, ajunta(pepe, popi) → cierto,
amiguito(X) → siEntonces(ajunta(X, Y ), Y ) }
Las variables extras introducen no confluencia con facilidad, como podemos ver en estas dos derivaciones no reunibles:
amiguito(pepe) → siEntonces(ajunta(pepe, pipo), pipo) → siEntonces(cierto, pipo) → pipo amiguito(pepe) → siEntonces(ajunta(pepe, popi), popi) → siEntonces(cierto, popi) → popi
2.5.
Estrechamiento
Esta secci´on se basar´a fundamentalmente en los resultados presentados en [Vad02]. Al principio de la secci´on 2.3 vimos c´omo dada una especificaci´on ecuacional E (que no es
2.5. Estrechamiento 27
m´as que un conjunto finito de Σ-ecuaciones), un problema interesante es calcular la teor´ıa ecuacional asociada a E , es decir, el conjunto de ecuaciones que se pueden deducir de E . Tambi´en es interesante ser capaz de resolver problemas de E -unificaci´on en los cuales dada una ecuaci´on e ≈ e0 que denominamos objetivo debemos encontrar todas las susti-tuciones σ ∈ Subst tales que E |= eσ ≈ e0σ. Llamamos a cada una de estas sustituciones soluci´on del objetivo o E -unificador de e y e0. Denominamos a los objetivos as´ı definidos objetivos con sem´antica ecuacional, ya que su noci´on de soluci´on asociada est´a defi-nida en t´erminos de una teor´ıa ecuacional9.
Dada una especificaci´on ecuacional E nos interesar´ıa disponer de un m´etodo que fuera capaz de encontrar todos los E -unificadores para cualquier objetivo dado. El problema es que aquello ser´ıa poco viable operacionalmente porque en general para una especificaci´on ecuacional E cualquiera y un objetivo cualquiera, el conjunto de sus E -unificadores puede ser infinito. Por ello ser´ıa m´as conveniente manejar conjuntos como los de la siguiente definici´on:
Definici´on 2.5.1 (Conjunto completo de E-unificadores). Dada una especificaci´on ecuacional E y un objetivo e ≈ e0, un conjunto completo de E-unificadores para ese objetivo es cualquier S ⊆ Subst que satisface las siguientes condiciones:
1. ∀σ ∈ S, σ es un E -unificador de e y e0, es decir, E |= eσ ≈ e0σ. 2. ∀σ ∈ S, dom(σ) ⊆ var(e) ∪ var(e0).
3. Si θ es un E -unificador de e y e0 entonces ∃σ ∈ S tal que E |= σ . θ. Es decir, cualquier E -unificador de e y e0 est´a generalizado en S.
Un conjunto completo de E-unificadores S de e, e0 ∈ Exp se considera minimal sii ∀σ, σ0 ∈ S tales que E |= σ . σ0 se tiene que σ = σ0, es decir, no contiene unificadores redundantes.
Desgraciadamente, no siempre es posible generar de manera efectiva un conjunto com-pleto minimal de unificadores [FH86]: el problema de E-unificaci´on es indecidible en el caso general. El caso particular en que E = ∅ es decidible y se denomina unificaci´on sint´actica, ya que se puede reducir al problema de encontrar una sustituci´on σ ∈ Subst tal que eσ ≡ e0σ. En este caso la soluci´on σ se denomina unificador de e y e0. Exis-ten algoritmos eficientes para calcular el unificador de un par de expresiones [MM82], en concreto resulta interesante calcular el unificador m´as general de un par e, e0 ∈ Exp, denotado umg(e, e0) que tiene la propiedad de que es m´as general (es menor en el preor-den de subsunci´on) que cualquier otro unificador de e y e0. Se puede demostrar que el umg de una pareja de expresiones es siempre ´unico salvo renombramiento, es decir, dados dos unificadores σ, σ0 de un par de expresiones entonces existe un renombramiento µ ∈ Subst tal que µ ◦ σ = σ0.
Una forma eficiente de calcular soluciones para un objetivo ecuacional e ≈ e0 consiste en calcular los v´ınculos de las variables que constituyen la soluci´on σ a la vez que se realiza la reescritura. La relaci´on resultante es una generalizaci´on de la reescritura denominada
9
En otros marcos se establecen otras sem´anticas para los objetivos, sin ir m´as lejos la establecida el marco CRWL mediante el operador1 [GHLR99].
28 2. Sistemas de reescritura
estrechamiento (en ingl´es narrowing). Concretamente un paso de estrechamiento con-siste en unificar una subexpresi´on no variable de la expresi´on a reducir con el lado izquierdo de una regla de reescritura y reemplazar este subt´ermino con el lado derecha de la regla instanciada con el unificador. De esta forma en el estrechamiento se sustituye el ajuste de la reescritura por una unificaci´on, pero se restringe esta unificaci´on a que sea con un subt´ermino que no sea una variable, ya que una variable unifica con cualquier expresi´on. Formalmente:
Definici´on 2.5.2 (Paso de estrechamiento general). Dado un TRS R, ´este induce una relaci´on ;R ⊆ Exp × Subst × Exp que llamamos relaci´on de estrechamiento de R,
definida como:
e;R,σ(e[r]o)σ para cualquier variante de regla fresca (l → r) ∈ R, σ ∈ Subst, o ∈ ˜O(e)
tal que σ = umg(e|o, l).
Con variantes frescas de regla nos referimos a aquellas cuyas variables no aparecen en e ni en las expresiones que preceden a e en la derivaci´on correspondiente. N´otese c´omo se decora el paso de estrechamiento con la sustituci´on y el TRS empleados. A menudo omitiremos el TRS cuando este quede impl´ıcito, o explicitaremos el TRS empleado mediante la notaci´on R ` e ;σ e0, o decoraremos el paso con σ|var(e) en vez de con σ ya que las variables de la regla no pertenecen al objetivo original y por tanto no son relevantes.
Existen diversas variantes del estrechamiento distintas del estrechamiento general, en las que la sustituci´on de unificaci´on utilizada puede ser distinta del umg. N´otese para el estrechamiento general, en el caso en que el TRS tenga variables extra ´estas nunca que-dar´an instancias en un paso de estrechamiento, ya que el umg(e|o, l) no las incluir´a en su
dominio, porque al no aparecer en e (al usarse una variante de regla fresca) no es necesario instanciarlas para lograr la unificaci´on.
Aunque ignorando la segunda componente de las ternas presentes en; podemos pen-sar en (Exp,;) como en un ARS, ya no resulta tan natural. Por ello ser´a m´as claro definir expl´ıcitamente las relaciones derivadas de ;:
Definici´on 2.5.3 (Relaciones derivadas de;).
identidad e;0 e ∀e ∈ LExp
n-composici´on e;nθ e si e;θ1 e1 ;θ2 . . . en;θn e
0
con θ = θn◦ . . . ◦ θ1
cierre reflexivo-transitivo ;∗=S
n≥0;n
El resto de relaciones derivadas (cierre reflexivo, transitivo, . . . ) se definen de la manera natural.
La reescritura sin variables extra puede verse como un caso particular de es-trechamiento, es decir, es correcta respecto al estrechamiento. Dado un paso de e ≡ e[lσ]o → e[rσ]o≡ e0 siempre podemos suponer sin p´erdida de generalidad que la variante
de regla l → r utilizada es fresca, y que dom(σ) ⊆ var(l) (es decir, s´olo afecta a las va-riables involucradas en el paso). Entonces dicho paso de reescritura puede considerarse un paso de estrechamiento e ≡ e[lσ]o ;σ (e[r]o)σ ≡ e[rσ]o ≡ e0, ya que σ = umg(e|o ≡ lσ, l)
y (e[r]o)σ ≡lema2.2.1 eσ[rσ]o ≡ e[rσ]o, ya que dom(σ) ⊆ var(l) y las variables de l son
2.5. Estrechamiento 29
Por otra parte el estrechamiento y la reescritura sin variables extra coinciden para expresiones b´asicas, es decir, la reescritura es correcta y completa respecto al es-trechamiento para expresiones b´asicas. Sea e b´asica tal que e;σ (e[r]o)σ para l → r fresca,
entonces σ = umg(e|o, l) pero como e es ground e|o ≡ (e|o)σ ≡ lσ. Por tanto podemos
dar el paso de reescritura e ≡ e[e|o]o ≡ e[lσ]o → e[rσ]o ≡e ground eσ[rσ]o ≡lema 2.2.1
(e[r]o)σ.
Se ha demostrado que bajo ciertos supuestos se puede utilizar el estrechamiento general como m´etodo correcto y completo de E -unificaci´on respecto a la especificaci´on ecuacional correspondiente al TRS, de forma similar a como ocurr´ıa con la reescritura, que pod´ıamos usar como c´alculo ecuacional (ver teorema 2.3.2, p´agina 24). Para ello, dado un TRS R se extiende su signatura con un par de s´ımbolos frescos (no pertenecientes a la signatura anterior) ≈?, de aridad 2, y t ,de aridad 0, y se define otro TRS R? que es el resultado de a˜nadir a las reglas de R una nueva regla de reescritura x ≈? x → t. N´otese que esta regla lo que hace es tratar la unificaci´on sint´actica como un paso de estrechamiento. De esta forma para resolver un objetivo e ≈? e0 nos basta con construir una derivaci´on de ´exito R? ` e ≈? e0 ;∗
σ t, obteniendo en σ la soluci´on o R-unificador del objetivo, utilizando
la constructora t para indicar el ´exito del proceso de unificaci´on. El siguiente teorema establece la correcci´on de este procedimiento:
Teorema 2.5.1 (Correcci´on del estrechamiento general para E-unificaci´on). Para todo TRS R, e, e0 ∈ Exp se tiene que si R? ` e ≈?e0 ;∗
σ t entonces σ es un R-unificador
de e y e0.
Demostraci´on. Basta con demostrar que R ` eσ ↓ e0σ, porque entonces R ` eσ ↔∗ e0σ y por tanto R |= eσ ≈ e0σ, por el teorema2.3.2. Procederemos por inducci´on en el n´umero de pasos n de la derivaci´on de estrechamiento e ≈?e0;nσ t:
Caso base : n = 1. Para llegar a t desde una aplicaci´on de ≈? debe darse al menos un paso de estrechamiento en la ra´ız de una expresi´on de la derivaci´on, por lo que el caso base se tiene para n = 1. Adem´as dicho paso ser´a necesariamente el ´ultimo (ya que t es forma normal al ser un s´ımbolo fresco respecto a las reglas de R y no encajar tampoco con la regla adicional de R?), y ser´a un paso un paso de aplicaci´on de la regla x ≈? x → t. Por tanto tenemos e ≈? e0 ;
σ t con eσ ≡ xσ ≡ e0σ, as´ı que
R ` eσ ↓ e0σ trivialmente.
Paso inductivo : n > 1. En este caso tenemos e ≈? e0 ;σ1 e1 ≈
? e0 1 ;
n−1
σ0 t, donde el
primer paso debe haberse dado con una regla de R, porque si no estar´ıamos en el caso base. Entonces tenemos dos posibilidades:
a) El paso se dio en e: entonces e ≈? e0 ;
σ1 (e[r]o ≈
? e0)σ
1 ≡ e1 ≈? e01 para la
regla (l → r) ∈ R con (e|o)σ1 ≡ lσ1, por tanto e01 ≡ e0σ1 y adem´as podemos
dar el paso de reescritura
R ` eσ1 ≡ (e[e|o]o)σ1≡lema 2.2.1eσ1[(e|o)σ1]o
≡ eσ1[lσ1]o → eσ1[rσ1]o≡lema 2.2.1(e[r]o)σ1≡ e1
Adem´as por hip´otesis de inducci´on sobre e1 ≈? e10 ;n−1σ0 t se tiene que e1σ0 ↓
30 2. Sistemas de reescritura
e1σ0 e01σ0
s
∗ ∗
Pero como la reescritura es cerrada bajo sustituciones (lema 2.3.1) entonces eσ1 → e1 implica eσ1σ0 → e1σ0 y podemos montar las siguientes derivaciones,
aprovechando tambi´en que e01 ≡ e0σ1:
eσ1σ0 e1σ0 e0σ1σ0 ≡ e01σ0 s ∗ ∗
Por tanto eσ1σ0 ↓ e0σ1σ0, y hemos terminado.
b) El paso se dio en e0: Sim´etrico al caso anterior, intercambiando e y e0.
Respecto a la completitud del estrechamiento general, hemos visto en la introducci´on de esta secci´on que no es posible calcular un conjunto completo minimal de unificadores en el caso general. Por tanto el estrechamiento general no podr´a ser completo en ese sentido, pero s´ı lo ser´a en el sentido de que, bajo ciertos supuestos, permitir´a encontrar todos los elementos de un conjunto completo (pero no necesariamente minimal) de R unificadores para un objetivo dado bajo un TRS R. Para demostrar la completitud en este sentido, antes necesitaremos probar el siguiente lema auxiliar, debido a Hullot [Hul80], que nos permite “elevar” las derivaciones de reescritura a derivaciones de estrechamiento:
Lema 2.5.1 (Lema de ascenci´on de Hullot). Decimos que una sustituci´on σ ∈ Subst est´a normalizada cuando ∀x ∈ dom(σ), σ(x) est´a en forma normal. Para todo TRS R sin variables extra, e, e0 ∈ Exp, sustituci´on normalizada θ, conjunto de variables W tal que var(e) ∪ dom(θ) ⊆ W y derivaci´on de reescritura eθ →∗ e0 se tiene que existen una e00 ∈ Exp, una sustituci´on normalizada θ0 y una derivaci´on de estrechamiento general e;∗σ e00 tales que e00θ0 ≡ e0 y θ0◦ σ = θ[W]. Utilizando adem´as la derivaci´on de estrechamiento las mismas reglas de reescritura, en el mismo orden y en las mismas posiciones, que la derivaci´on de reescritura. Gr´aficamente:
2.5. Estrechamiento 31 e e00 eθ e0 ∗ σ ∗ θ θ0
Demostraci´on. Por inducci´on en la longitud n de la derivaci´on eθ →∗ e0:
Caso base : n = 0. Entonces eθ →0 eθ ≡ e0, por tanto podemos hacer e ;0 e ≡ e00, obteniendo σ = , y tomar θ0= θ. Por tanto e00θ0 ≡ eθ ≡ e0 y θ0◦ σ = θ ◦ = θ. Paso inductivo : n > 0. Entonces tenemos eθ → e1 →∗ e0, veremos c´omo podemos elevar
el primer paso eθ → e1 y engancharlo con la hip´otesis de inducci´on para montar la
derivaci´on de reescritura que podemos ver en el siguiente diagrama:
e e001 e002 ≡ e00 eθ e1 e0 σ1 ∗ σ2 ∗ θ θ1 θ2 = θ0
Ahora bien, como eθ → e1 entonces debe existir una posici´on o ∈ ˜O(eθ) (porque
en un TRS los lados izquierdos de las reglas no pueden ser variables, por tanto una variable no puede encajar con el lado izquierdo de ninguna regla), una variante fresca de regla (l → r) ∈ R (por tanto var(l) ∩ W = ∅) y una sustituci´on γ ∈ Subst (podemos suponer que dom(γ) ⊆ var(l) sin p´erdida de generalidad) tales que (eθ)|o ≡ lγ, siendo el paso de reescritura eθ ≡ (eθ)[lγ]o → (eθ)[rγ]o ≡ e1.
Como θ est´a normalizada entonces ninguna expresi´on de su rango puede ser redex, por tanto o ∈ O(e), incluso o ∈ ˜O(e), porque como vimos antes las variables no encajan con los lados izquierdos de las reglas. Como γ s´olo act´ua sobre las variables de l, que son frescas, entonces dom(θ) ∩ dom(γ) = ∅ y θ ] γ est´a bien definida, y adem´as (e|o)(θ ] γ) ≡ (e|o)θ ≡lema 2.2.2 (eθ)|o ≡ lγ ≡ l(θ ] γ). Por tanto e|o
y l son unificables, sea σ1 = umg(e|o, l), como o ∈ ˜O(e) podemos dar el paso de
estrechamiento e;σ1 (e[r]o)σ1 ≡ e
00 1.
Ahora necesitamos enganchar con la hip´otesis de inducci´on, para ello definiremos: U1 = (W \ dom(σ1)) ∪ vRan(σ1). Utilizaremos este conjunto para que haga el
papel de W en la HI10.
Como θ ] γ es un unificador de e|o y l entonces σ1 . (θ ] γ), luego ∃µ ∈ Subst
tal que µ ◦ σ1 = θ ] γ. Definimos θ1 = µ|U1, sustituci´on que juega el papel que
podemos ver en el diagrama de m´as arriba. Usando estos elementos podemos demostrar:
32 2. Sistemas de reescritura
e001θ1 ≡ e1: Por las hip´otesis sobre W y la definici´on de U1 podemos afirmar
que var(e001) ⊆ U1, por tanto e001θ1 ≡ e001µ, por la def de θ1. Entonces e001θ1 ≡
e001µ ≡ (e[r]o)σ1µ ≡def de µ (e[r]o)(θ ] γ) ≡lemma2.2.1(e(θ ] γ))[r(θ ] γ)]o≡
(eθ)[rγ]o≡ e1.
θ1◦σ1 = θ[W]: Podemos demostrar que θ1◦σ1 = µ◦σ1[W], porque dado x ∈ W:
a) x ∈ dom(σ1): Entonces var(σ1(x)) ⊆ vRan(σ1) ⊆ U1 por definici´on,
enton-ces como θ1= µ|U1 se tiene que θ1(σ1(x)) ≡ µ(σ1(x)).
b) x ∈ W \ dom(σ1): Entonces x ∈ U1 por definici´on, y podemos encadenar
θ1(σ1(x)) ≡ θ1(x) ≡ µ(x) ≡ µ(σ1(x)), ya que θ1 = µ|U1 de nuevo.
Pero entonces como µ◦σ1 = θ ]γ podemos encadenar (θ1◦σ1)|W = (µ◦σ1)|W =
(θ ] γ)|W = θ|W, porque γ s´olo afecta a las variables frescas de la instancia de
regla con la que se hizo la reescritura.
θ1 est´a normalizada: Sea x ∈ dom(θ1) ⊆ U1 = (W \ dom(σ1)) ∪ vRan(σ1).
Entonces tenemos dos posibilidades:
a) x ∈ W \dom(σ1): Entonces σ1(x) = x y por tanto θ1(x) ≡ θ1(σ1(x)) ≡ θ(x),
ya que θ1◦ σ1 = θ[W]. Como θ est´a normalizada entonces θ(x) debe estar
en forma normal y por tanto θ1(x) tambi´en.
b) x ∈ vRan(σ1): Entonces ∃y ∈ W tal que x ∈ var(σ1(y)). Como θ1 ◦
σ1 = θ[W] entonces θ1(σ1(y)) ≡ θ(y). Como θ est´a normalizada entonces
θ(y) debe estar en forma normal y por tanto θ1(x) tambi´en, ya que es un
subt´ermino de θ1(σ1(y)) ≡ θ(y).
var(e001) ∪ dom(θ1) ⊆ U1: Por definici´on dom(θ1) ⊆ U1. Por otra parte var(e001) =
var(e[r]oσ1) ⊆ var(e[l]oσ1), ya que en un TRS las reglas de reescritura no tienne
variables extra. Pero como adem´as var(e[l]oσ1) =lemma2.2.1var(eσ1[lσ1]o) =
var(eσ1[e|0σ1]o) ya que σ1 = umg(e|o, l), y var(eσ1[e|0σ1]o) = var(e[e|0]oσ1) =
var(eσ1) ⊆ U1 por la definici´on de U1 y las hip´otesis sobre W, entonces esta
propiedad se cumple.
Ahora, como e001θ1 ≡ e1 y e1 →∗ e0, podemos aplicar la hip´otesis de inducci´on sobre
e001θ1 →∗ e0 usando el conjunto U1, que como hemos visto cumplen todas las hip´otesis
del lema, obteniendo una derivaci´on de estrechamiento e001 ;∗σ2 e002 y una sustituci´on normalizada θ2 tales que e00θ2 ≡ e0 y θ2◦ σ2 = θ1[U1]. Por tanto e1 ;σ1 e
00 1 ;∗σ2 e
00 2,
es decir, e;∗σ2◦σ1 e002. Entonces podemos tomar σ = σ2◦ σ1, θ0 = θ2 y e00 ≡ e002 para
los que se cumple:
e00θ ≡ e0: Es decir, e002θ2≡ e0, algo garantizado por la HI.
θ0◦ σ = θ[W]: Es decir, θ2◦ σ2◦ σ1= θ[W]. Como hemos demostrado antes que θ1◦ σ1 = θ[W], basta con demostrar que θ2◦ σ2◦ σ1 = θ1◦ σ1[W], y esto ocurre
porque dado un x ∈ W:
a) x ∈ dom(σ1): Entonces var(σ1(x)) ⊆ vRan(σ1) ⊆ U1, por tanto como θ2◦
σ2 = θ1[U1] (garantizado por la HI) se tiene que θ2(σ2(σ1(x))) ≡ θ1(σ1(x)).
b) x ∈ W \ dom(σ1): Entonces x ∈ U1 por definici´on, por tanto como θ2◦ σ2=
2.5. Estrechamiento 33
Demostrado este lema ya disponemos de las herramientas necesarias para formular y demostrar la completitud del estrechamiento general:
Teorema 2.5.2 (Completitud del estrechamiento general para E-unificaci´on). Pa-ra todo TRS R sin variables extPa-ra, e, e0 ∈ Exp y θ ∈ Susbt tal que R |= eθ ≈ e0θ se tiene
que:
a) Si θ est´a normalizada y R es confluente entonces existe una derivaci´on R? ` e ≈?
e0 ;∗σ t con σ . θ[var(e) ∪ var(e0)].
b) Si θ es normalizable (es decir si ∀x ∈ dom(θ), θ(x) tiene al menos una forma normal), y R es confluente entonces existe una derivaci´on R? ` e ≈? e0 ;∗
σ t con
R |= σ . θ[var(e) ∪ var(e0)].
c) Si R es convergente entonces existe una derivaci´on R?` e ≈?e0 ;∗
σ t con R |= σ .
θ[var(e) ∪ var(e0)]. Demostraci´on.
a) Por hip´otesis R |= eθ ≈ e0θ, por tanto por el teorema 2.3.2 tenemos que R ` eθ ↔∗e0θ, pero como la confluencia es equivalente a la propiedade de Church-Rosser (teorema2.1.1) entonces debe existir s ∈ Exp tal que R ` eθ →∗ s y R ` e0θ →∗ s. Entonces podemos montar la derivaci´on R ` eθ ≈? e0θ →∗ s ≈? s y por tanto tambi´en R? ` eθ ≈? e0θ →∗ s ≈? s → t. Sin perder generalidad podemos suponer
que dom(θ) ⊆ var(e) ∪ var(e0), y aplicar el lema de ascensi´on de Hullot a esa ´ultima derivaci´on usando R?, θ (que est´a normalizada por hip´otesis) y W = var(e)∪var(e0), obteniendo: e ≈?e0 t ≡ e00 (e ≈?e0)θ t ∗ σ ∗ θ θ0
Necesariamente e00 ≡ t porque no es posible una derivaci´on R?` e ≈?e0 ;∗
σ x ∈ V,
ya que la ´unica regla para ≈? no tiene una variable (extra) en el lado derecho. Por tanto obtenemos una sustituci´on θ0 tal que θ0 ◦ σ = θ[var(e) ∪ var(e0)], por tanto σ . θ[var(e) ∪ var(e0)].
b) Sea θ↓ ∈ Susbt tal que dom(θ↓) = dom(θ) y ∀x ∈ dom(θ↓), θ↓(x) = R ` θ(x) ↓.
Como θ es normalizable y la confluencia implica la unicidad de formas normales (ver teorema 2.1.1, p´agina 15) entonces θ↓ es computable y es ´unica. Como adem´as θ↓
est´a normalizada por construcci´on entonces podemos aplicar a) obteniendo R? ` e ≈? e0 ;∗σ t con σ . θ↓[var(e) ∪ var(e0)]. Pero como R |= θ ≈ θ↓ por construcci´on,
34 2. Sistemas de reescritura
c) Si R es convergente entonces es confluente y adem´as toda sustituci´on es normalizable, con lo que podemos aplicar b).