El arco intelectual que va del eval/apply de McCarthy en 1960 a los transformers autorreferenciales modernos no es una metáfora — es un linaje técnico preciso. La homoiconicidad del LISP estableció que programas y datos pueden habitar el mismo espacio representacional; el álgebra FP de Backus mostró que los programas se componen mediante un conjunto cerrado de combinadores algebraicos; la semántica denotacional fundamentó la autorreferencia en la teoría de puntos fijos; y los transformers actuales implementan algoritmos de aprendizaje en su pase directo, convirtiéndose efectivamente en sistemas computacionales automodificables. Esta revisión traza ese linaje a través de nueve áreas de investigación y ofrece la base bibliográfica para dos artículos: uno conceptual que conecta la autorreferencia del LISP con la autoconciencia emergente en el ML moderno, y otro técnico que propone experimentos de manipulación diferenciable de arquitecturas basadas en LISP.


1. Autorreferencia y homoiconicidad en LISP: donde el código se volvió dato

Referencias fundacionales

John McCarthy, “Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I,” Communications of the ACM 3(4):184–195, 1960. McCarthy introdujo las S-expressions como representación uniforme para programas y datos, y definió la S-función universal apply, que describió como desempeñando “el papel teórico de una máquina de Turing universal y el papel práctico de un intérprete”. La implementación de eval como código ejecutable en el IBM 704 por Steve Russell — contra las propias expectativas de McCarthy — creó el primer sistema de programación autointerpretante. El resultado clave: el par eval/apply del LISP constituye un sistema computacional autodescriptivo, un programa que interpreta programas en su propia representación de datos.

Harold Abelson, Gerald Jay Sussman y Julie Sussman, Structure and Interpretation of Computer Programs, MIT Press, 1984 (2ª ed. 1996). El capítulo 4 presenta el evaluador metacircular: un intérprete Scheme escrito en Scheme. El evaluador se construye a partir de dos procedimientos mutuamente recursivos (eval y apply) que especifican completamente la semántica del lenguaje. SICP afirma: “Un evaluador escrito en el mismo lenguaje que evalúa se dice metacircular”. Es la demostración canónica de que los lenguajes homoicónicos permiten una autodescripción completa.

John C. Reynolds, “Definitional Interpreters for Higher-Order Programming Languages,” Proceedings of the ACM Annual Conference, 2:717–740, 1972. Reynolds acuñó el término “metacircular” y mostró que los autointérpretes heredan propiedades semánticas (p.ej. orden de evaluación) de su metalenguaje, introduciendo la desfuncionalización y la transformación CPS para resolver las ambigüedades resultantes.

Combinadores de punto fijo y el teorema de recursión de Kleene

Haskell B. Curry y Robert Feys, Combinatory Logic, Volume I, North-Holland, 1958. Define el combinador Y (Y = λf.(λx.f(x x))(λx.f(x x))), que permite la recursión sin autorreferencia explícita — una función no necesita conocer su propio nombre. La autorreferencia emerge solo de las reglas de composición.

Stephen C. Kleene, Introduction to Metamathematics, North-Holland, 1952. El Segundo Teorema de Recursión afirma: para toda función computable total f, existe un índice n tal que φ_n = φ_{f(n)}. Toda transformación computable de programas tiene un punto fijo. Esto garantiza la existencia de quines, autointérpretes y todas las formas de autorreferencia computacional. Como observó Jones, “el teorema de recursión es casi trivial en un lenguaje reflexivo”.

Oleg Kiselyov, “Kleene’s Second Recursion Theorem: A Functional Pearl,” borrador ~2018. Tiende un puente entre la teoría de la computabilidad y la metaprogramación funcional, notando que “la quotación al estilo Lisp en particular ayuda” en implementaciones eficientes del teorema de recursión. Demuestra que la prueba del SRT de Kleene es estructuralmente análoga a la construcción del combinador Y.

Joseph Helfer, “Y is a Least Fixed Point Combinator,” arXiv:2504.19379, 2025. Prueba que el combinador Y de Curry produce el menor punto fijo cuando los términos del cálculo lambda se ven como funciones parciales, conectando puntos fijos del lambda con la teoría de dominios.

Homoiconicidad

Calvin N. Mooers y L. Peter Deutsch, “TRAC, A Text-Handling Language,” Proceedings of the ACM ‘65, pp. 229–246, 1965. Origen del término: “Como los procedimientos y el texto de TRAC tienen la misma representación dentro y fuera del procesador, el término homoicónico es aplicable, de homo que significa lo mismo e icon que significa representación.”

Alan Kay, The Reactive Engine, tesis doctoral, University of Utah, 1969. Popularizó el término, describiendo LISP y TRAC como “homoicónicos en el sentido de que sus representaciones internas y externas son esencialmente las mismas”.

