Matemáticas, lógica e informática

Formal Math logo

60 años de la carrera de matemáticas
Celebración en honor a Xavier Caicedo
Universidad de Los Andes, Diciembre 2024

Florent Schaffhauser
Universidad de Heidelberg

Matemáticas, lógica e informática - Clase 2

Cronograma

  • Clase 1: Introducción a Lean.
  • Clase 2: Tácticas básicas.
  • Clase 3: Tipos dependientes.
  • Clase 4: Estructuras algebraicas.
Matemáticas, lógica e informática - Clase 2

Resumen de la Clase 1

  • Los lenguajes de programación funcional basados en la teoría de tipos dependientes con tipos inductivos (como Lean 4) pueden usarse para formalizar matemáticas.
  • Verificación de tipos (type-checking) significa comprobar que nuestro código es sintácticamente correcto.
  • Es importante familiarizarse con las funciones currificadas y los tipos inductivos, ya que pueden usarse en una variedad de contextos y para muchos propósitos, en particular para formalizar matemáticas.
  • A cada tipo inductivo se le asocia un principio de inducción. Esto nos permite definir funciones a partir de un tipo inductivo mediante búsqueda de patrones (pattern matching).
Matemáticas, lógica e informática - Clase 2

Clase 2 - Tácticas para el razonamiento deductivo

  1. Deducción natural
  2. Tácticas básicas
Matemáticas, lógica e informática - Clase 2

Archivo para practicar

Si prefieren aprender las tácticas básicas manipulándolas directamente, aquí les va un archivo para practicar.

Practice File QR Code Basic tactics

Matemáticas, lógica e informática - Clase 2
Deducción natural

Deducción natural

  • La deducción natural es la rama de la lógica en la que se estudian las reglas de inferencia.
  • Una regla de inferencia famosa, utilizada constantemente en matemáticas, es el modus ponens:

  • También podemos escribir esto como un teorema. Pero para probar ese teorema, primero necesitamos definir implicaciones y conjunciones.

Matemáticas, lógica e informática - Clase 2
Deducción natural

Implicaciones

  • ¿Qué significa probar una implicación ? La respuesta a esta pregunta depende de la lógica que se elija.
  • En el enfoque clásico, significa , lo cual requiere definir y primero.
  • En el enfoque constructivo, que es la lógica subyacente de Lean y otros asistentes de prueba modernos, probar significa tomar una prueba de y, a partir de ella, construir una prueba de . Esto puede ser representado de la siguiente manera:

Matemáticas, lógica e informática - Clase 2
Deducción natural

Conjunciones

  • ¿Qué significa probar la conjunción ?
  • Por definición, una prueba de se construye a partir de dos objetos: una prueba de y una prueba de .
  • En otras palabras, ésta es una definición inductiva, similar a lo que vimos para el tipo producto en la Clase 1. La proposición And P Q tiene un solo constructor, llamado And.intro.
inductive And (P Q : Prop) : Prop
  | intro : PQAnd P Q

Es decir que, formalmente, definir una proposición no es nada distinto a definir un tipo.

Matemáticas, lógica e informática - Clase 2
Deducción natural

La regla del modus ponens revisitada

Estamos empezando a ver que las proposiciones se comportan como tipos, con funciones entre esos tipos para representar implicaciones:

  • Por definición, una prueba de una implicación puede verse como una función que envía una prueba de P a una prueba de Q. La flecha se denota simplemente por .
  • Y la prueba de una conjunción es el par construido a partir de una prueba de y una prueba de .
  • Entonces, tener una prueba de significa tener una función y una prueba . Y tener una prueba del modus ponens significa definir una función que envía y a una prueba de . Nótese que .
Matemáticas, lógica e informática - Clase 2
Deducción natural

Proposiciones como tipos

  • Con esta interpretación de proposiciones como tipos, la regla del modus ponens es simplemente la evaluación de una función en un punto:

  • Más generalmente, las reglas de deducción natural de Gentzen son equivalentes a las reglas del -cálculo (simplemente tipado), que fue introducido por Church en los años 1930.
  • Esto se conoce como la interpretación de Brouwer-Heyting-Kolmogorov de la lógica proposicional (BHK), o como el caso básico de la correspondencia Curry-Howard.
