![Page 1: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/1.jpg)
Lógicas Combinatoriais eLógicas Combinatoriais eImplementaçõesImplementações
Rafael Dueire LinsRafael Dueire LinsDepartamento de Informática
Universidade Federal de Pernambuco
![Page 2: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/2.jpg)
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
![Page 3: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/3.jpg)
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
![Page 4: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/4.jpg)
[[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
![Page 5: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/5.jpg)
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:
![Page 6: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/6.jpg)
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:
![Page 7: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/7.jpg)
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
![Page 8: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/8.jpg)
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
![Page 9: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/9.jpg)
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
![Page 10: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/10.jpg)
[[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
![Page 11: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/11.jpg)
[[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
![Page 12: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/12.jpg)
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
![Page 13: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/13.jpg)
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
![Page 14: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/14.jpg)
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
![Page 15: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/15.jpg)
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
![Page 16: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/16.jpg)
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
![Page 17: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/17.jpg)
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
![Page 18: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/18.jpg)
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
@::
![Page 19: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/19.jpg)
0
suc0 @list
@: Output: 0
suc0 @list
@
suc
@square
@list
@:
0suc
@
0
1
suc1 @list
@:0
![Page 20: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/20.jpg)
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
![Page 21: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/21.jpg)
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
![Page 22: Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco](https://reader036.vdocuments.site/reader036/viewer/2022062502/5706385d1a28abb8238fe1d8/html5/thumbnails/22.jpg)
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