Igualdad de bloques de una partición cuando tienen elementos comunes
Este ejercicio es el primero de una serie cuyo objetivo es demostrar que el tipo de las particiones de un conjunto X es isomorfo al tipo de las relaciones de equivalencia sobre X. El desarrollo de dicha serie está basado en la cuarta parte de la primera sesión del curso de Kevin Buzzard Formalising mathematics: workshop 1 — logic, sets, functions, relations.
Una partición de un conjunto A es un conjunto de subconjuntos no vacíos de A tal que todo elemento de A está exactamente en uno de dichos subconjuntos. Es decir, una famila de conjuntos C es una partición de A si se verifican las siguientes condiciones:
- Los conjuntos de
Cson no vacíos; es decir,
|
1 |
∀ X ∈ C, X ≠ ∅. |
- Los conjuntos de
CrecubrenA; es decir,
|
1 |
∀ a ∈ A, ∃ X ∈ C, a ∈ X |
- Los conjuntos de
Cson disjuntos entre sí; es decir,
|
1 |
∀ X Y ∈ C, X ∩ Y ≠ ∅ → X = Y |
En Lean, se puede definir el tipo de las particiones sobre un tipo A mediante una estructura con 4 campos:
- Un conjunto de subconjuntos de
Allamados los bloques de la partición. - Una prueba de que los bloques son no vacíos.
- Una prueba de que cada término de tipo
Aestá en uno de los bloques. - Una prueba de que dos bloques con intersección no vacía son iguales.
Su definición es
|
1 2 3 4 5 |
@[ext] structure particion (A : Type) := (Bloques : set (set A)) (Hno_vacios : ∀ X ∈ Bloques, (X : set A).nonempty) (Hrecubren : ∀ a, ∃ X ∈ Bloques, a ∈ X) (Hdisjuntos : ∀ X Y ∈ Bloques, (X ∩ Y : set A).nonempty → X = Y) |
Con la definición anterior,
P : particion Aexpresa quePes una partición deA.Bloques Pes el conjunto de los bloque de P.Hno_vacios Pprueba que los bloques dePson no vacíos.Hrecubren Pprueba que los bloque dePrecubren aA.Hdisjuntos Pprueba que los bloques dePson disjuntos entre sí
Demostrar que si dos bloques de una partición tienen un elemento en común, entonces son iguales.
Para ello, completar la siguiente teoría de Lean:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import tactic @[ext] structure particion (A : Type) := (Bloques : set (set A)) (Hno_vacios : ∀ X ∈ Bloques, (X : set A).nonempty) (Hrecubren : ∀ a, ∃ X ∈ Bloques, a ∈ X) (Hdisjuntos : ∀ X Y ∈ Bloques, (X ∩ Y : set A).nonempty → X = Y) namespace particion variable {A : Type} variable {P : particion A} variables {X Y : set A} example (hX : X ∈ Bloques P) (hY : Y ∈ Bloques P) {a : A} (haX : a ∈ X) (haY : a ∈ Y) : X = Y := sorry end particion |
[expand title=»Soluciones con Lean»]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import tactic @[ext] structure particion (A : Type) := (Bloques : set (set A)) (Hno_vacios : ∀ X ∈ Bloques, (X : set A).nonempty) (Hrecubren : ∀ a, ∃ X ∈ Bloques, a ∈ X) (Hdisjuntos : ∀ X Y ∈ Bloques, (X ∩ Y : set A).nonempty → X = Y) namespace particion variable {A : Type} variable {P : particion A} variables {X Y : set A} -- 1ª demostración example (hX : X ∈ Bloques P) (hY : Y ∈ Bloques P) {a : A} (haX : a ∈ X) (haY : a ∈ Y) : X = Y := begin apply P.Hdisjuntos, { exact hX, }, { exact hY, }, { rw set.nonempty_def, use a, split, { exact haX, }, { exact haY, }}, end -- 2ª demostración example (hX : X ∈ Bloques P) (hY : Y ∈ Bloques P) {a : A} (haX : a ∈ X) (haY : a ∈ Y) : X = Y := begin apply P.Hdisjuntos, { exact hX, }, { exact hY, }, { use a, exact ⟨haX, haY⟩, }, end -- 3ª demostración example (hX : X ∈ Bloques P) (hY : Y ∈ Bloques P) {a : A} (haX : a ∈ X) (haY : a ∈ Y) : X = Y := begin apply P.Hdisjuntos, { exact hX, }, { exact hY, }, { exact ⟨a, haX, haY⟩, }, end -- 4ª demostración lemma iguales_si_comun (hX : X ∈ Bloques P) (hY : Y ∈ Bloques P) {a : A} (haX : a ∈ X) (haY : a ∈ Y) : X = Y := Hdisjuntos P X Y hX hY ⟨a, haX, haY⟩ end particion |
Se puede interactuar con la prueba anterior en esta sesión con Lean.
En los comentarios se pueden escribir otras soluciones, escribiendo el código entre una línea con <pre lang="lean"> y otra con </pre>
[/expand]