Title: Introdu
1Introdução ao ?-calculus
- Prof. Gustavo MottaDepartamento de
Informática/UFPB
2Sumário
- Expressões-? sem variáveis livres
- Combinadores aritméticos, constantes Cia.
3Expressões-? sem variáveis livres
- Expressões-? com variáveis livres são dependentes
do contexto - Sentido (ou valor) depende de suas variáveis
livres - Usar uma expressão-? num certo contexto significa
usá-la como subexpressão em outra expressão - ?x.(y)x usada no contexto ((?x.?y.hole)E)F
- resulta em ((?x.?y.?x.(y)x)E)F ? ?x.(F)x
- Note que a ocorrência livre de y foi capturada
pelo contexto onde a subexpressão foi empregada - Um contexto é uma expressão-? com um ou mais
holes (lacunas)
4Expressões-? sem variáveis livres
- Note a diferença entre usar uma expressão-? E num
contexto C e a substituição de hole por E, com
hole sendo variável livre em C - ((?hole.C)E ? E / holeC
- Nesse caso, as varáveis livres não são capturadas
- Variáveis livres ? variáveis globais
- Variáveis livres numa expressão-? correspondem a
variáveis globais usadas num bloco aninhado ou no
corpo de um procedimento numa linguagem de
programação convencional - Variáveis amarradas correspondem a parâmetros
formais ou a variáveis locais
5Expressões-? sem variáveis livres
- Expressões-? sem variáveis livres são
independentes do contexto - Comportam-se da mesma forma em qualquer contexto
- Similares a símbolos constantes
- A expressão-? ?x.x representa a transformação de
identidade em qualquer contexto - Combinadores
- Definição - Expressões-? sem variáveis livres
são chamadas de expressões-? fechadas ou de
combinadores
6Expressões-? sem variáveis livres
- Usados para combinar funções na formação de
novas funções - Exemplos
- Combinador identidade - I
- I é considerado um símbolo constante (ou palavra
reservada) e não uma variável - Representa uma classe de expressões-?
?-congruentes - Definido como
- I ? ?x.x
7Expressões-? sem variáveis livres
- Exemplos
- Combinador composição - compose
- Define a composição de duas funções f e g
- compose ? ?f.?g.?x.(f)(g)x
- Tratamento de símbolos para combinadores
- (1) Abreviação para expressões-?
- (2) Considerá-los atômicos e introduzir regras de
redução específicas - (I)E ? E
- (((compose)F)G)E ? (F)(G)E
8Expressões-? sem variáveis livres
- Exemplos
- Combinadores booleanos
- true ? ?x.?y.x
- false ? ?x.?y.y
- Regras de redução
- ((true)P)Q ? P
- ((false)P)Q ? Q
- Seleciona uma de duas alternativas
9Expressões-? sem variáveis livres
- Combinadores booleanos
- A expressão condicional
- If C then P else Q
- toma a forma
- ((C)P)Q
- na notação ?, com P e Q denotando expressões-?
arbitrárias e C sendo redutível a ?x.?y.x ou a
?x.?y.y - Representada pelo combinador
- ?c.?p.?q.((c)p)q
- Lembrem-se que o lambda-calculus é livre de tipos
10Combinadores aritméticos, constantes Cia.
- Observações
- Valores verdade e operadores booleanos padrão
podem ser representados por combinadores
específicos - Comportam-se da mesma maneira em diferentes
contextos - Em princípio, não há diferença entre um valor
constante como true ou false e uma função bem
definida como and - De fato, toda função bem definida pode ser
considerada uma entidade constante - Mesmo os valores verdade são representados por
funções - Quase tudo pode ser representado dessa maneira
11Combinadores aritméticos, constantes Cia.
- Representação dos números naturais
- Numerais de Church
- 0 ? ?f.?x.x
- 1 ? ?f.?x.(f)x
- 2 ? ?f.?x.(f)(f)x
- 3 ? ?f.?x.(f)(f)(f)x
- Em geral, o combinador representando o n-ésimo
número realiza n iterações do primeiro argumento
sobre o segundo
12Combinadores aritméticos, constantes Cia.
- Representação dos números naturais
- Operadores aritméticos
- succ ? ?n.?f.?x.(f)((n)f)x
- (?n.?f.?x.(f)((n)f)x)?f.?x.(f)x
- ?f.?x.(f)((?f.?x.(f)x)f)x
- ?f.?x.(f)(?x.(f)x)x
- ?f.?x.(f)(f)x ? 2
- Notem que o nome das variáveis bounded não é
importante
13Combinadores aritméticos, constantes Cia.
- Representação dos números naturais
- Operadores aritméticos
- ? ?m.?n.?f.?x.((m)f)((n)f)x
- ((?m.?n.?f.?x.((m)f)((n)f)x)?f.?x.(f)(f)x)?f.?x.
(f)(f)(f)x - (?n.?f.?x.((?f.?x.(f)(f)x)f)((n)f)x)?f.?x.(f)(f)
(f)x - ?f.?x.((?f.?x.(f)(f)x)f)((?f.?x.(f)(f)(f)x)f)x
- ?f.?x.(?x.(f)(f)x)(?x.(f)(f)(f)x)x
- ?f.?x.(?x.(f)(f)x)(f)(f)(f)x
- ?f.?x.(f)(f)(f)(f)(f)x ? 5
14Combinadores aritméticos, constantes Cia.
- Representação dos números naturais
- Operadores aritméticos
- ? ?m.?n.?f.(m)(n)f
- Teste de zero
- zero ? ?n.((n)(true)false)true
- (?n.((n)(true)false)true)?f.?x.(f)x
- ((?f.?x.(f)x)(true)false)true
- (?x.((true)false)x)true
- ((true)false)true ? false
15Combinadores aritméticos, constantes Cia.
- Representação dos números naturais
- Operadores aritméticos
- A representação da operação predecessor, que
resulta em n 1 para n gt 0 e 0 para n 0 é
engenhosa - Representar pares do tipo n, n 1 na
notação-?, onde um par qualquer a, b é dado
por ?z.((z)a)b - tendo as seguintes propriedades
- (?z.((z)a)b)true ? a
- (?z.((z)a)b)false ? b
16Combinadores aritméticos, constantes Cia.
- Representação dos números naturais
- Operadores aritméticos
- Define-se então a função next, para obter n 1,
n a partir de n, n 1, que corresponde à
seguinte expressão-? - next ? ?p.?z.((z)(succ)(p)true)(p)true
- Aplicando esse operador a partir do par
?z.((z)0)0, temos - ((n)?p.?z.((z)(succ)(p)true)(p)true)?z.((z)0)0
- Agora, para se ter a função predecessor, basta
selecionar o segundo elemento do par ordenado
resultante - pred ? ?n.(((n)?p.?z.((z)(succ)(p)true)(p)true)?z.
((z)0)0)false
17Bibliografia
- Revesz, G. E. Lambda-Calculus, Combinators, and
Functional Programming. Cambridge University
Press, 1988.