@@ -180,6 +180,9 @@ toIntNat n = toIntNat' n 0 where
180180 toIntNat' Z x = x
181181 toIntNat' (S n) x = toIntNat' n (x + 1)
182182
183+(-) : (m : Nat) -> (n : Nat) -> {auto smaller : LTE n m} -> Nat
184+(-) m n {smaller} = minus m n
185+
183186--------------------------------------------------------------------------------
184187-- Type class instances
185188--------------------------------------------------------------------------------
@@ -200,11 +203,8 @@ instance Ord Nat where
200203
201204instance Num Nat where
202205 (+) = plus
203− (-) = minus
204206 (*) = mult
205207
206− abs x = x
207−
208208 fromInteger = fromIntegerNat
209209
210210instance MinBound Nat where
@@ -307,7 +307,7 @@ modNatNZ left (S right) _ = mod' left left right
307307 if lte centre right then
308308 centre
309309 else
310− mod' left (centre - (S right)) right
310+ mod' left (minus centre (S right)) right
311311
312312partial
313313modNat : Nat -> Nat -> Nat
@@ -323,7 +323,7 @@ divNatNZ left (S right) _ = div' left left right
323323 if lte centre right then
324324 Z
325325 else
326− S (div' left (centre - (S right)) right)
326+ S (div' left (minus centre (S right)) right)
327327
328328partial
329329divNat : Nat -> Nat -> Nat
@@ -544,34 +544,34 @@ multOneRightNeutral (S left) =
544544
545545-- Minus
546546total minusSuccSucc : (left : Nat) -> (right : Nat) ->
547− (S left) - (S right) = left - right
547+ minus (S left) (S right) = minus left right
548548minusSuccSucc left right = Refl
549549
550−total minusZeroLeft : (right : Nat) -> 0 - right = Z
550+total minusZeroLeft : (right : Nat) -> minus 0 right = Z
551551minusZeroLeft right = Refl
552552
553−total minusZeroRight : (left : Nat) -> left - 0 = left
553+total minusZeroRight : (left : Nat) -> minus left 0 = left
554554minusZeroRight Z = Refl
555555minusZeroRight (S left) = Refl
556556
557−total minusZeroN : (n : Nat) -> Z = n - n
557+total minusZeroN : (n : Nat) -> Z = minus n n
558558minusZeroN Z = Refl
559559minusZeroN (S n) = minusZeroN n
560560
561−total minusOneSuccN : (n : Nat) -> S Z = (S n) - n
561+total minusOneSuccN : (n : Nat) -> S Z = minus (S n) n
562562minusOneSuccN Z = Refl
563563minusOneSuccN (S n) = minusOneSuccN n
564564
565−total minusSuccOne : (n : Nat) -> S n - 1 = n
565+total minusSuccOne : (n : Nat) -> minus (S n) 1 = n
566566minusSuccOne Z = Refl
567567minusSuccOne (S n) = Refl
568568
569−total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = Z
569+total minusPlusZero : (n : Nat) -> (m : Nat) -> minus n (n + m) = Z
570570minusPlusZero Z m = Refl
571571minusPlusZero (S n) m = minusPlusZero n m
572572
573573total minusMinusMinusPlus : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
574− left - centre - right = left - (centre + right)
574+ minus (minus left centre) right = minus left (centre + right)
575575minusMinusMinusPlus Z Z right = Refl
576576minusMinusMinusPlus (S left) Z right = Refl
577577minusMinusMinusPlus Z (S centre) right = Refl
@@ -581,7 +581,7 @@ minusMinusMinusPlus (S left) (S centre) right =
581581 Refl
582582
583583total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
584− (left + right) - (left + right') = right - right'
584+ minus (left + right) (left + right') = minus right right'
585585plusMinusLeftCancel Z right right' = Refl
586586plusMinusLeftCancel (S left) right right' =
587587 let inductiveHypothesis = plusMinusLeftCancel left right right' in
@@ -589,7 +589,7 @@ plusMinusLeftCancel (S left) right right' =
589589 Refl
590590
591591total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
592− (left - centre) * right = (left * right) - (centre * right)
592+ (minus left centre) * right = minus (left * right) (centre * right)
593593multDistributesOverMinusLeft Z Z right = Refl
594594multDistributesOverMinusLeft (S left) Z right =
595595 rewrite (minusZeroRight (plus right (mult left right))) in Refl
@@ -601,7 +601,7 @@ multDistributesOverMinusLeft (S left) (S centre) right =
601601 Refl
602602
603603total multDistributesOverMinusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
604− left * (centre - right) = (left * centre) - (left * right)
604+ left * (minus centre right) = minus (left * centre) (left * right)
605605multDistributesOverMinusRight left centre right =
606606 rewrite multCommutative left (minus centre right) in
607607 rewrite multDistributesOverMinusLeft centre right left in
@@ -658,7 +658,7 @@ total predSucc : (n : Nat) -> pred (S n) = n
658658predSucc n = Refl
659659
660660total minusSuccPred : (left : Nat) -> (right : Nat) ->
661− left - (S right) = pred (left - right)
661+ minus left (S right) = pred (minus left right)
662662minusSuccPred Z right = Refl
663663minusSuccPred (S left) Z =
664664 rewrite minusZeroRight left in Refl