-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPar_si_cuadrado_par.lean
100 lines (81 loc) · 2.12 KB
/
Par_si_cuadrado_par.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
-- Par_si_cuadrado_par.lean
-- Si n² es par, entonces n es par.
-- José A. Alonso Jiménez <https://jaalonso.github.io>
-- Sevilla, 26-enero-2024
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Demostrar que si n² es par, entonces n es par.
-- ---------------------------------------------------------------------
-- Demostración en lenguaje natural
-- ================================
-- Se usara el siguiente lema: "Si p es primo, entonces
-- (∀ a, b ∈ ℕ)[p ∣ ab ↔ p ∣ a ∨ p ∣ b].
--
-- Si n² es par, entonces 2 divide a n.n y, por el lema, 2 divide a n.
-- Demostraciones con Lean4
-- ========================
import Mathlib.Tactic
open Nat
variable (n : ℕ)
-- 1ª demostración
-- ===============
example
(h : 2 ∣ n ^ 2)
: 2 ∣ n :=
by
rw [pow_two] at h
-- h : 2 ∣ n * n
have h1 : Nat.Prime 2 := prime_two
have h2 : 2 ∣ n ∨ 2 ∣ n := (Nat.Prime.dvd_mul h1).mp h
rcases h2 with h3 | h4
· -- h3 : 2 ∣ n
exact h3
· -- h4 : 2 ∣ n
exact h4
-- 2ª demostración
-- ===============
example
(h : 2 ∣ n ^ 2)
: 2 ∣ n :=
by
rw [pow_two] at h
-- h : 2 ∣ n * n
have h2 : 2 ∣ n ∨ 2 ∣ n := (Nat.Prime.dvd_mul prime_two).mp h
rcases h2 with h3 | h4
· exact h3
· exact h4
-- 3ª demostración
-- ===============
example
(h : 2 ∣ n ^ 2)
: 2 ∣ n :=
by
rw [pow_two] at h
-- h : 2 ∣ n * n
have h2 : 2 ∣ n ∨ 2 ∣ n := (Nat.Prime.dvd_mul prime_two).mp h
cases h2 <;> assumption
-- 4ª demostración
-- ===============
example
(h : 2 ∣ n ^ 2)
: 2 ∣ n :=
by
rw [pow_two] at h
-- h : 2 ∣ n * n
have h2 : 2 ∣ n ∨ 2 ∣ n := (Nat.Prime.dvd_mul prime_two).mp h
tauto
-- 5ª demostración
-- ===============
example
(h : 2 ∣ n ^ 2)
: 2 ∣ n :=
by
rw [pow_two, Nat.prime_two.dvd_mul] at h
-- h : 2 ∣ n ∨ 2 ∣ n
-- ⊢ 2 ∣ n
tauto
-- Lemas usados
-- ============
-- variable (p a b : ℕ)
-- #check (prime_two : Nat.Prime 2)
-- #check (Nat.Prime.dvd_mul : Nat.Prime p → (p ∣ a * b ↔ p ∣ a ∨ p ∣ b))