aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2016-07-22 16:52:53 -0700
committerGravatar Jason Gross <jagro@google.com>2016-07-22 16:59:47 -0700
commit3ac35f26adbd24682685e88d272b4dfa58e7998a (patch)
tree7e77f34b836868222483441e946c622309397387 /src
parent1ccd4575a0bc82064e38d4b20b2cd3088e2f4205 (diff)
More ZUtil
After | File Name | Before || Change ---------------------------------------------------------------------------------- 1m42.25s | Total | 1m43.34s || -0m01.09s ---------------------------------------------------------------------------------- 0m47.63s | Specific/GF25519 | 0m47.32s || +0m00.31s 0m11.34s | Experiments/SpecEd25519 | 0m11.30s || +0m00.03s 0m08.26s | Specific/GF1305 | 0m08.34s || -0m00.08s 0m03.78s | ModularArithmetic/Pow2BaseProofs | 0m03.81s || -0m00.03s 0m03.65s | ModularArithmetic/Tutorial | 0m03.80s || -0m00.14s 0m03.58s | BaseSystemProofs | 0m03.73s || -0m00.14s 0m02.77s | ModularArithmetic/ModularBaseSystemOpt | 0m02.89s || -0m00.12s 0m02.28s | Util/ZUtil | 0m02.27s || +0m00.00s 0m01.52s | Encoding/PointEncodingPre | 0m01.55s || -0m00.03s 0m01.47s | ModularArithmetic/PrimeFieldTheorems | 0m01.55s || -0m00.08s 0m01.45s | ModularArithmetic/ModularArithmeticTheorems | 0m01.54s || -0m00.09s 0m01.15s | ModularArithmetic/ExtendedBaseVector | 0m01.21s || -0m00.06s 0m01.13s | BaseSystem | 0m01.17s || -0m00.04s 0m00.97s | ModularArithmetic/ModularBaseSystemProofs | 0m00.98s || -0m00.01s 0m00.96s | Experiments/SpecificCurve25519 | 0m01.00s || -0m00.04s 0m00.93s | Experiments/DerivationsOptionRectLetInEncoding | 0m00.99s || -0m00.05s 0m00.92s | ModularArithmetic/BarrettReduction/Z | 0m00.95s || -0m00.02s 0m00.84s | ModularArithmetic/ModularBaseSystemField | 0m00.89s || -0m00.05s 0m00.83s | Util/NumTheoryUtil | 0m00.84s || -0m00.01s 0m00.73s | ModularArithmetic/ModularBaseSystemListProofs | 0m00.74s || -0m00.01s 0m00.65s | Encoding/ModularWordEncodingTheorems | 0m00.70s || -0m00.04s 0m00.62s | Testbit | 0m00.63s || -0m00.01s 0m00.56s | ModularArithmetic/ExtPow2BaseMulProofs | 0m00.61s || -0m00.04s 0m00.56s | Encoding/ModularWordEncodingPre | 0m00.58s || -0m00.01s 0m00.55s | Spec/ModularWordEncoding | 0m00.59s || -0m00.03s 0m00.53s | ModularArithmetic/ModularBaseSystemList | 0m00.59s || -0m00.05s 0m00.52s | ModularArithmetic/ModularBaseSystem | 0m00.54s || -0m00.02s 0m00.50s | ModularArithmetic/PseudoMersenneBaseParamProofs | 0m00.59s || -0m00.08s 0m00.46s | ModularArithmetic/Pre | 0m00.46s || +0m00.00s 0m00.39s | ModularArithmetic/PseudoMersenneBaseParams | 0m00.40s || -0m00.01s 0m00.38s | ModularArithmetic/Pow2Base | 0m00.43s || -0m00.04s 0m00.34s | Spec/ModularArithmetic | 0m00.36s || -0m00.01s
Diffstat (limited to 'src')
-rw-r--r--src/Util/ZUtil.v12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/Util/ZUtil.v b/src/Util/ZUtil.v
index e20ff9010..708eb5417 100644
--- a/src/Util/ZUtil.v
+++ b/src/Util/ZUtil.v
@@ -22,7 +22,7 @@ Hint Resolve (fun a b H => proj1 (Z.mod_pos_bound a b H)) (fun a b H => proj2 (Z
which can reasonably be said to "simplify" the goal, should go in
this database. *)
Create HintDb zsimplify discriminated.
-Hint Rewrite Z.div_1_r Z.mul_1_r Z.mul_1_l Z.sub_diag Z.mul_0_r Z.mul_0_l Z.add_0_l Z.add_0_r Z.opp_involutive Z.sub_0_r Z_mod_same_full : zsimplify.
+Hint Rewrite Z.div_1_r Z.mul_1_r Z.mul_1_l Z.sub_diag Z.mul_0_r Z.mul_0_l Z.add_0_l Z.add_0_r Z.opp_involutive Z.sub_0_r Z_mod_same_full Z.sub_simpl_r Z.sub_simpl_l : zsimplify.
Hint Rewrite Z.div_mul Z.div_1_l Z.div_same Z.mod_same Z.div_small Z.mod_small Z.div_add Z.div_add_l Z.mod_add Z.div_0_l using lia : zsimplify.
(** "push" means transform [-f x] to [f (-x)]; "pull" means go the other way *)
@@ -44,7 +44,7 @@ Hint Rewrite <- Z.opp_add_distr : pull_Zopp.
Hint Rewrite <- Z.div_opp_l_nz Z.div_opp_l_z using lia : push_Zopp.
Hint Rewrite <- Z.mul_opp_l : push_Zopp.
Hint Rewrite Z.opp_add_distr : push_Zopp.
-Hint Rewrite Z.pow_sub_r Z.pow_div_l using lia : push_Zpow.
+Hint Rewrite Z.pow_sub_r Z.pow_div_l Z.pow_twice_r using lia : push_Zpow.
Hint Rewrite <- Z.pow_sub_r Z.pow_div_l using lia : pull_Zpow.
Hint Rewrite Z.mul_add_distr_l Z.mul_add_distr_r Z.mul_sub_distr_l Z.mul_sub_distr_r : push_Zmul.
Hint Rewrite <- Z.mul_add_distr_l Z.mul_add_distr_r Z.mul_sub_distr_l Z.mul_sub_distr_r : pull_Zmul.
@@ -1056,6 +1056,14 @@ Module Z.
Definition mul_div_le'
:= fun x y z w p H0 H1 H2 H3 => @Z.le_trans _ _ w (@Z.mul_div_le x y z H0 H1 H2 H3) p.
Hint Resolve mul_div_le' : zarith.
+
+ Lemma two_p_two_eq_four : 2^(2) = 4.
+ Proof. reflexivity. Qed.
+ Hint Rewrite <- two_p_two_eq_four : push_Zpow.
+
+ Lemma two_sub_sub_inner_sub x y z : 2 * x - y - (x - z) = x - y + z.
+ Proof. clear; lia. Qed.
+ Hint Rewrite two_sub_sub_inner_sub : zsimplify.
End Z.
Module Export BoundsTactics.