Estas son las notas de la lectura del libro de Clara Löh titulado Exploring formalisation (A primer in human-readable mathematics in Lean 3 with examples from simplicial topology) cuyo código se encuentra en GitLab.
- Introducción
- El asistente de pruebas Lean
- Ejemplos básicos
- Opciones de diseño
- Abstracción y prototipado
- La formalización de las matemáticas en un asistente de pruebas tiene
los siguientes beneficios:
- La implementación de las matemáticas requiere un conocimiento muy profundo de del tema y de todos los casos extremos. Por lo tanto, una formalización exitosa permite un mejor conocimiento de los detalles.
- Una formalización en un asistente de pruebas puede conducir a un código ejecutable y, por tanto ofrece la oportunidad de realizar experimentos con ejemplos concretos.
- Los asistentes de pruebas fomentan la abstracción. A menudo es más fácil formalizar conceptos de forma declarativa a través de propiedades universales en lugar de construcciones concretas y potencialmente engorrosas. Esto puede conducir a una una visión más clara de las cuestiones e ideas fundamentales.
- Interactuar con un asistente de pruebas es divertido y adictivo.
- Si los estudiantes aprenden las técnicas básicas de demostración a través de un asistente de pruebas, pueden obtener una retroalimentación inmediata y pueden experimentar con pruebas y ejemplos. Además, los estudiantes pueden ver en términos más prácticos cómo las abstracciones simplifican la vida matemática.
- Un asistente de pruebas es un lenguaje de programación junto con su correspondiente intérprete/compilador que nos permite formalizar objetos y hechos matemáticos (definiciones, teoremas, pruebas y ejemplos).
- La principal tarea de un asistente de pruebas no es encontrar pruebas, sino comprobar que las pruebas son correctas.
- Los asistentes de pruebas ayudan a detectar y evitar errores. Además, indirectamente también conducen a una mejor comprensión general de las conexiones matemáticas y, a largo plazo, conducirán a formas más sistemáticas y estructuradas de generalizar los resultados a nuevos contextos.
- Uno de los grandes retos es utilizar los asistentes de pruebas de tal manera que la formalización no sólo sea fácil de comprobar por el intérprete/compilador sino también comprensible para los lectores humanos: La belleza de las matemáticas no reside en los complicados detalles técnicos, sino en las ideas subyacentes.
- Hay muchos asistentes de pruebas; actualmente, los asistentes de pruebas de propósito general más populares son Coq, Isabelle y Lean.
- La formalización de las matemáticas consta de los siguientes componentes
- un universo de objetos,
- un lenguaje lógico,
- un concepto de prueba y
- un metalenguaje (en el que se formula todo esto).
- En las pruebas clásicas de papel y lápiz, solemos trabajar con la teoría de conjuntos, con una lógica clásica y con un cálculo de pruebas que nos permite descomponer, construir y recombinar enunciados lógicos.
- Lean es un lenguaje de programación funcional. Lean se basa en la teoría de tipos y en el cálculo de construcciones inductivas en lugar de la teoría de conjuntos, ofrece la posibilidad de elegir entre la lógica clásica y la intuicionista, y el cálculo de pruebas se basa en el isomorfismo de Curry-Howard.
- El lenguaje de programación Lean es de tipo estático; es decir, todos los términos están sujetos a reglas de tipado y sus tipos se declaran o infieren en tiempo de compilación.
- Los tipos en Lean se pueden construir combinando los siguientes:
- Tipos de función (símbolo →): Si A y B son tipos, entonces A → B denota el tipo de todas las funciones de A a B.
- Tipos de pares (símbolo ×): Si A y B son tipos, entonces A × B denota el tipo de todos los pares con el primer componente del tipo A y el segundo componente del tipo B.
- Tipos inductivos (palabra clave
inductive
):- Los tipos inductivos tienen una lista finita de constructores que pueden depender recursivamente unos de otros.
- Ejemplos de tipos inductivos son los tipos de enumeración simple, las listas de números naturales y los árboles.
- Tipos de registro (palabra clave
structure
):- Los tipos de registro tienen un único constructor sobre una lista finita de campos.
- Se puede acceder a estos campos a través de las proyecciones correspondientes.
- Ejemplos de tipos de registro son los tipos de pares o las estructuras matemáticas combinadas que constan de múltiples componentes o propiedades.
- Los registros en Lean son extensibles y, por tanto, pueden utilizarse para construir teorías de forma jerárquica.
- Además, Lean tiene cierto soporte para subtipos y cocientes.
- Lean admite clases de tipo.
- Las clases de tipos (palabra clave
class
o@[class] structure
) son una variante de los tipos de registro. - Las clases de tipos pueden verse como la formalización de un conjunto finito de axiomas sobre los tipos de parámetros dados.
- Dar una instancia de una clase de tipo corresponde a demostrar los axiomas correspondientes sobre los tipos de parámetros.
- Las clases de tipos y sus instancias están sujetas a la inferencia de clases de tipos.
- Ejemplos de clases de tipos son todo tipo de estructuras algebraicas como monoides, grupos, etc. Análogamente, también las estructuras métricas y los conceptos de la teoría de categorías se axiomatizan mediante clases de tipos.
- Es posible definir múltiples instancias para la misma clase de tipos sobre los mismos tipos de parámetros; matemáticamente, esto corresponde a, por ejemplo definir múltiples estructuras de grupo sobre el mismo conjunto.
- Las clases de tipos (palabra clave
- Tipos dependientes:
- Lean se basa en la teoría de tipos dependientes.
- Los tipos son ciudadanos de primera clase y los tipos de suma y producto subyacentes a los tipos de función, tipos inductivos y tipos de registro son sumas dependientes (tipos Sigma dependientes: Σ) y productos (tipos Pi dependientes: Π).
- Lean admite restricciones y dependencias en los tipos de los argumentos y en el del resultado resultado.
- Los tipos de Lean están organizados en una jerarquía:
Prop
(equivalentemente,Sort 0
) es la parte inferior de la jerarquía de tipos.- Las expresiones de tipo
Prop
se consideran “proposiciones”. - El tipo
Prop
contiene las constantes booleanastrue
yfalse
- Las conectivas lógicas convierten los miembros del tipo
Prop
en resultados del tipoProp
.
- Las expresiones de tipo
- El
Type u
(equivalentemente,Sort (u+1)
), para un número naturalu
, pertenece aType (u+1)
. Type
es una abreviatura deType 0
.Type*
es una abreviatura para elType u
para algún nivel de universo no especificadou
.- Los constructores de tipos (como →) operan sobre estos universos de tipos.
- Los términos de tipo
Prop
satisfacen la extensionalidad proposicional: SiA : Prop
yx, y : A
, entoncesx
ey
se consideran iguales en todos los aspectos.
- En las pruebas matemáticas se usa el modus ponens:
- Si el enunciado
A
está demostrado y si la implicaciónA ⇒ B
está demostrada, entonces se deduce que también se demuestraB
.
- Si el enunciado
- El isomorfismo Curry-Howard identifica
- enunciados con tipos y
- pruebas de enunciados con elementos del tipo correspondiente.
- El modus ponens corresponde a la aplicación de la función:
- Si
x : A
yf : A → B
, entoncesf x : B
.
- Si
- Las pruebas en Lean son sólo implementaciones de funciones.
- Una prueba del lema
lemma primer_resultado (x : A) : ϕ x := begin ... end
no es más que una implementación de una función del tipo
Π (x : A), ϕ x
.
- Una prueba del lema
- Primer ejemplo de demostración