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 4

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 4

Resumen de la Clase 3

  • Además de funciones simplemente tipadas, podemos definir formadores de tipos, funciones polimorfas y familias de tipos.
  • A partir de una familia de tipos F : X → Type, definimos un -tipo asociado (el tipo de los pares dependientes (x : X) × (F x)) y un -tipo asociado (el tipo de las funciones dependientes (x : X) → F x).
  • Dado un predicado P : X → Prop, la proposición ∃ x : X, P x es la proposición cuyas pruebas se construyen usando pares dependientes (x : X) ×' (P x). Y una prueba de la proposición ∀ x : X, P x es una función dependiente (x : X) → P x.
  • En la clase de hoy, vamos a ver cómo formalizar unas estrúcturas algebraicas básicas.
Matemáticas, lógica e informática - Clase 4

Clase 4 - Estructuras algebraicas

  1. Semigrupos.
  2. Monoides.
Matemáticas, lógica e informática - Clase 4

Archivos para practicar

En esta clase, exploraremos las estructuras algebraicas básicas y el diseño de librerías. El proyecto grupal se llevará a cabo en esa dirección. Si prefieren trabajar en otro tema, aquí va un proyecto sobre automorfismos interiores del grupo , que utiliza la librería Mathlib:

Project File QR Code Automorfismos interiores

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

Semigrupos

  • Magmas.
  • Operaciones asociativas.
  • Magmas asociativos.
Matemáticas, lógica e informática - Clase 4

Estructuras algebraicas y -tipos

  • Para representar estructuras algebraicas, se utilizan -tipos.
  • Por ejemplo, un semigrupo es por definición un magma asociativo, por lo cual podemos pensar en el tipo de los semigrupos de la siguiente manera:

  • Para declarar eso, necesitamos dos cosas:
    • Un tipo Magma.
    • Un predicado IsAssociative : Magma → Prop.
  • Como veremos, para una buena implementación, se recomienda distinguir entre datos y propiedades.
Matemáticas, lógica e informática - Clase 4
Magmas

Magmas

Por comodidad, llamaremos una función currificada de signatura X → X → X una operación en X.

def Op (X: Type) : Type := XXX
  • Vamos a pensar en un magma como un par dependiente ⟨X, μ⟩ donde X es un tipo (llamado el carrier del magma) y μ : Op X es una operación en X.
  • Formalmente, el tipo de los magmas de nivel l será el -tipo (X : Type l) × Op X. En particular, es un tipo de nivel l + 1 (ya que se cuantifica sobre Type l).
Matemáticas, lógica e informática - Clase 4
Magmas

El tipo de los magmas

Al declarar el -tipo de los magmas en un universo dado como una estructura, se generan automáticamente las proyecciones de un -tipo que definimos a mano en la clase pasada.

structure Magma.{l} : Type (l + 1)  where
  carrier : Type l
  op      : Op carrier
  • La función Magma.carrier proyecta un magma ⟨X, μ⟩ a su tipo sub-yacente X (primera proyección). Si M : Magma, se puede utilizar la notación M.carrier.
  • La función Magma.op proyecta un magma ⟨X, μ⟩ a la operación μ : Op X (segunda proyección). Si M : Magma, se puede utilizar la notación M.op.
  • Tenemos una igualdad M = ⟨M.carrier, M.op⟩ (conocida como -expansión).
Matemáticas, lógica e informática - Clase 4
Magmas

Construcción de magmas

Para construir el magma , podemos proceder de la siguiente manera.

def NatAdd : Magma where
  carrier := Nat
  op      := Nat.add
  
#check NatAdd          -- NatAdd : Magma
#check NatAdd.carrier  -- NatAdd.carrier : Type
#check NatAdd.op       -- NatAdd.op : Op NatAdd.carrier
  • Aquí, usar la palabra clave where realmente ayuda (en comparación con usar :=).
  • También podemos escribir def NatAdd : Magma := Magma.mk Nat Nat.add, o simplemente def NatAdd : Magma := ⟨Nat, Nat.add⟩.
  • En Lean, podemos también usar (· + ·) como notación para Nat.add.
