Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática...

Post on 07-Apr-2016

219 views 3 download

Transcript of Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática...

Lógicas Combinatoriais eLógicas Combinatoriais eImplementaçõesImplementações

Rafael Dueire LinsRafael Dueire LinsDepartamento de Informática

Universidade Federal de Pernambuco

Lógica CombinatorialLógica Combinatorial

Moses Schönfinkel - 1920• Eliminação das variáveis da lógica Eliminação das variáveis da lógica

de primeira ordemde primeira ordem• Combinação de funções constantes Combinação de funções constantes

((combinadorescombinadores) através de ) através de aplicaçõesaplicações

Haskell B. Curry• Redescobriu a lógica combinatorialRedescobriu a lógica combinatorial

Evita o problema da capturaEvita o problema da capturax.(x.(y.yy.yxx)) y)) y [y/x] [y/x] x.(x.(y.yy.yxx)) = )) = y.yy.yyy

Equivalente ao Equivalente ao -Calculus-Calculus• Bracket Abstraction Bracket Abstraction AlgorithmAlgorithm Expressão Expressão em combinadores SKem combinadores SK

Lógica CombinatorialLógica Combinatorial

[[xx]] == x x[[a ba b]] == [[aa]] [[bb]][[x.ax.a]] == [[xx]] [[aa]][[xx]] x x == S K K S K K[[xx]] y y == K y K y,, se x se x y é var e Cy é var e Ctete

[[xx]] (ab) (ab) == S ( S ([[xx]] a) ( a) ([[xx]] b) b)

Bracket Abstraction AlgorithmBracket Abstraction AlgorithmSchönfinkel - 1924Schönfinkel - 1924

