From 126312747d3005f8fd0611613b26db532a77f3c5 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Sat, 30 May 2020 18:29:46 +0200 Subject: add and mul recurse on second argument instead of first --- hott/Nat.thy | 69 ++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 20 deletions(-) (limited to 'hott/Nat.thy') diff --git a/hott/Nat.thy b/hott/Nat.thy index e36d6be..2d03293 100644 --- a/hott/Nat.thy +++ b/hott/Nat.thy @@ -46,41 +46,52 @@ text \Non-dependent recursion\ abbreviation "NatRec C \ NatInd (\_. C)" +text \Manual notation for now:\ +abbreviation one ("1") where "1 \ suc 0" +abbreviation two ("2") where "2 \ suc 1" +abbreviation three ("3") where "3 \ suc 2" +abbreviation four ("4") where "4 \ suc 3" +abbreviation five ("5") where "5 \ suc 4" +abbreviation six ("6") where "6 \ suc 5" +abbreviation seven ("7") where "7 \ suc 6" +abbreviation eight ("8") where "8 \ suc 7" +abbreviation nine ("9") where "9 \ suc 8" + section \Basic arithmetic\ subsection \Addition\ -definition add (infixl "+" 120) where "m + n \ NatRec Nat n (K suc) m" +definition add (infixl "+" 120) where "m + n \ NatRec Nat m (K suc) n" lemma add_type [typechk]: assumes "m: Nat" "n: Nat" shows "m + n: Nat" unfolding add_def by typechk -lemma zero_add [comps]: - assumes "n: Nat" - shows "0 + n \ n" +lemma add_zero [comps]: + assumes "m: Nat" + shows "m + 0 \ m" unfolding add_def by reduce -lemma suc_add [comps]: +lemma add_suc [comps]: assumes "m: Nat" "n: Nat" - shows "suc m + n \ suc (m + n)" + shows "m + suc n \ suc (m + n)" unfolding add_def by reduce -Lemma (derive) add_zero: +Lemma (derive) zero_add: assumes "n: Nat" - shows "n + 0 = n" + shows "0 + n = n" apply (elim n) \ by (reduce; intro) \ vars _ ih by reduce (eq ih; intro) done -Lemma (derive) add_suc: +Lemma (derive) suc_add: assumes "m: Nat" "n: Nat" - shows "m + suc n = suc (m + n)" - apply (elim m) - \ by reduce intro + shows "suc m + n = suc (m + n)" + apply (elim n) + \ by reduce refl \ vars _ ih by reduce (eq ih; intro) done @@ -92,7 +103,7 @@ Lemma (derive) suc_eq: Lemma (derive) add_assoc: assumes "l: Nat" "m: Nat" "n: Nat" shows "l + (m + n) = (l + m) + n" - apply (elim l) + apply (elim n) \ by reduce intro \ vars _ ih by reduce (eq ih; intro) done @@ -100,20 +111,38 @@ Lemma (derive) add_assoc: Lemma (derive) add_comm: assumes "m: Nat" "n: Nat" shows "m + n = n + m" - apply (elim m) - \ by (reduce; rule add_zero[symmetric]) - \ prems vars m ih + apply (elim n) + \ by (reduce; rule zero_add[symmetric]) + \ prems vars n ih proof reduce have "suc (m + n) = suc (n + m)" by (eq ih) intro - also have ".. = n + suc m" by (rule add_suc[symmetric]) - finally show "suc (m + n) = n + suc m" by this + also have ".. = suc n + m" by (rule suc_add[symmetric]) + finally show "suc (m + n) = suc n + m" by this qed done subsection \Multiplication\ -definition mul (infixl "*" 120) where - [comps]: "m * n \ NatRec Nat 0 (K $ add n) m" +definition mul (infixl "*" 121) where "m * n \ NatRec Nat 0 (K $ add m) n" +lemma mul_type [typechk]: + assumes "m: Nat" "n: Nat" + shows "m * n: Nat" + unfolding mul_def by typechk + +lemma mul_zero [comps]: + assumes "n: Nat" + shows "n * 0 \ 0" + unfolding mul_def by reduce + +lemma mul_one [comps]: + assumes "n: Nat" + shows "n * 1 \ n" + unfolding mul_def by reduce + +lemma mul_suc [comps]: + assumes "m: Nat" "n: Nat" + shows "m * suc n \ m + m * n" + unfolding mul_def by reduce end -- cgit v1.2.3