aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2018-06-28 17:24:39 -0400
committerGravatar Jason Gross <jasongross9@gmail.com>2018-07-03 19:28:55 -0400
commit6e6e636fb91290b13c78596907582294d71fa65c (patch)
treea9057c7b82663a6711fbbebbd054fcf7fc1c0d83 /src
parentc6941b1ae419ba12be9122a60a09ef41ff750fe7 (diff)
Pull out *2 in square, don't turn *2 into <<1
Diffstat (limited to 'src')
-rw-r--r--src/Experiments/NewPipeline/Arithmetic.v11
-rw-r--r--src/Experiments/NewPipeline/Rewriter.v4
2 files changed, 8 insertions, 7 deletions
diff --git a/src/Experiments/NewPipeline/Arithmetic.v b/src/Experiments/NewPipeline/Arithmetic.v
index dfd00c943..3ab5a5e09 100644
--- a/src/Experiments/NewPipeline/Arithmetic.v
+++ b/src/Experiments/NewPipeline/Arithmetic.v
@@ -75,14 +75,15 @@ Module Associational.
_
nil
(fun t ts acc
- => ((fst t * fst t, snd t * snd t)
- :: (map (fun t'
- => (fst t * fst t', 2 * snd t * snd t'))
- ts))
+ => (dlet two_t2 := 2 * snd t in
+ (fst t * fst t, snd t * snd t)
+ :: (map (fun t'
+ => (fst t * fst t', two_t2 * snd t'))
+ ts))
++ acc)
p.
Lemma eval_square p : eval (square p) = eval p * eval p.
- Proof. induction p; cbn [square list_rect]; push; nsatz. Qed.
+ Proof. induction p; cbv [square list_rect Let_In]; push; nsatz. Qed.
Hint Rewrite eval_square : push_eval.
Definition negate_snd (p:list (Z*Z)) : list (Z*Z) :=
diff --git a/src/Experiments/NewPipeline/Rewriter.v b/src/Experiments/NewPipeline/Rewriter.v
index 1d0354713..ec9e36c67 100644
--- a/src/Experiments/NewPipeline/Rewriter.v
+++ b/src/Experiments/NewPipeline/Rewriter.v
@@ -1296,8 +1296,8 @@ In the RHS, the follow notation applies:
; make_rewrite ((-??{ℤ}) * ??{ℤ} ) (fun x y => -(x * y))
; make_rewrite ( ??{ℤ} * (-??{ℤ})) (fun x y => -(x * y))
- ; make_rewrite (??{ℤ} * #?ℤ) (fun x y => x << ##(Z.log2 y) when Z.eqb y (2^Z.log2 y))
- ; make_rewrite (#?ℤ * ??{ℤ}) (fun y x => x << ##(Z.log2 y) when Z.eqb y (2^Z.log2 y))
+ ; make_rewrite (??{ℤ} * #?ℤ) (fun x y => x << ##(Z.log2 y) when (y =? (2^Z.log2 y)) && (negb (y =? 2)))
+ ; make_rewrite (#?ℤ * ??{ℤ}) (fun y x => x << ##(Z.log2 y) when (y =? (2^Z.log2 y)) && (negb (y =? 2)))
; make_rewrite (??{ℤ} / #?ℤ) (fun x y => x >> ##(Z.log2 y) when Z.eqb y (2^Z.log2 y))
; make_rewrite (??{ℤ} mod #?ℤ) (fun x y => x &' ##(y-1)%Z when Z.eqb y (2^Z.log2 y))
; make_rewrite (-(-??{ℤ})) (fun v => v)