From bdef7405367103510e4270212f732f1d1e071848 Mon Sep 17 00:00:00 2001 From: Jason Gross Date: Wed, 27 Jul 2016 10:48:01 -0700 Subject: Make Z.pre_reorder_fractions / Z.simplify_fractions_le not loop After | File Name | Before || Change ---------------------------------------------------------------------------------- 1m50.76s | Total | 1m52.98s || -0m02.22s ---------------------------------------------------------------------------------- 0m33.56s | Specific/GF25519 | 0m34.00s || -0m00.43s 0m15.81s | ModularArithmetic/ModularBaseSystemProofs | 0m15.78s || +0m00.03s 0m11.88s | Experiments/SpecEd25519 | 0m11.77s || +0m00.11s 0m07.21s | Specific/GF1305 | 0m07.49s || -0m00.28s 0m04.84s | ModularArithmetic/Tutorial | 0m05.31s || -0m00.46s 0m04.67s | ModularArithmetic/Pow2BaseProofs | 0m05.34s || -0m00.67s 0m04.65s | BaseSystemProofs | 0m04.13s || +0m00.52s 0m03.26s | ModularArithmetic/ModularBaseSystemOpt | 0m03.33s || -0m00.07s 0m02.39s | Util/ZUtil | 0m02.40s || -0m00.00s 0m02.39s | ModularArithmetic/ModularArithmeticTheorems | 0m01.62s || +0m00.77s 0m02.28s | Encoding/PointEncodingPre | 0m02.27s || +0m00.00s 0m01.72s | BaseSystem | 0m01.23s || +0m00.49s 0m01.64s | ModularArithmetic/PrimeFieldTheorems | 0m02.06s || -0m00.42s 0m01.44s | ModularArithmetic/BarrettReduction/Z | 0m01.45s || -0m00.01s 0m01.34s | Experiments/DerivationsOptionRectLetInEncoding | 0m01.49s || -0m00.14s 0m01.13s | ModularArithmetic/ExtendedBaseVector | 0m01.13s || +0m00.00s 0m00.92s | ModularArithmetic/ModularBaseSystemField | 0m00.95s || -0m00.02s 0m00.91s | Util/NumTheoryUtil | 0m01.38s || -0m00.46s 0m00.85s | ModularArithmetic/ModularBaseSystemListProofs | 0m00.96s || -0m00.10s 0m00.77s | Encoding/ModularWordEncodingTheorems | 0m00.93s || -0m00.16s 0m00.76s | Experiments/SpecificCurve25519 | 0m00.75s || +0m00.01s 0m00.67s | Testbit | 0m00.62s || +0m00.05s 0m00.65s | ModularArithmetic/PseudoMersenneBaseParamProofs | 0m00.62s || +0m00.03s 0m00.62s | ModularArithmetic/ExtPow2BaseMulProofs | 0m00.95s || -0m00.32s 0m00.60s | ModularArithmetic/ModularBaseSystem | 0m00.62s || -0m00.02s 0m00.60s | Spec/ModularWordEncoding | 0m00.88s || -0m00.28s 0m00.60s | Encoding/ModularWordEncodingPre | 0m00.71s || -0m00.10s 0m00.59s | ModularArithmetic/ModularBaseSystemList | 0m00.90s || -0m00.31s 0m00.54s | ModularArithmetic/PseudoMersenneBaseParams | 0m00.40s || +0m00.14s 0m00.51s | ModularArithmetic/Pre | 0m00.70s || -0m00.18s 0m00.50s | Spec/ModularArithmetic | 0m00.36s || +0m00.14s 0m00.46s | ModularArithmetic/Pow2Base | 0m00.46s || +0m00.00s --- src/Util/ZUtil.v | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/Util') diff --git a/src/Util/ZUtil.v b/src/Util/ZUtil.v index b87c20b79..30cb38857 100644 --- a/src/Util/ZUtil.v +++ b/src/Util/ZUtil.v @@ -759,11 +759,19 @@ Module Z. Ltac pre_reorder_fractions_step := match goal with | [ |- context[?x / ?y * ?z] ] - => rewrite (Z.mul_comm (x / y) z) + => lazymatch z with + | context[_ / _] => fail + | _ => idtac + end; + rewrite (Z.mul_comm (x / y) z) | _ => let LHS := match goal with |- ?LHS <= ?RHS => LHS end in match LHS with | context G[?x * (?y / ?z)] - => let G' := context G[(x * y) / z] in + => lazymatch x with + | context[_ / _] => fail + | _ => idtac + end; + let G' := context G[(x * y) / z] in transitivity G' end end. -- cgit v1.2.3