lógicas combinatoriais e implementações rafael dueire lins departamento de informática...
TRANSCRIPT
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