Um redex (reduction ex pression) é uma λ-expressão na qual todos os parâmetros necessários para que uma operação possa ser feita estão prontos para serem utilizados. Se uma expressão não contiver qualquer redex a sua avaliação está completa e, neste caso, diz-se que a expressão está na sua forma normal.
No entanto, pode acontecer que uma expressão tenha mais de um redex e, neste caso, existem mais de um caminho a serem seguidos na seqüência de avaliações. Já sabemos, pela propriedade de Church-Rosser, que a utilização de qualquer uma das seqüências de redução leva ao mesmo resultado, se ele existir. Por exemplo, + (∗ 3 4) (∗ 7 8) apresenta dois redexes: ∗ 3 4 e ∗ 7 8. Se for escolhido o redex mais à esquerda teremos a seguinte seqüência de reduções:
+ (∗ 3 4) (∗ 7 8) −→ + 12 (∗ 7 8) −→ + 12 56 −→ 68
Se, no entanto, a escolha recair sobre o redex mais à direita, a seqüência de redução será: + (∗ 3 4) (∗ 7 8)
−→ + (∗ 3 4) 56 −→ + 12 56 −→ 68
Apesar dos resultados das duas seqüências de avaliação serem iguais, algumas observações devem ser feitas:
1. nem toda λ-expressão tem uma forma normal. Por exemplo, a λ-expressão (∆∆), onde ∆ = (λx . x x), tem a seguinte seqüência de reduções:
(λx . x x) (λx . x x) −→(λx . x x) (λx . x x)β −→(λx . x x) (λx . x x)β −→. . .β correspondendo a um loop infinito nas linguagens imperativas.
2. Algumas seqüências de redução podem atingir a forma normal, enquanto outras não. Por exemplo, (λx . 3) (∆∆) pode ser avaliada para 3, escolhendo o primeiro redex, mas, se for escolhido o segundo (∆ aplicado a ∆), o resultado será um loop infinito, sem atingir a forma normal.
Até este ponto, temos insistido, mesmo sem provas, que seqüências diferentes de reduções não podem levar a formas normais diferentes. Dois teoremas, descritos a seguir, mas sem demon- strações, garantem esta propriedade. Sugere-se ao leitor pesquisar estas demonstrações na bibli- ografia indicada, por não fazer parte do objetivo desta Apostila. Estas demonstrações requerem conhecimentos matemáticos e da Teoria da Computação mais avançados dos que os exigidos como pré-requisitos para este estudo.
Teorema 1 de Churh-Rosser (CRT-I).“Se E1 ←→ E2, então existe uma expressão E tal
que E1 −→ E e E2 −→ E".
Prova: Exercício.
Corolário. Nenhuma expressão pode ser convertida a duas formas normais distintas. Prova: Suponha que uma λ-expressão, E, seja redutível a duas λ-expressões distintas, E1 e E2
e que E1 e E2 estejam na forma normal. Pelo teorema CRT-1, anterior, existe uma λ-expressão
que E −→ θ2 e E2 −→ θ2. Mas E1 e E2 estão na forma normal não podem ser redutíveis, o que é uma contradição. Esta contradição se originou do pressuposto de que existiam duas formas normais distintas para a mesma λ-expressão. Portanto, é impossível que uma λ-expressão tenha mais de uma forma normal.
Informalmente, todas as seqüências de reduções que terminam, chegarão inequivocamente ao mesmo resultado.
Este teorema de Church-Rosser é conhecido como teorema da atingibilidade e unicidade da forma normal e tem uma longa história. Ele foi primeiramente demonstrado por Alonzo Church e J. Barkley Rosser em 1936 [25] e esta demonstração era tão longa e complicada que muito do trabalho de pesquisa posterior foi dedicado à descoberta de formas mais simples de demonstração deste teorema. Assim, ele foi demonstrado de várias formas, para diferentes propósitos, todas elas apresentando alguma dificuldade. Uma demonstração mais simples foi apresentada pelo prório J. Barkley Rosser em 1982 e uma versão mais rigorosa foi feita por Barendregt em 1984 [25].
Um esquema de prova exibido por Maclennan se baseia na descrição de uma propriedade, conhecida como propriedade do diamante. Diz-se que uma relação R tem a propriedade do diamante se e somente se, para todas as fórmulas bem formadas X, X1 e X2 vale: se X R X1
e X R X2, então existe uma fórmula bem formada X´ tal que X1 R X´e X2 R X´. Este esquema
pode ser visualizado graficamente na Figura 2.3. X1 X 2 X X1 X 2 X X’
sempre que se tem pode−se completar o diamante
Figura 2.3: Interpretação gráfica da propriedade do diamante.
A partir da propriedade do diamante, o teorema de Church-Rosser é descrito da seguinte forma: “a redução tem a propriedade do diamante”.
Um redex é dito ser “leftmost-outermost” em uma λ-expressão, se todos os outros redexes desta λ-expressão estiverem à sua direita ou dentro dele. Além disso, diz-se que uma seqüência de reduções é feita na “ordem normal” se o redex escolhido para execução em cada estágio for leftmost-outermost.
Exercício. Encontre o redex leftmost-outermost nas seguintes λ-expressões: 1. (λx.λa.(λb.bab)(xa))(∆K∆)
2. x(λa.aa)((λb.(λa.b)b)(λa.aa))(λx.xxx) 3. λa.λb.Sa(∆b)b
Teorema 2 de Church-Rosser (CRT II). “Se E1 −→ E2 e E2 está na forma normal,
então existe uma ordem normal de seqüências de redução de E1 para E2”.
Este teorema é também conhecido como “teorema da normalização" e significa que existe, no máximo, um resultado e a ordem normal o encontra, se ele existir. A ordem normal de redução especifica que o redex leftmost-outermost deve ser escolhido primeiramente. Dito de outra forma, “a redução do redex mais externo e mais à esquerda, em cada ponto da seqüência de reduções, leva até a forma normal, se ela existir”.
Exemplo. Utilize a ordem normal de redução para determinar a forma normal da λ-expressão (λx . xx)((λy . y)(λz . z)).
(λx . xx)((λy . y)(λz . z)) −→((λy . y)(λz . z))((λy . y)(λz . z))β β −→(λz . z)((λy . y)(λz . z)) β −→(λy . y)(λz . z) β −→λz . z
A escolha pela ordem normal de redução garante encontrar a forma normal, se ela existir. No entanto, isto não quer dizer que este seja o melhor método a ser utilizado na redução de λ- expressões. Normalmente, este caminho é o que apresenta o pior desempenho. Então por que este caminho deve ser seguido? A resposta é que a ordem normal de execução apresenta um método que pode ser implementado computacionalmente e isto é o que se busca em nosso estudo, ou seja, procura-se um método para o qual exista um procedimento mecânico para seguí-lo e enontrar a forma normal, se ela existir. Na realidade, muitas otimizações foram feitas buscando melhorar o desempenho deste procedimento que, em última análise, representam melhorias de desempenhos na execução de programas funcionais. Como exemplo de apenas uma destas otimizações pode-se citar David Turner [47].