O arco intelectual que vai do eval/apply de McCarthy em 1960 aos transformers auto-referenciais modernos não é uma metáfora — é uma linhagem técnica precisa. A homoiconicidade do LISP estabeleceu que programas e dados podem habitar o mesmo espaço representacional; a álgebra FP de Backus mostrou que programas compõem-se por meio de um conjunto fechado de combinadores algébricos; a semântica denotacional fundamentou a auto-referência na teoria dos pontos fixos; e os transformers de hoje implementam algoritmos de aprendizagem em sua passagem direta, tornando-se efetivamente sistemas computacionais auto-modificáveis. Esta revisão mapeia essa linhagem em nove áreas de pesquisa, fornecendo a base bibliográfica para dois artigos: um conceitual conectando a auto-referência do LISP à auto-consciência emergente no ML moderno, e um técnico propondo experimentos em manipulação diferenciável de arquiteturas baseadas em LISP.


1. Auto-referência e homoiconicidade no LISP: onde o código virou dado

Referências fundacionais

John McCarthy, “Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I,” Communications of the ACM 3(4):184–195, 1960. McCarthy introduziu as S-expressions como representação uniforme para programas e dados, e definiu a S-função universal apply, que descreveu como cumprindo “o papel teórico de uma máquina de Turing universal e o papel prático de um interpretador”. A implementação do eval como código executável por Steve Russell no IBM 704 — contra as próprias expectativas de McCarthy — criou o primeiro sistema de programação auto-interpretante. O resultado-chave: o par eval/apply do LISP constitui um sistema computacional autodescritivo, um programa que interpreta programas em sua própria representação de dados.

Harold Abelson, Gerald Jay Sussman e Julie Sussman, Structure and Interpretation of Computer Programs, MIT Press, 1984 (2ª ed. 1996). O capítulo 4 apresenta o avaliador metacircular — um interpretador Scheme escrito em Scheme. O avaliador é construído a partir de dois procedimentos mutuamente recursivos (eval e apply) que especificam completamente a semântica da linguagem. SICP afirma: “Um avaliador escrito na mesma linguagem que avalia é dito metacircular.” É a demonstração canônica de que linguagens homoicônicas permitem autodescrição completa.

John C. Reynolds, “Definitional Interpreters for Higher-Order Programming Languages,” Proceedings of the ACM Annual Conference, 2:717–740, 1972. Reynolds cunhou o termo “metacircular” e mostrou que auto-interpretadores herdam propriedades semânticas (e.g., ordem de avaliação) de sua metalinguagem, introduzindo desfuncionalização e transformação CPS para resolver as ambiguidades resultantes.

Combinadores de ponto fixo e o teorema da recursão de Kleene

Haskell B. Curry e Robert Feys, Combinatory Logic, Volume I, North-Holland, 1958. Define o combinador Y (Y = λf.(λx.f(x x))(λx.f(x x))), que permite recursão sem auto-referência explícita — uma função não precisa conhecer o próprio nome. A auto-referência emerge apenas das regras de composição.

Stephen C. Kleene, Introduction to Metamathematics, North-Holland, 1952. O Segundo Teorema da Recursão afirma: para toda função computável total f, existe um índice n tal que φ_n = φ_{f(n)}. Toda transformação computável de programas tem um ponto fixo. Isto garante a existência de quines, auto-interpretadores e todas as formas de auto-referência computacional. Como Jones observou, “o teorema da recursão é quase trivial numa linguagem reflexiva”.

Oleg Kiselyov, “Kleene’s Second Recursion Theorem: A Functional Pearl,” rascunho ~2018. Une teoria da computabilidade e metaprogramação funcional, notando que “a quotação estilo Lisp em particular ajuda” em implementações eficientes do teorema da recursão. Demonstra que a prova do SRT de Kleene é estruturalmente análoga à construção do combinador Y.

Joseph Helfer, “Y is a Least Fixed Point Combinator,” arXiv:2504.19379, 2025. Prova que o combinador Y de Curry produz o menor ponto fixo quando os termos do cálculo lambda são vistos como funções parciais, conectando pontos fixos do lambda à teoria dos domínios.

Homoiconicidade

Calvin N. Mooers e L. Peter Deutsch, “TRAC, A Text-Handling Language,” Proceedings of the ACM ‘65, pp. 229–246, 1965. Origem do termo: “Como os procedimentos e texto do TRAC têm a mesma representação dentro e fora do processador, o termo homoicônico é aplicável, de homo significando o mesmo e icon significando representação.”

Alan Kay, The Reactive Engine, tese de doutorado, University of Utah, 1969. Popularizou o termo, descrevendo LISP e TRAC como “homoicônicos no sentido em que suas representações internas e externas são essencialmente as mesmas”.

Homoiconicidade do LISP e ML moderno

