• No se han encontrado resultados

Adecuaci´ on de la let reescritura a CRWL

4. FLC: una sem´ antica operacional de bajo nivel

4.2. Relaci´ on con CRWL

5.1.3. Adecuaci´ on de la let reescritura a CRWL

En este apartado probaremos la correcci´on y la completitud de la let -reescritura res- pecto al c´alculo de pruebas de CRWL.

5.1.3 Adecuaci´on de la let-reescritura a CRWL 89

Correcci´on: CRWLlet

Respecto a la correcci´on nos gustar´ıa poder llegar a un resultado como el siguiente: Dados e, e0∈ Exp, si e →le0 entonces [[e0]]CRW L ⊆ [[e]]CRW L

El problema es que los let’s no est´an definidos en CRWL y que, a´un partiendo de una expresi´on sin let’s, la let -reescritura puede introducirlos mediante la regla (LetIn). Para superar esta dificultad extendemos el c´alculo CRWL de la figura3.2a˜nadiendo una nueva regla para tratar con los let’s:

(Let) e1 _ t1 e[X/t1]_ t let X = e1 in e_ t

Llamamos al c´alculo resultante CRWLlet. Escribimos P `CRW Llet e _ t como notaci´on de la CRW Llet derivabilidad, y definimos la denotaci´on de una expresi´on e ∈ LExp⊥res-

pecto al programa P como [[e]]PCRW L

let = {t ∈ CT erm⊥ | P `CRW Llet e_ t}. Omitiremos los super´ındices y/o sub´ındices en las denotaciones de expresiones cuando se deduzcan claramente del contexto.

Es muy f´acil establecer una relaci´on entre CRW L y CRW Llet para expresiones des-

provistas de let’s:

Lema 5.1.4 (Equivalencia de CRWL y CRWLlet). Para cualquier CRWL-program P,

e ∈ Exp⊥ y t ∈ CT erm⊥, se tiene

P `CRWL e_ t sii P `CRWLlet e_ t. Por tanto [[e]]

P

CRW L= [[e]]PCRW Llet

Demostraci´on. Como toda CRW L-prueba es tambi´en una CRW Llet-prueba, es obvio que

P `CRW L e_ t implica P `CRW Llet e_ t. Por otra parte si P `CRW Llet e _ t, como e ∈ Exp⊥ (por tanto no contiene let’s) y ninguna regla de CRWLlet introduce nuevos let’s,

entonces P `CRW Llet e_ t es tambi´en una CRW L-prueba.

Al ser CRWLlet una extensi´on del c´alculo de pruebas de CRWL a˜nadiendo una sola

regla muy sencilla, es muy tambi´en sencillo ampliar los resultados existentes para CRWL al c´alculo de pruebas de CRWLlet. Algunas propiedades de CRWLlet heredadas de CRWL

son las siguientes:

Lema 5.1.5. Sea e ∈ LExp⊥, entonces |e| ∈ [[e]].

Lema 5.1.6 (CRWLlet es cerrado bajo c-sustituciones). Para todo e ∈ LExp⊥,