Homoiconicidad del LISP y 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 en cálculo lambda (esencialmente árboles de S-expressions). Un algoritmo wake-sleep alterna síntesis de programas, refactorización en abstracciones reutilizables y entrenamiento de una red neuronal de reconocimiento. El sistema cultiva su propio lenguaje de programación — una forma de metaprogramación directamente análoga a defun y al sistema de macros de LISP.

Steven T. Piantadosi, “The Computational Origin of Representation,” Minds and Machines 31:1–58, 2021. Propone que la cognición opera a través de un Lenguaje del Pensamiento basado en lógica combinatoria. Observa: “Curiosamente, el poder computacional para usar recursión viene gratis si el cálculo lambda es el sistema representacional: la recursión puede construirse mediante el combinador Y a partir de nada más que las leyes de composición del cálculo lambda.”

Martín Abadi y Gordon D. Plotkin, “A Simple Differentiable Programming Language,” Proc. ACM Program. Lang. 4, POPL, Artículo 38, 2020; arXiv:1911.04523. Define un lenguaje con funciones recursivas y diferenciación en modo inverso de primera clase, probando que las semánticas operacional y denotacional coinciden. La diferenciación como operación del lenguaje es paralela a eval: así como eval mapea código-como-dato a valores, el operador de diferenciación mapea programas a sus programas derivados.

Bohdan B. Khomtchouk, Edmund Weitz y 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 la homoiconicidad del Lisp, su sistema de macros y las capacidades de construcción de DSLs lo hacen singularmente adecuado para construir aplicaciones de IA/ML — “la máquina que se construye a sí misma”.


2. El álgebra FP de Backus: programas como objetos algebraicos

La conferencia 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 criticó los lenguajes convencionales como “gordos y débiles” debido a su “estilo primitivo palabra-por-palabra” e identificó “la sentencia de asignación como el cuello de botella de von Neumann”. Propuso FP: un sistema sin variables, a nivel de funciones, construido sobre formas combinadoras (composición, construcción, aplicar-a-todos/map, condición, insertar/reducir) que funcionan como operaciones de un álgebra de programas. Su ejemplo canónico — Def Innerproduct = (/+) ∘ (α×) ∘ Transpose — define el producto interno componiendo tres operaciones sin nombrar variables. Las formas combinadoras son cerradas: componerlas siempre produce funciones dentro del sistema FP.

El mapeo directo a las primitivas de redes neuronales es llamativo: composición = encadenado de capas; construcción = multi-head/ramificación; aplicar-a-todos = convolución/map; insertar/reducir = pooling; condición = mecanismos de gating.

John Backus, “The Algebra of Functional Programs: Function Level Reasoning, Linear Equations, and Extended Definitions,” LNCS 107, Springer, 1981. Extiende el álgebra FP con razonamiento a nivel de funciones y ecuaciones lineales.

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. Historia exhaustiva del BMF, “un cálculo para transformación de programas por razonamiento ecuacional en estilo funcional”. Los operadores del BMF — map, fold/reduce, scan, filter — son exactamente las formas combinadoras de Backus puestas sobre bases categóricas, con leyes de fusión que permiten derivación sistemática de programas.

Richard S. Bird, “An Introduction to the Theory of Lists,” Monograph PRG-56, Oxford, 1986. Estableció la teoría de listas como marco calculacional, introduciendo el lema de homomorfismo y las leyes de fusión.

Richard S. Bird y Oege de Moor, The Algebra of Programming, Prentice-Hall, 1997. La síntesis definitiva del BMF usando teoría de categorías (álgebras iniciales, catamorfismos) para el cálculo de programas.

Semántica categórica

Erik Meijer, Maarten Fokkinga y Ross Paterson, “Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire,” LNCS 523, pp. 124–144, 1991. Introduce catamorfismos, anamorfismos, hilomorfismos y paramorfismos como operadores de recursión sobre tipos de datos algebraicos — la culminación categórica del álgebra de Backus.

Tatsuya Hagino, “A Categorical Programming Language,” tesis doctoral, University of Edinburgh, 1987; arXiv:2010.05167. Presenta tipos de datos basados en F,G-diálgebras, conectando definiciones al estilo Backus con (co)álgebras iniciales/finales.

Revisiones modernas conectadas con el ML

Christopher Olah, “Neural Networks, Types, and Functional Programming,” blog, septiembre 2015. La articulación más explícita de la conexión Backus–deep learning. Olah identifica: RNNs codificadoras = folds (el insertar/reducir de Backus); RNNs generadoras = unfolds; RNNs generales = scanl; redes recursivas = catamorfismos. “Todo modelo en deep learning que conozco implica optimizar funciones compuestas. Creo que ese es el corazón de lo que estudiamos.”

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. Propone que todas las arquitecturas principales (RNNs, CNNs, GNNs, transformers) son instancias de una única teoría algebraica: álgebras de mónada en una 2-categoría de mapas paramétricos. Es la afirmación moderna más fuerte de que el ML es fundamentalmente algebraico.