Matemáticas, lógica e informática - Clase 2
Deducción natural

Falsedad y negación

  • La interpretación BHK de la lógica proposicional BHK nos permite internalizar la lógica. No existe un valor lógico (booleano) asociado a una proposición.
  • La negación de una proposición se define sin referencia a si tiene una prueba o no. En lugar a eso, tenemos:

  • Aquí, es la proposición definida como el tipo inductivo sin constructores. Y por definición, probar significa probar que, dado una prueba de , podemos construir una prueba de , lo cual se considera una absurdidad.
inductive False : Prop

El principio de inducción asociado a dice que .

Matemáticas, lógica e informática - Clase 2
Deducción natural

Constructivo vs. clásico

  • Comparemos ahora y . El siguiente programa proporciona una prueba de la implicación

def cons_imp_classical {P Q : Prop} : (PQ) → ¬(P ∧ ¬Q) :=
  fun (f : PQ) ↦ fun (And.intro (p : P) (g : QFalse)) ↦ g (f p)
  • La implicación inversa no admite una prueba constructiva. Para probarla para todo , se necesita usar el PTE (Principio del Tercero Excluido). Así que el enfoque constructivo es más general (menos axiomas).
  • En Lean, se puede elegir si uno quiere trabajar de manera constructiva o clásica. En Mathlib, la mayoría de las pruebas utilizan la lógica clásica de una forma u otra (por ejemplo, ).
Matemáticas, lógica e informática - Clase 2
Deducción natural

Las reglas de De Morgan

  • Una buena manera de manipular estos conceptos es probar las reglas de De Morgan, comenzando con la primera:

  • Esto requiere dar una definición de y de .
  • En la segunda regla de De Morgan, sólo una implicación puede ser probada constructivamente, a saber, .

Matemáticas, lógica e informática - Clase 2
Deducción natural

Disyunciones

  • Las disyunciones son los análogos proposicionales de los tipos suma de la Clase 1. Se definen inductivamente, usando dos constructores (Or.inl y Or.inr).
inductive Or (P Q : Prop) : Prop
  | inl : POr P Q
  | inr : QOr P Q
  • Para construir una prueba de , debemos construir una prueba de o una prueba de .
  • Esto es clásicamente (pero no constructivamente) equivalente a .
Matemáticas, lógica e informática - Clase 2
Deducción natural

Equivalencias lógicas

  • El tipo de equivalencias lógicas también se define inductivamente. Sus términos son pares donde y .
inductive Iff (P Q : Prop) : Prop
  | intro : (PQ) → (QP) → Iff P Q
  • En Lean y otros asistentes de prueba modernos, la mayoría de los tipos inductivos con un solo constructor (pero no todos) se declaran como estructuras, las cuales técnicamente no son parte de la teoría de tipos de Martin-Löf pero son útiles para la implementación (son registros, o record types, declarados usando la palabra clave structure).
structure Iff (P Q : Prop) : Prop where
  intro :: (mp : PQ) (mpr : QP)
Matemáticas, lógica e informática - Clase 2
Deducción natural

Equivalencia entre tipos

  • De forma más general, podemos definir una noción de equivalencia entre tipos. Si y son tipos, se dirá que una función es una equivalencia si tiene un inverso a izquierda y un inverso a derecha.
  • Decir que es un inverso a izquierda para significa que . Eso implica que es inyectiva. De hecho, es lógicamente equivalente a ello.
  • Decir que es un inverso a derecha para significa que . Eso implica que es sobreyectiva (la recíproca requeriría de un axioma de elección).
  • Nótese que, para tales y , se tiene . La noción de equivalencia entre tipos es fundamental en teoría homotópica de tipos.
Matemáticas, lógica e informática - Clase 2
Tácticas básicas

