@@ -54,7 +54,7 @@ plusnO : (m : Nat) -> m + O = m
54plusnO O = refl
54plusnO O = refl
55plusnO (S k) = eqRespS (plusnO k)
55plusnO (S k) = eqRespS (plusnO k)
57−plusn_Sm : (n : Nat) -> (m : Nat) -> (plus n (S m)) = S (plus n m)
57+plusn_Sm : (n, m : Nat) -> (plus n (S m)) = S (plus n m)
58plusn_Sm O m = refl
58plusn_Sm O m = refl
59plusn_Sm (S j) m = eqRespS (plusn_Sm _ _)
59plusn_Sm (S j) m = eqRespS (plusn_Sm _ _)
@@ -73,3 +73,55 @@ plus_assoc : (n, m, p : Nat) -> n + (m + p) = (n + m) + p
73plus_assoc O m p = refl
73plus_assoc O m p = refl
74plus_assoc (S k) m p = let ih = plus_assoc k m p in eqRespS ih
74plus_assoc (S k) m p = let ih = plus_assoc k m p in eqRespS ih
76+data Cmp : Nat -> Nat -> Set where
77+ cmpLT : (y : Nat) -> Cmp x (x + S y)
79+ cmpGT : (x : Nat) -> Cmp (y + S x) y
81+cmp : (n, m : Nat) -> Cmp n m
85+cmp (S x) (S y) with (cmp x y)
86+ cmp (S x) (S x) | cmpEQ = cmpEQ
87+ cmp (S (y + S x)) (S y) | cmpGT _ = cmpGT _
88+ cmp (S x) (S (x + S y)) | cmpLT _ = cmpLT _
90+multnO : (n : Nat) -> (n * O) = O
92+multnO (S k) = multnO k
94+multn_Sm : (n, m : Nat) -> n * S m = n + n * m
96+multn_Sm (S k) m = let ih = multn_Sm k m in ?multnSmSk
98+mult_commutes : (n, m : Nat) -> n * m = m * n
99+mult_commutes O m = ?mult_commO
100+mult_commutes (S k) m = let ih = mult_commutes k m in ?mult_commSk
102+mult_commSk = proof {
107+ rewrite multn_Sm m k;
121+ rewrite plus_commutes (mult k m) m;
122+ rewrite sym (plus_assoc k (mult k m) m);
124+ rewrite plus_commutes m (mult k (S m));