t ∈ CT erm⊥, θ ∈ CSubst⊥ se tiene que P `CRW Llet e_ t implica P `CRW Llet eθ _ tθ. Demostraci´on. Como esta propiedad ya ha sido comprobada para CRWL (ver lema3.2.2, p´agina 44) solamente nos queda comprobar el caso de la regla (Let), continuando con la inducci´on sobre el tama˜no de la CRWLlet-prueba de P `CRW Llet e _ t. Entonces tendr´ıamos e ≡ let X = e1 in e2 y una prueba de la forma:

e1 _ t1 e2[X/t1]_ t let X = e1 in e2_ t

Let Dada θ ∈ CSubst⊥, eθ ≡ let X = e1θ in e2θ, luego

e1θ_ t1θ HI e 2θ[X/t1θ] ≡ e2[X/t1]θ_ tθ HI let X = e1θ in e2θ_ tθ Let

90 5. Let-reescritura

Podemos afirmar que e2θ[X/t1θ] ≡ e2[X/t1]θ por el lema 5.1.1 (p´agina 81) ya que X 6∈

dom(θ) y X 6∈ vRan(θ) debido a la convenci´on de variables.

Tambi´en podemos formular f´acilmente un lema de monoton´ıa de las CRWLlet pruebas,

ya que ⊥ est´a presente en la sintaxis de CRWLlety por tanto podemos basarnos en ´el para

definir un orden, como hicimos en CRWL. Por tanto extendemos la noci´on de orden de aproximaci´on de CRWL a la sintaxis con let’s de la siguiente manera3:

Definici´on 5.1.6 (Orden de aproximaci´on para LExp⊥). Definimos v⊆ LExp⊥×

LExp⊥ como el menor orden parcial que verifica:

⊥v e, ∀e ∈ LExp⊥

h(e1, . . . , en) v h(e01, . . . , e0n) si h ∈ DC ∪ F S y ∀i ∈ {1, . . . , n} eiv e0i

let X = e1 in e v let X = e2 in e0 si e1v e2 y e v e0

Algunas propiedades del orden de aproximaci´on sobre let -expresiones:

Lema 5.1.7. Dados θ ∈ LSubst⊥, e, e0 ∈ LExp⊥, tal que e v e0 entonces eθ v e0θ.

Demostraci´on. El caso e ≡ e0 es trivial. Probemos el caso en que e @ e0 por inducci´on en la estructura de e.

e ≡⊥: trivial

e ≡ h(e1, . . . , en): entonces e0 ≡ h(e01, . . . , e0n) tal que ∀i ∈ {1, . . . , n} ei v e0i.

Por HI o porque ei ≡ e0i tenemos que ∀i eiθ v e0iθ, luego eθ ≡ h(e1θ, . . . , enθ) v

h(e01θ, . . . , e0nθ) ≡ e0θ.

e ≡ let X = e1 in e2: entonces e0 ≡ let X = e01 in e20 tal que e1 v e01 y e2 v e02.

Por HI o porque ei ≡ e0i tenemos que ∀i ∈ {1, 2} eiθ v e0iθ, luego eθ ≡ let X =

e1θ in e2θ v let X = e01θ in e02θ ≡ e0θ.

Lema 5.1.8. Dados θ, θ0 ∈ LSubst⊥, e ∈ LExp⊥, tal que θ v θ0 entonces eθ v eθ0.

Demostraci´on. Una sencilla inducci´on en la estructura de las let -expresiones.

Lema 5.1.9. Para todo e, e0 ∈ LExp⊥, C ∈ Cntxt, |e| v |e0| implica que |C[e]| v |C[e0]|.

Demostraci´on. Procedemos por inducci´on en la estructura de C: Caso base :

C ≡ []: Entonces C[e] ≡ e, y ya hemos terminado por la hip´otesis Paso inductive :

C ≡ let X = C0 in e1, por tanto C[e] ≡ let X = C0[e] in e1. Entonces:

|C[e]| = |let X = C0[e] in e

1| = |e1|[X/|C0[e]|]

vIH(∗) |e1|[X/|C0[e0]|] = |let X = C0[e0] in e1| = |C[e0]|

(∗) Por HI tenemos que |C0[e]| v |C0[e0]|, por tanto [X/|C0[e]|] v [X/|C0[e0]|]. Finalmente, por el lemma 5.1.8, |e1|[X/|C0[e]|] v |e1|[X/|C0[e0]|].

5.1.3 Adecuaci´on de la let-reescritura a CRWL 91

C ≡ let X = e1 in C0, por tanto C[e] ≡ let X = e1 in C0[e]. Entonces:

|C[e]| = |let X = e1 in C0[e]| = |C0[e]|[X/|e1|]

vIH(∗) |C0[e0]|[X/|e1|] = |let X = e1 in C0[e0]| = |C[e0]|

(∗) Por HI tenemos que |C0[e]| v |C0[e0]|, por tanto por el lemma 5.1.7, |C0[e]| [X/|e1|] v |C0[e0]|[X/|e1|]

C ≡ h(. . . , C0, . . .), por tanto C[e] ≡ h(. . . , C0[e], . . .). Tenemos dos posibilidades:

a) h = f ∈ F S: Entonces |C[e]| =⊥v |C[e0]| b) h = c ∈ DC: Entonces:

|C[e]| = |c(e1, . . . , C0[e], . . . , en)| = c(|e1|, . . . , |C0[e]|, . . . , |en|)

vHI c(|e1|, . . . , |C0[e0]|, . . . , |en|) = |c(e1, . . . , C0[e0], . . . , en)| = |C[e0]|

Lema 5.1.10 (Monoton´ıa de CRWLlet). Sean e, e0∈ LExp⊥, t, t0 ∈ CT erm⊥ tales que

e v e0 y t w t0. Si P `CRW Llet e _ t entonces P `CRW Llet e

0

_ t

0 con una CRWL let

prueba del mismo tama˜no o menor.

Demostraci´on. Podemos hacer una prueba exactamente igual que la del lema 3.2.2, por inducci´on en la estructura de la prueba, a˜nadiendo el caso de la regla (Let). Entonces tenemos e ≡ let X = e1 in e2, e0 ≡ let X = e01 in e20 tal que e1 v e01 y e2 v e02 y una

prueba:

e1 _ t1 e2[X/t1]_ t let X = e1 in e2_ t

Let Como e1 v e01 por HI tenemos P `CRW Llet e

0

1 → t1. Por otra parte como e2v e02 entonces