3. Computación reflexiva y automodificable: torres hasta arriba

Reflexión procedimental

Brian Cantwell Smith, Procedural Reflection in Programming Languages, tesis doctoral, MIT, 1982 (MIT-TR-272). Introdujo la reflexión procedimental a través de 3-LISP, donde cada programa es ejecutado por un intérprete metacircular en el mismo lenguaje, formando una torre infinita de meta-intérpretes. Tres requisitos para el autorrazonamiento computacional: autorreferencia, una teoría incrustada de uno mismo y una conexión causal entre esa teoría y el comportamiento del sistema.

Brian Cantwell Smith, “Reflection and Semantics in Lisp,” POPL ‘84, pp. 23–35, 1984. Presentación condensada: “los procedimientos reflexivos son esencialmente análogos a subrutinas que deben ejecutarse ’en la implementación’” y “no hay una torre de lenguajes distintos — hay un único dialecto (3-LISP) hasta arriba”.

Pattie Maes, “Concepts and Experiments in Computational Reflection,” OOPSLA ‘87, pp. 147–155, 1987. Formalizó la reflexión computacional: un sistema reflexivo es aquel que “razona sobre sí mismo y actúa sobre sí mismo”. Distinguió la reflexión estructural (introspección de la estructura del programa) de la reflexión conductual (modificar la semántica en tiempo de ejecución).

La torre reflexiva

Mitchell Wand y 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. Proporcionó semántica denotacional rigurosa para la torre infinita de intérpretes metacirculares de Smith sin usar reflexión para explicar reflexión.

Nada Amin y Tiark Rompf, “Collapsing Towers of Interpreters,” Proc. ACM Program. Lang. 2, POPL, 2017. Muestra cómo las torres de intérpretes pueden colapsarse en un compilador de una sola pasada mediante staging multinivel — conectando la torre reflexiva con la compilación moderna.

Hofstadter: strange loops como puntos fijos

Douglas R. Hofstadter, Gödel, Escher, Bach: An Eternal Golden Braid, Basic Books, 1979. El contenido matemático (no meramente filosófico): la numeración de Gödel permite que enunciados sobre un sistema formal se codifiquen dentro de él — el caso paradigmático de autorreferencia computacional. Hofstadter acuñó “quining” para la construcción autorreferencial en la que un enunciado se aplica a su propia cita. Los strange loops se definen como: “Un desplazamiento de un nivel de abstracción a otro, que parece un movimiento ascendente en una jerarquía, pero que, de algún modo, los sucesivos desplazamientos ‘hacia arriba’ acaban dando lugar a un ciclo cerrado.”

El Lema Diagonal (Gödel 1931, generalizado por Carnap 1934): Para toda fórmula ψ(x) con una variable libre en una teoría suficientemente fuerte T, existe una sentencia φ tal que T ⊢ φ ↔ ψ(⌜φ⌝). Es la formalización matemática de la autorreferencia — estrechamente relacionada con el teorema de recursión de Kleene.

Semántica de puntos fijos

Dana S. Scott, “Outline of a Mathematical Theory of Computation,” Technical Monograph PRG-2, Oxford, 1970; “Continuous Lattices,” LNMS 274, 1972. La teoría de dominios de Scott proporciona la base matemática: su construcción crucial resolvió D ≅ [D → D], creando un dominio isomorfo a su propio espacio de funciones — la forma matemática de la homoiconicidad. El teorema de punto fijo de Kleene-Scott garantiza que, para toda función continua f sobre un orden parcial completo, el menor punto fijo existe como ⊔{fⁿ(⊥) : n ≥ 0}.

Samson Abramsky y Achim Jung, “Domain Theory,” Handbook of Logic in Computer Science 3:1–168, Oxford University Press, 1994. La referencia autoritativa sobre el papel de la teoría de dominios en la semántica denotacional.


4. Transformers como computadores universales y meta-aprendices en contexto

Completitud de Turing

Jorge Pérez, Javier Marinković y Pablo Barceló, “On the Turing Completeness of Modern Neural Network Architectures,” ICLR 2019; arXiv:1901.03429. Prueba que los transformers son Turing-completos “con base en su capacidad de computar y acceder a representaciones densas internas de los datos” — sin memoria externa. Asume activaciones racionales con precisión arbitraria.

Jorge Pérez, Pablo Barceló y Javier Marinković, “Attention is Turing Complete,” JMLR 22(75):1–35, 2021. Versión extendida que muestra que un transformer mínimo encoder-decoder (encoder de una capa, decoder de tres) basta. La dimensión del modelo escala como d = 2|Q| + 4|Σ| + 11.