Kevin Ellis et al., “DreamCoder: Bootstrapping Inductive Program Synthesis with Wake-Sleep Library Learning,” PLDI 2021; arXiv:2006.08381. DreamCoder aprende a resolver problemas sintetizando programas em cálculo lambda (essencialmente árvores de S-expressions). Um algoritmo wake-sleep alterna síntese de programas, refatoração em abstrações reutilizáveis e treinamento de uma rede neural de reconhecimento. O sistema cultiva sua própria linguagem de programação — uma forma de metaprogramação diretamente análoga ao defun e aos sistemas de macros do LISP.

Steven T. Piantadosi, “The Computational Origin of Representation,” Minds and Machines 31:1–58, 2021. Propõe que a cognição opera através de uma Linguagem do Pensamento baseada em lógica combinatória. Observa: “Curiosamente, o poder computacional para usar recursão vem de graça se o cálculo lambda é o sistema representacional: a recursão pode ser construída via combinador Y a partir de nada mais do que as leis de composição do cálculo lambda.”

Martín Abadi e Gordon D. Plotkin, “A Simple Differentiable Programming Language,” Proc. ACM Program. Lang. 4, POPL, Artigo 38, 2020; arXiv:1911.04523. Define uma linguagem com funções recursivas e diferenciação reversa de primeira classe, provando que semânticas operacional e denotacional coincidem. A diferenciação como operação da linguagem é paralela ao eval: assim como eval mapeia código-como-dado para valores, o operador de diferenciação mapeia programas para seus programas derivados.

Bohdan B. Khomtchouk, Edmund Weitz e Claes Wahlestedt, “The Machine that Builds Itself: How the Strengths of Lisp Family Languages Facilitate Building Complex and Flexible Bioinformatic Models,” arXiv:1608.02621, 2016. Argumenta que a homoiconicidade do Lisp, seu sistema de macros e as capacidades de construção de DSLs o tornam unicamente adequado para construir aplicações de IA/ML — “a máquina que se constrói a si mesma”.


2. A álgebra FP de Backus: programas como objetos algébricos

A palestra de Turing de 1977

John Backus, “Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs,” Communications of the ACM 21(8):613–641, 1978. Backus criticou as linguagens convencionais como “gordas e fracas” devido ao seu “estilo primitivo palavra-por-palavra” e identificou “a instrução de atribuição como o gargalo de von Neumann”. Propôs o FP: um sistema sem variáveis, em nível de funções, construído sobre formas combinadoras (composição, construção, aplicar-a-todos/map, condição, inserir/reduzir) que funcionam como operações de uma álgebra de programas. Seu exemplo canônico — Def Innerproduct = (/+) ∘ (α×) ∘ Transpose — define produto interno puramente compondo três operações, sem nomear variáveis. As formas combinadoras são fechadas: compô-las sempre produz funções dentro do sistema FP.

O mapeamento direto para primitivas de redes neurais é impressionante: composição = encadeamento de camadas; construção = multi-head/ramificação; aplicar-a-todos = convolução/map; inserir/reduzir = pooling; condição = mecanismos de gating.

John Backus, “The Algebra of Functional Programs: Function Level Reasoning, Linear Equations, and Extended Definitions,” LNCS 107, Springer, 1981. Estende a álgebra FP com raciocínio em nível de funções e equações lineares.

Formalismo de Bird-Meertens

Jeremy Gibbons, “The School of Squiggol: A History of the Bird–Meertens Formalism,” FM 2019 International Workshops, LNCS 12233, pp. 18–42, Springer, 2020. História abrangente do BMF, “um cálculo para transformação de programas por raciocínio equacional em estilo funcional”. Os operadores do BMF — map, fold/reduce, scan, filter — são precisamente as formas combinadoras de Backus colocadas sobre fundamentos categóricos, com leis de fusão permitindo derivação sistemática de programas.

Richard S. Bird, “An Introduction to the Theory of Lists,” Monograph PRG-56, Oxford, 1986. Estabelece a teoria das listas como arcabouço calculacional, introduzindo o lema do homomorfismo e as leis de fusão.

Richard S. Bird e Oege de Moor, The Algebra of Programming, Prentice-Hall, 1997. A síntese definitiva do BMF usando teoria das categorias (álgebras iniciais, catamorfismos) para cálculo de programas.

Semântica categórica

Erik Meijer, Maarten Fokkinga e Ross Paterson, “Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire,” LNCS 523, pp. 124–144, 1991. Introduz catamorfismos, anamorfismos, hilomorfismos e paramorfismos como operadores de recursão sobre tipos de dados algébricos — a culminação categórica da álgebra de Backus.

Tatsuya Hagino, “A Categorical Programming Language,” tese de doutorado, University of Edinburgh, 1987; arXiv:2010.05167. Apresenta tipos de dados baseados em F,G-diálgebras, conectando definições no estilo Backus a (co)álgebras iniciais/finais.

Releituras modernas com conexão ao ML