por el lema 5.1.7 tenemos que e2[X/t1] v e02[X/t1], luego por HI tenemos P `CRW Llet

e02[X/t1] → t0, y por tanto: e01 _ t1 e 0 2[X/t1]_ t 0 let X = e01 in e02_ t0 Let

Utilizando este nuevo c´alculo podemos formular nuestro teorema de correcci´on como: Teorema 5.1.1 (Correcci´on de un paso de let -reescritura). Para todo e, e0 ∈ LExp, si e →l e0 entonces [[e0]]CRW Llet ⊆ [[e]]CRW Llet

Es decir, que cada paso de let -reescritura es correcto respecto a la sem´antica de CRWLlet. N´otese que debido al indeterminismo no podemos reemplazar ⊆ con = en este

teorema.

La demostraci´on del teorema 5.1.1 podr´ıa hacerse directamente mediante una distinci´on de casos sobre las reglas de la let -reescritura si el siguiente resultado de monoton´ıa bajo contextos, fuese cierto para cualquier contexto C:

[[e]]CRW Llet ⊆ [[e

0]]

CRW Llet implica [[C[e]]]CRW Llet ⊆ [[C[e

0]]]

CRW Llet

Desgraciadamente esta propiedad es falsa debida a la posible captura de variables al pasar de e a C[e], como podemos ver en el siguiente contraejemplo:

92 5. Let-reescritura Contraejemplo 5.1.3. P = {f (0) = 1} entonces [[f (Xp)]]CRW Llet = {⊥} ⊆ {0, ⊥} = [[0]]CRW Llet pero

[[let Xp = 0 in f (Xp)]]CRW Llet = {1, ⊥} 6⊆ {0, ⊥} = [[let Xp= 0 in 0]]CRW Llet

El problema es que si e fuese introducido en un contexto de la forma let Xp= a0 in C,

entonces ´este podr´ıa llegar a necesitar informaci´on sobre la ligadura para Xp, para progre-

sar correctamente. Por tanto para probar el teorema 5.1.1 necesitamos un resultado m´as fuerte que muestre que la sem´antica se preserva bajo sustituciones. Para formalizar esta idea debemos introducir algunas nociones nuevas:

Definici´on 5.1.7 (Hipersem´antica).

i) La hipersem´antica [[[e]]]CRW Llet de una expresi´on e ∈ LExp⊥ es una aplicaci´on del

conjunto de c-sustituciones parciales al conjunto de las partes de CT erm⊥, definida

como:

[[[e]]]CRW Lletθ = [[eθ]]CRW Llet.

ii) Las hipersem´anticas de expresiones est´an ordenadas como sigue:

[[[e1]]]CRW Llet b [[[e2]]]CRW Llet sii [[e1θ]]CRW Llet ⊆ [[e2θ]]CRW Llet, ∀θ ∈ CSubst⊥.

En otras palabras, [[[e1]]]CRW Llet b [[[e2]]]CRW Llet sii ∀θ ∈ CSubst⊥, P `CRWLlet e1θ_ t implica P `CRWLlet e2θ_ t.

La propiedad de monoton´ıa deseada s´ı que se cumple para hipersem´anticas:

Lema 5.1.11 (Monoton´ıa bajo contextos de la hipersem´antica). Para cualquier e, e0 ∈ LExp⊥, y cualquier contexto C se tiene:

[[[e]]]CRW Llet b [[[e

0]]]

CRW Llet implica [[[C[e]]]]CRW Llet b [[[C[e

0]]]]

CRW Llet

Demostraci´on. Por inducci´on en la estructura del contexto C. Caso base :

C ≡ []: entonces C[e] ≡ e y C[e0] ≡ e0, por lo que el lema se cumple por la hip´otesis.

5.1.3 Adecuaci´on de la let-reescritura a CRWL 93

C ≡ let X = C0 in e1: por tanto C[e] ≡ let X = C0[e] in e1, C[e0] ≡ let X =

C0[e0] in e

1. Sea θ ∈ CSubst⊥ tal que (let X = C0[e] in e1)θ_ t, entonces debe de ser por la regla Let y por tanto tenemos:

(C0[e])θ_ t1 e1θ[X/t1]_ t let X = (C0[e])θ in e1θ_ t

Let

como [[[e]]] b [[[e0]]], por hip´otesis de inducci´on (ya que C0 es parte de C) tenemos que [[[C0[e]]]] b [[[C0[e0]]]] y por tanto ((C0[e])θ _ t1) implica ((C0[e0])θ _ t1). Entonces: (C0[e0])θ_ t1 HI e1θ[X/t1]_ t Hip let X = (C0[e0])θ in e1θ_ t Let

C ≡ let X = e1 in C0: por tanto C[e] ≡ let X = e1 in C0[e]. Sea θ ∈ CSubst⊥

tal que (let X = e1 in C0[e])θ_ t, entonces debe de ser por la regla Let y por tanto tenemos: e1θ_ t1 (C 0[e])θ[X/t 1]_ t let X = e1θ in (C0[e])θ_ t Let

como [[[e]]] b [[[e0]]] por hip´otesis de inducci´on tenemos que [[[C0[e]]]] b [[[C0[e0]]]], y como ([X/t1] ◦ θ) ∈ CSubst⊥, entonces (C0[e0])θ[X/t1]_ t y por tanto:

e1θ_ t1 Hip (C0[e0])θ[X/t1]_ t HI let X = e1θ in (C0[e0])θ_ t Let C ≡ h(. . . , C0, . . .): por tanto C[e] ≡ h(. . . , C0[e], . . .). Sea θ ∈ CSubst

⊥ tal que

h(. . . , C0[e], . . .)θ_ t. Hay dos posibilidades:

a) h ≡ f ∈ F S: entonces la regla aplicada ha debido de ser OR y tenemos: e1θ_ t1 . . . (C 0[e])θ _ t 0 . . . e nθ_ tn r _ t f (e1θ, . . . , (C0[e])θ, . . . , enθ)_ t OR

donde (f (t1, . . . , t0, . . . , tn) = r) ∈ [P]⊥. Como [[[e]]] b [[[e0]]] por hip´otesis

de inducci´on tenemos que [[[C0[e]]]] b [[[C0[e0]]]], entonces (C0[e0])θ _ t0 y por tanto: e1θ_ t1 Hip . . . (C0[e0])θ_ t 0 HI . . . e nθ_ tn Hip r_ t Hip f (e1θ, . . . , (C0[e0])θ, . . . , enθ)_ t OR b) h ≡ c ∈ CS: entonces la regla aplicada ha debido de ser DC y tenemos:

e1θ_ t1 . . . (C 0[e])θ _ t 0 . . . e nθ_ tn c(e1θ, . . . , (C0[e])θ, . . . , enθ)_ c(t1, . . . , t 0, . . . , t n) DC

Como [[[e]]] b [[[e0]]] por hip´otesis de inducci´on tenemos que [[[C0[e]]]] b [[[C0[e0]]]], entonces (C0[e0])θ_ t 0 y por tanto: e1θ_ t1 Hip . . . (C0[e0])θ_ t0 HI . . . enθ_ tn Hip c(e1θ, . . . , (C0[e0])θ, . . . , enθ)_ c(t1, . . . , t 0, . . . , t n) DC

94 5. Let-reescritura

La idea ahora es probar para hipersem´anticas un resultado an´alogo al del teorema

5.1.1 para que ´este se convierta entonces en un sencillo corolario del nuevo resultado. Dicho resultado podr´ıa formularse de la siguiente manera:

Teorema 5.1.2 (Hipercorrecci´on de un paso de let -reescritura). Para todo e, e0 ∈ LExp

e →le0 implica [[[e0]]]CRWLlet b [[[e]]]CRWLlet

Demostraci´on. Procederemos suponiendo θ ∈ CSubst⊥ tal que P `CRW Llet e

