
Introdução ao -calculus
Prof. Gustavo Motta
Departamento de Informática/UFPB
04
(c) 2007 Gustavo Motta
1
-calculus
Sumário
 Definições recursivas e o combinador Y
04
(c) 2007 Gustavo Motta
2
-calculus
Definições recursivas e o
combinador Y
 Definições recursivas


Definição fácil em linguagens de alto nível
Devem ser definíveis no -calculus


Solução formal para equações recursivas
Combinador Y
(Y)E  (E)(Y)E
 para toda expressão- E. Isso implica que
(Y)E  (E)(E)...(E)(Y)E
 para um número qualquer de iterações em E

Questão
 Existe uma expressão- fechada com essa propriedade?
04
(c) 2007 Gustavo Motta
3
-calculus
Definições recursivas e o
combinador Y
 Resposta



04
Sim. A partir da expressão-
(x.(x)x)x.(x)x
que se reduz para ela mesma, ad infinitum,
acrescentamos um prefixo da forma (E)
y.(x.(y)(x)x)x.(y)(x)x
e então
(y.(x.(y)(x)x)x.(y)(x)x)E  (x.(E)(x)x)x.(E)(x)x
que se reduz para
(E)(x.(E)(x)x)x.(E)(x)x
(c) 2007 Gustavo Motta
4
-calculus
Definições recursivas e o
combinador Y
 Logo

O combinador Y é definidor por
Y  y.(x.(y)(x)x)x.(y)(x)x

É uma função de alta ordem que computa o
ponto fixo de outras funções

Usado para encontrar solução para definições
recursivas da forma
f = (E)f

04
com f não ocorrendo livre em E
(c) 2007 Gustavo Motta
5
-calculus
Definições recursivas e o
combinador Y

A solução desta equação
f = (E)f
é o ponto fixo da função de alta ordem E e pode
ser obtida substituindo-se f por (Y)E, obtendo
(Y)E = (E)(Y)E
e essa equação é verdadeira para todo E pela
definição de Y

04
Y passa a ser um achador universal de pontos
fixos, denominado de combinador de ponto fixo
(c) 2007 Gustavo Motta
6
-calculus
Definições recursivas e o
combinador Y
 Exemplo – solução para função fatorial
(fact)n = if n = 0 then 1 else ((*)n)(fact)(pred)n
em notação-
(fact)n = (((zero)n)1)((*)n)(fact)(pred)n
que é equivalente a
fact = n.(((zero)n)1)((*)n)(fact)(pred)n
Agora, abstraindo a ocorrência livre de ‘fact’
fact = (f.n.(((zero)n)1)((*)n)(f)(pred)n)fact
Temos que fact é o ponto fixo da expressão
f.n.(((zero)n)1)((*)n)(f)(pred)n
04
(c) 2007 Gustavo Motta
7
-calculus
Definições recursivas e o
combinador Y
 Exemplo – solução para função fatorial
Logo, a função fatorial é definida pelo combinador
fact = (Y)f.n.(((zero)n)1)((*)n)(f)(pred)n
 Técnica aplicável a toda definição recursiva
 Independe da forma da expressão do lado direito
 O -cálculo possui uma técnica universal de
remoção de recursividade