Matemáticas, lógica e informática - Clase 4
Operaciones asociativas

La propiedad de asociatividad

  • Recuerden que se dice que una operación (· * ·) en un tipo X es asociativa si, para todos x y z : X, tenemos una igualdad (x * y) * z = x * (y * z) en X.
  • El tipo de los magmas asociativos debería ser un sub-tipo del tipo de los magmas. Así que para declarar propiedades de magmas, vamos a introducir predicados sobre el tipo de los magmas.
  • Para la implementación, elegimos declarar ese predicado usando clases (que son muy similares a estructuras, sólo que sirven como reference types y no value types).
class Magma.IsAssociative.{l} (magma : Magma.{l}) : Prop where
  assoc : ∀ x y z : magma.carrier, 
    magma.op (magma.op x y) z = magma.op x (magma.op y z)
Matemáticas, lógica e informática - Clase 4
Operaciones asociativas

Instancias

  • Una de las ventajas de utilizar clases es poder instanciarlas. Eso significa registrar el hecho de que un magma dado, por ejemplo (NatAdd := ⟨Nat, (· + ·)⟩ : Magma), tiene una operación asociativa.
  • Nótese que, si M : Magma, se puede utlizar la notación M.IsAssociative en lugar de Magma.IsAssociative M.
instance instAssociativeNatAdd : NatAdd.IsAssociative where
  assoc := Nat.add_assoc
  • En el proyecto, se les pedirá que construyan el magma ⟨Nat, (· * ·)⟩ y que registren una instancia de asociatividad en ello.
  • ¿Cómo se definiría la propiedad de conmutatividad para un magma? ¿Y cómo se demostraría que NatAdd es conmutativo?
Matemáticas, lógica e informática - Clase 4
Magmas asociativos

El tipo de los semigrupos

Como dijimos, un semigrupo es por definición un magma asociativo. Formalmente, eso significa que el tipo de los semigrupos es el -tipo

Esto se puede formalizar extendiendo la estructura Magma.

structure Semigroup.{l} extends Magma.{l} : Type (l + 1) where
  assoc : toMagma.IsAssociative

Esto significa que si S : Semigroup, entonces S.toMagma es el magma subyacente y la operación S.toMagma.op es associativa en S.toMagma.carrier. Esta última información está contenida en S.assoc : S.toMagma.IsAssociative.

Matemáticas, lógica e informática - Clase 4
Magmas asociativos

Términos de tipo Semigroup

Con la construcción del tipo de los semigrupos como -tipo dada anteriormente, un semigrupo se representa por una tripla dependiente ⟨X, μ, p⟩ : Semigroup, donde:

  • X es un tipo,
  • μ : Op X es una operación en X,
  • p es una prueba de la proposición Magma.IsAssociative ⟨X, μ⟩.

El hecho de que la propiedad de asociatividad sea una proposición garantiza que el tipo de los semigrupos sea un sub-tipo del tipo de los magmas. Además, eso permite identificar ⟨X, μ, p⟩ con ⟨X, μ, p'⟩ como semigrupos (¡no importa cómo se demuestre que μ : Op X es asociativa!).

Matemáticas, lógica e informática - Clase 4
Magmas asociativos

Monoides

  • Elementos neutros.
  • El tipo de los monoides.
Matemáticas, lógica e informática - Clase 4
Elementos neutros

Elementos neutros

  • Quisiéramos definir monoides como semigrupos con un elemento neutro.
  • Empezamos con la definición de la propiedad de que un término e : X es un elemento neutro para una operación μ : Op X.
class Magma.HasNeutral.{l} (magma : Magma.{l}) (e : magma.carrier) : Prop where
  left_neutral  : ∀ x : magma.carrier, magma.op e x = x
  right_neutral : ∀ x : magma.carrier, magma.op x e = x
  • Nótese que si (M : Magma) y (e : M.carrier), podemos escribir M.HasNeutral e en lugar de Magma.HasNeutral M e (es la dot notation, que hemos visto antes).
