Preámbulo · Lean desde cero
Tácticas: el modo interactivo
Escribir términos a mano, como en la página anterior, funciona mientras las pruebas caben en
una línea. En cuanto crecen, se vuelve tedioso: hay que tener toda la expresión en la cabeza
antes de escribir el primer símbolo. Lean ofrece un segundo modo de trabajo, el que se usa en
la práctica diaria: tras el := se escribe la palabra by, y a partir de ahí ya no se
escribe la demostración, sino órdenes que la construyen. Esas órdenes se llaman
tácticas.
El estado de la meta
Al entrar en modo táctico, Lean muestra en todo momento el estado de la meta: arriba las
hipótesis disponibles (cada una con su nombre y su tipo) y abajo, tras el símbolo ⊢, lo que
falta por demostrar. Ese panel es el «infoview», la ventana que acompaña a quien formaliza:
p q : Prophpq : p → q⊢ p → qSe lee como el estado de un cuaderno a media prueba: «se tienen y proposiciones, y
una hipótesis hpq de que ; falta demostrar ». Cada táctica transforma
este estado, y la prueba termina cuando no queda ninguna meta.
Las tres tácticas esenciales
Con tres tácticas basta para todo este preámbulo, y cada una tiene su traducción exacta al lenguaje de términos de la página 6:
intro h: «supóngaseh». Si la meta es una implicacióna → b, la táctica mueve el antecedente a las hipótesis con el nombrehy deja como metab. En el término, es abrir unfun h => ….exact e: «esto lo demuestra exactamente». La expresiónedebe tener el tipo de la meta; la táctica la coloca y cierra la meta. En el término, es rellenar el hueco pendiente cone.apply f: «basta demostrar la premisa def». Sifpruebaa → by la meta esb, la táctica deja como nueva metaa. En el término, es escribir la aplicaciónf ?_con un hueco?_por rellenar.
El mismo teorema, dos veces
El modus ponens de la página 6, en sus dos presentaciones:
-- Modo término (página 6)example (p q : Prop) : (p → q) → p → q := fun hpq hp => hpq hp
-- Modo táctico (esta página)example (p q : Prop) : (p → q) → p → q := by intro hpq intro hp exact hpq hpLa correspondencia es línea a línea: cada intro es uno de los binders del fun, y el
exact final es el cuerpo hpq hp. Al terminar el guion táctico, Lean tiene en las manos
exactamente el término fun hpq hp => hpq hp, y lo verifica con las mismas reglas de
tipado de siempre.
Una tentación natural es pensar que el modo táctico es un sistema de demostración aparte. No
lo es: las tácticas son programas que escriben el término. Cada intro añade un
fun … =>, cada exact rellena un hueco, y lo que el núcleo de Lean acepta al final no es
la secuencia de tácticas, sino el término que produjeron, verificado como en la página 6. Si
las tácticas escriben un término mal tipado, la prueba se rechaza. La garantía vive en el
término; las tácticas solo son la manera cómoda de llegar a él.
Para el matemático, el atractivo es que un guion táctico se lee como un cuaderno: «supóngase ; supóngase ; entonces , exactamente por modus ponens». El estilo declarativo de la prueba de pizarra y el estilo interactivo del asistente son el mismo texto con distinta ortografía.
El visor de metas
El simulador siguiente reproduce el infoview para tres guiones curados. A la izquierda, el
estado de la meta tras cada táctica; a la derecha, el término en construcción, con ?_
marcando los huecos pendientes. Conviene recorrer los tres, paso a paso, mirando las dos
columnas a la vez: es la mejor manera de interiorizar que táctica y término son la misma
prueba.
Visor de metas (el «infoview» de Lean)
example (p q : Prop) : (p → q) → p → q := by
Estado de la meta
Término en construcción
?_
Estado inicial: la meta es toda la implicación. En prosa: «hay que demostrar que si p → q y p, entonces q».
El guion ND ∅ (P ⟶ P) usa el tipo ND de la tesis: un
tipo inductivo cuyos constructores son las reglas
de inferencia de la deducción natural . Ahí,
apply ND.impI no aplica un lema: aplica el constructor que encarna la regla de
introducción de la implicación, y ND.hyp el de la regla de hipótesis. El término final,
ND.impI (ND.hyp …), es literalmente el árbol de derivación de , con un
constructor por nodo. Reglas como constructores: ese es el mecanismo central de la
formalización de la tesis, y la ruta completa lo desarrolla con calma.
Lo que ya sabes
byentra en modo táctico: Lean muestra hipótesis arriba y meta tras⊢abajo, y las tácticas transforman ese estado hasta que no quedan metas.intro hsupone (abre unfun h =>);exact ecierra la meta cone;apply freduce la meta a la premisa def(una aplicación con hueco).- Las tácticas son programas que escriben el término: la prueba verificada es el mismo término de la página 6, no una lógica aparte.
Con esto queda cubierto todo el vocabulario necesario. La página siguiente no enseña nada nuevo: toma el enunciado de un teorema real de la tesis y lo lee, símbolo por símbolo, solo con lo visto en este preámbulo.