Christopher Olah, “Neural Networks, Types, and Functional Programming,” blog, setembro 2015. A articulação mais explícita da conexão Backus–deep learning. Olah identifica: RNNs codificadoras = folds (o inserir/reduzir de Backus); RNNs geradoras = unfolds; RNNs gerais = scanl; redes neurais recursivas = catamorfismos. “Todo modelo em deep learning que conheço envolve otimizar funções compostas. Creio que este seja o cerne do que estudamos.”

Bruno Gavranović, Paul Lessard, Andrew Dudzik et al., “Position: Categorical Deep Learning is an Algebraic Theory of All Architectures,” ICML 2024, PMLR 235:15209–15241; arXiv:2402.15332. Propõe que todas as grandes arquiteturas (RNNs, CNNs, GNNs, transformers) são instâncias de uma única teoria algébrica: álgebras de mônada em uma 2-categoria de mapas paramétricos. É a afirmação moderna mais forte de que ML é fundamentalmente algébrico.


3. Computação reflexiva e auto-modificável: torres até o topo

Reflexão procedural

Brian Cantwell Smith, Procedural Reflection in Programming Languages, tese de doutorado, MIT, 1982 (MIT-TR-272). Introduziu a reflexão procedural via 3-LISP, onde todo programa é executado por um interpretador metacircular na mesma linguagem, formando uma torre infinita de meta-interpretadores. Três requisitos para auto-raciocínio computacional: auto-referência, uma teoria embutida de si, e uma conexão causal entre essa teoria e o comportamento do sistema.

Brian Cantwell Smith, “Reflection and Semantics in Lisp,” POPL ‘84, pp. 23–35, 1984. Apresentação condensada: “procedimentos reflexivos são essencialmente análogos a sub-rotinas a serem executadas ’na implementação’” e “não há uma torre de linguagens diferentes — há um único dialeto (3-LISP) até o topo”.

Pattie Maes, “Concepts and Experiments in Computational Reflection,” OOPSLA ‘87, pp. 147–155, 1987. Formalizou a reflexão computacional: um sistema reflexivo é aquele que “raciocina sobre si e age sobre si”. Distinguiu reflexão estrutural (introspecção da estrutura do programa) de reflexão comportamental (modificar a semântica em tempo de execução).

A torre reflexiva

Mitchell Wand e Daniel P. Friedman, “The Mystery of the Tower Revealed: A Non-Reflective Description of the Reflective Tower,” Lisp and Symbolic Computation 1(1):11–38, 1988. Forneceu semântica denotacional rigorosa para a torre infinita de interpretadores metacirculares de Smith sem usar reflexão para explicar reflexão.

Nada Amin e Tiark Rompf, “Collapsing Towers of Interpreters,” Proc. ACM Program. Lang. 2, POPL, 2017. Mostra como torres de interpretadores podem ser colapsadas em um compilador de passo único via staging multi-nível — conectando a torre reflexiva à compilação moderna.

Hofstadter: strange loops como pontos fixos

Douglas R. Hofstadter, Gödel, Escher, Bach: An Eternal Golden Braid, Basic Books, 1979. O conteúdo matemático (não apenas filosófico): a numeração de Gödel permite que afirmações sobre um sistema formal sejam codificadas dentro dele — o caso paradigmático de auto-referência computacional. Hofstadter cunhou “quining” para a construção auto-referencial em que uma afirmação é aplicada à sua própria citação. Strange loops definidos: “Um deslocamento de um nível de abstração para outro, que parece um movimento ascendente numa hierarquia, mas que, de alguma forma, os sucessivos deslocamentos ‘para cima’ acabam dando origem a um ciclo fechado.”

O Lema Diagonal (Gödel 1931, generalizado por Carnap 1934): Para toda fórmula ψ(x) com uma variável livre numa teoria suficientemente forte T, existe uma sentença φ tal que T ⊢ φ ↔ ψ(⌜φ⌝). É a formalização matemática da auto-referência — estreitamente relacionada ao teorema da recursão de Kleene.

Semântica de pontos fixos

Dana S. Scott, “Outline of a Mathematical Theory of Computation,” Technical Monograph PRG-2, Oxford, 1970; “Continuous Lattices,” LNMS 274, 1972. A teoria dos domínios de Scott fornece o fundamento matemático: sua construção crucial resolveu D ≅ [D → D], criando um domínio isomorfo ao seu próprio espaço de funções — a forma matemática da homoiconicidade. O teorema do ponto fixo de Kleene-Scott garante que, para toda função contínua f sobre uma ordem parcial completa, o menor ponto fixo existe como ⊔{fⁿ(⊥) : n ≥ 0}.

Samson Abramsky e Achim Jung, “Domain Theory,” Handbook of Logic in Computer Science 3:1–168, Oxford University Press, 1994. A referência autoritativa sobre o papel da teoria dos domínios na semântica denotacional.


4. Transformers como computadores universais e meta-aprendizes em contexto

Completude de Turing

