diff options
author | Yann Herklotz <git@yannherklotz.com> | 2020-06-29 16:55:34 +0100 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2020-06-29 16:55:34 +0100 |
commit | f57793552fe387fef22f6a77389de2556c0354a4 (patch) | |
tree | a77cfe556e4cd8a12fffa5dbe4617764b6137d44 /src | |
parent | 8398615fea7ab754854cb10e16e86de6415f1f2d (diff) | |
parent | 9aa32499597678e3b0e7ef0b8a85ca5beda44938 (diff) | |
download | vericert-kvx-f57793552fe387fef22f6a77389de2556c0354a4.tar.gz vericert-kvx-f57793552fe387fef22f6a77389de2556c0354a4.zip |
Merge remote-tracking branch 'james/arrays-proof' into develop
Diffstat (limited to 'src')
-rw-r--r-- | src/common/ZExtra.v | 34 |
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. |