proved commutativity

This commit is contained in:
William Ball 2024-11-20 23:32:28 -08:00
parent ffc78ca1ff
commit 7b037db6c0

View file

@ -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 (eq_cong nat nat (suc (plus n m)) (plus n (suc m)) suc
-- suc (n + m) = n + suc m -- suc (n + m) = n + suc m
(eq_sym nat (plus n (suc m)) (suc (plus n m)) (plus_s_r n 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)))));