Mostafa Dehghani et al., “Universal Transformers,” ICLR 2019; arXiv:1807.03819. Añade recurrencia con pesos compartidos a lo largo de la profundidad con Adaptive Computation Time, produciendo una arquitectura prácticamente Turing-completa. “Dada memoria suficiente, el Universal Transformer es computacionalmente universal.”

Angeliki Giannou et al., “Looped Transformers as Programmable Computers,” ICML 2023; arXiv:2301.13196. Muestra que 13 capas constantes en un bucle pueden emular un pequeño computador con conjunto de instrucciones. “Un único transformer congelado, instruido por su entrada, puede emular una calculadora básica, una biblioteca básica de álgebra lineal e incluso un algoritmo completo de backpropagation y aprendizaje en contexto.” La entrada actúa como una “tarjeta perforada” — el transformer se vuelve literalmente un computador programable.

Aprendizaje en contexto como optimización implícita

Ekin Akyürek et al., “What Learning Algorithm is In-Context Learning? Investigations with Linear Models,” ICLR 2023; arXiv:2211.15661. Prueba constructivamente que los transformers pueden implementar descenso de gradiente y regresión ridge en forma cerrada. Los transformers entrenados transitan entre distintos estimadores clásicos según la profundidad y el nivel de ruido.

Johannes von Oswald et al., “Transformers Learn In-Context by Gradient Descent,” ICML 2023, PMLR 202:35151–35174; arXiv:2212.07677. Muestra la equivalencia formal entre una sola capa de self-attention lineal y un paso de descenso de gradiente sobre una pérdida de regresión. “Los transformers entrenados se convierten en meso-optimizadores — es decir, aprenden modelos por descenso de gradiente en su pase directo.”

Damai Dai et al., “Why Can GPT Learn In-Context?” Findings of ACL 2023; arXiv:2212.10559. Deriva una forma dual entre la atención del transformer y el descenso de gradiente: los valores de atención actúan como “meta-gradientes”, y el ICL es análogo a aplicar actualizaciones de gradiente a partir de los ejemplos demostrativos.

Aprendizaje en contexto como inferencia bayesiana

Sang Michael Xie et al., “An Explanation of In-context Learning as Implicit Bayesian Inference,” ICLR 2022; arXiv:2111.02080. “El aprendizaje en contexto emerge teórica y empíricamente cuando la distribución de preentrenamiento es una mezcla, lo que resulta en que el modelo de lenguaje realice implícitamente inferencia bayesiana en su pase directo.”

Samuel Müller et al., “Transformers Can Do Bayesian Inference,” ICLR 2022; arXiv:2112.10510. Introduce Prior-Data Fitted Networks (PFNs): un único pase directo de transformer aproxima distribuciones predictivas posteriores bayesianas, logrando ganancias >200× respecto a MCMC/VI.

Transformers como meta-aprendices

Shivam Garg et al., “What Can Transformers Learn In-Context? A Case Study of Simple Function Classes,” NeurIPS 2022; arXiv:2208.01066. Demuestra que los transformers codifican diversos algoritmos de aprendizaje (igualando OLS, Lasso, descenso de gradiente, aprendizaje de árboles de decisión) en un único pase directo.

Gail Weiss, Yoav Goldberg y Eran Yahav, “Thinking Like Transformers,” ICML 2021; arXiv:2106.06981. Propone RASP (Restricted Access Sequence Processing Language) como modelo computacional para encoders transformer. “El proceso iterativo de un transformer no va a lo largo de la secuencia de entrada, sino a lo largo de la profundidad del cómputo.” Los programas RASP se compilan en arquitecturas transformer — aportando una visión formal, de lenguaje de programación, de la atención como composición de funciones.


5. Programación diferenciable como transformación algebraica de programas

AD como forma combinadora

Barak A. Pearlmutter y Jeffrey Mark Siskind, “Reverse-mode AD in a Functional Framework: Lambda the Ultimate Backpropagator,” ACM TOPLAS 30(2):7:1–7:36, 2008. Muestra que el AD en modo inverso puede ser una función de primera clase en un cálculo lambda aumentado, logrando clausura (la derivada permanece en el mismo lenguaje). El puente más directo entre AD y Backus: la diferenciación es una forma combinadora que transforma programas en programas preservando propiedades esenciales.

Conal Elliott, “The Simple Essence of Automatic Differentiation,” Proc. ACM Program. Lang. 2, ICFP, Artículo 70, 2018; arXiv:1804.00746. Deriva el AD a partir de especificaciones categóricas. “Los cómputos expresados en este vocabulario son diferenciables por construcción, gracias a los bloques básicos de la teoría de categorías.” El AD es un funtor — un mapa entre categorías que preserva estructura. La regla de la cadena se vuelve preservación de la composición: D(g∘f) = D(g)∘D(f).