0θ

_ t, y probando entonces que P `CRW Llet eθ_ t. El caso en que P `CRW Llet e

0θ

_⊥ se cumple trivialmente aplicando la regla (B), por lo que en el resto de la demostraci´on supondremos que t 6≡⊥. Procederemos por distinci´on de casos sobre la regla de let -reescritura aplicada en e →le0:

(Contx) Si C[e] →l C[e0] porque e →l e0, siempre supondremos que en e →l e0 no se

ha aplicado (Contx), porque si ´esta hubiera sido aplicada entonces tendr´ıamos e ≡ C0[e1] →l C0[e2] ≡ e0 con e1 →le2, y por tanto podr´ıamos definir C00[] ≡ C[C0[]] y

C00[e

1] ≡ C[C0[e1]] ≡ C[e] →l C[e0] ≡ C[C0[e2]] ≡ C00[e2]. Podemos repetir este proceso

asegurando que (Contx) no fue aplicada en e →le0. Por tanto, por la prueba de los

otros casos, [[[e0]]] b [[[e]]],y por el lema5.1.11, [[[C[e0]]]] b [[[C[e]]]].

(Elim) Supongamos que let X = e1 in e2 →l e2 y θ ∈ CSubst⊥ tal que P `CRW Llet

e2θ_ t. Entonces podemos construir la siguiente CRWLlet prueba: e1θ_⊥ B e2θ[X/ ⊥] ≡ e2θ_ t Hip let X = e1θ in e2θ_ t Let

Por la convenci´on de variables, X 6∈ vRan(θ). Entonces como por la condici´on en (Elim), X 6∈ F V (e2), entonces X 6∈ F V (e2θ) y por tanto e2θ[X/ ⊥] ≡ e2θ.

(Bind) Supongamos que let X = t1 in e →le[X/t1] y θ ∈ CSubst⊥ tal que P `CRWLlet

(e[X/t1])θ_ t. Entonces podemos construir la siguiente CRWLlet prueba: t1θ_ t1θ DC∗ eθ[X/t1θ] ≡ (e[X/t1])θ_ t Hip let X = t1θ in eθ_ t Let

Por la convenci´on de variables tenemos que X 6∈ dom(θ) and X 6∈ vRan(θ)4 , por tanto por el lema5.1.1tenemos que eθ[X/t1θ] ≡ (e[X/t1])θ. Por lo dem´as, la “regla”

