220 likes | 311 Vues
Explore the history, theory, and applications of combinatorial logic, including Schönfinkel's algorithms and Turner's machines. Learn about Haskell Curry's contributions and the Bracket Abstraction Algorithm. Discover efficient implementations such as the SECD machine and Turner's pure combinatorial logic. Dive into the categories theory, Turner's Bracket Abstraction Algorithm, and more. Develop a thorough understanding of combinatorial logic with this comprehensive guide.
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