Você está na página 1de 4

CHAPTER 3.

MODELOS ABSTRATOS

29

3.4

Clculo Lambda
O espao entre a teoria e a prtica no to grande como , a teoria na prtica." (autor desconhecido)

O Clculo Lambda um modelo formal utilizado para representar tipos abstratos de dados. O conceito de tipos muito importante em linguagens de programao. Em algumas linguagens, os tipos so conjuntos de valores que obedecem certas propriedades. Em outras, existe apenas um tipo de dado sendo que, neste caso, os objetos da linguagem so nada mais do que cadeias de bits armazenados na memria. Tambm existem linguagens, como a linguagem C, onde o tipo de dado declarado diretamente pelo programador. Assim, quanto ao tipo de dado, as linguagens de programao se classicam em: Linguagem monomrca - Aquela que possui um sistema de tipos que no pode ser alterado pelo programador. Linguagem polimrca - Aquela onde os tipos de dados podem ser alterados. Linguagens de programao funcional utilizam tipos polimrcos implcitos, ou seja, tipos mais gerais inferidos. Para isto so aplicadas as seguintes regras: se os tipos no so dados informados, so aplicados os tipos mais gerais possveis; se os tipos so dados so informados, em lugar de inferncia tem-se um processo de inferncia onde o compilador verica se o tipo de dado adequado para a funo em pauta e se o tipo declarado adequado. Considere 1. f ( x ) = x3 + 4, f : N N: argumento do tipo valor (funo de valor) 2. g( x, y) = ( x2 , y x ), g : N N N N: argumento do tipo valor (funo de valor) 3. h( f , x ) = f ( f ( x )), h : (N N) N N: argumento do tipo funcional (funo de funo) Funcional uma funo que possui uma ou mais funes como argumento. Funcionais ocorrem com frequncia na computao. Exemplo: Considere um programa que recebe como parmetro um par constitudo por uma arranjo de A nmeros naturais e um nmero natural n, sendo que o programa calcula o mximo entre A(1), A(2), ..., A(n) considerando o mapeamento A : N N. Ou seja, a funo computada pelo programa dada por: f ( A, n) = max { A(i ) | 1 i n}, onde f : (N N) N N.

CHAPTER 3. MODELOS ABSTRATOS

30

Funcional com mais de um argumento


Considere a funo g ( x )(y) = ( x2 , y x ). A funo g um funcional onde cada natural x dene a funo g ( x ) cujo tipo g : N N2 . Ou seja, uma vez xado o natural x g dene uma funo tal que para cada natural y, associa-se o par de naturais ( x2 , y x ). Logo, o tipo g g : N (N N2 ). Embora o tipo da funo g : N (N N2 ) seja diferente da funo g : N N N N, as duas produzem o mesmo efeito. Para vericar que, de fato, os tipos so diferentes, tem-se que: g : N N N N signica que g (N N) (N N) g : N (N N2 ) signica que g N (N (N N)) Como o produto cartesiano no associativo, tem-se que os tipos de dados so diferentes. Entretanto, fcil vericar que so isomorfos (existe uma bijeo), razo pela qual se arma que, na prtica, produzem os mesmos efeitos.

Linguagem Lambda
Considere a funo f : N N tal que f ( x ) = x3 + 4. importante repara que o que efetivamente est sendo denido no a funo f propriamente dita, mas sim a funo f ( x ), ou seja, o resultado da aplicao de f ao parmetro x. Claramente, f ( x ) = x3 + 4 no uma funo, mas uma equao, pois 3 + 4 f ( x ) = 0. Uma forma de denir funes com mais rigor usando a x Linguagem Lambda. Construes da Linguagem Lambda Abstrao lambda: Permite abstrair a denio de funo. Exemplo: f : N N tal que f ( x ) = x3 + 4 representada por x x3 + 4 (termo lambda), ou seja, pela funo tal que para um argumento x qualquer resulta em x3 + 4. Aplicao lambda: Determina o valor da funo aplicada a um certo parmetro. Exemplo: A funo anterior aplicada ao parmetro 2 denotada pelo termo lambda

