aboutsummaryrefslogtreecommitdiff
path: root/src/Util/ZUtil
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-10-19 14:34:43 -0400
committerGravatar Jason Gross <jgross@mit.edu>2017-10-19 14:34:45 -0400
commit79b586e4589f56d081301de92b305569c1077ed2 (patch)
treee281e516647e97b56ae2ee2e478c7d1cf4b2b5c8 /src/Util/ZUtil
parentdad05b6740575537530b94215929ce8bca3d6fe2 (diff)
Add mul_split_cps'
It unfolds to Z.mul_split_at_bitwidth rather than Z.mul_split_at_bitwidth_cps. This is useful when reification still needs to recognize Z.mul_split_at_bitwidth.
Diffstat (limited to 'src/Util/ZUtil')
-rw-r--r--src/Util/ZUtil/CPS.v12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/Util/ZUtil/CPS.v b/src/Util/ZUtil/CPS.v
index a875247a6..754f6cf56 100644
--- a/src/Util/ZUtil/CPS.v
+++ b/src/Util/ZUtil/CPS.v
@@ -144,4 +144,16 @@ Module Z.
: @mul_split_cps T s x y f = f (Z.mul_split s x y).
Proof. prove_cps_correct (). Qed.
Hint Rewrite @mul_split_cps_correct : uncps.
+
+ Definition mul_split_cps' {T} (s x y : Z) (f : Z * Z -> T) : T
+ := eqb_cps
+ s (2^Z.log2 s)
+ (fun b
+ => if b
+ then f (Z.mul_split_at_bitwidth (Z.log2 s) x y)
+ else f ((x * y) mod s, (x * y) / s)).
+ Lemma mul_split_cps'_correct {T} (s x y : Z) (f : Z * Z -> T)
+ : @mul_split_cps' T s x y f = f (Z.mul_split s x y).
+ Proof. prove_cps_correct (). Qed.
+ Hint Rewrite @mul_split_cps'_correct : uncps.
End Z.