diff options
author | Andres Erbsen <andreser@mit.edu> | 2016-07-06 11:29:16 -0400 |
---|---|---|
committer | Andres Erbsen <andreser@mit.edu> | 2016-07-06 11:29:16 -0400 |
commit | 5a0c4eb34708d2c85d91e6cb2c708ed16249e06d (patch) | |
tree | 6988b67762b030d38b8941689cf00cc5fc6add1b /src/ModularArithmetic/ModularBaseSystemOpt.v | |
parent | 65ee6fbad9adc1e691c1f911cd084c60763046aa (diff) |
stuck trying to figure out dependently typed continuation passing style
Diffstat (limited to 'src/ModularArithmetic/ModularBaseSystemOpt.v')
-rw-r--r-- | src/ModularArithmetic/ModularBaseSystemOpt.v | 16 |
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 := |