Nivel 6 · El CIC y Lean
Prop, Type y universos
Las páginas anteriores usaron las sorts , y con una explicación mínima. Esta página las presenta con precisión: qué es una sort, cómo se especifica el CoC como sistema de tipos puro, y por qué la distinción entre y es la decisión de diseño que separa las proposiciones de los datos.
Sorts: los tipos de los tipos
Una sort es un «tipo de tipos»: la categoría a la que pertenece un tipo, así como un número pertenece a . Un Sistema de Tipos Generalizado (GTS, o PTS) se especifica con tres datos: las sorts , los axiomas (qué sort habita cada sort) y las reglas (qué dependencias de producto están permitidas) (Barendregt, 1991) .
Para el Cálculo de Construcciones puro se toman dos sorts:
fija que vive en (análogo al axioma del cubo lambda), y indica que están permitidas todas las reglas de producto del cubo; el sort resultante es . Este vértice, con las ocho reglas activas, es el sistema del módulo anterior.
El diccionario con la notación del cubo lambda es directo: , , (tipos habitables) , y (kinds) .
La jerarquía de universos
Detenerse en dos sorts genera una incomodidad: si , ¿en qué vive ? Postular conduce a inconsistencia (la paradoja de Girard, análoga en teoría de tipos a la paradoja de Russell). La solución de Coq y Lean es una jerarquía infinita y predicativa de universos:
Predicativa significa que un producto cuantificando sobre un universo aterriza en un universo estrictamente mayor: no se puede definir un habitante de cuantificando sobre todo . En Lean, Type u abrevia Sort (u+1) y la jerarquía completa es Sort 0, Sort 1, Sort 2, ..., con Prop = Sort 0 y Type = Type 0 = Sort 1.
La sort , en cambio, es impredicativa: el producto cuantifica sobre todas las proposiciones y, sin embargo, es él mismo una proposición (habita ). Esta es exactamente la capacidad que las codificaciones impredicativas de la primera página explotan. La impredicatividad es consistente en precisamente porque sus habitantes se tratan como proposiciones sin contenido computacional relevante y su eliminación está restringida, como se vio en la nota sobre restricciones de eliminación.
El sistema completo de Coq (y, con variantes, el de Lean) enriquece la jerarquía del CoC con una sort impredicativa junto a , de modo que (Paulin-Mohring, 1993) . La distinción es metodológica: alberga las proposiciones, cuyas pruebas son irrelevantes para el cómputo y pueden descartarse, mientras que y albergan los datos. Esa separación es la que, en el módulo sobre el teorema de completitud, permite declarar la relación de derivabilidad como un predicado inductivo en mientras la sintaxis de las fórmulas vive en .
Proposiciones borrables frente a datos
La consecuencia práctica de la nota anterior merece desarrollarse, porque gobierna el diseño de toda formalización en Lean.
- Un dato en importa por su valor. Dos habitantes distintos de son objetos matemáticos distintos: . Al compilar un programa, los datos deben conservarse.
- Una prueba en importa solo por su existencia. Si y son dos pruebas de la misma proposición , ningún cómputo puede distinguirlas: las restricciones de eliminación garantizan que ningún dato en puede depender del contenido de una prueba en (salvo la eliminación singleton). Por eso el compilador puede borrarlas: en el código ejecutable las pruebas desaparecen sin alterar ningún resultado.
Este es el sentido preciso de la irrelevancia de pruebas. Y explica la decisión de diseño que el lector verá en el módulo 07: el tipo Formula de las fórmulas proposicionales vive en Type, porque una fórmula es un dato sobre el que se computa (se evalúa una valuación , se mide su tamaño, se recorre su árbol sintáctico); la relación de derivabilidad vive en Prop, porque de una derivación solo interesa que exista. Ambos son tipos inductivos , pero habitan sorts distintas por razones matemáticas precisas.
inductive Formula : Type where -- dato: se computa con él | bot : Formula | var : Nat → Formula | impl : Formula → Formula → Formula
inductive ND : List Formula → Formula → Prop where -- proposición: solo importa su existencia | ax : φ ∈ Γ → ND Γ φ -- ... (una regla de inferencia por constructor)El símbolo aparece en este material con tres significados que conviene no confundir:
- El torniquete de tipado del CIC: se lee «en el contexto , el término tiene tipo ». Es el juicio de las reglas (Ind), (Constr), (Nodep) y (Dep).
- El torniquete de derivabilidad de la lógica: afirma que la fórmula se deriva de las hipótesis en deducción natural . Al formalizarse en Lean se convierte en el predicado inductivo
ND Γ φ. - La meta de las tácticas de Lean: en la interfaz interactiva, «» denota el objetivo pendiente de demostrar, como se verá en la página siguiente.
El primero pertenece a la metateoría del CIC; el segundo es un objeto dentro del CIC; el tercero es notación de la interfaz de usuario.