diff options
author | Jason Gross <jagro@google.com> | 2016-07-20 13:44:16 -0700 |
---|---|---|
committer | Jason Gross <jagro@google.com> | 2016-07-20 13:44:16 -0700 |
commit | 476f078855a221a2ec47a63e7efdceaa35acd488 (patch) | |
tree | d300fc651332a2f44940412e5c1e5523feb59375 /src/ModularArithmetic/ExtPow2BaseMulProofs.v | |
parent | 4fbf246cb392496e676e314c11bc2962d37caad7 (diff) |
Move mul_rep_extended (do we actually care about this?)
Diffstat (limited to 'src/ModularArithmetic/ExtPow2BaseMulProofs.v')
-rw-r--r-- | src/ModularArithmetic/ExtPow2BaseMulProofs.v | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/ModularArithmetic/ExtPow2BaseMulProofs.v b/src/ModularArithmetic/ExtPow2BaseMulProofs.v new file mode 100644 index 000000000..af2c1a679 --- /dev/null +++ b/src/ModularArithmetic/ExtPow2BaseMulProofs.v @@ -0,0 +1,34 @@ +Require Import Coq.ZArith.ZArith Coq.Lists.List. +Require Import Crypto.BaseSystem. +Require Import Crypto.BaseSystemProofs. +Require Import Crypto.ModularArithmetic.Pow2Base. +Require Import Crypto.ModularArithmetic.Pow2BaseProofs. +Require Import Crypto.ModularArithmetic.ExtendedBaseVector. +Require Import Crypto.Util.ListUtil. + +Local Open Scope Z_scope. + +Section ext_mul. + Context (limb_widths : list Z) + (limb_widths_nonnegative : forall x, In x limb_widths -> 0 <= x). + Local Notation k := (sum_firstn limb_widths (length limb_widths)). + Local Notation base := (base_from_limb_widths limb_widths). + Context (bv : BaseVector base) + (limb_widths_match_modulus : forall i j, + (i < length limb_widths)%nat -> + (j < length limb_widths)%nat -> + (i + j >= length limb_widths)%nat -> + let w_sum := sum_firstn limb_widths in + k + w_sum (i + j - length limb_widths)%nat <= w_sum i + w_sum j). + + Local Hint Resolve firstn_us_base_ext_base ExtBaseVector bv. + + Lemma mul_rep_extended : forall (us vs : BaseSystem.digits), + (length us <= length base)%nat -> + (length vs <= length base)%nat -> + (BaseSystem.decode base us) * (BaseSystem.decode base vs) = BaseSystem.decode (ext_base limb_widths) (BaseSystem.mul (ext_base limb_widths) us vs). + Proof. + intros; apply mul_rep_two_base; auto; + distr_length. + Qed. +End ext_mul. |