Escolar Documentos
Profissional Documentos
Cultura Documentos
Pedro Vasconcelos
13 de Fevereiro de 2014
O que o clculo-?
um modelo computao universal (i.e., equipotente mquina de Turing) Ao contrrio da MT, o clculo- tambm um modelo para linguagens de programao:
mbito de variveis ordem de computao estruturas de dados recurso ...
Bibliograa
Foundations of Functional Programming, notas de um curso de Lawrence C. Paulson, Computer Laboratory, University of Cambrige. Lambda Calculi: a guide for computer scientists, Chris Hankin, Graduate Texts in Computer Science, Oxford University Press.
Plano
Sintaxe
Redues e normalizao
Computao
Plano
Sintaxe
Redues e normalizao
Computao
Termos do clculo-
x , y , z, . . . (x M ) (M N )
Interpretao do clculo-
(x M ) a abstrao de x em M . (M N ) a aplicao de M ao argumento N . Exemplos: (x x ) a funo identidade: a x faz corresponder x (x (y x )) a funo para cada x d uma outra funo que para cada y d x No h distino entre dados e programas; No h constantes (e.g. nmeros). Tudo so -termos!
Convenes de parntesis
As ocorrncias de x em (x M ) dizem-se ligadas pela abstraco. Uma ocorrncia que no ligada diz-se livre. (z (x (y x ))) x ligada, y livre
Uma varivel pode ocorrer livre e ligada no mesmo termo. ((x x ) (y x )) x ligada, x livre
BV (M ) o conjunto de variveis com ocorrncias ligadas em M (bound variables); FV (M ) o conjunto das variveis com ocorrncias livres em M (free variables). BV (z (x (y x ))) = {x , z } FV (z (x (y x ))) = {y } BV ((x x ) (y x )) = {x , y } FV ((x x ) (y x )) = {x } Denidas por recurso sobre o termo (ver a bibliograa).
Substituio
M [N /x ] o termo resultante da substituio de ocorrncias livres de x em M por N . (x y )[(z z )/y ] (x (z z )) (x y )[(z z )/x ] (x y ) Nota: apenas substitui ocorrncias livres de x .
Converso-
(x M ) (y M [y /x ]) Exemplos:
se y / BV (M ) FV (M )
x . xy z . xy [z /x ] z . zy x . xy y . xy [y /x ] y . yy porque y FV (xy )
Equivalncia-
Consideramos M Exemplo:
N se M N . x . xy z . zy
Mais geralmente: M N se M M0 M1 M2 Mk N
com k 0.
Equivalncia-
Consideramos M Exemplo:
N se M N . x . xy z . zy
Mais geralmente: M N se M M0 M1 M2 Mk N
com k 0.
Plano
Sintaxe
Redues e normalizao
Computao
Converso-
((x M ) N ) M [N /x ] Exemplo:
se BV (M ) FV (N ) =
Converso-
((x M ) N ) M [N /x ] Exemplo:
se BV (M ) FV (N ) =
Captura de variveis
A condio BV (M ) FV (N ) = necessria para evitar captura de variveis:
M N
((x (y x )) y ) (y x )[y /x ] ( y y )
y BV (M ) FV (N ) =
Captura de variveis
A condio BV (M ) FV (N ) = necessria para evitar captura de variveis:
M N
((x (y x )) y ) (y x )[y /x ] ( y y )
y BV (M ) FV (N ) =
Converso-
Apenas necessria para garantir a unicidade da forma normal (mais frente) No necessria para a implementao de linguagens funcionais
Currying
No necessitamos de abstraes de duas ou mais variveis: xy . M (x (y M ))
Redues
Escrevemos M N se M reduz num passo a N usando converses ou . Escrevemos M N para a reduo em mltiplos passos ( ).
Igualdade
Escremos M = N se M se pode converter em N por zero ou mais redues ou expanses; ou seja, a relao ( 1 ) . Exemplo: a((y . by )c ) = (x . ax )(bc ) porque a((y . by )c ) a(bc ) (x . ax )(bc )
Forma normal
Se no existir N tal que M N , ento M est em formal normal. M admite forma normal N se M normal. Exemplo: (x . a x ) ((y . by ) c ) a((y . by ) c ) a(bc ) Logo: (x . a x ) ((y . by ) c ) admite forma normal a(bc ). Analogia: resultado de uma computao. N e N est em forma
Nem todos os termos admitem forma normal: ((x . x x ) (x . x x )) (x x )[(x . x x )/x ] ((x . x x ) (x . x x )) Logo:
Conuncia
Podemos efectuar redues por ordens diferentes. Exemplo: (x . a x ) ((y . by ) c ) a((y . by ) c ) a(bc ) (x . a x ) ((y . by ) c ) (x . a x ) (bc ) a(bc )
P: Ser que chegamos sempre mesma forma normal? R: Sim (Teorema de Church-Rosser)
Conuncia
Podemos efectuar redues por ordens diferentes. Exemplo: (x . a x ) ((y . by ) c ) a((y . by ) c ) a(bc ) (x . a x ) ((y . by ) c ) (x . a x ) (bc ) a(bc )
P: Ser que chegamos sempre mesma forma normal? R: Sim (Teorema de Church-Rosser)
Conuncia
Teorema (Church-Rosser)
Se M = N ento existe L tal que M LeN L.
Diamond property
Se M1
| } || }|
MC C
CC !!
M1 A
AA A
~ ~ ~~ ~~
M2 .
Conuncia
Teorema (Church-Rosser)
Se M = N ento existe L tal que M LeN L.
Diamond property
Se M1
| } || }|
MC C
CC !!
M1 A
AA A
~ ~ ~~ ~~
M2 .
Estratgias de reduo
Como reduzir (M N )
P?
ordem normal: reduzir M e substituir N sem reduzir. 1 M ( x M ) 2 M [N /x ] P ordem aplicativa: reduzir M e N antes de fazer a substituio da varivel. 1 M ( x M ) 2 N N 3 M [N /x ] P
Se a reduo por ambas as estratgias termina, ento chegam mesma forma normal Se um termo admite forma normal, esta pode sempre obtida pela reduo em ordem normal A reduo em ordem aplicativa pode no terminar mesmo quando existe forma normal A reduo em ordem normal pode reduzir o mesmo termo vrias vezes
Supondo mult um termo tal que mult N M N M para codicaes N , M de nmeros naturais (veremos como mais frente). Denindo sqr x . mult x x vamos reduzir sqr (sqr N )
Plano
Sintaxe
Redues e normalizao
Computao
O clculo- um modelo de computao universal: qualquer funo recursiva (computvel por uma mquina de Turing) pode ser codicada no clculo-.
Estruturas de dados como boleanos, inteiros, listas, etc. no so primitivas do clculo-. Esta omisso no fundamental: estas estruturas podem ser denidas usando apenas o clculo puro. Contudo: implementaes de linguagens funcionais usam representaes optimizadas por razes de ecincia.
Valores boleanos
Pares ordenados
Um constructor e dois selectores: pair xyf . fxy fst p. p true snd p. p false Temos ento: fst (pair M N ) fst (f . f M N ) (f . f M N ) true true M N M Analogamente: snd (pair M N ) N.
Operaes aritmticas
succ nfx . f (n f x ) iszero n. n (x . false) true add mnfx . m f (n f x ) Vericar: succ n iszero 0 iszero (n + 1) add n m n+1 true false n+m
Listas
[x1 , x2 , . . . , xn ]
Dois constructores, teste da lista vazia e dois selectores: nil z . z cons xy . pair false (pair x y ) null fst hd z . fst (snd z ) tl z . snd (snd z )
Listas
Vericar: null nil null (cons M N ) hd (cons M N ) tl (cons M N ) true false M N (1) (2) (3) (4)
NB: (2), (3), (4) resultam das propriedades de pares, mas (1) no.
Declaraes
let x = M in N
Denimos: let x = M in N (x . N ) M
Ento: let x = M in N N [M /x ]
Declaraes embricadas
Declaraes recursivas
Tentativa: let f = x . if (iszero x ) 1 (mult x (f (sub x 1))) in f 5 Traduo: (f . f 5) (x . if (iszero x ) 1 (mult x (f (sub x 1)))) No dene uma funo recursiva porque f ocorre livre no corpo da denio.
Declaraes recursivas
Tentativa: let f = x . if (iszero x ) 1 (mult x (f (sub x 1))) in f 5 Traduo: (f . f 5) (x . if (iszero x ) 1 (mult x (f (sub x 1)))) No dene uma funo recursiva porque f ocorre livre no corpo da denio.
Soluo: usar um combinador ponto-xo i.e. um termo Y tal que Y F = F (Y F ) para qualquer termo F
Denimos o factorial recursivo como: let f = Y (g x . if (iszero x ) 1 (mult x (g (sub x 1)))) in f 5 Note que g ocorre ligada no corpo da funo.
if (iszero 5) 1 (mult 5 (fact (sub 5 1))) if false 1 (mult 5 (fact 4)) mult 5 (fact 4) mult 5 (mult 4 (. . . (mult 1 1) . . .)) 120
Combinadores ponto-xo
Y pode ser denido no clculo- puro (Haskell B. Curry): Y f . (x . f (x x )) (x . f (x x )) Vericao: Y F (x . F (xx )) (x . F (xx )) F ((x . F (xx )) (x . F (xx ))) F (Y F ) Logo Y F = F (Y F )