O Cálculo como Linguagem de Programação
description
Transcript of O Cálculo como Linguagem de Programação
O O Cálculo como Cálculo como Linguagem de ProgramaçãoLinguagem de Programação
Rafael Dueire LinsRafael Dueire Lins
Departamento de InformáticaUniversidade Federal de Pernambuco - Recife - Brasil
O O -Cálculo: Sintaxe-Cálculo: Sintaxe
exprexpr :: :: variávelvariável | |
exprexprexprexpraplicaçãoaplicação
| | variávelvariável..exprexprabstraçãoabstração| | constanteconstante
abc = (ab)cabc = (ab)c aplicação é associativa à aplicação é associativa à esquerda esquerda
O O -Cálculo: -Cálculo: Semântica OperacionalSemântica Operacional
Conversão- Conversão-:
Substituição de parâmetros reais por parâmetros formais
(x.t ) s [ s / x ] t A Conversão-
Extensionalidade do sistema
(x.x )
O O -Cálculo-Cálculo Teoremas de Church-RosserTeoremas de Church-Rosser
1.1. Formas normais são Formas normais são únicas. únicas.
(módulo conversão-(módulo conversão-))
2. 2. -reduzir a expressão -reduzir a expressão mais externa e mais mais externa e mais
à esquerdaà esquerda a cada ponto numa sequência a cada ponto numa sequência
de reduções leva a forma normal, de reduções leva a forma normal, se ela se ela
existirexistir..
Operações BooleanasOperações Booleanas
Valores Lógicos
true =
false =
((true)P)Q P
((false)P)Q Q
a b a. . ( )K
a bb. . (( ))KI
Comando Comando If-Then-ElseIf-Then-Else
if CC then PP else Q Q C P QC P Q
Assim:
if truetrue then PP else QQ PP
if falsefalse then PP else Q Q Q Q
Operadores BooleanosOperadores Booleanos
Not = b. if b then falsefalse else truetrue
Or = b. c.if b then truetrue else c
And = b. c.if b then c else falsefalse
LemasLemas
notnot true = false notnot false = true oror true true = false oror true false = true oror false false = false andand true true = true andand true false = false andand false true = false andand false false = false
Numerais de ChurchNumerais de Church
Representação dos Números Números Naturais Naturais em Lambda Calculus
Definições:Definições:• 0 = 0 = f. x.xf. x.x• succ = succ = n. f. x.f ( n f x )n. f. x.f ( n f x )• repita n vezes f em x = repita n vezes f em x = n f xn f x
Sucessor de um NúmeroSucessor de um Número
succ 0 = succ 0 = n. f. x.f( n f x ) 0n. f. x.f( n f x ) 0
f. x.f( 0 f x )f. x.f( 0 f x )
= = f. x.f(( f. x.x) f x )f. x.f(( f. x.x) f x )
f. x.f(( x.x) x )f. x.f(( x.x) x )
f. x.fxf. x.fx
Assim, se ( f. x.fx)( f. x.fx) recebe o valor
de 1:
3 = succ(succ(succ(0)))3 = succ(succ(succ(0)))
Numerais de ChurchNumerais de Church
0 = f. x.x0 = f. x.x
1 = f. x.fx1 = f. x.fx
2 = f. x.f x2 = f. x.f x
......
n = f. x.f xn = f. x.f x
n+1 = f. x.f xn+1 = f. x.f x
2
n+1
Numerais de Church: AdiçãoNumerais de Church: Adição
A adição entre dois Numerais de
Church m e n pode ser feita
computando-se o sucessor de n m
vezes, o combinador da adição seria
representado por:
add add = m. n. = m. n. repitarepita m m vezes vezes succ succ sobresobre n n
AdiçãoAdição
addadd aa bb = ( m. n.m = ( m. n.m succsucc n) n) aa bb
aa succ succ bb
succ succ bb
= = succsucc((succsucc(...((...(succ succ bb)...)))...))......
succsucc((succsucc(...((...(succ succ b+1b+1)...)))...))
succsucc((b + a - 1b + a - 1))
b + ab + a
a
a vezes
(a - 1) vezes
Numerais de Church: MultiplicaçãoNumerais de Church: Multiplicação
A multiplicação entre dois números
m e n pode ser definida como sendo
a adição de n a 0, um número m de
vezes.
mult mult = m. n. = m. n. repitarepita m m vezesvezes add n add n sobresobre 00
MultiplicaçãoMultiplicação
mult mult aa bb = ( m. n.m( = ( m. n.m(addadd n) n) 00 ) ) aa bb
aa ( (add add bb) ) 00
= (= (addadd bb) ) 00
= = addadd bb((addadd bb(...((...(addadd bb 00)...))...)......
addadd bb((addadd bb(...((...(addadd bb + + bb)...))...)
addadd bb(( bb + + bb + + bb ... + ... + bb + + bb))
bb + + bb + + bb ... + ... + bb + + bb = = a * ba * b
a vezes
(a - 1) vezes
(a - 1) vezes
a vezes
a
Numerais de Church: ExponenciaçãoNumerais de Church: Exponenciação
A exponenciação de m pode ser
definida como a multiplicação de m a
1, um número n de vezes.
expexp = m. n. = m. n. repitarepita n n vezesvezes mult m mult m sobresobre 1 1
n
ExponenciaçãoExponenciação
exp exp aa bb = ( m. n.n( = ( m. n.n(multmult m) m) 11) ) aa bb
bb ( (multmult aa) ) 11
((multmult aa) ) 11
= = mult mult aa((mult mult aa(...((...(mult mult aa 11)..))..)......
mult mult aa((aa * * aa * ... * * ... * aa * * aa))
bb
b vezes
(b - 1) vezes
a
Pares OrdenadosPares Ordenados
Um Par Ordenado é uma estrutura
algébrica para a manipulação de
elementos aos pares. De modo que
uma operação realizada sobre um
dado elemento não afete o
comportamento do outro.
<a,b> <a,b> ->-> x.x a b x.x a b
Pares OrdenadosPares Ordenados
Para obtermos cada elemento de um par
ordenado, devemos definir os
combinadores fstfst e sndsnd::
fstfst = = p.p truetrue
snd snd = = p.p falsefalse
Representação:
<<fstfst, , sndsnd>>
Pares OrdenadosPares Ordenados
Função PredecessorFunção Predecessor
predecessor x = x - 1, se x > 0
0 , se x <= 0
Combinador PREDPRED : :
pred = n.snd snd (repitarepita n vezesvezes F sobresobre <00 . . 00>
Onde: F = p. <(fstfst p) + 1, fstfst p>
Numerais de Church: SubtraçãoNumerais de Church: Subtração
Especificada como:
minus a ba b = a - ba - b, se a >= b
= 0, se a < b
Combinador:
minus = m. n.(repitarepita m vezesvezes pred sobresobre n)
FatorialFatorial
O combinador que computa o fatorial
de um numeral de Church pode ser
definido como:
fat = n.fstfst ( repitarepita n vezesvezes F sobresobre <11,11>)
Onde F é:F = p.<(fstfst p)*(sndsnd p),(sndsnd p) + 1>
Operadores RelacionaisOperadores Relacionais
Primeiramente, definamos um
operador chamado IsZeroIsZero
especificado como:
IsZeroIsZero nn = true, se nn = 0
false, se nn > 0
Correspondente a :
IsZeroIsZero = n.n(K false)(true)
Operadores RelacionaisOperadores Relacionais
Analogamente, temos :
NoZeroNoZero nn = true, se nn > 0
false, se n n = 0
Definido como :
NoZeroNoZero = n.n(K true)(false)
Operadores RelacionaisOperadores Relacionais
Maior QueMaior Que
gtgt = n. m.(NoZeroNoZero (minusminus n m))
Maior ou Igual AMaior ou Igual A
gege = n. m.(IsZeroIsZero(minusminus m n))
Operadores RelacionaisOperadores Relacionais
Menor QueMenor Que
ltlt = n. m.(NoZeroNoZero(minusminus m n))
Menor ou Igual AMenor ou Igual A
lele = n. m.(IsZeroIsZero(minusminus n m))
Operadores RelacionaisOperadores Relacionais
Igual AIgual A
Um número nn é igual a outro número
mm quando m - nm - n e n - mn - m são iguais a
zero:
eqeq = n. m.(andand(IsZeroIsZero(minusminus n m)) (IsZeroIsZero(minusminus m n)))
Amanhã:Amanhã:
Recursividade no Recursividade no -Cálculo.-Cálculo.
Introdução a Lógica Combinatorial.Introdução a Lógica Combinatorial.
Máquina de Turner.Máquina de Turner.