diff options
author | James Pollard <james@pollard.dev> | 2020-06-29 12:21:38 +0100 |
---|---|---|
committer | James Pollard <james@pollard.dev> | 2020-06-29 12:21:38 +0100 |
commit | 9aa32499597678e3b0e7ef0b8a85ca5beda44938 (patch) | |
tree | 3310e4eaa338fde703653abddf101b542ede812f | |
parent | 0c360ec297c42d73c1090958d061447c2bfbe31b (diff) | |
download | vericert-kvx-9aa32499597678e3b0e7ef0b8a85ca5beda44938.tar.gz vericert-kvx-9aa32499597678e3b0e7ef0b8a85ca5beda44938.zip |
Add missing file.
-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. |