-
Notifications
You must be signed in to change notification settings - Fork 0
/
Los_monoides_booleanos_son_conmutativos.lean
54 lines (51 loc) · 1.78 KB
/
Los_monoides_booleanos_son_conmutativos.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
-- Los_monoides_booleanos_son_conmutativos.lean
-- Los monoides booleanos son conmutativos
-- José A. Alonso Jiménez
-- Sevilla, 10 de julio de 2021
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Un monoide es un conjunto junto con una operación binaria que es
-- asociativa y tiene elemento neutro.
--
-- Un monoide M es booleano si
-- ∀ x ∈ M, x * x = 1
-- y es conmutativo si
-- ∀ x y ∈ M, x * y = y * x
--
-- En Lean, está definida la clase de los monoides (como `monoid`) y sus
-- propiedades características son
-- mul_assoc : (a * b) * c = a * (b * c)
-- one_mul : 1 * a = a
-- mul_one : a * 1 = a
--
-- Demostrar que los monoides booleanos son conmutativos.
-- ---------------------------------------------------------------------
import algebra.group.basic
example
{M : Type} [monoid M]
(h : ∀ x : M, x * x = 1)
: ∀ x y : M, x * y = y * x :=
begin
intros a b,
calc a * b
= (a * b) * 1
: (mul_one (a * b)).symm
... = (a * b) * (a * a)
: congr_arg ((*) (a*b)) (h a).symm
... = ((a * b) * a) * a
: (mul_assoc (a*b) a a).symm
... = (a * (b * a)) * a
: congr_arg (* a) (mul_assoc a b a)
... = (1 * (a * (b * a))) * a
: congr_arg (* a) (one_mul (a*(b*a))).symm
... = ((b * b) * (a * (b * a))) * a
: congr_arg (* a) (congr_arg (* (a*(b*a))) (h b).symm)
... = (b * (b * (a * (b * a)))) * a
: congr_arg (* a) (mul_assoc b b (a*(b*a)))
... = (b * ((b * a) * (b * a))) * a
: congr_arg (* a) (congr_arg ((*) b) (mul_assoc b a (b*a)).symm)
... = (b * 1) * a
: congr_arg (* a) (congr_arg ((*) b) (h (b*a)))
... = b * a
: congr_arg (* a) (mul_one b),
end