aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorJames Pollard <james@pollard.dev>2020-06-29 12:21:38 +0100
committerJames Pollard <james@pollard.dev>2020-06-29 12:21:38 +0100
commit9aa32499597678e3b0e7ef0b8a85ca5beda44938 (patch)
tree3310e4eaa338fde703653abddf101b542ede812f /src/common
parent0c360ec297c42d73c1090958d061447c2bfbe31b (diff)
downloadvericert-9aa32499597678e3b0e7ef0b8a85ca5beda44938.tar.gz
vericert-9aa32499597678e3b0e7ef0b8a85ca5beda44938.zip
Add missing file.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/ZExtra.v34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/common/ZExtra.v b/src/common/ZExtra.v
new file mode 100644
index 0000000..a0dd717
--- /dev/null
+++ b/src/common/ZExtra.v
@@ -0,0 +1,34 @@
+Require Import ZArith.
+Require Import Lia.
+
+Local Open Scope Z_scope.
+
+Module ZExtra.
+
+ Lemma mod_0_bounds :
+ forall x y m,
+ 0 < m ->
+ x mod m = 0 ->
+ y mod m = 0 ->
+ x <> y ->
+ x + m > y ->
+ y + m <= x.
+ Proof.
+ intros x y m.
+ intros POS XMOD YMOD NEQ H.
+ destruct (Z_le_gt_dec (y + m) x); eauto.
+
+ apply Znumtheory.Zmod_divide in YMOD; try lia.
+ apply Znumtheory.Zmod_divide in XMOD; try lia.
+ inversion XMOD as [x']; subst; clear XMOD.
+ inversion YMOD as [y']; subst; clear YMOD.
+
+ assert (x' <> y') as NEQ' by lia; clear NEQ.
+
+ rewrite <- Z.mul_succ_l in H.
+ rewrite <- Z.mul_succ_l in g.
+ apply Zmult_gt_reg_r in H;
+ apply Zmult_gt_reg_r in g; lia.
+ Qed.
+
+End ZExtra.