aboutsummaryrefslogtreecommitdiff
path: root/src/Util
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2016-08-24 16:17:05 -0700
committerGravatar Jason Gross <jagro@google.com>2016-08-24 16:23:29 -0700
commit5e624a3289b2d4ffa3579dd74a4ca4e1c564afa4 (patch)
tree4e5a6cd02429a0570e9c306c6fe6995d8edd233d /src/Util
parent589faec943ccd6e55c28fddd701fd38bc0f32507 (diff)
Fewer side-conditions on zsimplify
After | File Name | Before || Change ---------------------------------------------------------------------------------- 3m23.91s | Total | 3m03.61s || +0m20.30s ---------------------------------------------------------------------------------- 0m52.44s | ModularArithmetic/Pow2BaseProofs | 0m38.87s || +0m13.57s 0m18.83s | ModularArithmetic/ModularBaseSystemProofs | 0m27.00s || -0m08.17s 0m13.77s | ModularArithmetic/Montgomery/ZProofs | 0m09.31s || +0m04.45s 0m16.91s | Experiments/SpecEd25519 | 0m14.02s || +0m02.89s 0m05.95s | ModularArithmetic/BarrettReduction/ZHandbook | 0m03.94s || +0m02.01s 0m15.10s | Specific/GF25519 | 0m16.29s || -0m01.18s 0m09.03s | Specific/GF1305 | 0m10.27s || -0m01.24s 0m05.09s | ModularArithmetic/Tutorial | 0m03.68s || +0m01.40s 0m03.78s | ModularArithmetic/ModularArithmeticTheorems | 0m02.61s || +0m01.16s 0m12.20s | Util/ZUtil | 0m11.39s || +0m00.80s 0m10.50s | Testbit | 0m10.45s || +0m00.05s 0m04.99s | BaseSystemProofs | 0m04.22s || +0m00.77s 0m04.01s | ModularArithmetic/BarrettReduction/ZGeneralized | 0m03.05s || +0m00.96s 0m03.42s | Experiments/SpecificCurve25519 | 0m03.52s || -0m00.10s 0m02.87s | ModularArithmetic/BarrettReduction/ZBounded | 0m02.38s || +0m00.49s 0m02.55s | ModularArithmetic/ModularBaseSystemOpt | 0m03.43s || -0m00.88s 0m02.14s | ModularArithmetic/BarrettReduction/Z | 0m01.55s || +0m00.59s 0m01.77s | Encoding/PointEncodingPre | 0m01.57s || +0m00.19s 0m01.68s | BaseSystem | 0m01.65s || +0m00.03s 0m01.51s | ModularArithmetic/PrimeFieldTheorems | 0m01.09s || +0m00.41s 0m01.37s | ModularArithmetic/ModularBaseSystemListProofs | 0m00.86s || +0m00.51s 0m01.31s | ModularArithmetic/ExtendedBaseVector | 0m01.17s || +0m00.14s 0m01.16s | Experiments/DerivationsOptionRectLetInEncoding | 0m01.30s || -0m00.14s 0m01.15s | Util/NumTheoryUtil | 0m01.33s || -0m00.18s 0m01.07s | Encoding/ModularWordEncodingTheorems | 0m01.02s || +0m00.05s 0m00.98s | Encoding/ModularWordEncodingPre | 0m00.92s || +0m00.05s 0m00.97s | ModularArithmetic/ExtPow2BaseMulProofs | 0m00.64s || +0m00.32s 0m00.85s | ModularArithmetic/Montgomery/ZBounded | 0m00.97s || -0m00.12s 0m00.79s | ModularArithmetic/PseudoMersenneBaseParamProofs | 0m00.69s || +0m00.10s 0m00.76s | ModularArithmetic/Pre | 0m00.48s || +0m00.28s 0m00.73s | ModularArithmetic/ModularBaseSystemList | 0m00.66s || +0m00.06s 0m00.71s | Spec/ModularWordEncoding | 0m00.58s || +0m00.13s 0m00.68s | ModularArithmetic/Pow2Base | 0m00.41s || +0m00.27s 0m00.67s | ModularArithmetic/ZBounded | 0m00.48s || +0m00.19s 0m00.66s | ModularArithmetic/PseudoMersenneBaseParams | 0m00.43s || +0m00.23s 0m00.66s | ModularArithmetic/ModularBaseSystem | 0m00.62s || +0m00.04s 0m00.45s | ModularArithmetic/Montgomery/Z | 0m00.40s || +0m00.04s 0m00.41s | Spec/ModularArithmetic | 0m00.36s || +0m00.04s
Diffstat (limited to 'src/Util')
-rw-r--r--src/Util/ZUtil.v16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/Util/ZUtil.v b/src/Util/ZUtil.v
index d06477d3c..35aa20dc4 100644
--- a/src/Util/ZUtil.v
+++ b/src/Util/ZUtil.v
@@ -324,15 +324,27 @@ Module Z.
Hint Resolve elim_mod : zarith.
+ Lemma mod_add_full : forall a b c, (a + b * c) mod c = a mod c.
+ Proof. intros; destruct (Z_zerop c); try subst; autorewrite with zsimplify; reflexivity. Qed.
+ Hint Rewrite mod_add_full : zsimplify.
+
+ Lemma mod_add_l_full : forall a b c, (a * b + c) mod b = c mod b.
+ Proof. intros; rewrite (Z.add_comm _ c); autorewrite with zsimplify; reflexivity. Qed.
+ Hint Rewrite mod_add_l_full : zsimplify.
+
+ Lemma mod_add'_full : forall a b c, (a + b * c) mod b = a mod b.
+ Proof. intros; rewrite (Z.mul_comm _ c); autorewrite with zsimplify; reflexivity. Qed.
+ Lemma mod_add_l'_full : forall a b c, (a * b + c) mod a = c mod a.
+ Proof. intros; rewrite (Z.mul_comm _ b); autorewrite with zsimplify; reflexivity. Qed.
+ Hint Rewrite mod_add'_full mod_add_l'_full : zsimplify.
+
Lemma mod_add_l : forall a b c, b <> 0 -> (a * b + c) mod b = c mod b.
Proof. intros; rewrite (Z.add_comm _ c); autorewrite with zsimplify; reflexivity. Qed.
- Hint Rewrite mod_add_l using zutil_arith : zsimplify.
Lemma mod_add' : forall a b c, b <> 0 -> (a + b * c) mod b = a mod b.
Proof. intros; rewrite (Z.mul_comm _ c); autorewrite with zsimplify; reflexivity. Qed.
Lemma mod_add_l' : forall a b c, a <> 0 -> (a * b + c) mod a = c mod a.
Proof. intros; rewrite (Z.mul_comm _ b); autorewrite with zsimplify; reflexivity. Qed.
- Hint Rewrite mod_add' mod_add_l' using zutil_arith : zsimplify.
Lemma pos_pow_nat_pos : forall x n,
Z.pos x ^ Z.of_nat n > 0.