Aplicável até quando não há solução realística
x=x+1
aplicando-se a técnica, tem-se
x = (Y)x.((+)x)1, que redunda num número infinito de
04
reduções, por não
forma
(c) 2007ter
Gustavo
Motta normal
8
-calculus
Definições recursivas e o
combinador Y
Exemplo – aplicação da função fatorial
((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)5
((f.n.(((zero)n)1)((*)n)(f)(pred)n)(Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)5
(n.(((zero)n)1)((*)n)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)n)5
(((zero)5)1)((*)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)5
(((zero)5)1)((*)5)((f.n.(((zero)n)1)((*)n)(f)(pred)n)(Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)5
(((zero)5)1)((*)5)(n.(((zero)n)1)((*)n)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)n)(pred)5
(((zero)5)1)((*)5)(((zero)(pred)5)1)((*)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)5
((false)1)((*)5)((false)1)((*)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)5
((*)5)((*)(pred)5)((f.n.(((zero)n)1)((*)n)(f)(pred)n)(Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)5
((*)5)((*)(pred)5)(n.(((zero)n)1)((*)n)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)n)(pred)(pred)5
((*)5)((*)(pred)5)(((zero)(pred)(pred)5)1)((*)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(
pred)(pred)5
((*)5)((*)(pred)5)((false)1)((*)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)5
04
(c) 2007 Gustavo Motta
((*)5)((*)(pred)5)((*)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)5
9
-calculus
Definições recursivas e o
combinador Y
Exemplo – aplicação da função fatorial
((*)5)((*)(pred)5)((*)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((f.n.(((zero)n)1)((*)n)(f)(pred)n)(Y)f.n.(((zero)n)1)((*)n)(f)(pred
)n)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)(n.(((zero)n)1)((*)n)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)n)(p
red)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)(((zero)(pred)(pred)(pred)5)1)((*)(pred)(pred)(pred)5)((Y)f.n.(((z
ero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((false)1)((*)(pred)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred
)n)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)
(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((f.n.(((zero)n)1)((*)n)(f)(pred)n)(Y)f.n.
(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)(n.(((zero)n)1)((*)n)((Y)f.n.(((zero)n)1)((
*)n)(f)(pred)n)(pred)n)(pred)(pred)(pred)(pred)5
10
04
(c) 2007 Gustavo Motta
-calculus
Definições recursivas e o
combinador Y
Exemplo – aplicação da função fatorial
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)(((zero)(pred)(pred)(pred)(pred)5)1)((*)
(pred)(pred)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((false)1)((*)(pred)(pred)(pred)(pred)5)((Y)
f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((*)(pred)(pred)(pred)(pred)5)((Y)f.n.(((z
ero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((*)(pred)(pred)(pred)(pred)5)((f.n.(((zer
o)n)1)((*)n)(f)(pred)n)(Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((*)(pred)(pred)(pred)(pred)5)(n.(((zero)n)
1)((*)n)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)n)(pred)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((*)(pred)(pred)(pred)(pred)5)(((zero)(pred
)(pred)(pred)(pred)(pred)5)1)((*)(pred)(pred)(pred)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n
)(pred) (pred)(pred)(pred)(pred)(pred)5
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((*)(pred)(pred)(pred)(pred)5)((true)1)((*)(
pred)(pred)(pred)(pred)(pred)5)((Y)f.n.(((zero)n)1)((*)n)(f)(pred)n)(pred)
11
04
(c) 2007 Gustavo Motta
(pred)(pred)(pred)(pred)(pred)5
-calculus
Definições recursivas e o
combinador Y
Exemplo – aplicação da função fatorial
((*)5)((*)(pred)5)((*)(pred)(pred)5)((*)(pred)(pred)(pred)5)((*)(pred)(pred)(pred)(pred)5)1
((*)5)((*)4)((*)(pred)4)((*)(pred)(pred)4)((*)(pred)(pred)(pred)4)1
((*)5)((*)4)((*)3)((*)(pred)3)((*)(pred)(pred)3)1
((*)5)((*)4)((*)3)((*)2)((*)(pred)2)1
((*)5)((*)4)((*)3)((*)2)((*)1)1
((*)5)((*)4)((*)3)((*)2)1
((*)5)((*)4)((*)3)2
((*)5)((*)4)6
((*)5)24
120
04
(c) 2007 Gustavo Motta
12
-calculus
Definições recursivas e o
combinador Y
 O combinador Y converte toda recursividade em
iteração, mas não é capaz por si mesmo de terminar
a sucessão de iterações
 Paradoxo de Curry


As propriedades lógicas usuais do operador 
(implica) são inconsistentes com a igualdade-
Prova
O operador deve satisfazer o axioma
(P  (P  Q))  (P  Q)
e a regra de inferência modus ponens
04
se ambos P e (P  Q) são verdadeiros, então Q também
é
13
(c) 2007 Gustavo Motta
-calculus
Definições recursivas e o
combinador Y
 Paradoxo de Curry
 Considere que imp denota a versão curried de 

O axioma anterior pode ser escrito como
((imp)((imp)P)((imp)P)Q)((imp)P)Q
Para um Q arbitrário, pode-se definir N como
N = x.((imp)x)((imp)x)Q
sendo
P = (Y)N
o ponto fixo de N. Então, obtém-se
((imp)P)((imp)P)Q = (N)P = (N)(Y)N = P
04
(c) 2007 Gustavo Motta
14
-calculus
Definições recursivas e o
combinador Y
 Paradoxo de Curry
Pela substituição no axioma, tem-se
((imp)((imp)P)((imp)P)Q)((imp)P)Q =
((imp)P)((imp)P)Q = P
Agora, como o axioma deve ser verdadeiro para
quaisquer P e Q
P = (Y)N = true
deve ser o caso para qualquer Q, usado em N
Mas, a partir do modus ponens e do axioma, podese concluir que
Q = true
04
para um Q arbitrário, o que é um paradoxo
(c) 2007 Gustavo Motta
15
-calculus
Definições recursivas e o
combinador Y
 Observações

A aplicabilidade universal do combinador Y não
oferece solução prática para toda equação de
ponto fixo
x = 3x – 10
que é
x = ((–)((*)3)x)10
então, podemos obter
x = (x.((–)((*)3)x)10)x
e a forma explícita
x = (Y)x.((–)((*)3)x)10
04
(c) 2007 Gustavo Motta
16
-calculus
Definições recursivas e o
combinador Y
 Observações
O lado esquerdo da equação
x = (Y)x.((–)((*)3)x)10
reduz para
(x.((–)((*)3)x)10)(Y)x.((–)((*)3)x)10
que reduz para
((–)((*)3)(Y)x.((–)((*)3)x)10)10

04
e assim indefinidamente ...
O lado direito não tem forma normal, logo não se
pode obter um resultado finito desse
desenvolvimento infinito
(c) 2007 Gustavo Motta
17
-calculus
Definições recursivas e o
combinador Y
 Observações

Entretanto, numa recursividade bem fundada, a
iteração gerada pelo combinador Y terminará
precisamente no momento certo


04
É o caso da forma explícita da função fatorial, graças
as presenças da segunda abstração, com prefixo n.,
e do predicado zero
Infelizmente, não é decidível, em geral, se uma
definição recursiva é computável num número
finito de passos (i. e., tem uma forma normal),
quando aplicada a um certo argumento
(c) 2007 Gustavo Motta
18
-calculus
Definições recursivas e o
combinador Y

Existem outros combinadores de ponto fixo, além
do combinador Y, como
T  (x.y.(y)((x)x)y)x.y.(y)((x)x)y
proposto por Turing. É fácil observar que
(T)E  (E)(T)E
para toda expressão- E. De fato, existe uma
seqüência infinita de combinadores de ponto fixo
Y1  Y
Y2  (Y)G, em geral, Yn + 1  (Yn)G
04
onde
G  x.y.(y)(x)y
(c) 2007 Gustavo Motta
19
-calculus
Bibliografia

04
Revesz, G. E. Lambda-Calculus, Combinators, and
Functional Programming. Cambridge University
Press, 1988.
(c) 2007 Gustavo Motta
20
Download

pred - Departamento de Informática — UFPB