Jorge Pérez, Javier Marinković e Pablo Barceló, “On the Turing Completeness of Modern Neural Network Architectures,” ICLR 2019; arXiv:1901.03429. Prova que transformers são Turing-completos “com base em sua capacidade de computar e acessar representações densas internas dos dados” — sem memória externa. Assume ativações racionais com precisão arbitrária.

Jorge Pérez, Pablo Barceló e Javier Marinković, “Attention is Turing Complete,” JMLR 22(75):1–35, 2021. Versão estendida mostrando que um transformer mínimo encoder-decoder (encoder de uma camada, decoder de três) é suficiente. A dimensão do modelo escala como d = 2|Q| + 4|Σ| + 11.

Mostafa Dehghani et al., “Universal Transformers,” ICLR 2019; arXiv:1807.03819. Adiciona recorrência com compartilhamento de pesos ao longo da profundidade com Adaptive Computation Time, gerando uma arquitetura praticamente Turing-completa. “Dada memória suficiente, o Universal Transformer é computacionalmente universal.”

Angeliki Giannou et al., “Looped Transformers as Programmable Computers,” ICML 2023; arXiv:2301.13196. Mostra que 13 camadas constantes em um loop podem emular um pequeno computador com conjunto de instruções. “Um único transformer congelado, instruído por sua entrada, pode emular uma calculadora básica, uma biblioteca básica de álgebra linear e até um algoritmo completo de backpropagation e aprendizagem em contexto.” A entrada atua como um “cartão perfurado” — o transformer literalmente torna-se um computador programável.

Aprendizagem em contexto como otimização implícita

Ekin Akyürek et al., “What Learning Algorithm is In-Context Learning? Investigations with Linear Models,” ICLR 2023; arXiv:2211.15661. Prova construtivamente que transformers podem implementar descida do gradiente e regressão ridge em forma fechada. Transformers treinados transitam entre diferentes estimadores clássicos dependendo da profundidade e do nível de ruído.

Johannes von Oswald et al., “Transformers Learn In-Context by Gradient Descent,” ICML 2023, PMLR 202:35151–35174; arXiv:2212.07677. Mostra equivalência formal entre uma única camada de self-attention linear e um passo de descida do gradiente em uma loss de regressão. “Transformers treinados tornam-se meso-otimizadores — isto é, aprendem modelos por descida do gradiente em sua passagem direta.”

Damai Dai et al., “Why Can GPT Learn In-Context?” Findings of ACL 2023; arXiv:2212.10559. Deriva uma forma dual entre atenção de transformers e descida do gradiente: valores de atenção atuam como “meta-gradientes”, e a ICL é análoga a aplicar atualizações de gradiente a partir dos exemplos demonstrados.

Aprendizagem em contexto como inferência bayesiana

Sang Michael Xie et al., “An Explanation of In-context Learning as Implicit Bayesian Inference,” ICLR 2022; arXiv:2111.02080. “A aprendizagem em contexto emerge teórica e empiricamente quando a distribuição de pré-treinamento é uma mistura, resultando no modelo de linguagem realizando implicitamente inferência bayesiana em sua passagem direta.”

Samuel Müller et al., “Transformers Can Do Bayesian Inference,” ICLR 2022; arXiv:2112.10510. Introduz Prior-Data Fitted Networks (PFNs): uma única passagem direta de transformer aproxima distribuições preditivas posteriores bayesianas, alcançando ganhos >200× em relação a MCMC/VI.

Transformers como meta-aprendizes

Shivam Garg et al., “What Can Transformers Learn In-Context? A Case Study of Simple Function Classes,” NeurIPS 2022; arXiv:2208.01066. Demonstra que transformers codificam algoritmos de aprendizagem diversos (igualando OLS, Lasso, descida do gradiente, aprendizagem de árvores de decisão) em uma única passagem direta.

Gail Weiss, Yoav Goldberg e Eran Yahav, “Thinking Like Transformers,” ICML 2021; arXiv:2106.06981. Propõe RASP (Restricted Access Sequence Processing Language) como modelo computacional para encoders transformer. “O processo iterativo de um transformer não se dá ao longo do comprimento da sequência de entrada, mas sim ao longo da profundidade da computação.” Programas RASP compilam em arquiteturas transformer — fornecendo uma visão formal, de linguagem de programação, da atenção como composição de funções.


5. Programação diferenciável como transformação algébrica de programas

AD como forma combinadora

Barak A. Pearlmutter e Jeffrey Mark Siskind, “Reverse-mode AD in a Functional Framework: Lambda the Ultimate Backpropagator,” ACM TOPLAS 30(2):7:1–7:36, 2008. Mostra que AD em modo reverso pode ser função de primeira classe em um cálculo lambda aumentado, alcançando fechamento (a derivada permanece na mesma linguagem). A ponte mais direta entre AD e Backus: a diferenciação é uma forma combinadora que transforma programas em programas preservando propriedades essenciais.