[DC∗] se refiere al hecho de que ∀t ∈ CT erm⊥ P `CRW Llet t _ t (muy f´acil de demostrar por inducci´on en la estructura de t).

4En realidad para demostrar este teorema correctamente no nos podemos restringir a cumplir estas

restricciones, as´ı que en realidad renombramos las variables ligadas al estilo de la α-conversion y empleamos la equivalencia e[X/t] ≡ e[X/Y ][Y /t] (con Y la nueva variable ligada), para poder usar la hip´otesis

5.1.3 Adecuaci´on de la let-reescritura a CRWL 95

(Flat) Supongamos que let X = (let Y = e1 in e2) in e3 →l let Y = e1 in (let X =

e2 in e3) y θ ∈ CSubts⊥ tal que P `CRWLlet (let Y = e1 in (let X = e2 in e3))θ _ t. Entonces la prueba debe ser de la forma:

e1θ_ t1 e2θ[Y /t1]_ t2 (e3θ[Y /t1] ≡ e3θ)[X/t2]_ t (let X = e2θ in e3θ)[Y /t1]_ t Let let Y = e1θ in (let X = e2θ in e3θ)_ t Let

para alg´un t1, t2 ∈ CT erm⊥. Por la convenci´on de variables tenemos que Y 6∈

vRan(θ), por tanto, como Y 6∈ F V (e3) por la condici´on en (Flat), entonces Y 6∈

F V (e3θ) y podemos afirmar que e3θ[Y /t1] ≡ e3θ. Por tanto:

e1θ_ t1 Hip e2θ[Y /t1]_ t2 Hip let Y = e1θ in e2θ_ t2 Let e3θ[X/t2]_ t Hip let X = (let Y = e1θ in e2θ) in e3θ_ t Let

(LetIn) Supongamos h(. . . , e, . . .) →l let X = e in h(. . . , X, . . .) y θ ∈ CSubts⊥ tal que

P `CRWLlet (let X = e in h(. . . , X, . . .))θ_ t. Entonces la prueba debe ser: eθ_ t1 h(d1θ, . . . , X, . . . , dnθ)[X/t1] ≡ h(d1θ, . . . , t1, . . . , dnθ)_ t

let X = eθ in h(d1θ, . . . , Xθ ≡ X, . . . , dnθ)_ t

Let para algunas expresiones d1, . . . , dn y alg´un t1 ∈ CT erm⊥. Por la convenci´on de

variables tenemos que X 6∈ dom(θ) y X 6∈ vRan(θ). Entonces podemos afirmar que Xθ ≡ X y adem´as que h(d1θ, . . . , X, . . . , dnθ) [X/t1] ≡ h(d1θ, . . . , t1, . . . , dnθ),

ya que X es fresca y por tanto ∀i.X 6∈ F V (di), luego ∀i.X 6∈ F V (diθ) ya que

X 6∈ vRan(θ). Entonces tenemos dos posibilidades:

a) h = c ∈ CS, entonces h(d1θ, . . . , t1, . . . , dnθ)_ t debe ser: d1θ_ s1 . . . t1 _ t 0 1 . . . dnθ_ sn c(d1θ, . . . , t1, . . . , dnθ)_ c(s1, . . . , t 0 1, . . . , sn) ≡ t DC

para alg´un s1, . . . , sn, t01 ∈ CT erm⊥. Como ∀t ∈ CT erm⊥, t_ t

0 implica t0 v t

(por el lema 3.2.2 ya que con c-t´erminos CRWLlet es igual que CRWL, como

indica el lema 5.1.4), entonces t01 v t1, y como eθ _ t1, por el lema 5.1.10 tenemos eθ_ t01. Por tanto

d1θ_ s1 Hip . . . eθ_ t 0 1 . . . dnθ_ sn Hip c(d1θ, . . . , eθ, . . . , dnθ)_ c(s1, . . . , t 0 1, . . . , sn) ≡ t DC b) h = f ∈ F S, entonces h(d1θ, . . . , t1, . . . , dnθ)_ t debe ser:

d1θ_ s1 . . . t1_ t

0

1 . . . dnθ_ sn r_ t f (d1θ, . . . , t1, . . . , dnθ)_ t

OR

para alg´un s1, . . . , sn, t01 ∈ CT erm⊥, (f (s1, . . . , t01, . . . , sn) → r) ∈ [P]⊥. De

nuevo como ∀t ∈ CT erm⊥, t _ t

0 implica t0 v t, entonces t0

1 v t1, y como

eθ_ t1, por el lema5.1.10 tenemos eθ_ t

0 1. Por tanto d1θ_ s1 Hyp . . . eθ_ t01 . . . dnθ_ sn Hyp r_ t Hyp f (d1θ, . . . , eθ, . . . , dnθ)_ t OR

96 5. Let-reescritura

(Fapp) Supongamos f (t1, . . . , tn) →lr con (f (p1, . . . , pn) → e)σ ∈ [P] tal que ∀i.piσ = ti

y eσ = r, y θ ∈ CSubts⊥ tal que P `CRWLlet rθ _ t. Entonces como θ ◦ σ ∈ CSubts⊥, ∀i.piσθ = tiθ y eσθ = rθ podemos concluir (f (p1, . . . , pn) → e)σθ ∈ [P]⊥

y por tanto: t1θ_ t1θ DC∗ . . . t nθ_ tnθ DC∗ _ t Hip f (t1θ, . . . , tnθ)_ t OR

