-
Notifications
You must be signed in to change notification settings - Fork 0
/
La_paradoja_del_barbero.lean
65 lines (57 loc) · 1.61 KB
/
La_paradoja_del_barbero.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
-- La_paradoja_del_barbero.lean
-- La paradoja del barbero.
-- José A. Alonso Jiménez
-- Sevilla, 26 de julio de 2021
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Demostrar la paradoja del barbero https://bit.ly/3eWyvVw es decir,
-- que no existe un hombre que afeite a todos los que no se afeitan a sí
-- mismo y sólo a los que no se afeitan a sí mismo.
-- ---------------------------------------------------------------------
import tactic
variable (Hombre : Type)
variable (afeita : Hombre → Hombre → Prop)
-- 1ª demostración
example :
¬(∃ x : Hombre, ∀ y : Hombre, afeita x y ↔ ¬ afeita y y) :=
begin
intro h,
cases h with b hb,
specialize hb b,
by_cases (afeita b b),
{ apply absurd h,
exact hb.mp h, },
{ apply h,
exact hb.mpr h, },
end
-- 2ª demostración
example :
¬(∃ x : Hombre, ∀ y : Hombre, afeita x y ↔ ¬ afeita y y) :=
begin
intro h,
cases h with b hb,
specialize hb b,
by_cases (afeita b b),
{ exact (hb.mp h) h, },
{ exact h (hb.mpr h), },
end
-- 3ª demostración
example :
¬(∃ x : Hombre, ∀ y : Hombre, afeita x y ↔ ¬ afeita y y) :=
begin
intro h,
cases h with b hb,
specialize hb b,
by itauto,
end
-- 4ª demostración
example :
¬ (∃ x : Hombre, ∀ y : Hombre, afeita x y ↔ ¬ afeita y y ) :=
begin
rintro ⟨b, hb⟩,
exact (iff_not_self (afeita b b)).mp (hb b),
end
-- 5ª demostración
example :
¬ (∃ x : Hombre, ∀ y : Hombre, afeita x y ↔ ¬ afeita y y ) :=
λ ⟨b, hb⟩, (iff_not_self (afeita b b)).mp (hb b)