Conal Elliott, “The Simple Essence of Automatic Differentiation,” Proc. ACM Program. Lang. 2, ICFP, Artigo 70, 2018; arXiv:1804.00746. Deriva AD a partir de especificações categóricas. “Computações expressas neste vocabulário são diferenciáveis por construção, graças aos blocos de construção da teoria das categorias.” AD é um funtor — um mapa preservador de estrutura entre categorias. A regra da cadeia torna-se preservação de composição: D(g∘f) = D(g)∘D(f).

Conal Elliott, “Compiling to Categories,” Proc. ACM Program. Lang. 1, ICFP, Artigo 27, 2017. Programas funcionais tipados podem ser reinterpretados em qualquer categoria cartesiana fechada, permitindo tradução automática para AD, circuitos de hardware ou análise por intervalos. A realização moderna mais direta da visão de Backus.

Fei Wang et al., “Demystifying Differentiable Programming: Shift/Reset the Penultimate Backpropagator,” Proc. ACM Program. Lang. 3, ICFP, Artigo 96, 2019; arXiv:1803.10228. Revela uma conexão estreita entre AD em modo reverso e continuações delimitadas (shift/reset). Backpropagation é uma instância específica de transformação CPS — outra transformação algébrica de programas.

JAX como a álgebra de Backus realizada

James Bradbury et al., JAX: composable transformations of Python+NumPy programs, 2018; github.com/jax-ml/jax. Os grad, jit, vmap e pmap do JAX são transformações de ordem superior componíveis — diretamente análogas às formas combinadoras de Backus. jit(vmap(grad(loss))) compõe três transformações em uma única computação otimizada. Todas operam através de tracing para uma representação intermediária (jaxpr) que pode ser ainda mais transformada.

Roy Frostig, Matthew James Johnson e Chris Leary, “Compiling machine learning programs via high-level tracing,” MLSys 2018. Descreve o mecanismo de tracing do JAX: funções Python são capturadas como grafos de operações primitivas e então otimizadas algebricamente via XLA (fusão, propagação de constantes, simplificação) — um pipeline concreto de transformações algébricas de programas.

Teoria das categorias em ML

Brendan Fong, David I. Spivak e Rémy Tuyéras, “Backprop as Functor: A compositional perspective on supervised learning,” LICS 2019; arXiv:1711.10455. Define uma categoria monoidal Learn onde morfismos são “aprendizes” e a descida do gradiente define um funtor monoidal de funções euclidianas parametrizadas para aprendizes. A composição de aprendizes espelha a composição de funções de Backus. A estrutura monoidal corresponde às formas combinadoras paralelas (construção).

G.S.H. Cruttwell, B. Gavranović, N. Ghani, P.W. Wilson e F. Zanasi, “Categorical Foundations of Gradient-Based Learning,” ESOP 2022, LNCS 13240; arXiv:2103.01931. Propõe semântica categórica via lentes, mapas paramétricos (construção Para) e categorias de derivadas reversas. Mostra que todo o pipeline de aprendizagem baseada em gradiente — modelo, otimizador, loss — consiste de lentes paramétricas. Abrange ADAM, AdaGrad, momento de Nesterov, MSE e softmax cross-entropy.

Bruno Gavranović, “Fundamental Components of Deep Learning: A category-theoretic approach,” tese de doutorado, University of Strathclyde; arXiv:2403.13001, 2024. Identifica duas propriedades fundamentais do deep learning — paramétrico e bidirecional — modeladas por actegorias e ópticas ponderadas. Combinando-as, obtém-se ópticas paramétricas ponderadas com conexões a atualização bayesiana e teoria dos jogos.

Dan Shiebler, Bruno Gavranović e Paul Wilson, “Category Theory in Machine Learning,” arXiv:2106.07032, 2021. Survey notando que “como a maioria dos sistemas modernos de machine learning é inerentemente composicional, não surpreende que vários autores tenham começado a estudá-los pela lente da teoria das categorias”.

Linguagens de programação diferenciável

Adam Paszke et al., “Getting to the Point: Index Sets and Parallelism-Preserving Autodiff for Pointful Array Programming,” Proc. ACM Program. Lang. 5, ICFP, Artigo 88, 2021; arXiv:2104.05372. Dex trata arrays como funções avidamente memoizadas sobre conjuntos de índices tipados, permitindo manipulações abstratas de função (currying) em arrays com AD em modo reverso preservando paralelismo.


6. Síntese de programas neurais e meta-aprendizagem: programas que escrevem programas

Referências centrais

Scott Reed e Nando de Freitas, “Neural Programmer-Interpreters,” ICLR 2016; arXiv:1511.06279. NPI aprende a compor programas de nível inferior para expressar os de nível superior via um núcleo recorrente com memória persistente de programas. A memória de programas é análoga a um ambiente LISP onde definições de função são de primeira classe.

Chelsea Finn, Pieter Abbeel e Sergey Levine, “Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks,” ICML 2017; arXiv:1703.03400. A otimização bi-nível do MAML (loop externo otimiza a inicialização, loop interno adapta) paraleliza o paradigma de programa auto-modificável: o sistema modifica seus próprios parâmetros para tornar-se melhor em se modificar.

