Lógicas Combinatoriais e Implementações
description
Transcript of Lógicas Combinatoriais e Implementações
Lógicas Combinatoriais eLógicas Combinatoriais eImplementaçõesImplementações
Rafael Dueire LinsRafael Dueire Lins
Departamento 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 captura
x.(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 esquerda
abc = (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 g
S1 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) g
Y 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
suc
0 @list
@: Output: 0
suc
0 @list
@
suc
@square
@
list
@:
0suc
@
0
1
suc
1 @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