4. FLC: una sem´ antica operacional de bajo nivel
4.2. Relaci´ on con CRWL
5.1.4. Adecuaci´ on de la let reescritura a CRWL let
Ahora ya estamos listos para formular nuestros resultados principales respecto a la completitud de la let -reescritura, que se deducen f´acilmente del lema5.1.13. El primero de ellos muestra que cualquier c-t´ermino obtenido en CRWL a partir de una expresi´on puede ser refinado por una derivaci´on de let -reescritura:
Teorema 5.1.4 (Completitud de la let -reescritura). Para todo CRWL-programa P, e ∈ Exp y t ∈ CT erm⊥ se tiene que
P `CRW Le_ t implica e →
∗ l e
0
para alg´un e0 ∈ LExp tal que t v |e0|
Demostraci´on. Si t ≡⊥ entonces hemos terminado con e →0l e ya que ∀e, ⊥v |e|. Si t 6≡⊥ entonces por el lema 5.1.13 tenemos que e →∗l let X = a in t0 tal que t v |let X = a in t0|.
El siguiente resultado considera el caso en que la aproximaci´on es a un c-t´ermino total: Teorema 5.1.5 (Completitud de la let -reescritura para soluciones totales). Para todo CRWL-programa P, e ∈ Exp y t ∈ CT erm se tiene que
P `CRW L e_ t implica e →
∗ l t
Demostraci´on. Supongamos que P `CRW L e _ t, entonces por el lema 5.1.13 tenemos que e →∗l let X = a in t0 tal que t v t0[X/⊥], para alg´un t0 ∈ CT erm, a ⊆ LExp. Como t ∈ CT erm entonces t es maximal con relaci´on a v, por tanto t v t0[X/⊥] implica t0[X/⊥] ≡ t. Pero entonces t0[X/⊥] ∈ CT erm, por tanto debe ocurrir que F V (t0) ∩ X = ∅ y por tanto t0 ≡ t0[X/⊥] ≡ t. Como consequencia de esto, let X = a in t0→∗
l t0 ≡ t dando
cero o m´as pasos de (Elim), por tanto e →∗l let X = a in t0→∗l t, es decir, e →∗l t. Adecuaci´on
Como corolario final de los resultados anteriores podemos obtener una fuerte equiva- lencia entre la let -reescritura y el c´alculo de pruebas de CRWL:
Teorema 5.1.6 (Equivalencia de CRWL y la let -reescritura). Para todo CRWL- programa P, e ∈ Exp y t ∈ CT erm se tiene que
P `CRW L e_ t sii e →∗l t
Demostraci´on. Simplemente combinando los teoremas 5.1.3y5.1.5. 5.1.4. Adecuaci´on de la let -reescritura a CRWLlet
La estrecha relaci´on entre la let -reescritura y CRWL nos ser´a muy ´util para propagar resultados desde CRWL a la let -reescritura y viceversa, pero tiene la limitaci´on de que debe plantearse necesariamente para CRWL-expresiones, que son s´olo un subconjunto de las let -expresiones, ya que CRWL no puede trabajar con let’s. Debido a estas razones, tambi´en es interesante relacionar la let -reescritura con CRWLlet, ya que ´este proporciona
la perspectiva sem´antica del marco CRWL, m´as denotacional y basada en modelos, para la caracterizaci´on sem´antica de los let’s, que aparecer´an casi siempre en los pasos intermedios de las let -derivaciones. En particular la presencia de ⊥ en CRWLlet hace muy sencilla la
102 5. Let-reescritura
formulaci´on de lemas de monoton´ıa como el lema 5.1.10.
Como hemos visto en secciones anteriores ha sido muy f´acil adaptar resultados de CRWL a CRWLlet, ya que solo se diferencian en la regla a˜nadida a CRWLlet, por tanto no
es sorprentente que la adecuaci´on de la let -reescritura a CRWLlet se demuestre f´acilmente
adaptando la adecuaci´on a CRWL. Los resultados obtenidos son:
Teorema 5.1.7 (Correcci´on de la let -reescritura respecto a CRWLlet). Para todo
CRWL-programa P, e ∈ LExp y t ∈ CT erm tenemos
e →∗l t implica P `CRW Llet e_ t
Demostraci´on. Exactamente igual que la demostraci´on del teorema 5.1.3 pero obviando el ´ultimo paso.
La demostraci´on de la correcci´on ha sido inmediata porque al fin y al cabo la de- mostraci´on existente ya estaba hecha en t´erminos de CRWLlet. La demostraci´on de la
completitud no ser´a tan sencilla pero s´ı bastante f´acil; la clave estar´a, como cab´ıa esperar, en una modificaci´on del lema5.1.13, ampli´andolo para que trate con let -expresiones: Lema 5.1.14 (Lema de completitud para la let -reescritura respecto a CRWLlet).
Sea P un CRWL-programa, e ∈ LExp y t ∈ CT erm⊥ tal que t 6=⊥. Entonces
P `CRW Llet e_ t implica e →
∗
l let X = a in t 0
para alg´un t0 ∈ CT erm y a ⊆ LExp tales que t v |let X = a in t0| y |ai| =⊥ para todo
ai ∈ a. A consecuencia de esto, t v t0[X/ ⊥].
Demostraci´on. S´olamente tenemos que ampliar la demostraci´on del lema5.1.13, a˜nadiendo los siguientes casos:
DC Ahora el caso d) en que e1 ≡ let X = e11 in e12 s´ı que debe ser tomado en conside-
raci´on. En ´este caso aplicando el lema5.1.12 obtenemos que let X = e11 in e12 →∗l
let X1 = a1 in h1(t1) tal que |a1i| =⊥ para todo a1i. Pero entonces:
let X2 = a2 in c(let X = e11 in e12, t02)
→∗
l let X2 = a2 in c(let X1= a1 in h1(t1), t02) por el lemma5.1.12
→∗l let X2 = a2 in let Y = (let X1= a1 in h1(t1)) in c(Y, t02) por (LetIn)
→∗
l let X2 = a2 in let X1 = a1 in let Y = h1(t1) in c(Y, t02) por (Flat∗)
Entonces tenemos dos posibilidades:
i) h1 = f1 ∈ F S: Entonces hemos acabado ya que |a1i| =⊥ para todo a1i por el
lema 5.1.12, |a2i| =⊥ para todo a2i por la HI, |f1(t1)| =⊥, y |let X2 = a2 in
let X1 = a1 in let Y = f1(t1) in c(Y, t02)| = c(Y, t02)[Y / ⊥][X1/⊥][X2/⊥] w c(⊥
, t2), porque t02[X2/⊥] w t2 por la HI, Y es fresca y por tanto no aparece en
t02, y las variables en X1 no aparecen en t02 ya que son variables ligadas que
aparecieron por primera vez en posiciones paralelas a la de t02 (concretamente aparecieron como let X2 = a2 in c(let X1 = a1 in h1(t1), t02)).
5.1.4 Adecuaci´on de la let-reescritura a CRWLlet 103
ii) h1= c1∈ DC: Entonces podemos obtener:
let X2= a2 in let X1 = a1 in let Y = c1(t1) in c(Y, t02)
→∗l let X2= a2 in let X1 = a1 in c(c1(t1), t02)
por (Bind), ya que Y es fresca.
Entonces hemos terminado ya que |a1i| =⊥ para todo a1i por el lema 5.1.12,
|a2i| =⊥ para todo a2i por HI, y |let X2= a2 in let X1 = a1 in c(c1(t1), t
0 2)| =
c(c1(t1), t02)[X1/ ⊥][X2/ ⊥] w c(⊥, t2), porque t02[X2/ ⊥] w t2 por HI, y las va-
riables en X1 no aparecen en t02 por el mismo motivo que en i).
Let En este caso tenemos e ≡ let X = e1 in e2 y la siguiente prueba:
e1 _ t1 e2[X/t1]_ t let X = e1 in e2 _ t
Let Entonces tenemos dos posibilidades:
a) t1 ≡⊥: Entonces e2[X/t1] ≡ e2[X/ ⊥] v e2. Por tanto, como e2[X/t1] _ t, por el lema 5.1.10tenemos que P `CRW Llet e2 _ t con una prueba del mismo tama˜no o menor, por tanto por HI obtenemos que e2 →∗l let X = a in t0, con
t0 ∈ CT erm, |ai| ≡⊥ para todo ai y |let X = a in t0| ≡ t0[X/ ⊥] w t. Por tanto
por (Contx∗):
let X = e1 in e2→∗l let X = e1 in let X = a in t0
Por nuestra convenci´on de variables, ya que X est´a ligada podemos asegurar que no aparece en t, mediante las α-conversiones necesarias. Entonces como t0[X/ ⊥] w t debe ocurrir que ∀p ∈ O(t0) tal que t0|p ≡ X entonces t|p ≡⊥.
Ahora podemos distinguir los siguientes casos:
i) e1 = f1(e1): Entonces ya hemos terminado ya que |a| ≡ ⊥ por HI, |f1(e1)| ≡⊥
y |let X = f1(e1) in let X = a in t0| ≡ t0[X/ ⊥][X/ ⊥] w t, porque
t0[X/ ⊥] w t y como dijimos arriba ∀p ∈ O(t0) tal que t0|p ≡ X enton- ces t|p≡⊥.
ii) e1 = t01 ∈ CT erm: Entonces
let X = t01 in let X = a in t0 →l let X = a[X/t01] in t0[X/t01] por (Bind)
y ya hemos terminado porque |a| ≡ ⊥ por HI, por lo que |a[X/t01]| ≡ ⊥ ya que si |e| ≡⊥ entonces |e|θ ≡⊥ para todo θ ∈ CSusbst⊥ (f´acil de
demostrar). Adem´as, como en i), t0[X/ ⊥] w t junto con que ∀p ∈ O(t0) tal que t0|p ≡ X ocurre que t|p ≡⊥, implica que |let X = a[X/t0
1] in t0[X/t01]| ≡
t0[X/t01]0[X/ ⊥] w t.
iii) e1 = c1(e1) 6∈ CT erm: Entonces por el lema5.1.12tenemos que c1(e1) →∗l
let X1= a1 in c1(t1) tal que |a1| ≡ ⊥, por tanto
let X = c1(e1) in let X = a in t0
→∗
l let X = (let X1 = a1 in c1(t1)) in let X = a in t0 por el lema 5.1.12
→∗l let X1 = a1 in let X = c1(t1)) in let X = a in t0 por (Flat∗)
104 5. Let-reescritura
Como |a| ≡ ⊥ por HI entonces |a[X/c1(t1)]| ≡ ⊥ por la propiedad mencio-
nada en ii). S´olo nos queda ver que |let X1= a1 in let X = a[X/c1(t1)] in
t0[X/c1(t1)]| ≡ t0[X/c1(t1)][X/ ⊥][X1/ ⊥] es mayor que t. Esto es as´ı por-
que las ligaduras de las variables en X1 no afectan a t0 porque apare-
cieron en let X = (let X1 = a1 in c1(t1)) in let X = a in t, por tanto
t0 no las puede ver. S´ı que pueden afectar en cambio a c1(t1), por tan-
to t0[X/c1(t1)][X/ ⊥][X1/ ⊥] ≡ t0[X/t00][X/ ⊥], para alg´un t00 ∈ CT erm⊥.
Razonando como en ii) se llega a que este c-t´ermino es mayor o igual que t.
iv) e1 ≡ let Y = e11 in e12: Entonces por el lema 5.1.12tenemos que let Y =
e11 in e12→∗l let X1= a1 in h1(t1), por tanto
let X = (let Y = e11 in e12) in let X = a in t0
→∗l let X = (let X1 = a1 in h1(t1)) in let X = a in t0 por el lema 5.1.12
→∗
l let X1 = a1 in let X = h1(t1) in let X = a in t0 por (Flat∗)
Entonces, o bien h ∈ CS y estamos como en iii), o bien h ∈ F S y to- das las c´ascaras de a1i, h1(t1) y ai son ⊥, y |let X1 = a1 in let X =
h1(t1) in let X = a in t0| ≡ t0[X/ ⊥][X/ ⊥][X1/ ⊥] ≡ t0[X/ ⊥][X/ ⊥], ya
que como dijimos en iii) t0 no puede ver a las X1. S´olo queda justificar
que t0[X/ ⊥][X/ ⊥] es al menos tan grande como t, utilizando los mismos argumentos que en i).
b) t1 6≡⊥: Entonces por HI obtenemos que e1 →∗l let X1 = a1 in t01, con t01 ∈
CT erm, |a1i| ≡⊥ para todo a1i y |let X1 = a1in t
0
1| ≡ t01[X1/ ⊥] w t1. Por tan-
to t1 v t01, por lo que e2[X/t1] v e2[X/t01], por tanto P `CRW Llet e2[X/t1] _ t implica P `CRW Llet e2[X/t
0
1] _ t con una prueba del mismo tama˜no o menor, por el lema 5.1.10. Por tanto aplicando la HI a esta prueba obtene- mos e2[X/t01] →∗l let X = a in t
0, con t0 ∈ CT erm, |a
i| ≡⊥ para todo ai y
|let X = a in t0| ≡ t0[X/ ⊥] w t. Pero entonces:
let X = e1 in e2→∗l let X = (let X1 = a1 in t01) in e2 por HI
→∗
l let X1 = a1 in let X = t01 in e2 por (Flat∗)
→∗l let X1 = a1 in e2[X/t01] por (Bind)
→∗
l let X1 = a1 in let X = a in t0 por (HI)
y ya hemos acabado ya que las c´ascaras de cada ai y a1i son ⊥ por las HI y
como las variables en X1 son introducidas por la let -reescritura y por tanto no
pueden aparecer en t, y t v t0[X/ ⊥] entonces ∀p ∈ O(t0) tal que t0|p ≡ Y tal
que Y ∈ X1 ocurre que t|p ≡⊥. Por tanto |let X1 = a1 in let X = a in t0| ≡
t0[X/ ⊥][X1/ ⊥] w t.
A partir de este lema los resultados de completitud y adecuaci´on se obtienen f´acilmente: Teorema 5.1.8 (Completitud de la let -reescritura respecto a CRWLlet). Para
todo CRWL-programa P, e ∈ LExp y t ∈ CT erm⊥ se tiene que
P `CRW Llet e_ t implica e →
∗ l e
0