aboutsummaryrefslogtreecommitdiff
path: root/src/ModularArithmetic
diff options
context:
space:
mode:
authorGravatar jadep <jade.philipoom@gmail.com>2016-10-12 20:06:41 -0400
committerGravatar jadep <jade.philipoom@gmail.com>2016-10-12 20:43:53 -0400
commit72a7997f1142cf81ed95043f34cd640e163af6f5 (patch)
treef54e35ddadb200983818492f8777aae1947e4298 /src/ModularArithmetic
parent6726ebe2e413b1f135dc968734e902cc12254126 (diff)
Added top-level modulus comparison operation so field-element decoding can return None if input is greater than modulus
Diffstat (limited to 'src/ModularArithmetic')
-rw-r--r--src/ModularArithmetic/ModularBaseSystemOpt.v18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ModularArithmetic/ModularBaseSystemOpt.v b/src/ModularArithmetic/ModularBaseSystemOpt.v
index d1bd49a55..3b50662a6 100644
--- a/src/ModularArithmetic/ModularBaseSystemOpt.v
+++ b/src/ModularArithmetic/ModularBaseSystemOpt.v
@@ -892,6 +892,24 @@ Section Canonicalization.
: conditional_subtract_modulus_opt f cond = conditional_subtract_modulus f cond
:= Eval cbv [proj2_sig conditional_subtract_modulus_opt_sig] in proj2_sig (conditional_subtract_modulus_opt_sig f cond).
+ Definition ge_modulus_opt_sig (us : list Z) :
+ { b : bool | b = ModularBaseSystemList.ge_modulus us }.
+ Proof.
+ eexists.
+ cbv beta iota delta [ge_modulus ge_modulus'].
+ change length with length_opt.
+ change nth_default with @nth_default_opt.
+ change minus with minus_opt.
+ reflexivity.
+ Defined.
+
+ Definition ge_modulus_opt us : bool
+ := Eval cbv [proj1_sig ge_modulus_opt_sig] in proj1_sig (ge_modulus_opt_sig us).
+
+ Definition ge_modulus_opt_correct us :
+ ge_modulus_opt us = ge_modulus us
+ := Eval cbv [proj2_sig ge_modulus_opt_sig] in proj2_sig (ge_modulus_opt_sig us).
+
Definition freeze_opt_sig (us : list Z) :
{ b : list Z | length us = length limb_widths
-> b = ModularBaseSystemList.freeze us }.