David Ha, Andrew Dai e Quoc V. Le, “HyperNetworks,” ICLR 2017; arXiv:1609.09106. Uma rede gera pesos para outra — o análogo neural mais direto do eval do LISP, em que código produz código. Uma hypernetwork que gerasse seus próprios pesos seria um quine neural.

Barret Zoph e Quoc V. Le, “Neural Architecture Search with Reinforcement Learning,” ICLR 2017; arXiv:1611.01578. Enquadra o design de arquiteturas como geração de sequências, em que um controlador RNN gera descrições de arquiteturas como strings (essencialmente programas serializados). NAS é, fundamentalmente, busca de programas.

Esteban Real et al., “Regularized Evolution for Image Classifier Architecture Search,” AAAI 2019; arXiv:1802.01548. Trata arquiteturas como estruturas simbólicas mutáveis sujeitas a transformação — análogas a macros LISP transformando S-expressions.

Síntese híbrida simbólica-neural

Kevin Ellis et al., “DreamCoder: Growing Generalizable, Interpretable Knowledge with Wake-Sleep Bayesian Program Learning,” PLDI 2021; arXiv:2006.08381. Opera em uma linguagem funcional com primitivas tipo-LISP (car, cdr), cultiva sua própria linguagem aprendendo novas abstrações, e usa reconhecimento neural para guiar a busca. A fase de library learning é metaprogramação: o sistema reescreve sua própria biblioteca padrão.

Alexander L. Gaunt et al., “TerpreT: A Probabilistic Programming Language for Program Induction,” arXiv:1608.04428, 2016. Neural TerpreT (NTPT) cria programas híbridos que chamam sub-rotinas neurais aprendidas — um interpretador diferenciável, essencialmente um eval neural.

Matej Balog et al., “DeepCoder: Learning to Write Programs,” ICLR 2017; arXiv:1611.01989. Predição neural de quais primitivas de programação funcional (map, filter, scanl) aparecem em um programa, guiando a busca sobre programas funcionais.

Swarat Chaudhuri et al., “Neurosymbolic Programming,” Foundations and Trends in Programming Languages 7(3):158–243, 2021. Survey abrangente unindo deep learning e síntese de programas: funções como programas usando módulos neurais lado a lado com primitivas simbólicas.

Ziyang Li, Jiani Huang e Mayur Naik, “Scallop: A Language for Neurosymbolic Programming,” PLDI 2023; arXiv:2304.04812. Combina programação lógica baseada em Datalog com raciocínio diferenciável via semirings de proveniência.


7. Computação neural auto-referencial: Schmidhuber e além

A linhagem de Schmidhuber

Jürgen Schmidhuber, “A ‘Self-Referential’ Weight Matrix,” Proc. ICANN ‘93, pp. 446–450, Springer, 1993. Derivou um algoritmo de aprendizagem baseado em gradiente para uma rede que pode “falar sobre sua própria matriz de pesos em termos de ativações” — unidades de entrada/saída especiais para “analisar e manipular explicitamente todos os seus próprios pesos, incluindo aqueles responsáveis por analisar e manipular pesos”.

Jürgen Schmidhuber, “Gödel Machines: Self-Referential Universal Problem Solvers Making Provably Optimal Self-Improvements,” arXiv:cs/0309048, 2003; publicado em Goertzel & Pennachin (eds.), Artificial General Intelligence, Springer, 2007, pp. 199–226. “A primeira classe de solucionadores de problemas matematicamente rigorosos, gerais, plenamente auto-referenciais, auto-aprimorantes e otimamente eficientes.” Uma máquina de Gödel “reescreve qualquer parte de seu próprio código assim que encontra uma prova de que a reescrita é útil”. O Teorema da Otimalidade Global prova que auto-reescritas são globalmente ótimas. Schmidhuber observou que a máquina é “‘consciente’ ou ‘autoconsciente’ no sentido de que todo seu comportamento é aberto à auto-introspecção e modificável… E esse tipo de auto-referência total é precisamente a razão de sua otimalidade”.

Kazuki Irie, Imanol Schlag, Róbert Csordás e Jürgen Schmidhuber, “A Modern Self-Referential Weight Matrix That Learns to Modify Itself,” ICML 2022, PMLR 162; arXiv:2202.05780. Torna a visão de 1993 prática usando Fast Weight Programmers e Transformers lineares. “A WM de uma NN auto-referencial pode continuar modificando rapidamente toda a si mesma em tempo de execução. Em princípio, tais NNs podem meta-aprender a aprender, e meta-meta-aprender a meta-aprender a aprender, e assim por diante, no sentido do auto-aprimoramento recursivo.”