Con este resultado la demostraci´on del teorema 5.1.1es inmediata:

Demostraci´on. Para el teorema5.1.1. Supongamos e →le0. Entonces por el teorema5.1.2

tenemos que [[[e0]]]CRW Llet b [[[e]]]CRW Llet, y por tanto [[e

0θ]]

CRW Llet ⊆ [[eθ]]CRW Llet para

cualquier θ ∈ CSubst⊥. Eligiendo θ =  (la sustituci´on vac´ıa) obtenemos [[e0]]CRW Llet ⊆

[[e]]CRW Llet.

La correcci´on de un paso dada por el teorema 5.1.1 se extiende f´acilmente a varios pasos, es decir, al cierre reflexivo-transitivo de la let -reescritura, →∗l:

Corolario 5.1.1 (Correcci´on de varios pasos de let -reescritura). Para todo e, e0 ∈ LExp

e →∗l e0 implica [[e0]]CRW Llet ⊆ [[e]]CRW Llet

Demostraci´on. Una inducci´on inmediata sobre la longitud de la derivaci´on e →∗l e0. Finalmente, usando estos resultados podemos obtener f´acilmente nuestro resultado principal de correcci´on de la let -reescritura con respecto al c´alculo CRWL original: Teorema 5.1.3 (Correcci´on de la let -reescritura). Para todo CRWL-programa P, e, e0 ∈ Exp y t ∈ CT erm se tiene que:

i) e →∗l e0 implica que P `CRW Le_ |e

0|.

ii) e →∗l t implica que P `CRW Le_ t.

Demostraci´on. i) Supongamos e →∗l e0, entonces por el corolario5.1.1tenemos que [[e0]]CRW Llet ⊆ [[e]]CRW Llet. Pero como |e

0| ∈ [[e0]]

CRW Llet por el lema 5.1.5, entonces |e

0| ∈

[[e]]CRW Llet, es decir, P `CRWLlet e_ |e

0|. As´ı que por el lema5.1.4, podemos concluir que

P `CRWLe_ |e

0|. ii) Consecuencia de i), ya que ∀t ∈ CT erm, |t| ≡ t.

Completitud

Ahora nos queda buscar alg´un tipo de contrapartida del teorema 5.1.3. Para ello ne- cesitaremos algunos resultados previos. El primero de ellos es un resultado local a la let -reescritura:

Lema 5.1.12 (Lema de pelado de las c´ascaras). Para toda e ∈ LExp tal que e 6∈ V tenemos que e →∗l let X = a in g(t) para alg´un g ∈ CS ∪ F S, t ⊆ CT erm y a ⊆ LExp tal que |ai| =⊥ para todo ai ∈ a.

Adem´as, si e ≡ h(e1, . . . , en) con h ∈ CS ∪ F S, entonces e ≡ h(e1, . . . , en) →∗l let X = a

in h(t1, . . . , tn) bajo las condiciones arriba indicadas, y verificando adem´as que ti ≡ ei

siempre que ei ∈ CT erm.

Por ´ultimo, podemos afirmar que en ninguna de estas derivaciones se aplica la regla (Fapp).

5.1.3 Adecuaci´on de la let-reescritura a CRWL 97

Podemos pensar en las let-expresiones como en CRWL-expresiones ordinarias a las que se les ha a˜nadido una cierta informaci´on adicional sobre compartici´on de subexpresiones (sharing), codificada a trav´es de la construcci´on let. Como la regla (Fapp) no se utiliza en las derivaciones de este lema, entonces en ellas no se progresa en la evaluaci´on de la CRWL- expresi´on impl´ıcita correspondiente a e (por tanto no se cambia su CRWL-denotaci´on), sino que lo que se hace es cambiar la representaci´on enriquecida de la CRWL-expresi´on. Se cambia esta representaci´on con el objeto de dejar al descubierto la parte c´alculada de e, concentr´andola en g(t), es decir, mostrando la parte cuya c´ascara es diferente de ⊥. Por eso llamamos a este lema el ‘lema de pelado’.

Demostraci´on. Para el lema5.1.12. Por inducci´on en la estructura de e: Caso base :

e ≡ h: Entonces h →0l h, ok con X ≡ ∅ Paso inductivo :

e ≡ h(e1, . . . , en): Hagamos una primera versi´on de la demostraci´on de este

caso para un solo argumento, para h(e1). Si e1 ∈ CT erm ya hemos terminado

con X ≡ ∅ y h(e1) →0l h(e1), as´ı que supongamos que e1 6∈ CT erm. Entonces

e16∈ V as´ı que por HI, e1 →∗l let X1= a1 in h1(t1) con X1 6≡ ∅, por tanto:

h(e1) →∗l h(let X1 = a1 in h1(t1)) por HI

→∗l let Y1 = (let X1 = a1 in h1(t1)) in h(Y1) por (LetIn)

→∗

l let X1 = a1 in let Y1 = h1(t1) in h(Y1) por (Flat∗)

Entonces tenemos dos posibilidades:

a) h1 = f1 ∈ F S: Entonces hemos acabado ya que ∀ai ∈ a.|ai| =⊥, por la HI,

