O Cálculo como Linguagem de Programação

28
O O Cálculo como Cálculo como Linguagem de Linguagem de Programação Programação Rafael Dueire Lins Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco - Recife - Brasil

description

O  Cálculo como Linguagem de Programação. Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco - Recife - Brasil. O  -Cálculo: Sintaxe. < expr  ::   variável  |  expr  expr  aplicação - PowerPoint PPT Presentation

Transcript of O Cálculo como Linguagem de Programação

Page 1: 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

Page 2: O   Cálculo como   Linguagem de Programação

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

Page 3: O   Cálculo como   Linguagem de Programação

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 )

Page 4: O   Cálculo como   Linguagem de Programação

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..

Page 5: O   Cálculo como   Linguagem de Programação

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

Page 6: O   Cálculo como   Linguagem de Programação

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

Page 7: O   Cálculo como   Linguagem de Programação

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

Page 8: O   Cálculo como   Linguagem de Programação

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

Page 9: O   Cálculo como   Linguagem de Programação

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

Page 10: O   Cálculo como   Linguagem de Programação

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)))

Page 11: O   Cálculo como   Linguagem de Programação

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

Page 12: O   Cálculo como   Linguagem de Programação

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

Page 13: O   Cálculo como   Linguagem de Programação

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

Page 14: O   Cálculo como   Linguagem de Programação

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

Page 15: O   Cálculo como   Linguagem de Programação

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

Page 16: O   Cálculo como   Linguagem de Programação

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

Page 17: O   Cálculo como   Linguagem de Programação

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

Page 18: O   Cálculo como   Linguagem de Programação

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

Page 19: O   Cálculo como   Linguagem de Programação

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>>

Page 20: O   Cálculo como   Linguagem de Programação

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>

Page 21: O   Cálculo como   Linguagem de Programação

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)

Page 22: O   Cálculo como   Linguagem de Programação

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>

Page 23: O   Cálculo como   Linguagem de Programação

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)

Page 24: O   Cálculo como   Linguagem de Programação

Operadores RelacionaisOperadores Relacionais

Analogamente, temos :

NoZeroNoZero nn = true, se nn > 0

false, se n n = 0

Definido como :

NoZeroNoZero = n.n(K true)(false)

Page 25: O   Cálculo como   Linguagem de Programação

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))

Page 26: O   Cálculo como   Linguagem de Programação

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))

Page 27: O   Cálculo como   Linguagem de Programação

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)))

Page 28: O   Cálculo como   Linguagem de Programação

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.