La semana en Calculemus (29 de julio de 2023)
Esta semana he publicado en Calculemus las demostraciones con Lean4 de las siguientes propiedades:
- 1. Si c = da+b y b = ad, entonces c = 2ad
- 2. Si a+b = c, entonces (a+b)(a+b) = ac+ bc
- 3. Si R es un anillo y a ∈ R, entonces a + 0 = a
- 4. Si R es un anillo y a ∈ R, entonces a + -a = 0
- 5. Si R es un anillo y a, b ∈ R, entonces -a + (a + b) = b
A continuación se muestran las soluciones.
1. Si c = da+b y b = ad, entonces c = 2ad
Demostrar con Lean4 que si a, b, c y d son números reales tales que
1 2 |
c = d * a + b b = a * d |
entonces
1 |
c = 2 * a * d |
Para ello, completar la siguiente teoría de Lean4:
1 2 3 4 5 6 7 8 9 10 |
import Mathlib.Data.Real.Basic import Mathlib.Tactic variable (a b c d : ℝ) example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := sorry |
Demostración en lenguaje natural
Por la siguiente cadena de igualdades
\begin{align}
c &= da + b &&\text{[por la primera hipótesis]} \\
&= da + ad &&\text{[por la segunda hipótesis]} \\
&= ad + ad &&\text{[por la conmutativa]} \\
&= 2(ad) &&\text{[por la def. de doble]} \\
&= 2ad &&\text{[por la asociativa]}
\end{align}
Demostraciones 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 |
import Mathlib.Data.Real.Basic import Mathlib.Tactic variable (a b c d : ℝ) -- 1ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := calc c = d * a + b := by rw [h1] _ = d * a + a * d := by rw [h2] _ = a * d + a * d := by rw [mul_comm d a] _ = 2 * (a * d) := by rw [← two_mul (a * d)] _ = 2 * a * d := by rw [mul_assoc] -- 2ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := by rw [h2] at h1 clear h2 rw [mul_comm d a] at h1 rw [← two_mul (a*d)] at h1 rw [← mul_assoc 2 a d] at h1 exact h1 -- 3ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := by rw [h1, h2, mul_comm d a, ← two_mul (a * d), mul_assoc] -- 4ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := by rw [h1] rw [h2] ring -- 5ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := by rw [h1, h2] ring -- 6ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := by rw [h1, h2] ; ring -- 7ª demostración example (h1 : c = d * a + b) (h2 : b = a * d) : c = 2 * a * d := by linarith |
Demostraciones interactivas
Se puede interactuar con las demostraciones anteriores en Lean 4 Web.
Referencias
- J. Avigad y P. Massot. Mathematics in Lean, p. 8.
2. Si a+b = c, entonces (a+b)(a+b) = ac+ bc
Demostrar con Lean4 que si a, b y c son números reales tales que
1 |
a + b = c, |
entonces
1 |
(a + b) * (a + b) = a * c + b * c |
Para ello, completar la siguiente teoría de Lean4:
1 2 3 4 5 6 7 8 9 |
import Mathlib.Data.Real.Basic import Mathlib.Tactic variable (a b c : ℝ) example (h : a + b = c) : (a + b) * (a + b) = a * c + b * c := sorry |
Demostración en lenguaje natural
Por la siguiente cadena de igualdades
\begin{align}
(a + b)(a + b)
&= (a + b)c &&\text{[por la hipótesis]} \\
&= ac + bc &&\text{[por la distributiva]}
\end{align}
Demostraciones con Lean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import Mathlib.Data.Real.Basic import Mathlib.Tactic variable (a b c : ℝ) -- 1ª demostración example (h : a + b = c) : (a + b) * (a + b) = a * c + b * c := calc (a + b) * (a + b) = (a + b) * c := by exact congrArg (HMul.hMul (a + b)) h _ = a * c + b * c := by rw [add_mul] -- 2ª demostración example (h : a + b = c) : (a + b) * (a + b) = a * c + b * c := by nth_rewrite 2 [h] rw [add_mul] |
Demostraciones interactivas
Se puede interactuar con las demostraciones anteriores en Lean 4 Web.
Referencias
- J. Avigad y P. Massot. Mathematics in Lean, p. 9.
3. Si R es un anillo y a ∈ R, entonces a + 0 = a
En Lean4, se declara que (R) es un anillo mediante la expresión
1 |
variable {R : Type _} [Ring R] |
Como consecuencia, se tiene los siguientes axiomas
1 2 3 4 5 6 7 8 9 |
add_assoc : ∀ a b c : R, (a + b) + c = a + (b + c) add_comm : ∀ a b : R, a + b = b + a zero_add : ∀ a : R, 0 + a = a add_left_neg : ∀ a : R, -a + a = 0 mul_assoc : ∀ a b c : R, a * b * c = a * (b * c) mul_one : ∀ a : R, a * 1 = a one_mul : ∀ a : R, 1 * a = a mul_add : ∀ a b c : R, a * (b + c) = a * b + a * c add_mul : ∀ a b c : R, (a + b) * c = a * c + b * c |
Demostrar que si (R) es un anillo, entonces
1 |
∀ a : R, a + 0 = a |
Para ello, completar la siguiente teoría de Lean4:
1 2 3 4 5 6 7 |
import Mathlib.Algebra.Ring.Defs variable {R : Type _} [Ring R] variable (a : R) example : a + 0 = a := sorry |
Demostración en lenguaje natural
Por la siguiente cadena de igualdades
\begin{align}
a + 0 &= 0 + a &&\text{[por la conmutativa de la suma]} \\
&= a &&\text{[por el axioma del cero por la izquierda]}
\end{align}
Demostraciones con Lean4
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 |
-- 1ª demostración example : a + 0 = a := calc a + 0 = 0 + a := by rw [add_comm] _ = a := by rw [zero_add] -- 2ª demostración example : a + 0 = a := by rw [add_comm] rw [zero_add] -- 3ª demostración example : a + 0 = a := by rw [add_comm, zero_add] -- 4ª demostración example : a + 0 = a := by exact add_zero a -- 5ª demostración example : a + 0 = a := add_zero a -- 5ª demostración example : a + 0 = a := by simp |
Demostraciones interactivas
Se puede interactuar con las demostraciones anteriores en Lean 4 Web.
Referencias
- J. Avigad y P. Massot. Mathematics in Lean, p. 10.
4. Si R es un anillo y a ∈ R, entonces a + -a = 0
Demostrar con Lean4 que si (R) es un anillo, entonces
1 |
∀ a : R, a + -a = 0 |
Para ello, completar la siguiente teoría de Lean4:
1 2 3 4 5 6 7 |
import Mathlib.Algebra.Ring.Defs variable {R : Type _} [Ring R] variable (a : R) example : a + -a = 0 := sorry |
Demostración en lenguaje natural
Por la siguiente cadena de igualdades
\begin{align}
a + -a &= -a + a &&\text{[por la conmutativa de la suma]} \\
&= 0 &&\text{[por el axioma de inverso por la izquierda]}
\end{align}
Demostraciones con Lean4
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 |
import Mathlib.Algebra.Ring.Defs variable {R : Type _} [Ring R] variable (a : R) -- 1ª demostración -- =============== example : a + -a = 0 := calc a + -a = -a + a := by rw [add_comm] _ = 0 := by rw [add_left_neg] -- 2ª demostración -- =============== example : a + -a = 0 := by rw [add_comm] rw [add_left_neg] -- 3ª demostración -- =============== example : a + -a = 0 := by rw [add_comm, add_left_neg] -- 4ª demostración -- =============== example : a + -a = 0 := by exact add_neg_self a -- 5ª demostración -- =============== example : a + -a = 0 := add_neg_self a -- 6ª demostración -- =============== example : a + -a = 0 := by simp |
Demostraciones interactivas
Se puede interactuar con las demostraciones anteriores en Lean 4 Web.
Referencias
- J. Avigad y P. Massot. Mathematics in Lean, p. 10.
5. Si R es un anillo y a, b ∈ R, entonces -a + (a + b) = b
Demostrar en Lean4 que si R es un anillo, entonces
1 |
∀ a, b : R, -a + (a + b) = b |
Para ello, completar la siguiente teoría de Lean4:
1 2 3 4 5 6 7 |
import Mathlib.Algebra.Ring.Defs variable {R : Type _} [Ring R] variable (a b : R) example : -a + (a + b) = b := sorry |
Demostración en lenguaje natural
Por la siguiente cadena de igualdades
\begin{align}
-a + (a + b) &= (-a + a) + b &&\text{[por la asociativa]} \\
&= 0 + b &&\text{[por inverso por la izquierda]} \\
&= b &&\text{[por cero por la izquierda]}
\end{align}
Demostraciones con Lean4
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 |
-- 1ª demostración example : -a + (a + b) = b := calc -a + (a + b) = (-a + a) + b := by rw [← add_assoc] _ = 0 + b := by rw [add_left_neg] _ = b := by rw [zero_add] -- 2ª demostración example : -a + (a + b) = b := by rw [←add_assoc] rw [add_left_neg] rw [zero_add] -- 3ª demostración example : -a + (a + b) = b := by rw [←add_assoc, add_left_neg, zero_add] -- 4ª demostración example : -a + (a + b) = b := by exact neg_add_cancel_left a b -- 5ª demostración example : -a + (a + b) = b := neg_add_cancel_left a b -- 6ª demostración example : -a + (a + b) = b := by simp |
Demostraciones interactivas
Se puede interactuar con las demostraciones anteriores en Lean 4 Web.
Referencias
- J. Avigad y P. Massot. Mathematics in Lean, p. 10.