Louis Kirsch e Jürgen Schmidhuber, “Eliminating Meta Optimization Through Self-Referential Meta Learning,” arXiv:2212.14392, 2022. Prova que arquiteturas auto-referenciais requerem compartilhamento de parâmetros (N² pesos derivados de N ativações). Propõe Fitness Monotonic Execution para auto-modificação sem meta-otimização explícita.

Imanol Schlag, Kazuki Irie e Jürgen Schmidhuber, “Linear Transformers Are Secretly Fast Weight Programmers,” ICML 2021. Demonstra que transformers lineares equivalem aos fast weight programmers dos anos 1990 — conectando a linhagem auto-referencial de Schmidhuber diretamente às arquiteturas transformer modernas.

Arquiteturas auto-modificáveis (2022–2025)

Xunjian Yin et al., “Gödel Agent: A Self-Referential Agent Framework for Recursive Self-Improvement,” arXiv:2410.04444, 2024. Agente baseado em LLM que modifica recursivamente sua própria lógica e comportamento, inspirado na máquina de Gödel de Schmidhuber.

Andrea Ferigo e Giovanni Iacca, “Self-Building Neural Networks,” GECCO ‘23; arXiv:2304.01086. Redes que constroem a própria estrutura durante a execução da tarefa via aprendizagem hebbiana e poda.

Louis Kirsch e Jürgen Schmidhuber, “Meta Learning Backpropagation And Improving It,” NeurIPS 2021; arXiv:2012.14905. Variable Shared Meta Learning (VSML): uma rede cujos pesos são substituídos por pequenos LSTMs pode implementar backpropagation puramente em modo direto — a rede aprende seu próprio algoritmo de aprendizagem.


8. Clojure/LISP + ML: a interseção prática

Ecossistema Clojure

O ecossistema ML em Clojure inclui Cortex (construção/treinamento de redes neurais, por Thinktopic), Deep Diamond (computação tensorial com GPU via Intel MKL-DNN e Nvidia cuDNN, por Dragan Djuric), scicloj.ml (pipelines de ML componíveis), clj-djl (wrapper da Amazon Deep Java Library) e DL4J/DL4CLJ (deep learning na JVM). A série de blog de Djuric “Deep Learning in Clojure from Scratch to GPU” mostra como implementar redes neurais do zero em “algumas dezenas de linhas de código Clojure”. A biblioteca de interoperabilidade com Python libpython-clj permite uso direto de TensorFlow/PyTorch a partir de Clojure.

ML em Common Lisp

MGL (de Gábor Melis) suporta redes com backpropagation, máquinas de Boltzmann e processos gaussianos. TH oferece deep learning com autograd e modelos pré-treinados (VGG16, ResNet50, etc.). NeuraLisp oferece ML modular com operações tensoriais, autograd e suporte a GPU. O Lush (Lisp Universal Shell) de Yann LeCun foi um dialeto Lisp desenhado especificamente para pesquisa em ML.

Scheme + programação diferenciável

O compilador STALINGRAD de Pearlmutter e Siskind (Stalin∇) compila VLAD, uma linguagem tipo-Scheme com AD de primeira classe, para código nativo eficiente. Jeffrey Mark Siskind, “Scheme as a Framework for Deep Learning,” ICFP Scheme Workshop 2021. Argumenta diretamente que as propriedades do Scheme o tornam adequado como framework de DL.

Sistemas híbridos críticos

Garrett E. Katz et al., “NeuroLISP: High-Level Symbolic Programming with Attractor Neural Networks,” Neural Networks 146:230–251, 2022. Implementa um interpretador LISP em substrato neural usando dinâmica de atratores — memória de trabalho temporalmente local, estruturas de dados composicionais, escopo de variáveis e manipulação de programas-como-dados. Alcança desempenho perfeito no benchmark PCFG SET. Esta é a ponte mais direta: redes neurais suportando nativamente o paradigma código-como-dado do LISP.

Chen Liang et al., “Neural Symbolic Machines: Learning Semantic Parsers on Freebase with Weak Supervision,” ACL 2017, pp. 23–33. Combina um “programador” neural seq2seq com um “computador” simbólico que é um interpretador Lisp. A rede aprende a escrever programas Lisp a partir de supervisão fraca.

“From Tool Calling to Symbolic Thinking: LLMs in a Persistent Lisp Metaprogramming Loop,” arXiv:2506.10021, 2025. Augmenta LLMs com um REPL Common Lisp persistente para construção dinâmica de ferramentas, raciocínio reflexivo e metaprogramação.

Eshkol (github.com/tsotchke/eshkol) é uma linguagem tipo-Lisp de alto desempenho com AD nativo (simbólico, modo direto, modo reverso, além de operadores de cálculo vetorial). Funções lambda mantêm representações de S-expression via um registro em tempo de execução — implementando diretamente o conceito da tese de programação diferenciável homoicônica.

Redes neurais em Lisp puro (SectorLISP): Hikaru Ikuta (2022) implementou uma rede neural em SectorLISP — um interpretador Lisp de setor de boot com 512 bytes — sem números embutidos, usando apenas manipulação simbólica de átomos e listas, construindo aritmética de ponto fixo e multiplicação de matrizes a partir dos primeiros princípios.


