220 likes | 310 Views
Lógicas Combinatoriais e Implementações. Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco. Lógica Combinatorial. Moses Schönfinkel - 1920 Eliminação das variáveis da lógica de primeira ordem
E N D
Lógicas Combinatoriais eImplementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco
Lógica Combinatorial • Moses Schönfinkel - 1920 • Eliminação das variáveis da lógica de primeira ordem • Combinação de funções constantes (combinadores) através de aplicações • Haskell B. Curry • Redescobriu a lógica combinatorial
Lógica Combinatorial • Evita o problema da captura x.(y.yx)) y [y/x] x.(y.yx)) = y.yy • Equivalente ao -Calculus • Bracket Abstraction Algorithm • Expressão em combinadores SK
Bracket Abstraction Algorithm Schönfinkel - 1924 [x]= x [a b]=[a][b] [x.a]=[x][a] [x] x = S K K [x] y = K y, se xy é var e Cte [x] (ab) = S ([x] a) ([x] b)
Bracket Abstraction Algorithm Exemplo: S =a.b.c.ac (bc) [a] ([b] ([c] ac (bc))) = [a] ([b] (S([c] ac) ([c] bc))) = [a] ([b] (S( S ([c] a) ([c] c)) (S ([c] b) ([c] c))) = [a] ([b] (S( S (K a) (SKK) (S (K b) (SKK)))
Bracket Abstraction Algorithm Exemplo: Y =f.(y.f(yy))(y.f(yy))) . . . =(S(S(KS)(S(KK)(SKK))) (K(S(SKK)(SKK)))) (S(S(KS)(S(KK)(SKK))) (K(S(SKK)(SKK))))
Regras de Redução K a b => a S a b c => a c (b c) I a => a aplicação: associativa a esquerda abc = (ab) c
Máquina de Turner • SASL (St. Andrews Static Language) • Interpretador • 1a linguagem para ensino • Utilizou SECD • Primeiro a explorar a tradução de linguagens funcionais para combinadores
Máquina de Turner • Lógica combinatorial pura • S, K e I • Explosão exponencial do código • Grande conjunto de combinadores • Evita a geração de K • Novo algoritmo de abstração • Expansão quadrática do código
Bracket Abstraction Algorithm Turner - 1979 [x]= x [a b]=[a][b] [x.a]=[x][a] [x] x = I [x] y = K y, xy é var e Cte [x] (a b) = B a ([x] b), sea Cte [x] (a b) = C ([x] a) b, se b Cte [x] (a b) = S ([x] a) ([x] b)
Bracket Abstraction Algorithm Turner - 1979 [x] ((a b) c) = B1 a b ([x] c), a e b Cte [x] ((a b) c) = C1 a ([x] b) c, a e c Cte [x] ((a b) c) = S1 a ([x]b) ([x]c), a Cte
Combinadores de Turner I x x K c x c S f g x f x (g x) B f g x f (g x) C f g x f x g S1 c f g x c (f x) (g x) B1 c f g x c f (g x) C1 c f g x c (f x) g Y x x (Y x)
Máquina de Turner • Máquina de redução de Grafospara interpretar as expressões de combinadores • Stack: próximo combinador mais a esquerda • unwindlocal após cada redução
Máquina de Turner • Operador de ponto fixo explícito Y x=> x (Y x) • Estratégiaknot-tieingpara manipulação de grafos @ y x @ y @ y x @ y
De interpretação `a Compilação • Cardelli (1983) - FAM • Linguagens Funcionais estritas • Johnsson (1987) - Máquina G • Melhores características da máquina SECD e a máquina de Turner
A Máquina G • Johnsson (1987) - Chalmers • Funciona como um interpretador com geração de grafos preguiçosa • Primeira implementação eficiente para linguagem funcional preguiçosa • O grafo é gerado apenas quando necessário
A Máquina G • A forma de controlar o fluxo de execução e avaliação foi seguida por: • Spineless G-Machine • Spineless Tagless G-Machine • TIM • GM-C
: @ @ @ square list 0 list 0 @ suc • list 0, where list n =square n : list (suc n) • square x = x * x • suc x = x + 1
: Output: 0 0 @ @ 0 list 0 @ list @ suc suc 0 0 : : 1 @ @ @ square 1 list list @ @ @ suc suc 0 suc
Máquinas Categóricas • Teoria das Categorias • Teoria de funções útil para implementar linguagens funcionais • Combinadores Categóricos • CAM: máquina de pilha
Máquinas Categóricas • Lins • Implementações baseadas em Multi-Combinadores Categóricos • C foi usado como um macro-assembler • Portabilidade • Simplicidade • Eficiência • Controle de Fluxo - Máquina Abstrata
CMC • Controle de fluxo em C • Funções Especiais • Funções estritas em todos seus argumentos que produz tipos básicos como resultado • Traduzida diretamente para C • Vantagens do rápido chaveamento de contexto das máquinas RISC • Expressões Aritméticas