Acciones

Tema 13: Razonamiento modular (I): Teoría de grupos.

De Demostración automática de teoremas (2014-15)

Revisión del 11:11 17 may 2015 de Mjoseh (discusión | contribuciones) (Página creada con '<source lang = "isar"> header {* T13: Razonamiento modular (I). La teoría de grupos *} theory T13 imports Main begin text {* El objetivo de este tema es mostrar cómo se pu...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)

<source lang = "isar"> header {* T13: Razonamiento modular (I). La teoría de grupos *}

theory T13 imports Main begin

text {*

 El objetivo de este tema es mostrar cómo se puede trabajar en
 estructuras algebraicas por medio de contextos locales. Se usará 
 como ejemplo la teoría de grupos. *}

text {*

 Ejemplo 1. Un grupo es una estructura (G,·,𝟭,^) tal que G es un
 conjunto, · es una operación binaria en G, 𝟭 es un elemento de G y ^
 es una función de G en G tales que se cumplen las siguientes
 propiedades:
 * asociativa: ∀x y z. x ⋅ (y ⋅ z) = (x ⋅ y) ⋅ z
 * neutro por la izquierda: ∀x. 𝟭 ⋅ x = x
 * inverso por la izquierda: ∀x. x^ ⋅ x = 𝟭 
 Definir el entorno axiomático de los grupos. *}

locale grupo =

 fixes prod :: "['a, 'a] ⇒ 'a" (infixl "⋅" 70)
   and neutro ("𝟭") 
   and inverso ("_^" [100] 100)
 assumes asociativa: "(x ⋅ y) ⋅ z = x ⋅ (y ⋅ z)"
     and neutro_i:   "𝟭 ⋅ x = x"
     and inverso_i:  "x^ ⋅ x = 𝟭"

text {*

 Notas sobre notación:
 * El producto es ⋅ y se escribe con \ cdot (sin espacio entre ellos). 
 * El neutro es 𝟭 y se escribe con \ y <one> (sin espacio entre ellos).
 * El inverso de x es x^ y se escribe con pulsando 2 veces en ^. *}

text {*

 A continuación se crea un contexto en el que se supone la notación y
 axiomas de grupos. En el contexto se demuestran propiedades de los
 grupos. *}

context grupo begin

text {*

 Ejemplo 2. En los grupos, x^ también es el inverso de x por la
 derecha; es decir 
    x ⋅ x^ = 𝟭   *}

-- "La demostración automática (obtenida con Sledgehammer) es" lemma inverso_d:

 "x ⋅ x^ = 𝟭"

by (metis asociativa inverso_i neutro_i)

-- "La demostración detallada es" lemma inverso_d_2:

 "x ⋅ x^ = 𝟭"

proof -

 have "x ⋅ x^ = 𝟭 ⋅ (x ⋅ x^)" by (simp only: neutro_i)
 also have "… = (𝟭 ⋅ x) ⋅ x^" by (simp only: asociativa)
 also have "… = (((x^)^ ⋅ x^) ⋅ x) ⋅ x^" by (simp only: inverso_i)
 also have "… = ((x^)^ ⋅ (x^ ⋅ x)) ⋅ x^" by (simp only: asociativa)
 also have "… = ((x^)^ ⋅ 𝟭) ⋅ x^" by (simp only: inverso_i)
 also have "… = (x^)^ ⋅ (𝟭 ⋅ x^)" by (simp only: asociativa)
 also have "… = (x^)^ ⋅ x^" by (simp only: neutro_i)
 also have "… = 𝟭" by (simp only: inverso_i)
 finally show ?thesis .

qed

text {*

 Ejemplo 2. En los grupos, 𝟭 también es el neutro por la derecha; es decir 
    x ⋅ 𝟭 = x   *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma neutro_d:

 "x ⋅ 𝟭 = x"

by (metis asociativa inverso_i neutro_i)

-- "La demostración detallada es" lemma neutro_d_2:

 "x ⋅ 𝟭 = x"

proof -

 have "x ⋅ 𝟭 = x ⋅ (x^ ⋅ x)" by (simp only: inverso_i)
 also have "… = (x ⋅ x^) ⋅ x" by (simp only: asociativa)
 also have "… = 𝟭 ⋅ x" by (simp only: inverso_d)
 also have "… = x" by (simp only: neutro_i)
 finally show "x ⋅ 𝟭 = x" .

qed

text {*

 Ejemplo 3. En los grupos, se tiene la propiedad cancelativa por la
 izquierda; es decir,
    x ⋅ y = x ⋅ z syss y = z   *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma cancelativa_i:

 "(x ⋅ y = x ⋅ z) = (y = z)"

by (metis asociativa inverso_i neutro_i)

-- "La demostración detallada es" lemma cancelativa_i_2:

 "(x ⋅ y = x ⋅ z) = (y = z)"

proof

 assume "x ⋅ y = x ⋅ z"
 hence "x^ ⋅ (x ⋅ y) = x^ ⋅ (x ⋅ z)" by simp
 hence "(x^ ⋅ x) ⋅ y = (x^ ⋅ x) ⋅ z" by (simp only: asociativa)
 hence "𝟭 ⋅ y = 𝟭 ⋅ z" by (simp only: inverso_i)
 thus "y = z" by (simp only: neutro_i)

next

 assume "y = z"
 then show "x ⋅ y = x ⋅ z" by simp

qed

text {*

 Ejemplo 4. En los grupos, el elemento neutro por la izquierda es
 único; es decir, si e es un elemento tal que para todo x se tiene que 
 e ⋅ x = x, entonces e = 𝟭. *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma unicidad_neutro_i:

 assumes "e ⋅ x = x"
 shows "𝟭 = e"

using assms by (metis asociativa inverso_i neutro_i)

-- "La demostración estructurada es" lemma unicidad_neutro_i_2:

 assumes "e ⋅ x = x"
 shows "𝟭 = e"

proof -

 have "𝟭 = x ⋅ x^" by (simp only: inverso_d)
 also have "... = (e ⋅ x) ⋅ x^" using assms by simp
 also have "... = e ⋅ (x ⋅ x^)" by (simp only: asociativa)
 also have "... = e ⋅ 𝟭" by (simp only: inverso_d)
 also have "... = e" by (simp only: neutro_d)
 finally show ?thesis .

qed

text {*

 Ejemplo 5. En los grupos, los inversos por la izquierda son únicos; es
 decir, si x' es un elemento tal que x' ⋅ x = 𝟭, entonces x^ x'. *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma unicidad_inverso_i:

 assumes "x' ⋅ x = 𝟭"
 shows "x^ = x'"

using assms by (metis asociativa inverso_i neutro_i)

-- "La demostración estructurada es" lemma unicidad_inverso_i_2:

 assumes "x' ⋅ x = 𝟭"
 shows "x^ = x'"

proof -

 have "x^ = 𝟭 ⋅ x^" by (simp only: neutro_i)
 also have "... = (x' ⋅ x) ⋅ x^" using assms by simp
 also have "... = x' ⋅ (x ⋅ x^)" by (simp only: asociativa)
 also have "... = x' ⋅ 𝟭" by (simp only: inverso_d)
 also have "... = x'" by (simp only: neutro_d)
 finally show ?thesis .

qed

text {*

 Ejemplo 6. En los grupos, el inverso de un producto es el producto de
 los inversos cambiados de orden; es decir,
    (x ⋅ y)^ = y^ ⋅ x^    *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma inversa_producto:

 "(x ⋅ y)^ = y^ ⋅ x^"

by (metis asociativa inverso_i neutro_i)


-- "La demostración estructurada es" lemma inversa_producto_2:

 "(x ⋅ y)^ = y^ ⋅ x^"

proof (rule unicidad_inverso_i)

 show "(y^ ⋅ x^) ⋅ (x ⋅ y) = 𝟭"
 proof -
   have "(y^ ⋅ x^) ⋅ (x ⋅ y) = (y^ ⋅ (x^ ⋅ x)) ⋅ y" by (simp only: asociativa)
   also have "... = (y^ ⋅ 𝟭) ⋅ y" by (simp only: inverso_i)
   also have "... = y^ ⋅ y" by (simp only: neutro_d)
   also have "... = 𝟭" by (simp only: inverso_i)
   finally show ?thesis .
 qed

qed

text {*

 Ejemplo 7. En los grupos, el inverso del inverso es el propio
 elemento; es decir, 
    (x^)^ = x    *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma inverso_inverso:

 "(x^)^ = x"

by (metis inverso_d unicidad_inverso_i)

-- "La demostración estructurada es" lemma inverso_inverso_2:

 "(x^)^ = x"

proof (rule unicidad_inverso_i)

 show "x ⋅ x^ = 𝟭" by (simp only: inverso_d)

qed

text {*

 Ejemplo 8. En los grupos, la función inversa es inyectiva; es decir,
 si x e y tienen los mismos inversos, entonces son iguales. *}

-- "La demostración automática es (obtenida con Sledgehammer) es" lemma inversa_inyectiva:

 assumes "x^ = y^"
 shows "x = y"

using assms by (metis inverso_inverso)

-- "La demostración automática estructurada es" lemma inversa_inyectiva_2:

 assumes "x^ = y^"
 shows "x = y"

proof -

 have "(x^)^ = (y^)^" using assms by simp
 thus "x = y" by (simp only: inverso_inverso)

qed

end

end

<\source>