y |f1(t1)| =⊥

b) h1 = c1 ∈ CS: Entonces let X1 = a1 in let Y1 = c1(t1) in h(Y1) →l

let X1= a1 in h(c1(t1)) por (Bind), y hemos acabado ya que ∀ai ∈

a.|ai| =⊥ por HI

Usando estas t´ecnicas podemos extender esta demostraci´on a los casos en que h tiene m´as de un argumento.

e = let X = e1 in e2: Supongamos que e1 6∈ V y e2 6∈ V, entonces podemos

aplicar la HI a e1 y e2 obteniendo:

let X = e1 in e2

→∗

l let X = (let X1= a1 in h1(t1)) in (let X2= a2 in h2(t2)) por HI

→∗l let X1 = a1 in let X = h1(t1) in let X2= a2 in h2(t2) por (Flat∗)

98 5. Let-reescritura

a) h1 = f1 ∈ F S: Entonces hemos acabado ya que ∀ai ∈ a1∪ a2.|ai| =⊥ por

HI, y |f1(t1)| =⊥

b) h1 = c1 ∈ CS: Entonces:

let X1 = a1 in let X = c1(t1) in let X2 = a2 in h2(t2)

→∗l let X1 = a1 in let X2 = a2[X/c1(t1)] in h2(t2)[X/c1(t1)]

por (Bind), y ya hemos acabado ya que para cualquier θ ∈ CSubst, |e| =⊥ implica |eθ| =⊥ (muy sencillo de demostrar).

Usando estas t´ecnicas podemos extender esta demostraci´on a los casos en que e1 o e2 son variables.

El siguiente resultado es ya un resultado t´ecnico de completitud que allana el camino para formular m´as adelante nuestro teorema de completitud:

Lema 5.1.13 (Lema de completitud para la let -reescritura). Sea P un CRWL- programa, e ∈ Exp y t ∈ CT erm⊥ tal que t 6=⊥. Entonces

P `CRW Le_ t implica e →l let X = a in t0

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. Por inducci´on en el tama˜no s de la CRWL-prueba, que mediremos como el n´umero de CRWL reglas aplicadas:

Caso base : s = 1. Veamos que regla fue aplicada en la CRWL-prueba en cuesti´on:

B Esto contradice la hip´otesis porque entonces t ≡⊥, por lo que ya hemos termi- nado. En el resto de la demostraci´on supondremos que t 6≡⊥ porque de otra forma la hip´otesis estar´ıa contradicha.

RR Entonces tenemos P `CRW L X_ X . Pero entonces X →

0

l X y X v X ≡ |X|,

por lo que hemos acabado con X = ∅.

DC Entonces tenemos P `CRW L c_ c. Pero entonces c →

0

l c y c v c ≡ |c|, por lo

que hemos acabado con X = ∅.

Paso inductivo : s > 1. Vemos cual fue la regla aplicada:

DC Entonces tenemos e ≡ c(e1, . . . , en) y la CRWL-prueba es de la forma:

e1 _ t1, . . . , en_ tn c(e1, . . . , en)_ c(t1, . . . , tn)

5.1.3 Adecuaci´on de la let-reescritura a CRWL 99

En el caso m´as general algunos ti ser´an ⊥ y otros no. Por simplicidad conside-

raremos el caso en que n = 2 con t1 = ⊥ and t2 6≡ ⊥, pero esta demostraci´on

es f´acilmente ampliable al caso general. Entonces tenemos la prueba: e1_⊥ e2 _ t26≡⊥

c(e1, e2)_ c(⊥, t2) DC Por HI sobre P `CRW L e2 _ t2 tenemos e2 →

l let X2 = a2 in t 0

2, con t02 ∈

CT erm, |a2i| =⊥ para todo a2i y |let X2 = a2 in t

0

2| = t02[X2/ ⊥] w t2. Por

tanto:

c(e1, e2) →∗l c(e1, let X2 = a2 in t02) por HI

→∗

l let Y = (let X2 = a2 in t02) in c(e1, Y ) por (LetIn)

→∗l let X2 = a2 in let Y = t02 in c(e1, Y )) por (Flat∗)

→∗l let X2 = a2 in c(e1, t02) por (Bind)

Entonces tenemos varias posibilidades:

a) e1 = f1(e1): Entonces let X2 = a2in c(f1(e1), t02) →llet X2 = a2in let Z =

f1(e1) in c(Z, t02), por (LetIn). Por tanto hemos terminado ya que |a2i| =⊥

para todo a2ipor HI, |f1(e1)| =⊥ y |let X2 = a2in let Z = f1(e1) in c(Z, t

0 2)|

= c(Z, t02)[X2/ ⊥, Z/ ⊥] w c(⊥, t2), ya que t02[X2/ ⊥] w t2 por HI, y Z es

fresca y por tanto no aparece en t02.

b) e1 = t01 ∈ CT erm: Entonces hemos terminado ya que |a2i| =⊥ para todo