Matemáticas, lógica e informática - Clase 4
Elementos neutros

La propiedad de ser un elemento neutro

En el proyecto, se les pedirá que demuestren que tiene elemento neutro .

instance instHasNeutralNatAddZero : NatAdd.HasNeutral (0 : Nat) where
  left_neutral  := by 
    sorry
  right_neutral := by
    sorry
  • Para ello, les recomiendo que utilicen las tácticas apply Magma.HasNeutral.mk (o constructor) y dsimp [NatAdd] para simplificar el gol y convertirlo en una propiedad de los enteros naturales.
  • Concretamente, se trata de demostrar que ∀ (n : Nat), 0 + n = n y ∀ (n : Nat), n + 0 = n. Una de estas dos propiedades requiere una prueba por inducción.
Matemáticas, lógica e informática - Clase 4
El tipo de los monoides

El tipo de los monoides

  • Utilizando el predicado Magma.HasNeutral, podemos definir el tipo de los monoides como el -tipo

  • Es decir que un monoide es una tupla dependiente ⟨X, μ, p, e, q⟩ donde q es una prueba de la propiedad que e es un elemento neutro en el el magma ⟨X, μ⟩.
  • En esta construción, X, μ y e son datos, mientras que p y q son propiedades. En general, se recomienda, como parte del diseño de una librería, distinguir bien entre las dos cosas (así como en otros lenguajes de programación se distingue entre command y query).
Matemáticas, lógica e informática - Clase 4
El tipo de los monoides

Property versus data

  • Lo bueno de la definición del tipo Monoid es que, en el término ⟨X, μ, p, e, q⟩, tenemos un elemento marcado e : X, al cual nos podemos referir si queremos por ejemplo definir elementos invertibles en ⟨X, μ⟩.
  • Lo no tan bueno es que el tipo de los monoides no parece un sub-tipo del tipo de los semigrupos, ya que tenemos datos adicionales (el elemento e : X).
  • La lección de eso es que, cuando formalizamos matemáticas, tenemos que hacer elecciones de diseño y éstas pueden influir en la manera como escribimos demostraciones después o incluso en la manera como nos representamos objetos matemáticos.
Matemáticas, lógica e informática - Clase 4
El tipo de los monoides

Simple existencia de un elemento neutro

Pudimos también plantear la definición de tener un elemento neutro de la siguiente forma, utilizando un cuantificador existencial:

class Magma.HasNeutral.{l} (magma : Magma.{l}) : Prop where
  neutral : ∃ (e : magma.carrier), ∀ x : magma.carrier, 
    (magma.op e x = x) ∧ (magma.op x e = x)
  • Por definición de , el término neutral ahora tiene como tipo una proposición. Entonces, si usáramos esa versión del predicado Magma.HasNeutral, el tipo Monoid sería por definición un sub-tipo de Semigroup.
  • Resulta que los dos enfoques son equivalentes, pues sabemos que si hay un elemento neutro en un magma, entonces ese elemento es único. En el proyecto, se les pedirá enunciar y demostrar formalmente esa unicidad.
Matemáticas, lógica e informática - Clase 4
El tipo de los monoides

Resumen

  • Estructuras algebraicas básicas se representan usualmente usando -tipos. Sin embargo, se utilizan también funcionalidades internas del lenguaje de programación (como estructuras y clases) para facilitar la implementación.
  • A medida que se van enriqueciendo las estructuras, se recomienda distinguir bien entre datos y propiedades. En particular, a la hora de enunciar propiedades, hay que tener cuidado con los cuantificadores existenciales.
Matemáticas, lógica e informática - Clase 4
El tipo de los monoides

Proyecto grupal

Les propongo que trabajen en uno de los siguientes dos archivos:

  • Un proyecto sobre la definición de los tipos de los semigrupos y de los monoides.
  • Un proyecto sobre automorfismos interiores del grupo , que utiliza la librería Mathlib.

Project File QR Code Proyecto grupal Project File QR Code Automorfismos interiores

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