proved commutativity
This commit is contained in:
parent
ffc78ca1ff
commit
7b037db6c0
1 changed files with 32 additions and 0 deletions
|
|
@ -360,3 +360,35 @@ plus_s_l (n : nat) : forall (m : nat), eq nat (plus (suc n) m) (suc (plus n m))
|
|||
(eq_cong nat nat (suc (plus n m)) (plus n (suc m)) suc
|
||||
-- suc (n + m) = n + suc m
|
||||
(eq_sym nat (plus n (suc m)) (suc (plus n m)) (plus_s_r n m))))));
|
||||
|
||||
-- Finally, we can prove commutativity.
|
||||
plus_comm (n : nat) : forall (m : nat), eq nat (plus n m) (plus m n) :=
|
||||
-- As usual, we proceed by induction.
|
||||
nat_ind (fun (m : nat) => eq nat (plus n m) (plus m n))
|
||||
|
||||
-- Base case: WTS n + 0 = 0 + n
|
||||
-- n + 0 = n = 0 + n
|
||||
(eq_trans nat (plus n zero) n (plus zero n)
|
||||
-- n + 0 = n
|
||||
(plus_0_r n)
|
||||
|
||||
-- n = 0 + n
|
||||
(eq_sym nat (plus zero n) n (plus_0_l n)))
|
||||
|
||||
-- Inductive step:
|
||||
(fun (m : nat) (IH : eq nat (plus n m) (plus m n)) =>
|
||||
-- WTS n + suc m = suc m + n
|
||||
-- n + suc m = suc (n + m)
|
||||
-- = suc (m + n)
|
||||
-- = suc m + n
|
||||
(eq_trans nat (plus n (suc m)) (suc (plus n m)) (plus (suc m) n)
|
||||
-- n + suc m = suc (n + m)
|
||||
(plus_s_r n m)
|
||||
|
||||
-- suc (n + m) = suc m + n
|
||||
(eq_trans nat (suc (plus n m)) (suc (plus m n)) (plus (suc m) n)
|
||||
-- suc (n + m) = suc (m + n)
|
||||
(eq_cong nat nat (plus n m) (plus m n) suc IH)
|
||||
|
||||
-- suc (m + n) = suc m + n
|
||||
(eq_sym nat (plus (suc m) n) (suc (plus m n)) (plus_s_l m n)))));
|
||||
|
|
|
|||
Loading…
Reference in a new issue