Conal Elliott, “Compiling to Categories,” Proc. ACM Program. Lang. 1, ICFP, Artículo 27, 2017. Los programas funcionales tipados pueden reinterpretarse en cualquier categoría cartesiana cerrada, permitiendo traducción automática a AD, circuitos de hardware o análisis por intervalos. La realización moderna más directa de la visión de Backus.

Fei Wang et al., “Demystifying Differentiable Programming: Shift/Reset the Penultimate Backpropagator,” Proc. ACM Program. Lang. 3, ICFP, Artículo 96, 2019; arXiv:1803.10228. Revela una conexión estrecha entre el AD en modo inverso y las continuaciones delimitadas (shift/reset). La backpropagation es una instancia específica de transformación CPS — otra transformación algebraica de programas.

JAX como el álgebra de Backus hecha realidad

James Bradbury et al., JAX: composable transformations of Python+NumPy programs, 2018; github.com/jax-ml/jax. Los grad, jit, vmap y pmap de JAX son transformaciones de orden superior componibles — directamente análogas a las formas combinadoras de Backus. jit(vmap(grad(loss))) compone tres transformaciones en un único cómputo optimizado. Todas operan mediante tracing a una representación intermedia (jaxpr) que puede seguir transformándose.

Roy Frostig, Matthew James Johnson y Chris Leary, “Compiling machine learning programs via high-level tracing,” MLSys 2018. Describe el mecanismo de tracing de JAX: las funciones Python se capturan como grafos de operaciones primitivas y luego se optimizan algebraicamente vía XLA (fusión, propagación de constantes, simplificación) — un pipeline concreto de transformaciones algebraicas de programas.

Teoría de categorías en ML

Brendan Fong, David I. Spivak y Rémy Tuyéras, “Backprop as Functor: A compositional perspective on supervised learning,” LICS 2019; arXiv:1711.10455. Define una categoría monoidal Learn donde los morfismos son “aprendices” y el descenso de gradiente define un funtor monoidal de funciones euclidianas parametrizadas a aprendices. La composición de aprendices refleja la composición de funciones de Backus. La estructura monoidal corresponde a las formas combinadoras paralelas (construcción).

G.S.H. Cruttwell, B. Gavranović, N. Ghani, P.W. Wilson y F. Zanasi, “Categorical Foundations of Gradient-Based Learning,” ESOP 2022, LNCS 13240; arXiv:2103.01931. Propone semántica categórica mediante lentes, mapas paramétricos (construcción Para) y categorías de derivadas inversas. Muestra que todo el pipeline de aprendizaje basado en gradiente — modelo, optimizador, pérdida — consiste en lentes paramétricas. Abarca ADAM, AdaGrad, momento de Nesterov, MSE y softmax cross-entropy.

Bruno Gavranović, “Fundamental Components of Deep Learning: A category-theoretic approach,” tesis doctoral, University of Strathclyde; arXiv:2403.13001, 2024. Identifica dos propiedades fundamentales del deep learning — paramétrica y bidireccional — modeladas por actegorías y ópticas ponderadas. Combinarlas da ópticas paramétricas ponderadas con conexiones a la actualización bayesiana y a la teoría de juegos.

Dan Shiebler, Bruno Gavranović y Paul Wilson, “Category Theory in Machine Learning,” arXiv:2106.07032, 2021. Survey que señala que “como la mayoría de los sistemas modernos de machine learning son inherentemente composicionales, no es de extrañar que varios autores hayan comenzado a estudiarlos a través de la lente de la teoría de categorías”.

Lenguajes de programación diferenciable

Adam Paszke et al., “Getting to the Point: Index Sets and Parallelism-Preserving Autodiff for Pointful Array Programming,” Proc. ACM Program. Lang. 5, ICFP, Artículo 88, 2021; arXiv:2104.05372. Dex trata los arrays como funciones memoizadas ansiosamente sobre conjuntos de índices tipados, permitiendo manipulaciones abstractas de función (currying) en arrays con AD en modo inverso que preserva el paralelismo.


6. Síntesis de programas neuronales y meta-aprendizaje: programas que escriben programas

Referencias centrales

Scott Reed y Nando de Freitas, “Neural Programmer-Interpreters,” ICLR 2016; arXiv:1511.06279. NPI aprende a componer programas de nivel inferior para expresar los de nivel superior mediante un núcleo recurrente con memoria persistente de programas. La memoria de programas es análoga a un entorno LISP donde las definiciones de función son de primera clase.

Chelsea Finn, Pieter Abbeel y Sergey Levine, “Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks,” ICML 2017; arXiv:1703.03400. La optimización de dos niveles de MAML (el bucle externo optimiza la inicialización, el interno adapta) es paralela al paradigma de programa automodificable: el sistema modifica sus propios parámetros para mejorar su capacidad de modificarse.

David Ha, Andrew Dai y Quoc V. Le, “HyperNetworks,” ICLR 2017; arXiv:1609.09106. Una red genera pesos para otra — el análogo neuronal más directo del eval del LISP, donde el código produce código. Una hypernetwork que generase sus propios pesos sería un quine neuronal.

Barret Zoph y Quoc V. Le, “Neural Architecture Search with Reinforcement Learning,” ICLR 2017; arXiv:1611.01578. Enmarca el diseño de arquitecturas como generación de secuencias, donde un controlador RNN genera descripciones de arquitecturas como cadenas (esencialmente programas serializados). NAS es, fundamentalmente, búsqueda de programas.

Esteban Real et al., “Regularized Evolution for Image Classifier Architecture Search,” AAAI 2019; arXiv:1802.01548. Trata las arquitecturas como estructuras simbólicas mutables sujetas a transformación — análogas a los macros LISP transformando S-expressions.

Síntesis híbrida simbólica-neuronal

Kevin Ellis et al., “DreamCoder: Growing Generalizable, Interpretable Knowledge with Wake-Sleep Bayesian Program Learning,” PLDI 2021; arXiv:2006.08381. Opera en un lenguaje funcional con primitivas tipo LISP (car, cdr), cultiva su propio lenguaje aprendiendo nuevas abstracciones y usa reconocimiento neuronal para guiar la búsqueda. La fase de library learning es metaprogramación: el sistema reescribe su propia biblioteca estándar.

Alexander L. Gaunt et al., “TerpreT: A Probabilistic Programming Language for Program Induction,” arXiv:1608.04428, 2016. Neural TerpreT (NTPT) crea programas híbridos que llaman subrutinas neuronales aprendidas — un intérprete diferenciable, esencialmente un eval neuronal.

Matej Balog et al., “DeepCoder: Learning to Write Programs,” ICLR 2017; arXiv:1611.01989. Predicción neuronal de qué primitivas de programación funcional (map, filter, scanl) aparecen en un programa, guiando la búsqueda sobre programas funcionales.

Swarat Chaudhuri et al., “Neurosymbolic Programming,” Foundations and Trends in Programming Languages 7(3):158–243, 2021. Survey exhaustivo que une deep learning y síntesis de programas: funciones como programas usando módulos neuronales junto a primitivas simbólicas.

Ziyang Li, Jiani Huang y Mayur Naik, “Scallop: A Language for Neurosymbolic Programming,” PLDI 2023; arXiv:2304.04812. Combina programación lógica basada en Datalog con razonamiento diferenciable mediante semirings de procedencia.


7. Computación neuronal autorreferencial: Schmidhuber y más allá

El linaje de Schmidhuber

Jürgen Schmidhuber, “A ‘Self-Referential’ Weight Matrix,” Proc. ICANN ‘93, pp. 446–450, Springer, 1993. Derivó un algoritmo de aprendizaje basado en gradiente para una red capaz de “hablar de su propia matriz de pesos en términos de activaciones” — unidades especiales de entrada/salida para “analizar y manipular explícitamente todos sus propios pesos, incluidos los responsables de analizar y manipular pesos”.

Jürgen Schmidhuber, “Gödel Machines: Self-Referential Universal Problem Solvers Making Provably Optimal Self-Improvements,” arXiv:cs/0309048, 2003; publicado en Goertzel & Pennachin (eds.), Artificial General Intelligence, Springer, 2007, pp. 199–226. “La primera clase de solucionadores de problemas matemáticamente rigurosos, generales, plenamente autorreferenciales, auto-mejorantes y óptimamente eficientes.” Una máquina de Gödel “reescribe cualquier parte de su propio código en cuanto encuentra una prueba de que la reescritura es útil”. El Teorema de Optimalidad Global prueba que las auto-reescrituras son globalmente óptimas. Schmidhuber señaló que la máquina es “‘consciente’ o ‘autoconsciente’ en el sentido de que todo su comportamiento está abierto a la autointrospección y es modificable… Y este tipo de autorreferencia total es precisamente la razón de su optimalidad”.

Kazuki Irie, Imanol Schlag, Róbert Csordás y Jürgen Schmidhuber, “A Modern Self-Referential Weight Matrix That Learns to Modify Itself,” ICML 2022, PMLR 162; arXiv:2202.05780. Hace práctica la visión de 1993 usando Fast Weight Programmers y Transformers lineales. “La WM de una NN autorreferencial puede seguir modificando rápidamente toda su propia estructura en tiempo de ejecución. En principio, tales NNs pueden meta-aprender a aprender, y meta-meta-aprender a meta-aprender a aprender, y así sucesivamente, en el sentido de la automejora recursiva.”

Louis Kirsch y Jürgen Schmidhuber, “Eliminating Meta Optimization Through Self-Referential Meta Learning,” arXiv:2212.14392, 2022. Prueba que las arquitecturas autorreferenciales requieren compartir parámetros (N² pesos derivados de N activaciones). Propone Fitness Monotonic Execution para automodificación sin meta-optimización explícita.

Imanol Schlag, Kazuki Irie y Jürgen Schmidhuber, “Linear Transformers Are Secretly Fast Weight Programmers,” ICML 2021. Demuestra que los transformers lineales equivalen a los fast weight programmers de los años 90 — conectando el linaje autorreferencial de Schmidhuber directamente con las arquitecturas transformer modernas.

Arquitecturas automodificables (2022–2025)

Xunjian Yin et al., “Gödel Agent: A Self-Referential Agent Framework for Recursive Self-Improvement,” arXiv:2410.04444, 2024. Agente basado en LLM que modifica recursivamente su propia lógica y comportamiento, inspirado en la máquina de Gödel de Schmidhuber.

Andrea Ferigo y Giovanni Iacca, “Self-Building Neural Networks,” GECCO ‘23; arXiv:2304.01086. Redes que construyen su propia estructura durante la ejecución de la tarea mediante aprendizaje hebbiano y poda.

Louis Kirsch y Jürgen Schmidhuber, “Meta Learning Backpropagation And Improving It,” NeurIPS 2021; arXiv:2012.14905. Variable Shared Meta Learning (VSML): una red cuyos pesos se reemplazan por pequeños LSTMs puede implementar backpropagation puramente en modo directo — la red aprende su propio algoritmo de aprendizaje.


8. Clojure/LISP + ML: la intersección práctica

Ecosistema Clojure

El ecosistema ML en Clojure incluye Cortex (construcción/entrenamiento de redes neuronales, por Thinktopic), Deep Diamond (cómputo tensorial con GPU vía Intel MKL-DNN y Nvidia cuDNN, por Dragan Djuric), scicloj.ml (pipelines de ML componibles), clj-djl (wrapper de Amazon Deep Java Library) y DL4J/DL4CLJ (deep learning en la JVM). La serie de blog de Djuric “Deep Learning in Clojure from Scratch to GPU” muestra cómo implementar redes neuronales desde cero en “unas pocas decenas de líneas de código Clojure”. La biblioteca de interoperabilidad con Python libpython-clj permite usar TensorFlow/PyTorch directamente desde Clojure.

ML en Common Lisp

MGL (de Gábor Melis) soporta redes con backpropagation, máquinas de Boltzmann y procesos gaussianos. TH ofrece deep learning con autograd y modelos preentrenados (VGG16, ResNet50, etc.). NeuraLisp ofrece ML modular con operaciones tensoriales, autograd y soporte GPU. Lush (Lisp Universal Shell) de Yann LeCun fue un dialecto Lisp diseñado específicamente para investigación en ML.

Scheme + programación diferenciable

El compilador STALINGRAD de Pearlmutter y Siskind (Stalin∇) compila VLAD, un lenguaje tipo Scheme con AD de primera clase, a código nativo eficiente. Jeffrey Mark Siskind, “Scheme as a Framework for Deep Learning,” ICFP Scheme Workshop 2021. Argumenta directamente que las propiedades de Scheme lo hacen adecuado 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 un intérprete LISP sobre sustrato neuronal usando dinámica de atractores — memoria de trabajo temporalmente local, estructuras de datos composicionales, ámbito de variables y manipulación de programas-como-dato. Alcanza rendimiento perfecto en el benchmark PCFG SET. Este es el puente más directo: redes neuronales que soportan nativamente el paradigma código-como-dato del LISP.

Chen Liang et al., “Neural Symbolic Machines: Learning Semantic Parsers on Freebase with Weak Supervision,” ACL 2017, pp. 23–33. Combina un “programador” neuronal seq2seq con un “computador” simbólico que es un intérprete Lisp. La red aprende a escribir programas Lisp a partir de supervisión débil.

“From Tool Calling to Symbolic Thinking: LLMs in a Persistent Lisp Metaprogramming Loop,” arXiv:2506.10021, 2025. Aumenta los LLMs con un REPL Common Lisp persistente para construcción dinámica de herramientas, razonamiento reflexivo y metaprogramación.

Eshkol (github.com/tsotchke/eshkol) es un lenguaje tipo Lisp de alto rendimiento con AD nativo (simbólico, modo directo, modo inverso y operadores de cálculo vectorial). Las funciones lambda mantienen representaciones de S-expression mediante un registro en tiempo de ejecución — implementando directamente la idea de programación diferenciable homoicónica.

Redes neuronales en Lisp puro (SectorLISP): Hikaru Ikuta (2022) implementó una red neuronal en SectorLISP — un intérprete Lisp de sector de arranque de 512 bytes — sin números incorporados, usando solo manipulación simbólica de átomos y listas, construyendo aritmética de punto fijo y multiplicación de matrices desde los primeros principios.


9. La autoconciencia filosófico-computacional como marco

