Anda di halaman 1dari 19

11/11/2015

CalculoLambda

Voltar

ClculoLambda

Histrico
LinguagensFuncionais
UtilidadedoClculoLambdaemProgramaoFuncional
FundamentosTericos
ASintaxedoClculoLambda
ImplementaodeumProgramaLambda
ASemnticaOperacionaldoClculoLambda
OrdemdeReduo
FunesRecursivas

1.

Histrico:

A elaborao de modelos de computao (resoluo de


problemas por uma mquina) baseiase em trabalhos de dois
pesquisadorescomenfoquesbastantediferentes:

MquinasdeTuring(AlanTuring,1936)
ClculoLambda(AlonzoChurch,1936)

Alan Turing provou em 1937 a equivalncia entre uma


Mquina de Turing e o Clculo Lambda em termos de
computabilidade.

LinguagensFuncionais:

Interessantespelasuasimplicidadesinttica
Facilidadededescreverproblemasrecursivos.

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

1/19

11/11/2015

CalculoLambda

Facilidadededescreverproblemasrecursivos.
Maioria das implementaes so poucos aceitas devido
ineficincia em comparao com linguagens de programao
''tradicionais".
Novas implementaes de interpretadores/compiladores e
novaslinguagensmaismodernastemressurgido.

Exemplos:

LISP (LISt Processing dcada de 60). Muito simples em


muitosaspectos.Atuamenteaindaamaisutilizada.
Miranda(Turner1985)
Haskell(1990)
Orwell(Wadler1985)
Outras:ML,KRC,LML,SASL.

topo

UtilidadedoClculoLambdaemProgramaoFuncional:

Ponto de Partida: Maioria da Linguagens de Programao


Funcional so semelhantes e diferem somente em aspectos
sintticos.

topo

2.
FundamentosTericos

Oclculolambdaumacoleodediversossistemasformais
baseados em uma notao para funes inventada por Alonzo
Church em 1936 com o intuito de capturar os aspectos mais
bsicos da maneira pela qual operadores ou funes podem ser
combinadosparaformaroutrosoperadores.

O clculo lambda serve como uma ponte entre linguagens


funcionais de alto nvel e suas implementavis de baixo nvel.
Razes para a apresentao do clculo lambda como uma
linguagem intermediria: uma linguagem extremamente simples,
consistindodesomentealgumaspoucasconstruessintticasede
umasemnticasimples.

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm
Uma implementao do clculo lambda necessita somente2/19

CalculoLambda

Uma implementao do clculo lambda necessita somente


suportaralgumasconstruessimples.

A sua semntica simples nos permite analisar facilmente a


correodesuaimplementao.

Tratasedeumalinguagemexpressiva,aqualsuficientemente
poderosa para expressar todos os programas funcionais e, por
conseguinte, todas as funes computveis. Isto significa que, se
uma boa implementao do clculo lambda disponvel, podese
implementar qualquer linguagem funcional atravs da
implementaodeumcompiladordestaparaoclculolambda.

2.1.ASintaxedoClculoLambda

A linguagem do clculo lambda usa um alfabeto Sconstitudo


de:

umconjuntodevariveis:vo,v1,v2,....vn....
abstratorl(lambda)
agrupadores(,)

Ao conjunto de cadeias finitas sobre S denotase por S* e a


cadeia que no contem elementos denotase por e. Usamse as
variveisx,y,z,...paradenotarcadeiasdeS*.

Definico(Equivalnciadeduascadeias)
Duascadeiasxeysoequivalenteseseescreve(x,y)x
=y

Definico(Comprimentodeumacadeia)
umafuno:
ln:S*Z+
em que o nmero inteiro exprime o nmero de elementos da
cadeia.

Definico(TermoLambda)

11/11/2015

Um termo lambda, denotado pelas letras M, N, O, P,.. um3/19

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

11/11/2015

CalculoLambda

Um termo lambda, denotado pelas letras M, N, O, P,.. um


elementodalinguagemL,ondeS*Ldefinidodaseguinteforma:

vitermolambda
dadoM,(lviM)termolambda
dadosdoistermoslambdaM,Nento(MN)termo
lambda
enadamaistermolambda.

Exemplos:

Verificarquaisdasexpressessotermoslambda.