Pruebas como programas

  • Como hemos visto en ejemplos, una prueba es un programa. Para probar una proposición, debemos construir un término del tipo idóneo.
  • Y para ello, debemos respetar las reglas sintácticas. Así que nuestro teorema queda probado si el verificador de tipos valida el programa.
  • Para escribir programas en Lean, podemos ser asistidos por el compilador: esto se hace entrando en el modo táctico de Lean, el cual nos muestra en cada paso un objetivo (un tipo) y un estado de prueba (unos términos, de varios tipos).
  • A medida que introducimos tácticas, el estado de prueba y el objetivo van cambiando, hasta que el objetivo se cierre mediante un proceso de unificación (cuando se construye un término cuyo tipo coincide con el objetivo).
Matemáticas, lógica e informática - Clase 2
Tácticas básicas

Tácticas básicas para el razonamiento deductivo

Las tácticas básicas que necesitamos son las siguientes:

  • exact
  • apply
  • intro
  • revert
  • constructor
  • rcases (y cases)
  • left y right
  • rfl

Todas estas tácticas están presentadas en el archivo que acompaña esta clase.

Matemáticas, lógica e informática - Clase 2
Tácticas básicas

Modus ponens, por última vez

Usemos el modo táctico para probar la regla del modus ponens. El punto es ver cómo el estado de la prueba y el objetivo van cambiando después de cada uso de una táctica, hasta que el objetivo se cierre.

theorem mp {P Q : Prop} : (PQ) ∧ PQ := by  -- el objetivo es `(P → Q) ∧ P → Q`
  intro h 
  -- se introduce un término de tipo `(P → Q) ∧ P` en el contexto local (nuevo objetivo: `Q`)
  rcases h with ⟨f, p⟩  -- se parte `h` en `f : P → Q` y `p : P` (el objetivo aún es `Q`)
  exact f p  -- se construye un término `f p : Q`, lo cual resulta en unificación

Para comparar, la prueba en modo término sería más o menos igual de larga, pero en el modo término el infoview no muestra nada, salvo la ausencia de un mensaje de error.

theorem mp {P Q : Prop} : (PQ) ∧ PQ :=
  fun (And.intro (f : PQ) (p : P)) ↦ f p 
Matemáticas, lógica e informática - Clase 2
Tácticas básicas

Tautologías

Una tautología es una proposición que se construye a partir de otras y que tiene una prueba independientemente de si las anteriores tienen una prueba. Probar tales proposiciones ayuda a familiarizarse con las tácticas básicas. ¿Podrían enunciar y probar las siguientes?

  • , , .
  • , , .
  • , .
  • .
  • .
  • , , .
Matemáticas, lógica e informática - Clase 2
Tácticas básicas

Resumen y siguientes pasos

  • Las proposiciones se definen como tipos. Podemos formar proposiciones nuevas a partir de otras más antiguas usando los conectores , , y . La regla del modus ponens corresponde a evaluar una función.
  • La lógica no es externa a nuestro sistema de tipos. No hay valores lógicos ni tablas de verdad. Las reglas de inferencia se deducen de las reglas sintácticas, no son axiomas.
  • Para probar un teorema, se escribe un programa. Si el programa pasa la verificación de tipos, el teorema está probado.
  • Para escribir pruebas en Lean, podemos ser asistidos por el compilador entrando al modo táctico de Lean.
  • En la próxima clase, veremos cómo codificar los cuantificadores y , para poder enunciar y probar declaraciones matemáticas más sofisticadas.
Matemáticas, lógica e informática - Clase 2
Tácticas básicas

Ejercicios de razonamiento deductivo

  • Veamos ahora las tácticas básicas en acción (en el mismo archivo que al inicio de la clase).
  • Decicí incluir otro archivo más para practicar, con ejercicios que ilustren la diferencia entre la lógica constructiva y la lógica clásica.
  • Ambos están diseñados para ayudarles a familiarizarse con las tácticas básicas de Lean.

Practice File QR Code Tácticas básicas Practice File QR Code Lógica

Matemáticas, lógica e informática - Clase 2