9. Auto-consciência filosófico-computacional como moldura

Daniel C. Dennett, The Intentional Stance, MIT Press, 1987. Define três posturas (física, de projeto, intencional) para prever o comportamento de sistemas. Qualquer sistema cujo comportamento seja melhor previsto atribuindo-lhe crenças e desejos é um “sistema intencional, qualquer que sejam suas entranhas”. Aplicado ao ML moderno: Cominelli et al. (2021) argumentam que a postura intencional é “a única estratégia viável” para compreender o comportamento de IAs complexas.

Douglas R. Hofstadter, I Am a Strange Loop, Basic Books, 2007. Refina o conceito de strange loop: a autoconsciência emerge de ciclos auto-referenciais em sistemas simbólicos. Afirmação formal: “O pronome ’eu’ não envolve uma auto-referência mais forte do que a construção de Gödel.” Defende a causalidade descendente — padrões auto-referenciais de alto nível podem ser causalmente eficazes.

Thomas Nagel, “What Is It Like to Be a Bat?” The Philosophical Review 83(4):435–450, 1974. Argumenta que a experiência subjetiva tem um caráter irredutivelmente em primeira pessoa que nenhuma descrição objetiva consegue capturar. Serve de contraponto: embora um sistema auto-modelante possa representar seus próprios estados, o argumento de Nagel marca a fronteira do que a auto-referência computacional pode alcançar.

Anthropic, “Emergent Introspective Awareness in Large Language Models,” Transformer Circuits, 2025. Constata que modelos Claude alcançam alta consciência introspectiva verdadeiro-positiva com zero falsos positivos quando testados para detectar representações de estado interno injetadas. O pós-treinamento é chave para eliciar consciência introspectiva.

“Large Language Models Report Subjective Experience Under Self-Referential Processing,” arXiv:2510.24797, 2025. Prompting auto-referencial consistentemente eliça relatos de experiência estruturados em diferentes famílias de modelos; ocorre convergência semântica entre modelos. Conecta-se diretamente às construções gödelianas de Hofstadter.


Como as peças se encaixam: a arquitetura da tese central

As nove áreas formam um pipeline intelectual preciso que sustenta os dois artigos:

  • Camada de fundação (Artigos 1 & 2): a homoiconicidade de McCarthy + o teorema da recursão de Kleene + a semântica de pontos fixos de Scott estabelecem que a auto-referência é simultaneamente acessível na prática (LISP) e matematicamente inevitável (em qualquer sistema suficientemente expressivo).

  • Camada algébrica (Artigos 1 & 2): a álgebra FP de Backus + o formalismo de Bird-Meertens + a semântica categórica mostram que programas se compõem via uma álgebra fechada de formas combinadoras com leis equacionais para transformação.

  • Camada diferenciável (Artigo 2 principalmente): as transformações funcionais do JAX + o AD-como-funtor de Elliott + o backprop-como-funtor de Fong-Spivak demonstram que a aprendizagem baseada em gradiente é um sistema algébrico de transformação de programas que preserva estrutura composicional — a visão de Backus realizada para computação diferenciável.

  • Camada de meta-aprendizagem (Artigos 1 & 2): ICL como descida implícita do gradiente (von Oswald, Akyürek) + transformers como computadores programáveis (Giannou) + completude de Turing (Pérez) mostram que transformers implementam algoritmos de aprendizagem em sua passagem direta — são meso-otimizadores, sistemas computacionais auto-modificáveis.

  • Camada de auto-referência (Artigos 1 & 2): as matrizes de pesos auto-referenciais de Schmidhuber + a torre reflexiva de Smith + hypernetworks demonstram que a auto-referência viabiliza o auto-aprimoramento recursivo em sistemas neurais.

  • Camada de síntese (experimentos do Artigo 2): DreamCoder + NeuroLISP + Eshkol + Neural Symbolic Machines comprovam a viabilidade prática de representar computação neural em estruturas tipo-LISP. Os experimentos propostos — redes neurais como S-expressions, busca de arquitetura como transformação simbólica, um avaliador metacircular neural — vivem nessa interseção.

A peça faltante que ambos os artigos podem articular: nenhum sistema existente unifica plenamente homoiconicidade, diferenciabilidade e auto-modificação em um único arcabouço. DreamCoder é o que mais se aproxima, mas seus componentes neural e simbólico permanecem separados. Uma arquitetura diferenciável plenamente homoicônica — em que a estrutura da rede é representada no mesmo formato que ela processa, e a otimização baseada em gradiente opera sobre essa auto-representação — fecharia o ciclo de McCarthy, passando por Backus, até os transformers modernos, realizando computacionalmente aquilo que Hofstadter descreveu filosoficamente: um strange loop em que a representação que o sistema faz de si mesmo é causalmente conectada à sua própria operação.