-- Opuesto_ig_si_suma_ig_cero.lean -- Si R es un anillo y a, b ∈ R tales que a+b=0, entonces -a=b -- José A. Alonso Jiménez <https://jaalonso.github.io> -- Sevilla, 7-agosto-2023 -- --------------------------------------------------------------------- -- --------------------------------------------------------------------- -- Demostrar que si es un anillo y a, b ∈ R tales que -- a + b = 0 -- entonces -- -a = b -- ---------------------------------------------------------------------- -- Demostraciones en lenguaje natural (LN) -- ======================================= -- 1ª demostración en LN -- --------------------- -- Por la siguiente cadena de igualdades -- -a = -a + 0 [por suma cero] -- = -a + (a + b) [por hipótesis] -- = b [por cancelativa] -- 2ª demostración en LN -- --------------------- -- Sumando -a a ambos lados de la hipótesis, se tiene -- -a + (a + b) = -a + 0 -- El término de la izquierda se reduce a b (por la cancelativa) y el de -- la derecha a -a (por la suma con cero). Por tanto, se tiene -- b = -a -- Por la simetría de la igualdad, se tiene -- -a = b -- Demostraciones con Lean 4 -- ========================= import Mathlib.Algebra.Ring.Defs import Mathlib.Tactic variable {R : Type _} [Ring R] variable {a b : R} -- 1ª demostración (basada en la 1º en LN) example (h : a + b = 0) : -a = b := calc -a = -a + 0 := by rw [add_zero] _ = -a + (a + b) := by rw [h] _ = b := by rw [neg_add_cancel_left] -- 2ª demostración (basada en la 1º en LN) example (h : a + b = 0) : -a = b := calc -a = -a + 0 := by simp _ = -a + (a + b) := by rw [h] _ = b := by simp -- 3ª demostración (basada en la 2º en LN) example (h : a + b = 0) : -a = b := by have h1 : -a + (a + b) = -a + 0 := congrArg (HAdd.hAdd (-a)) h have h2 : -a + (a + b) = b := neg_add_cancel_left a b have h3 : -a + 0 = -a := add_zero (-a) rw [h2, h3] at h1 exact h1.symm -- 4ª demostración example (h : a + b = 0) : -a = b := neg_eq_iff_add_eq_zero.mpr h -- Lemas usados -- ============ -- #check (add_zero a : a + 0 = a) -- #check (neg_add_cancel_left a b : -a + (a + b) = b) -- #check (neg_eq_iff_add_eq_zero : -a = b ↔ a + b = 0)