0 | module Data.Nat.Equational
11 | subtractEqLeft : (a : Nat) -> {b, c : Nat} -> a + b = a + c -> b = c
12 | subtractEqLeft 0 prf = prf
13 | subtractEqLeft (S k) prf = subtractEqLeft k $
injective prf
19 | subtractEqRight : {a, b : Nat} -> (c : Nat) -> a + c = b + c -> a = b
20 | subtractEqRight c prf =
22 | rewrite plusCommutative c a in
23 | rewrite plusCommutative c b in
28 | plusLteLeft : (a : Nat) -> {b, c : Nat} -> LTE b c -> LTE (a + b) (a + c)
29 | plusLteLeft 0 bLTEc = bLTEc
30 | plusLteLeft (S k) bLTEc = LTESucc $
plusLteLeft k bLTEc
34 | plusLteRight : {a, b : Nat} -> (c : Nat) -> LTE a b -> LTE (a + c) (b + c)
35 | plusLteRight c aLTEb =
36 | rewrite plusCommutative a c in
37 | rewrite plusCommutative b c in
43 | lteZeroIsZero : a `LTE` 0 -> a = 0
44 | lteZeroIsZero LTEZero = Refl
49 | subtractLteLeft : (a : Nat) -> {b, c : Nat} -> LTE (a + b) (a + c) -> LTE b c
50 | subtractLteLeft 0 abLTEac = abLTEac
51 | subtractLteLeft (S k) abLTEac = subtractLteLeft k $
fromLteSucc abLTEac
56 | subtractLteRight : {a, b : Nat} -> (c : Nat) -> LTE (a + c) (b + c) -> LTE a b
57 | subtractLteRight c acLTEbc =
59 | rewrite plusCommutative c a in
60 | rewrite plusCommutative c b in
66 | rightFactorLteProduct : (a, b : Nat) -> LTE b (S a * b)
67 | rightFactorLteProduct a b = lteAddRight b
72 | leftFactorLteProduct : (a, b : Nat) -> LTE a (a * S b)
73 | leftFactorLteProduct a b =
74 | rewrite multRightSuccPlus a b in