S S == a.a.b.b.c.ac (bc)c.ac (bc) [[aa] ] (([[bb] ] (([[cc] ] ac (bc)))ac (bc)))== [ [aa] ] (([[bb] ] (S((S([[cc] ] ac) (ac) ([[cc]] bc))) bc)))== [ [aa] ] (([[bb] ] (S( S ((S( S ([[cc] ] a) (a) ([[cc] ] c)) c))

(S ((S ([[cc]] b) ( b) ([[cc]] c))) c)))== [ [aa] ] (([[bb] ] (S( S (K a(S( S (K a) (SKK) ) (SKK)

(S (K b) (SKK)))(S (K b) (SKK)))

Bracket Abstraction AlgorithmBracket Abstraction Algorithm

Exemplo:Exemplo:

Y Y == f.(f.(y.f(yy))(y.f(yy))(y.f(yy)))y.f(yy))) . . .. . . == (S(S(KS)(S(KK)(SKK)))(S(S(KS)(S(KK)(SKK))) (K(S(SKK)(SKK))))(K(S(SKK)(SKK)))) (S(S(KS)(S(KK)(SKK)))(S(S(KS)(S(KK)(SKK))) (K(S(SKK)(SKK))))(K(S(SKK)(SKK))))

Bracket Abstraction AlgorithmBracket Abstraction Algorithm

Exemplo:Exemplo:

K a b K a b =>=> a a

S a b c S a b c =>=> a c (b c) a c (b c)

I a => aI a => a

aplicação: associativa a esquerdaaplicação: associativa a esquerdaabc = (ab) cabc = (ab) c

Regras de ReduçãoRegras de Redução

SASL (SASL (St. Andrews Static LanguageSt. Andrews Static Language)) Interpretador 1a linguagem para ensino Utilizou SECD

Primeiro a explorar a tradução de Primeiro a explorar a tradução de linguagens funcionais para linguagens funcionais para combinadorescombinadores

Máquina de Turner Máquina de Turner

Lógica combinatorial puraLógica combinatorial pura S, K e I Explosão exponencial do código

Grande conjunto de combinadoresGrande conjunto de combinadores Evita a geração de K Novo algoritmo de abstração Expansão quadrática do código

Máquina de Turner Máquina de Turner

[[xx]] == x x[[a ba b]] == [[aa]] [[bb]][[x.ax.a]] == [[xx]] [[aa]][[xx]] x x == I I[[xx]] y y == K y K y, , xx yy é var e C é var e Ctete[[xx]] (a b) (a b) == B a ( B a ([[xx]] b) b), se, se aa C Ctete[[xx]] (a b) (a b) == C ( C ([[xx]] a) b a) b,, se se bb C Ctete [[xx]] (a b) (a b) == S ( S ([[xx]] a) ( a) ([[xx] ] b)b)

Bracket Abstraction AlgorithmBracket Abstraction AlgorithmTurner - 1979Turner - 1979

[[xx]] ((a b) c) ((a b) c) == B1 a b ( B1 a b ([[xx]] c) c), , a a ee b b CCtete

[[xx]] ((a b) c) ((a b) c) == C1 a ( C1 a ([[xx]] b) c b) c, , a a ee c c CCtete

[[xx]] ((a b) c) ((a b) c) == S1 a ( S1 a ([[xx]]b) (b) ([[xx]]c)c), , a a CCtete

Bracket Abstraction AlgorithmBracket Abstraction AlgorithmTurner - 1979Turner - 1979

I I x x x x K K c x c x ccS S f g x f g x f x (g x)f x (g x)B B f g x f g x f (g x)f (g x)C C f g x f g x f x gf x gS1 S1 c f g x c f g x c (f x) (g x)c (f x) (g x)B1 B1 c f g x c f g x c f (g x)c f (g x)C1 C1 c f g x c f g x c (f x) gc (f x) gY Y x x x (x (YY x) x)

Combinadores de TurnerCombinadores de Turner

Máquina de redução de GrafosMáquina de redução de Grafos para interpretar as expressões de combinadores

StackStack: : próximo combinador mais a esquerda

unwindunwind local após cada redução

Máquina de Turner Máquina de Turner

Operador de ponto fixo explícito

Y Y xx => => x (x (Y Y x) x)

Estratégia knot-tieingknot-tieing para manipulação de grafos

Máquina de Turner Máquina de Turner

@@

y xy x

@@y @y @ y xy x

@@yy

De interpretação `a CompilaçãoDe interpretação `a Compilação

Cardelli (1983) - FAMCardelli (1983) - FAM Linguagens Funcionais estritasLinguagens Funcionais estritas

Johnsson (1987) - Máquina GJohnsson (1987) - Máquina GMelhores características da Melhores características da

máquina máquina SECDSECD e a máquina de e a máquina de TurnerTurner

A Máquina GA Máquina G

Johnsson (1987) - ChalmersJohnsson (1987) - Chalmers

Funciona como um interpretador com Funciona como um interpretador com geração de grafos preguiçosageração de grafos preguiçosa

Primeira implementação Primeira implementação eficienteeficiente para linguagem funcional preguiçosapara linguagem funcional preguiçosa

O grafo é gerado apenas quando O grafo é gerado apenas quando necessárionecessário

A Máquina GA Máquina G

A forma de controlar o fluxo de A forma de controlar o fluxo de execução e avaliação foi seguida por:execução e avaliação foi seguida por:

Spineless G-MachineSpineless G-Machine Spineless Tagless G-MachineSpineless Tagless G-Machine TIMTIM GM-CGM-C

listlist 0 0, where, where listlist n n == squaresquare n n :: list list ((sucsuc n n)) squaresquare x x == x x ** x x sucsuc x x == x x ++ 1 1

0list

@

suc

0 @square

@

list

@::

0

suc0 @list

@: Output: 0

suc0 @list

@

suc

@square

@list

@:

0suc

@

0

1

suc1 @list

@:0

Máquinas CategóricasMáquinas Categóricas

Teoria das CategoriasTeoria das Categorias• Teoria de funções útil para Teoria de funções útil para

implementar linguagens funcionaisimplementar linguagens funcionais

Combinadores CategóricosCombinadores Categóricos• CAM: máquina de pilhaCAM: máquina de pilha

Lins• Implementações baseadas em Implementações baseadas em

Multi-Combinadores CategóricosMulti-Combinadores Categóricos

• C foi usado como um macro-C foi usado como um macro-assemblerassembler¨ PortabilidadePortabilidade¨ SimplicidadeSimplicidade¨ EficiênciaEficiência

• Controle de Fluxo Controle de Fluxo - - Máquina AbstrataMáquina Abstrata

Máquinas CategóricasMáquinas Categóricas

CMCCMC

Controle de fluxo em Controle de fluxo em CC Funções EspeciaisFunções Especiais• Funções estritas em todos seus Funções estritas em todos seus

argumentos que produz tipos argumentos que produz tipos básicos como resultadobásicos como resultado• Traduzida diretamente para CTraduzida diretamente para C

• Vantagens do rápido chaveamento Vantagens do rápido chaveamento de contexto das máquinas RISCde contexto das máquinas RISC• Expressões AritméticasExpressões Aritméticas