a2i por HI, y |let X2 = a2 in c(t

0

1, t02)| = c(t01, t02)[X2/ ⊥] w c(⊥, t2), porque

t02[X2/ ⊥] w t2 por HI.

c) e1 = c1(e1) 6∈ CT erm: Entonces por el lema 5.1.12, c1(e1) →∗l let X1 = a1

in c1(t1) tal que |a1i| =⊥ para todo a1i. Pero entonces:

let X2 = a2 in c(c1(e1), t02)

→∗

l let X2 = a2 in c(let X1 = a1 in c1(t1), t02) lema5.1.12

→∗l let X2 = a2 in let Y = (let X1 = a1 in c1(t1)) in c(Y, t02) por (LetIn)

→∗

l let X2 = a2 in let X1= a1 in let Y = c1(t1) in c(Y, t02) por (Flat∗)

→∗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 a1ipor el lema5.1.12,

|a2i| =⊥ para todo a2i por HI, y |let X2 = a2in let X1= a1in c(c1(t1), t02)| =

c(c1(t1), t02)[X1/ ⊥][X2/ ⊥] w c(⊥, t2), porque t02[X2/ ⊥] w t2 por HI, y X1

son frescas y por tanto no aparecen en t02.

d) e1 = let X = e11 in e12: este caso no puede darse ya que en las premisas

del lema 5.1.13se supone que e ∈ Exp, por tanto en ´el no puede aparecer ninguna construcci´on let.

OR Si f no tiene argumentos (n = 0) entonces tenemos: rθ_ t

100 5. Let-reescritura

con (f _ rθ) ∈ [P ]⊥. Podemos definir θ0 ∈ CSubst como la sustituci´on que es

igual a θ excepto porque cada ⊥ introducido por θ es reemplazado con alg´un s´ımbolo de constructora o variable. Entonces θ v θ0, por tanto por el lema

3.2.2 se tiene que P `CRW L rθ0 _ t con una prueba del mismo tama˜no. Pero entonces, aplicando la HI a esta prueba obtenemos que rθ0 →∗

l let X = a in t0

bajo las condiciones del lema5.1.13. Pero entonces f →leθ0 →∗l let X = a in t0

aplicando (Fapp) en el primer paso.

Si n > 0, procedemos como en el caso para (DC), haci´endo una versi´on preli- minar para P `CRW L f (e1, e2) _ t, que puede extenderse f´acilmente al caso m´as general. Entonces tenemos:

e1 _⊥ e2_ t2 6≡⊥ r _ t f (e1, e2)_ t

OR

tal que t2 6≡⊥, y con (f (p1, p2) = e)θ ∈ [P]⊥ tal que p1θ =⊥, p2θ = t2

y eθ = r. Entonces aplicando la HI a P `CRW L e2 _ t2 obtenemos que e2 →∗l let X2= a2 in t20 tal que |a2i| =⊥ para todo a2i y |let X2= a2 in t

0 2| =

t02[X2/ ⊥] w t2. Por tanto:

f (e1, e2) →∗l f (e1, let X2 = a2 in t02) por HI

→∗

l let Y = (let X2= a2 in t02) in f (e1, Y ) por (LetIn)

→∗l let X2 = a2 in let Y = t02 in f (e1, Y ) por (Flat∗)

→∗l let X2 = a2 in f (e1, t02) por (Bind)

Aplicando el lema 5.1.12 obtenemos que f (e1, t02) →∗l let X1 = a1 in f (t 0 1, t02)

tal que |a1i| =⊥ para todo a1i. Ahora como t

0

2[X2/ ⊥] w t2 entonces (t01, t02) w

(⊥, t2), por tanto por el lema3.2.2debe existir una θ0∈ CSubst tal que θ v θ0

y (p1, p2)θ0 = (t01, t02). Entonces por el lema 3.2.2, ya que P `CRW Lr ≡ eθ _ t entonces P `CRW L eθ0 _ t con una prueba del mismo tama˜no. Ya que θ

0

CSubst y e ∈ Exp (al ser parte del programa) se tiene que eθ0∈ Exp y podemos aplicar la HI a esa CRWL-prueba obteniendo que eθ0 →∗l let X = a in t0 tal que |ai| =⊥ para todo ai y que |let X = a in t0| = t0[X/ ⊥] w t. Por tanto:

let X2= a2 in f (e1, t02)

→∗l let X2= a2 in let X1= a1 in f (t01, t02) por el lema 5.1.12

→∗

l let X2= a2 in let X1= a1 in eθ0 por (Fapp)

→∗l let X2= a2 in let X1= a1 in let X = a in t0 por la 2a HI

Entonces |a2i| =⊥ para todo a2i por la HI, |a1i| =⊥ para todo a1i por el

lema 5.1.12 y |ai| =⊥ para todo ai por la HI. Como las variables en X1∪ X2

son variables frescas introducidas por la let -reescritura, ninguna de ellas puede aparecer en t. Por tanto t0[X/ ⊥] w t implica que ∀p ∈ O(t0) tal que t0|p = Y

tal que Y ∈ X1∪ X2 se tiene que t|p =⊥. Por tanto: