Arnaud Spiwack quería representar haces en Haskell, pero la definición de manual traía un problema práctico: las cribas contienen muchas representaciones redundantes de la misma información de emparejamiento, y su construcción dependiente de retroceso era demasiado tipado dependiente para Haskell. El enfoque obvio —traducir la definición literalmente— haría representables estados ilegales y enterraría el programa en datos irrelevantes.
Primero construyó un ejemplo concreto en torno a expresiones aritméticas. Un prehaz podía retrotraer valores a lo largo de expresiones, pero la operación condicional deseada requería un haz para pegar dos ramas sobre una cubierta booleana. La implementación, por tanto, convirtió el pegado en una operación explícita de clase de tipos y luego la generalizó en un Site cuyas familias tipadas Cover y Gen describen qué piezas pueden ensamblarse.
El sitio tipado elimina la carga de las cribas de retroceso: glue puede operar en cualquier flecha, y los generadores no necesitan representarse como flechas reales. Productos, exponenciales, encajes de Yoneda, coproductos y listas recursivas pueden entonces definirse en el mismo estilo. Sheafify actúa como una construcción de haz libre almacenando las operaciones de pegado en lugar de evaluarlas prematuramente, mientras que PFun porta la varianza necesaria para los exponenciales.
El resultado es un repositorio de demostración y una implementación con forma de Haskell de la idea abstracta, no una afirmación de que todo detalle matemático desaparece. Spiwack deja explícitamente sin resolver los puntos fijos, pero el proyecto convierte una definición que era demasiado laxa para el lenguaje en bloques de construcción tipados y operativos, y hace preciso lo que queda desconocido.
Representar las cubiertas como tipos y luego pegar explícitamente
Las cribas literales codifican valores redundantes de familias de emparejamiento y permiten estados que deberían ser imposibles.
La criba de retroceso necesaria para los exponenciales exige un tipado dependiente más allá de lo que la implementación de Haskell podía expresar cómodamente.
Las cubiertas y los generadores tipados mantienen pequeña la interfaz de pegado válida mientras eliminan representaciones irrelevantes.
Sheafify almacena la sintaxis de pegado, permitiendo construcciones libres como coproductos y listas recursivas sin ejecutar las operaciones antes de tiempo.
Hacer de los puntos fijos una frontera explícita sin resolver impide que la implementación pretenda resolver lo que aún no conoce.
Cuando una definición formal crea estados ilegales y un tipado dependiente imposible, codificar las cubiertas válidas en tipos y exponer solo operaciones de pegado ejecutables. Mantener las construcciones libres para la composición.
El proyecto produjo un repositorio de demostración con instancias concretas y abstractas de Site/Sheaf, además de una frontera más clara sobre lo que la codificación puede y no puede expresar. Los puntos fijos siguen sin resolverse, pero el enfoque de cubiertas tipadas hace utilizables las operaciones de haz en Haskell sin importar todo el peso de la maquinaria dependiente de cribas.
CONSULTA LAS PRUEBAS
Las fuentes
- Subcanonical coverage nLab · ncatlab.org
- Pursuing Shtuck HAL / Pierre-Marie Pédrot · inria.hal.science