module blog_arithmetic where open import EqualityBase public data Nat : ๐“คโ‚€ ฬ‡ where zero : Nat succ : Nat โ†’ Nat _โŠž_ : Nat โ†’ Nat โ†’ Nat zero โŠž n = n (succ m) โŠž n = succ (m โŠž n) _โŠ _ : Nat โ†’ Nat โ†’ Nat zero โŠ  n = zero (succ m) โŠ  n = (m โŠ  n) โŠž n infixl 20 _โŠž_ infixl 21 _โŠ _ pluszero : (n : Nat) โ†’ (n โŠž zero) โ‰ก n pluszero zero = refl zero pluszero (succ n) = ap succ (pluszero n) one : Nat one = succ zero succ+1 : (n : Nat) โ†’ succ n โ‰ก (n โŠž one) succ+1 zero = refl one succ+1 (succ n) = ap succ (succ+1 n) plus-assoc : (m n p : Nat) โ†’ (m โŠž (n โŠž p)) โ‰ก (m โŠž n โŠž p) plus-assoc zero n p = refl (n โŠž p) plus-assoc (succ m) n p = ap succ (plus-assoc m n p) m-plus-Sn : (m n : Nat) โ†’ (m โŠž succ n) โ‰ก succ (m โŠž n) m-plus-Sn zero n = refl (succ n) m-plus-Sn (succ m) n = ap succ (m-plus-Sn m n) plus-comm : (m n : Nat) โ†’ (m โŠž n) โ‰ก (n โŠž m) plus-comm zero n = (pluszero n) โปยน plus-comm (succ m) n = (ap succ (plus-comm m n)) โˆ™ ((m-plus-Sn n m) โปยน)