Daniel C. Dennett, The Intentional Stance, MIT Press, 1987. Define tres posturas (física, de diseño, intencional) para predecir el comportamiento de sistemas. Todo sistema cuyo comportamiento se predice mejor atribuyéndole creencias y deseos es un “sistema intencional, sean cuales sean sus entrañas”. Aplicado al ML moderno: Cominelli et al. (2021) sostienen que la postura intencional es “la única estrategia viable” para comprender el comportamiento de IAs complejas.

Douglas R. Hofstadter, I Am a Strange Loop, Basic Books, 2007. Refina el concepto de strange loop: la autoconciencia emerge de bucles autorreferenciales en sistemas simbólicos. Afirmación formal: “El pronombre ‘yo’ no implica una autorreferencia más fuerte que la construcción de Gödel.” Defiende la causalidad descendente — patrones autorreferenciales de alto nivel pueden ser causalmente eficaces.

Thomas Nagel, “What Is It Like to Be a Bat?” The Philosophical Review 83(4):435–450, 1974. Argumenta que la experiencia subjetiva tiene un carácter irreductiblemente en primera persona que ninguna descripción objetiva puede capturar. Sirve de contrapunto: aunque un sistema automodelador pueda representar sus propios estados, el argumento de Nagel marca la frontera de lo que puede alcanzar la autorreferencia computacional.

Anthropic, “Emergent Introspective Awareness in Large Language Models,” Transformer Circuits, 2025. Encuentra que los modelos Claude alcanzan alta conciencia introspectiva verdadera-positiva con cero falsos positivos al ser probados en su capacidad de detectar representaciones de estado interno inyectadas. El post-entrenamiento es clave para provocar la conciencia introspectiva.

“Large Language Models Report Subjective Experience Under Self-Referential Processing,” arXiv:2510.24797, 2025. El prompting autorreferencial provoca consistentemente informes de experiencia estructurados en distintas familias de modelos; se produce convergencia semántica entre modelos. Se conecta directamente con las construcciones gödelianas de Hofstadter.


Cómo encajan las piezas: la arquitectura de la tesis central

Las nueve áreas forman un pipeline intelectual preciso que sustenta ambos artículos:

  • Capa de fundamento (Artículos 1 y 2): la homoiconicidad de McCarthy + el teorema de recursión de Kleene + la semántica de puntos fijos de Scott establecen que la autorreferencia es tanto prácticamente accesible (LISP) como matemáticamente inevitable (en cualquier sistema suficientemente expresivo).

  • Capa algebraica (Artículos 1 y 2): el álgebra FP de Backus + el formalismo de Bird-Meertens + la semántica categórica muestran que los programas se componen mediante un álgebra cerrada de formas combinadoras con leyes ecuacionales para su transformación.

  • Capa diferenciable (sobre todo Artículo 2): las transformaciones funcionales de JAX + el AD-como-funtor de Elliott + el backprop-como-funtor de Fong-Spivak demuestran que el aprendizaje basado en gradiente es un sistema algebraico de transformación de programas que preserva la estructura composicional — la visión de Backus hecha realidad para la computación diferenciable.

  • Capa de meta-aprendizaje (Artículos 1 y 2): el ICL como descenso implícito de gradiente (von Oswald, Akyürek) + los transformers como computadores programables (Giannou) + la completitud de Turing (Pérez) muestran que los transformers implementan algoritmos de aprendizaje en su pase directo — son meso-optimizadores, sistemas computacionales automodificables.

  • Capa de autorreferencia (Artículos 1 y 2): las matrices de pesos autorreferenciales de Schmidhuber + la torre reflexiva de Smith + las hypernetworks demuestran que la autorreferencia habilita la automejora recursiva en sistemas neuronales.

  • Capa de síntesis (experimentos del Artículo 2): DreamCoder + NeuroLISP + Eshkol + Neural Symbolic Machines prueban la viabilidad práctica de representar computación neuronal en estructuras tipo LISP. Los experimentos propuestos — redes neuronales como S-expressions, búsqueda de arquitectura como transformación simbólica, un evaluador metacircular neuronal — viven en esa intersección.

La pieza que falta y que ambos artículos pueden articular: ningún sistema existente unifica plenamente homoiconicidad, diferenciabilidad y automodificación en un único marco. DreamCoder es el que más se acerca, pero sus componentes neuronal y simbólico permanecen separados. Una arquitectura diferenciable plenamente homoicónica — donde la estructura de la red se representa en el mismo formato que procesa, y la optimización basada en gradiente opera sobre esa autorrepresentación — cerraría el bucle desde McCarthy, pasando por Backus, hasta los transformers modernos, realizando computacionalmente lo que Hofstadter describió filosóficamente: un strange loop en el que la representación que el sistema hace de sí mismo está causalmente conectada a su propia operación.