A semântica operacional do λ-cálculo diz respeito às regras utilizadas para converter uma λ- expressão em outra. Na realidade, existem 3 (três) regras de conversão. Antes de serem mostradas estas regras, devemos definir alguns termos que são utilizados na aplicação destas regras.
Uma idéia central no estudo das linguagens de programação, da notação matemática e da lógica simbólica é a de ocorrência livre e ocorrência ligada (ou conectada) de uma variável. Esta
idéia, normalmente, provoca confusão em quem está vendo o tema pela primeira vez. Assim, ele será introduzido de forma gradual e intuitiva, utilizando exemplos já conhecidos da Matemática. Assim, vamos considerar o somatório:
n X i=1
i2+ 1
Nesta expressão, a variável i é uma variável ligada, ou seja, ela está fortemente atrelada ao somatório. Diz-se que ela ocorre ligada nesta expresssão. Uma característica importante das variáveis ligadas é que elas podem ser renomeadas sem que o significado da expressão seja alterado. Por exemplo, o somatório anterior pode também ser representado da seguinte forma, sem haver qualquer modificação em seu significado:
n X k=1
k2+ 1
De maneira similar, a integral seguinte, em relação à variável ligada x
Z 1
0 x
2− 3xdx
representa a mesma integral, a seguir, com respeito à variável ligada t.
Z 1
0 t
2− 3tdt
Na teoria dos conjuntos, o conjunto de todos os x (ligada) tal que x ≥ 0 é o mesmo conjunto de todos os y (ligada) tal que y ≥ 0, ou seja,
{x | x ≥ 0} ≡ {y | y ≥ 0}
Também a proposição “para todo x, x+1>x" é equivalente à proposição “para todo y, y+1>y", ou seja,
∀x[x + 1 > x] ≡ ∀y[y + 1 > y]
Vejamos agora, uma outra expressão, também envolvendo somatório:
i
n X j=1
(j2+ i − a)
Já é sabido que a ocorrência da variável j é ligada. Isto pode ser verificado pelo fato de que ela pode ser trocada por qualquer outra variável, desde que não seja i ou a, sem mudar o significado da expressão. Por exemplo, a expressão
i
n X k=1
(k2+ i − a)
tem, exatamente, o mesmo significado da anterior. Em uma expressão, uma ocorrência não ligada de uma variável é dita ser “livre”. As variáveis i, a e n ocorrem livres nesta expressão. Se
em uma ocorrência livre de uma variável ela for trocada por outra, o significado da expressão também é modificado. Além disso, uma variável pode ocorrer ligada em uma expressão e livre em outra. Por exemplo, a variável i ocorre livre em
n X j=1
j2+ i − a
e ocorre ligada na expressão
m X i=1 i!Xn j=1 j2+ i − a
O escopo (binding site) de um identificador determina a região da expressão na qual o iden- tificador ocorre ligado. Esta região, normamente, é indicada por alguma convenção léxica, como os parênteses, colchetes ou chaves. Esta região é o corpo da expressão, significando que uma mesma variável pode ocorrer ligada em um ponto e livre em outro.
Como visto, a troca de variáveis ligadas não interfere no significado da expressão. No entanto, esta troca não pode ser feita por uma variável que ocorra livre na expressão, porque ela muda seu significado. Por exemplo, a expressão que representa a soma dos elementos da linha i de uma matriz Am×n é o somatório
n X j=1
Aij = Ai1+ Ai2+ . . . + Ain
A variável j ocorre ligada nesta expressão e pode ser trocada por outra, por exemplo, k.
n X k=1
Aik= Ai1+ Ai2+ . . . + Ain
cujo significado é o mesmo da expressão anterior. No entanto, observemos que a variável j não pode ser trocada pela variável i porque a expressão se tornaria o somatório de Aii, que representaria o somatório dos elementos da diagonal da matriz e não mais dos elementos da linha i, como inicialmente. Este fenômeno é conhecido como “colisão de identificadores” e deve ser evitado.
Fazendo um paralelo com as linguagens de programação comuns, as variáveis ligadas das expressões correspondem aos parâmetros formais das funções e têm o mesmo status das variáveis locais.
Após termos visto as noções de ocorrências ligadas e livres e da colisão de identificadores de maneira intuitiva, vamos agora formalizar estes conceitos.
2.4.1 Ocorrências livres ou ligadas
Seja a λ-expressão (λx . + x y) 4. Pelo que foi visto anteriormente, sabe-se que se trata da aplicação de uma função sobre a variável x, onde o corpo da função é (+ x y), a uma outra λ-expressão, que no caso é a constante 4.
A variável x pode ser pensada como um local onde o argumento 4 deve ser colocado. Já para a variável y, este mesmo raciocínio não pode ser aplicado porque não existe este local sinalizado por uma variável y após uma letra λ. Isto significa que as duas variáveis (x e y) têm status distintos.
Formalmente, define-se: “uma ocorrência de uma variável é ligada se existir uma λ-abstração à qual esta variável esteja ligada. Em caso contrário, a ocorrência é livre.” A Figura 2.1 mostra um exemplo contendo ocorrências livres e ligadas de variáveis.
λx.+(( y.+yz)7)xλ ^ ocorrencias: ligada ligada livre
Figura 2.1: Ocorrências livres e ligadas de variáveis.
Deve ser observado que uma mesma variável pode ocorrer livre em um ponto de uma λ- expressão, e ligada em outro, como é o caso da variável x na λ-expressão + x ((λx . + x 1) 4). A primeira ocorrência de x é livre e a segunda é ligada.
Podemos dizer, sendo x e y duas variáveis e θ e δ duas λ-expressões, que: a) x é livre em y se x = y. Se x 6= y, a ocorrência de x é ligada. b) x é livre em λy . M se (x for livre em M ) E (x 6= y)
c) x é livre em M N se (x for livre em M ) OU (x for livre em N ) Exemplos
1. x ocorre livre em x, em xy, em λa . xy e em (λa . xy) (λx . xy).
2. x ocorre ligada em y, em λx . xy, em (λx . ax) (y), em λx . abbx e em (λa . xy)(λx . xy).
2.4.2 Combinadores
Uma λ-expressão que não apresenta variáveis livres é chamada fechada ou combinador. Existem alguns combinadores que desempenham um papel especial no estudo do λ-cálculo, conforme foi afirmado na Introdução desta Apostila, onde foi feita referência aos combinadores S, K e I, nos quais é baseada a máquina de redução-SK de Turner.
A criação de combinadores é uma tarefa que não tem explicação lógica. Seus construtores de- vem ter tido algum insight, no entanto não existem explicações plausíveis de alguma metodologia de construção destas λ-expressões especiais.
Os combinadores mais conhecidos são:
I = λx.x Identidade
K = λx.λy.x Projeção
S = λx.λy.λz.xz(yz) Composição
∆ = λx.xx Duplicação
Y = λf.(λy.f (yy))(λy.f (yy)) Usado na representação de funções recursivas
Θ = λa.λb.b(aab) Também usado na representação de funções recursivas Exercícios resolvidos
1. Identifique nas expressões abaixo aquelas que são, ou não, λ-expressões:
a) a Sim, a é uma variável;
b) 9 Sim, 9 é uma constante;
c) ((λb.b)(λa.ab) Não, os parênteses não estão aninhados corretamente;
d) (λx.)a Não, λx. não é uma λ-abstração;
e) ((λx.λy.y)(λy.yyy))((λi.i)(λa.b)) Sim, porque contém apenas aplicações, abstrações e variáveis.
2. Identifique nas expressões abaixo as ocorrências livres e as ligadas das variáveis a) λx.xx As duas ocorrências da variável x são conectadas
b) (λx.λy.x)x O último x ocorre livre
c) (λx.λy.xx)xa As duas últimas variáveis ocorrem livres d) (x(λx.y))x Todas as variáveis ocorrem livres
Tabela 2.1: Resumo Uma ocorrência de uma variável deve ser livre ou ligada. Definição de ocorrência
livre:
x ocorre livre em x
x ocorre livre em (E F ) ⇔ x ocorre livre em E ou x ocorre livre em F
x ocorre livre em λy . E ⇔ x e y são variáveis distintas e x ocorre livre em E
Definição de ocorrência lig- ada:
x ocorre ligada em (E F ) ⇔ x ocorre ligada em E ou x ocorre ligada em F
x ocorre ligada em λy . E ⇔ (x e y são a mesma variável e x ocorre livre em E) ou x ocorre ligada em E.
Exercícios propostos
1. Justifique porque as expressões abaixo não são λ-expressões: (a) (x(λy)z)
(b) (λx.λy.x((λi.ii)(λb.λc.b)(λb.λc.b)) (c) λ
(d) λx.λx
2. Identifique as ocorrências livres e as ocorrências ligadas das variáveis nas expressões abaixo: (a) (λx.xwx)9
(b) (λx.λy.x)3b (c) (λx.yxx)(λi.i)5
(d) (λz.λb.λc.ac(bc)f )(λb.λc.b)(λb.λc.b)
(e) (λx.λy.y)w((λz.zzz)(λw.www))((λa.a)(λa.b)) 3. Quais das seguintes expressões são combinadores?
(a) (λx.xx)9 (b) (λx.λy.x)3
(c) (λx.yxx)(λi.i)5
(d) (λa.λb.λc.ac(bc)f )(λb.λc.b)