vo(vov1)(vo)
(lvo(vov1))(lv1(vo(lv1(vov1))))(lvo(vov1)

Estanotaoprecisa,masbastantepesada.Algumasvezes,
convenienteintroduzirmaisalgumasconvenescomafinalidade
desimplificaranotao.Soquatroasprincipaisconvenes:

1Precednciaesquerda.
Assim,((MN)L)podeserescritaMNL

2Sucessodeabstratores:
(lx(ly(lz........)))seescrevelxyz...

3Separador:usaseumpontoparadesignarofinaldeumalista
deargumentoslambda
Assimlx.xly.y=(lx(x(ly.y)))

4Supesequeletrasdiferentesdesignamentidadesdiferentes.
Assimxyemlx.y

ExemploConcreto

Umexemplosimplesdeumaexpressoemclculolambda:
(+45)

topo

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

4/19

11/11/2015

CalculoLambda

2.2ImplementaodeumProgramaLambda

Um programa Lambda se escreve como um conjunto de


expresses lambda. Normalmente, usando notao simplificada
encontrase o smbolo lambda seguido de lista de variveis.
Limitandoestasvariveisvemumponto".'',seguidopelocorpoda
funo.Asvariveissochamadasdeparmetrosformaisedizse
queolambdaosliga.Assim,seja:

lx.(x+1)

Oexemploacimapodeserlido:''Aquela()funode(x)aqual
(.) adiciona x a 1. Algumas vezes costumase usar operadores
sempreprefixados,enestecasoseescreveria(+x1).Paracalcular
ovalordafunoparax=5seescreve:

lx.(x+1).5

Uma abstrao lambda sempre consiste dessas partes: o l, o


parmetro formal, e o corpo. Uma abstrao lambda pode ser
consideradasimilaraumadefiniodefunoemumalinguagem
deprogramao.convencional,como''C":

inc(x)
intx
(return(x+1))

FunesEmbutidaseConstantes

Funes embutidas como + no existem no clculo lambdana


sua forma mais pura. Para fins prticos, uma extenso que as
suportetil.Estasincluemfunesaritmticas(como+,,*,/),
constantes (como 0, 1,...), funes lgicas (como AND, NOT,
OR,...)econstanteslgicas(TRUE,FALSE).

Exemplos:

54>1

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

5/19

11/11/2015

CalculoLambda

54>1
ANDTRUEFALSE>FALSE

Tambm inclumos uma funo condicional, cujo valor


descritopelasregrasdereduoabaixo:
IFTRUEEtEf>Et
IFFALSEEtEf>Ef

Construtores de dados em clculo lambda sero introduzidos


inicialmente atravs da definio de trs funes embutidas:
CONS,HEADeTAIL(asquaissecomportamexatamentecomo
asfunesLISP:CONS,CAReCDR).
CONS constri um objeto composto, o qual pode ser
desmantelado com HEAD e TAIL. A operao descrita pelas
seguintesregrasdereduo:

HEAD(CONSab)>a
TAIL(CONSab)>b

Almdessasfunes,defineseaconstanteNIL,ovalornulo.
Aescolhaexatadefunesembutidasarbitrria.

AbstraesLambda

Abstraes lambda so construes em clculo lambda que


denotamfunesnovas,noembutidasemumclculoespecfico.

Exemplo:
(lx.+x1)

O l indica o incio de uma funo e imediatamente seguido de uma


varivel.

Aexpresso(+3)denotaa"funo+aplicadaaoargumento3",
cujoresultadouma''funoaplicadaaovalor4".
Como em todas as linguagens funcionais, o clculo lambda
permitequeumafunoretorneumafunocomoresultado.
Este dispositivo nos permite imaginar todas as funes como
possuindosomenteumargumento.
Esta notao foi introduzida por Schonfinkel em 1924 e
utilizada amplamente nos trabalhos de Curry, de onde provm a6/19

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

11/11/2015

CalculoLambda

utilizada amplamente nos trabalhos de Curry, de onde provm a


expressocurrying.

Todasasaplicaesdefunesnoclculolambdasoescritas
emnotaoprefixada.Assimafuno+precedeosargumentos4
e5.Umexemploumpoucomaiscomplexo:

(+(*56)(*83))

Dopontodevistadeimplementao,umprogramafuncional
podeservistocomoumaexpresso,que"executada''atravsda
sua avaliao. A avaliao ocorre atravs da seleo repetida de
uma expresso redutvel (redex) (abreviao do termo em ingls
reducedexpression'edesuareduo.
Expresso redutvel aquela que pode ser avaliada
imediatamente.Noexemploanteriorexistemdoisredexes:

(*56)e(*83)

Aexpressointeira(+(*56)(*83))noumredex,umavez
que a funo + necessita ser aplicada a dois nmeros para poder
serredutvel.Atravsdaescolhaarbitrriadoprimeiroredexpara
reduoescrevese:

(+(*56)(*83))>(+30(*83))

onde>lese"reduzpara''.
.Agorahsomenteumredex(*83),doqualresulta:(+3024)
.Estareduogeraumnovoredex,quereduz:(+3024)>54

topo

2.3.ASemnticaOperacionaldoClculoLambda

Atagorafoidescritaasintaxedoclculol.Parachamlode
"clculo'', devemos, porm dizer como "calcular'' com ele.
Basicamente isto realizado atravs de trs regras de converso,
quedescrevemcomoconverterumaexpressolemoutra.

2.3.1. Introduo a lconverso: Variveis atadas e livres


(bound/free)

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

7/19

11/11/2015

CalculoLambda

(bound/free)

Sejaaexpressol:
(lx.+xy)4
Paraavaliaraexpressonecessrio:

saberovalor"global''dey.
nonecessriosaberovalorglobaldex,poisoparmetro
formaldafuno.
Vseque:xeypossuemumstatusbastantediferente.
A razo que x ocorre atado pelo lx, somente um encaixe
dentrodoqualoargumento4colocadoquandoaabstraolfor
aplicadaaoargumento.Poroutrolado,ynoatadopornenhume
assim ocorre livre na expresso. A ocorrncia de uma varivel
atada se h uma expressol envolvente que a amarra, seno
livre. No exemplo a seguir, x e y ocorrem atados, z, porm,
ocorrelivre:
lx.+((ly.+yz)7)x
Observe que os termos atado e livre se referem a ocorrncias
especficasdavarivelemumaexpresso.

Resumindoanomenclatura:
Umaaplicaolsimplesmenteaaplicaodeumaexpressol
sobre outra. A primeira dessas duas expressesl chamada de
operador,asegundadeoperando.Notequequalquerexpressol
pode ser utilizada tanto como operador como operando. Uma
abstraol formada com o smbolo especial seguido por uma
varivel, seguida por um ponto, seguido por uma expresso
arbitrria. . O propsito da operao de abstrao o de formar
umaexpressounriaapartirdeumaexpressoldada.Avarivel
que ocorre prxima ao inicial do nome ao argumento. Funes
commaisdeumargumentosoformadasporabstraesrepetidas.

2.3.2.ConversoAlfa
Considere:
(lx.+x1)e(ly.+y1)
http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm
Evidentementeelasdevemserequivalentes.Aconversoao8/19

11/11/2015

CalculoLambda

Evidentementeelasdevemserequivalentes.Aconversoao
nome dado operao de mudana de nome (consistente) de um
parmetroformal.
Notao:
(lx.+x1)a(ly.+y1)
acongruncia:duasexpresseslMeNsoacongruentes(ou
aequivalentes),denotadoporMNseouM=NouM>N,ouN
obtido de M atravs da reposio de uma subexpresso S de M
porumaexpressolTtalqueS>T,ouexistealgumaexpressol
RtalqueM>ReR>N.

Nomenclatura:

Nomesdeparmetrosformaispodemnosernicos:
(x.(x.+(x1))x3)9(x.+(x1))93
+(91)3
11

Observese que o x interno no foi substitudo na primeira


reduo, pois estava protegido pelo x envolvente, ou seja, a
ocorrnciainternadexnolivrenocorpodaabstraoxexterna.
Dada uma abstraol, (lx.E), possvel identificarse
exatamente as ocorrncias de x que deveriam ser substitudas
atravs da identificao de todas as ocorrncias de x que esto
livres. Dessa forma, para o exemplo acima, examinamos o corpo
daabstrao:
(x.+(x1))x3
e vemos que a segunda ocorrncia de x livre, podendo ser
substituda. A idia do aninhamento do escopo de variveis em
umalinguagemdeprogramaoestruturadaanlogaaestaregra.
Outroexemplo:

(lx.y.+x((x.x3)y))56
(ly.+5((x.x3)y))6
+5((x.x3)6)
+5(63)
8
http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm
9/19

11/11/2015

CalculoLambda

Novamente, o x mais interno no substitudo, uma vez que


nolivrenocorpodaabstraomaisexterna.

Nessecasonohocorrnciasdoparmetroformal(x),pelo
qualoargumento5poderiasersubstitudo.Assimoargumento
descartado sem uso. O corpo de uma abstrao poder ser
constitudoporoutraabstrao:

(lx.(ly.yx))45
(ly.y4)5
54
1

Observase que, ao se construir a instncia do corpo da


abstraox,ocorpointeiroinclusiveaabstraoyenvolvidapor
esta,substituindosex,copiado.Aquiseobservatambmoefeito
do Currying: a aplicao da abstrao x retornou uma funo (a
abstrao y) como seu resultado. Esta por sua vez, aplicada
resultouem(54).Funesencapsuladasumasdentrodasoutras
socomumenteabreviadas:
(lx.(ly.E))para(lx.y.E)

2.3.3.ConversoBeta

Uma abstraob denota uma funo. Assim necessitamos


descrevercomoapliclaaumargumento.
Afuno(lx.+x1)4ajustaposiodofuno(lx.+x1)edo
argumento 4 e, por conseguinte, denota a aplicao de uma certa
funo,denotadapelaabstraol,aoargumento4.
Aregraparaaaplicaodeumafunomuitosimples:

O resultado da aplicao de uma abstraol a um


argumento uma instncia do corpo da abstraol no qual
ocorrncias (livres) do parmetro formal no corpo so repostas
pelo argumento. O resultado de se aplicar a abstrao ao
argumento:+41ondeo(+41)uminstnciadocorpo(+x1)
http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm
no qual ocorrncias do parmetro formal x foram repostas pelo10/19

11/11/2015

CalculoLambda

no qual ocorrncias do parmetro formal x foram repostas pelo


argumento4.Escreveseasconversesutilizandoosmbolocomo
antes:
(lx.+x1)4
+41
5
Esta operao chamada de breduo e a sua implementao
eficienteumaspectoimportantenaelaboraodelinguagensde
programaofuncional.
Exemplossimplesdebreduo:
Oparmetroformalpodeocorrervriasvezesnocorpo:
(lx.+xx)5
+55
10
Da mesma forma, pode no haver ocorrncias do parmetro
formalnocorpo.Ex:(lx.3)53

Uma varivel pode possuir tanto uma ocorrncia atada como


umalivreemumaexpresso.Considereoexemplo:
+x((lx.+x1)4)

Aquixocorrelivre(aprimeiravez)eatada(asegunda).Cada
ocorrnciaindividualdeumavariveldeveserouatadaoulivre.
Asdefiniesformaisdelivreaatadosodadasabaixo:

Definiodeocorrelivre:
xocorrelivreemx(masnoemoutravarivelouconstante
qualquer)
xocorrelivreem(EF)sexocorrelivreemEouxocorrelivre
emF
x ocorre livre em y.E x se x, y so variveis diferentes e x
ocorrelivreemE
Nota: nenhuma varivel ocorre atada em uma expresso
consistindoeumanicaconstante.
Definiodeocorreatada:

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

11/19

11/11/2015

CalculoLambda

Definiodeocorreatada:
x ocorre atada em (E F) se x ocorre atada em E ou x ocorre
atadaemF
xocorreatadaemy.E(xey)soamesmavarivelexocorre
livreemEou
xocorreatadaemE

2.3.4.ConversoEta

Sejam: (lx. + 1 x) e (+ 1). Estas expresses se comportam


exatamentedamesmamaneira,quandoaplicadasaumargumento:
ambas adicionam 1 ao argumento. Conversoz o nome dado
regraqueexpressaessaequivalncia.Assim:
(lx.+1x)>(+1)
Deformamaisgeral,aregradaconversozpodeserexpressa
assim:
(lx.Fx)>F
desde que x no ocorra livre em F e F denote uma funo. A
condiodequexnodeveocorrerlivreemFprevineconverses
errneas.Exemplo:
(lx.+xx)noeconversvelpara(+x),
poisxocorrelivreem(+x).

AcondiodequeFdevedenotarumafunoprevineoutras
converses errneas envolvendo constantes embutidas (pr
definidas).Exemplo:TRUEnoeconversvelpara(lx.TRUEx)
Quandoaconversozutilizadadaesquerdaparaadireita,
chamadadereduol

2.3.5Resumo

Astrsregrasdeconversoquepossibilitamainterconverso
deexpressesenvolvendoabstraesl:
1. Mudana de nome: a conversoa permite que se troque o
http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm
nomedeparmetrosformaisdeumaabstrao,enquantoistofor12/19

11/11/2015

CalculoLambda

nomedeparmetrosformaisdeumaabstrao,enquantoistofor
feitodeformaconsistente.
2. Aplicao de funes: A reduob permite a aplicao de
abstraes a um argumento atravs de gerao de uma nova
instncia do corpo da abstrao, substituindo o argumento por
ocorrnciaslivresdoparmetroformal.Cuidadoespecialdeveser
tomadoquandooargumentocontmvariveislivres.
3.Eliminaodeabstraeslredundantes:Areduozpode
s vezes eliminar uma abstraol . Dentro deste contexto,
podemos considerar as funes embutidas (prdefinidas) como
maisumaformadeconverso. Estaformade conversorecebe o
nomedeconversoz.

2.3.6.ProvasdeInterconvertibilidade

Freqentemente ser necessrio poderse demonstrar a inter


convertibilidadededuasexpressesl.Quandoasduasexpresses
denotam funes, esta prova pode se tornar extremamente longa.
H,porm,mtodosparaabreviarprovas,quenosacrificamoseu
rigor.
Exemplo:Sejamasduasexpressesabaixo:
((lp.p)3)e(lx.3)
Ambas as expresses denotam a mesma funo, que
invariavelmente retorna o valor 3, no importa o valor de seu
argumento e seria de se esperar que ambas sejam inter
convertveis.Istorealmenteocorre:
IFTRUE((p.p)3)IFTRUE3
(x.IFTRUE3x)
(x.3)

ondeopassofinalaregradereduoparaIF.
Ummtodoalternativodeseprovarainterconvertibilidadede
duasexpresses,muitomaisconveniente,odeseaplicarasduas
expressesaumargumentow.

topo

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

13/19

11/11/2015

CalculoLambda

2.4.OrdemdeReduo
Se uma expresso no contm mais redexes, ento a
avaliaoestcompleta.Umaexpressonestaformaditaestarna
formanormal.
Assim,aavaliaodeumaexpressoconsistenareduo
sucessivaderedexes,atqueaexpressoestejanaformanormal.
Definio(formanormal):umaexpressolditaestar
na forma normal, se nenhum redexb, isto , nenhuma sub
expressodaforma(lx.P)Qocorrenela.
Umaexpressopodecontermaisdoqueumredex,assim
areduopodeacontecerporcaminhosdiferentes.
Exemplo:
(+(*34)(*78))
pode ser reduzido forma normal pelas seguintes seqncias:
(+(*34)(*78))
>(+12(*78))
>(+1256)
>68
ou
(+(*34)(*78))
>(+(*34)56)
>(1256)
>68
Nemtodaexpressopossuiumaformanormal,
considere:
(DD)
onde D (lx.x x). A avaliao desta expresso jamais
terminaria,umavezque(DD)reduzpara(DD):
(lx.xx)(lx.xx)>(lx.xx)(lx.xx)
>(lx.xx)(lx.xx)
Porconseguinte,algumasseqnciasdereduopodero14/19

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

11/11/2015

CalculoLambda

Porconseguinte,algumasseqnciasdereduopodero
atingiraformanormal,outrasno.Considere:
(lx.3)(DD)
Sensprimeiroreduzirmosaaplicaode(lx.3)a(DD)
(sem avaliar (DD)), obteremos o resultado 3 porm se primeiro
reduzimos a aplicao de D sobre D, ns simplesmente obtemos
(DD)novamente.
Senscontinuamosinsistindoemescolheraaplicaode
D sobre D, a avaliao vai continuar indefinidamente, no
terminando.
Estasituaocorrespondedeumprogramaimperativo
que entra em um lao infinito. Dizemos que a avaliao ou
execuonotermina.
Paracontornarestasituao,existeaordemnormalde
reduo, que garante que uma forma normal, caso exista, ser
encontrada.

2.4.1.OrdemNormaldeReduo

Uma questo que se coloca, alm da questo "poderei


encontrar uma forma normal ?", a questo de se existe mais de
umaformanormalparaumaexpresso,ou:
Poderumaseqnciadereduodiferentelevaraumaforma
normaldiferente?
Ambasasquestesestointerligadas.
Arespostaparaaltimapergunta:no.
IstoumaconseqnciadosteoremasdeChurchRosserTCR1
eTCR2.

TeoremadeChurchRosser1(TCR1):

SeE1<>E2,entoexisteumaexpressoE,talque
E1>EeE2>E
http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

15/19

11/11/2015

CalculoLambda

Corolrio: Nenhuma expresso pode ser convertida em duas


formas normais distintas. Isto significa que no existem duas
formasnormaisparaumaexpressoquenosejamaconvertveis
entresi.

Prova:
Suponha que E1 <> E e E2 <> E , onde E1 e E2 esto na
formanormal.

EntoE1<>E2e,peloTCR1,devehaverumaexpressoFtal
queE1>FeE2>F.
ComotantoE1comoE2nopossuemredexes,logoE1=F=E2
Informalmente, o teorema TCR1 diz que todas as
seqnciasdereduoqueterminam,haverodeatingiromesmo
resultado.
OsegundoteoremadeChurchRosser,TCR2,dizrespeitoauma
ordemparticulardereduo,chamadaordemnormaldereduo.

TeoremadeChurchRosser2(TCR2):

Se E1 > E2, e E2 est na forma normal, ento existe uma


ordemnormaldeseqnciadereduodeE1paraE2.

Conseqncias:
Existenomnimoumresultadopossvele
a ordem normal de reduo encontrar este resultado,
casoeleexista.
Observequenenhumaseqnciadereduopoderlevar
aumresultadoincorreto,omximoquepoderacontecerano
terminao.AOrdemNormaldeReduoespecificaqueoredex
maisesquerdamaisexternodeverserreduzidoprimeiro.
Noexemploanterior(lx.3)(DD),escolheramosoredex
lxprimeiro,noo(DD).

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

16/19

11/11/2015

CalculoLambda

lxprimeiro,noo(DD).
Esta regra encorpa a intuio de que argumentos para
funespodemserdescartados,deformaquedeveramosaplicara
funo (lx.3) primeiro, ao invs de primeiro avaliarmos o
argumento(DD).

2.4.2.Ordensdereduotimas
Enquantoaordemnormaldereduogarantequeouuma
soluo seja encontrada ou o notrmino ocorra, ela no garante
queistoocorranonmeromnimodepassosdereduo,oque
umfatorelevantenautilizaodoclculolparaaimplementao
delinguagensdeprogramaointerpretadas.
No caso da implementao da resoluo atravs de
reduo de grafos que estudaremos mais tarde porm,
aparentemente a ordem normal de reduo "geralmente tima"
emquestodetempodeexecuo.
Analisarumaexpressoparaencontraroredextimoparaser
reduzido aparentemente muito mais trabalhoso e gasta mais
tempo do que arriscar uma reduo com mais passos seguindo
"cegamente"aordemnormal.
Algunsautorescomo(Levy,J.J.OptimalReductionsin
theLambdaCalculusinEssaysonCombinatoryLogic,Academic
Press, 1980) se ocuparam de algoritmos para encontrar ordens
timas ou quasetimas de reduo que preservassem as
qualidades da ordem normal de reduo. Isto assunto de um
tpicoavanadoquenocabenestadisciplina.

topo

2.5.FunesRecursivas

Se o propsito da utilizao de clculo lambda a


converso de programas funcionais neste para que possamos
resolvlos, devemos ser capazes de representar uma das
caractersticas mais marcantes das linguagens funcionais, a
recursso.
O clculo lambda suporta a representao de17/19

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

11/11/2015

CalculoLambda

O clculo lambda suporta a representao de


recursividade sem maiores extenses atravs da utilizao de
algunspequenostruques.

2.5.1.FunesRecursivaseoY
Considereadefiniodafunofatorialabaixo:
FAC=(ln.IF(=n0)1(*n(FAC(n1))))
Estadefiniobaseiasenacapacidadedesedarumnome
a uma abstrao lambda e de fazer referncia a esta dentro dela
mesma.
Nenhuma construo deste tipo provida pelo clculo
lambda.
O maior problema aqui que funes lambda so
annimas.
Dessa forma elas no podem nomearse e assim no
podemsereferenciarasimesmas.
Para resolver este problema iniciamos com um caso onde
encontramosarecursonasuaformamaispura:
FAC=(ln....FAC...)
AplicandoumaabstraobsobreFAC,usadademodo
inverso,podesetransformarestadefinioem:
FAC=(lfac.(ln.(...fac...)))FAC
Estadefiniopodeserescritadaforma:
FAC=HFAC(2.1)
onde:
H=(lfac.(ln.(...fac...)))
A definio de H trivial. uma abstrao lambda
ordinriaenousarecurso.
Arecursoexpressasomentepeladefinio2.1.
A definio 2.1 pode ser encarada mais como uma equao
matemtica.Porexemplo,pararesolveraequaomatemtica
http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

18/19

11/11/2015

CalculoLambda

x22=x

procuraseporvaloresdexquesatisfaam

http://www.inf.ufsc.br/~barreto/PF/CalLambda.htm

19/19

Anda mungkin juga menyukai