aboutsummaryrefslogtreecommitdiff
path: root/src/ModularArithmetic/ModularBaseSystemOpt.v
diff options
context:
space:
mode:
authorGravatar Andres Erbsen <andreser@mit.edu>2016-07-06 11:29:16 -0400
committerGravatar Andres Erbsen <andreser@mit.edu>2016-07-06 11:29:16 -0400
commit5a0c4eb34708d2c85d91e6cb2c708ed16249e06d (patch)
tree6988b67762b030d38b8941689cf00cc5fc6add1b /src/ModularArithmetic/ModularBaseSystemOpt.v
parent65ee6fbad9adc1e691c1f911cd084c60763046aa (diff)
stuck trying to figure out dependently typed continuation passing style
Diffstat (limited to 'src/ModularArithmetic/ModularBaseSystemOpt.v')
-rw-r--r--src/ModularArithmetic/ModularBaseSystemOpt.v16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/ModularArithmetic/ModularBaseSystemOpt.v b/src/ModularArithmetic/ModularBaseSystemOpt.v
index abbb0e573..e11186cfb 100644
--- a/src/ModularArithmetic/ModularBaseSystemOpt.v
+++ b/src/ModularArithmetic/ModularBaseSystemOpt.v
@@ -486,21 +486,23 @@ Section Multiplication.
: mul_opt us vs = mul us vs
:= proj2_sig (mul_opt_sig us vs).
- Definition carry_mul_opt_sig (us vs : digits) : { b : digits | b = carry_mul us vs }.
+ Definition carry_mul_opt_sig {T:digits->Type} (f:forall d:digits, T d) (us vs : digits) : { x | x = f (carry_mul us vs) }.
Proof.
eexists.
cbv [carry_mul].
- erewrite <-carry_full_opt_correct by eauto.
+ (* FIXME
+ erewrite <-carry_full_opt_cps_correct by eauto.
erewrite <-mul_opt_correct.
reflexivity.
+ *)
Defined.
- Definition carry_mul_opt (us vs : digits) : digits
- := Eval cbv [proj1_sig carry_mul_opt_sig] in proj1_sig (carry_mul_opt_sig us vs).
+ Definition carry_mul_opt_cps {T} (f:forall d:digits, T d) (us vs : digits) : T (carry_mul us vs)
+ := Eval cbv [proj1_sig carry_mul_opt_sig] in proj1_sig (carry_mul_opt_sig f us vs).
- Definition carry_mul_opt_correct us vs
- : carry_mul_opt us vs = carry_mul us vs
- := proj2_sig (carry_mul_opt_sig us vs).
+ Definition carry_mul_opt_cps_correct {T} (f:forall d:digits, T d) (us vs : digits)
+ : carry_mul_opt_cps f us vs = f (carry_mul us vs)
+ := proj2_sig (carry_mul_opt_sig f us vs).
End Multiplication.
Record freezePreconditions {modulus} (prm : PseudoMersenneBaseParams modulus) int_width :=