(x x3 + 4)(2)
e interpretada como aplicao da funo x x3 + 4 ao valor 2.

CHAPTER 3. MODELOS ABSTRATOS

31

Os termos da Linguagem Lambda sero denotadospor letras maisculas M, N, P, ... Exemplo: M denota x3 + 4, N denota x x3 + 4 e P denota 2. Ento, o termo (x x3 + 4)(2) denotado por (x M)(P) (N)(P). A semmntica de uma aplicao est relacionada com a Regra de Reduo Beta e tal que: (x M)(P)= [P/x]M o que signica a substituio de x por P em M. Exemplo: (x x3 + 4)(2) = [2/x ] x3 + 4 = 23 + 4 = 12 Termo Lambda A Linguagem Lambda constutuda de termos lambda, os quais so denidos por: Sejam X e C conjuntos contveis de variveis e constantes, respectivamente. Ento, o Termo Lambda sobre X e C indutivamente denido por: Toda varivel x X um termo lambda. Toda constante c C um termo lambda. Se M e N so termos lambda e x uma varivel, ento: (MN) um termo lambda. (x M) um termo lambda. Um termo na forma (x M) denominado abstrao lambda. Portanto, um termo lambda no possui qualquer tipo de nomeao. Para nomear um termo usado o sinal de igual. Exemplo: cubo = (x x3 ), onde x varivel e 3 constante. Observaes A Linguagem Lambda inspirou a linguagem de programao LISP. LISP uma linguagem sem tipos, onde programas e dados so indistinguveis. At hoje so discutidas as vantagens e desvantagens de linguagens tipadas e das linguagens no-tipadas, ou seja, se tipos devem constituir um esquema bsico de conhecimento e se entidades devem ser organizadas em subconjuntos com propriedades uniformes a partir de um universo no-tipado. Aps a introduo da linguagem ALGOL - onde as variveis so associadas a tipos quando de suas declaraes, permitindo vericaes sintticas e semnticas de suas instncias no programa em tempo de compilao - foi vericado que tipos tm sido considerados uma facilidade essencial para o desenvolvimento de programas.

CHAPTER 3. MODELOS ABSTRATOS

32

A associao de tipos a um termo lambda como uma denio tradicional de funo. Exemplo: Tipos da funes parciais onde as variveis x e y tm seus valores em N: f ( x ) = x3 + 4, f = x.x3 + 4 : N N. Varivel ligada e varivel livre Uma varivel em um termo lambda denominada varivel ligada se esta dentro do escopo de uma abstrao lambda, caso contrrio denominada varivel livre. Exemplo: No termo x.x k as variveis x e k so ditas ligada e livre, respectivamente. No termo k.x.x k as variveis x e k so ditas ligadas. Substituio de variveis livres Sejam x uma varivel e M, P termos lambda. A substituio de uma varivel livre x por P em M, denotada por [P/x]M, simplesmente a substituio de todas as ocorrncias de x em M pelo termo P. Exemplo: A substituio da varivel livre x por 5 em k.x k [5/x]k.x k = k.5k . Regra de Reduo Beta Sejam x uma carivel e M, P termos lambda. A Regra de Reduo Beta de um termo (x.M )( P) dada pela substituio de x por P em M, ou seja, [P/x]M. Note que x varivel ligada em x.M, mas livre em M, o que garante a coerncia com a denio apresentada. Semntica do termo lambda A semntica do termo lambda dado por uma funo aplicada a um parmetro dada pelas aplicaes sucessivas possveis da Regra de Reduo Beta. Exemplo: A semntica do termo (k.(x.xk)(5))(2) dada pela sucessiva aplicao da regra de reduo beta como segue: k.(x.xk)(5))(2) aplicao da regra de reduo beta em k = [2/k](x.x k )(5) substituio da varivel livre k = (x.x2 )(5) aplicao da regra de reduo beta em x [5/x ]( x2 ) substituio da varivel livre x 52 25