diff options
author | 2015-11-07 13:25:34 -0500 | |
---|---|---|
committer | 2015-11-07 13:27:36 -0500 | |
commit | b953c040b36f34b480759f0c4cd275eff4d1efa5 (patch) | |
tree | dd2f6e1b0ac2613ce1f532376daee0ab11a87f54 | |
parent | 9e767c9bfe4158215e4efaa1a4cc1744bb0b2b58 (diff) |
ModularBaseSystem: prove some admits in mase system extension
-rw-r--r-- | src/Galois/ModularBaseSystem.v | 37 | ||||
-rw-r--r-- | src/Specific/GF25519.v | 4 | ||||
-rw-r--r-- | src/Util/ListUtil.v | 5 |
3 files changed, 28 insertions, 18 deletions
diff --git a/src/Galois/ModularBaseSystem.v b/src/Galois/ModularBaseSystem.v index 70903536f..d37b66a62 100644 --- a/src/Galois/ModularBaseSystem.v +++ b/src/Galois/ModularBaseSystem.v @@ -18,8 +18,8 @@ Module Type PseudoMersenneBaseParams (Import B:BaseCoefs) (Import M:Modulus). (j < length base)%nat -> (i+j >= length base)%nat-> let b := nth_default 0 base in - let r := (b i * b j) / (2^k * b (i+j-length base)%nat) in - b i * b j = r * 2^k * b (i+j-length base)%nat. + let r := (b i * b j) / (2^k * b (i+j-length base)%nat) in + b i * b j = r * (2^k * b (i+j-length base)%nat). Axiom b0_1 : nth_default 0 base 0 = 1. @@ -104,21 +104,30 @@ Module GFPseudoMersenneBase (BC:BaseCoefs) (M:Modulus) (P:PseudoMersenneBasePara unfold base in *. rewrite app_length in H; rewrite map_length in H. repeat rewrite nth_default_app. - destruct (lt_dec i (length BC.base)); destruct (lt_dec j (length BC.base)); destruct (lt_dec (i + j) (length BC.base)); try omega. - { - (* i < length BC.base, j < length BC.base, i + j < length BC.base *) + destruct (lt_dec i (length BC.base)); + destruct (lt_dec j (length BC.base)); + destruct (lt_dec (i + j) (length BC.base)); + try omega. + { (* i < length BC.base, j < length BC.base, i + j < length BC.base *) apply BC.base_good; auto. - } { - (* i < length BC.base, j < length BC.base, i + j >= length BC.base *) - admit. - } { - (* i < length BC.base, j >= length BC.base, i + j >= length BC.base *) + } { (* i < length BC.base, j < length BC.base, i + j >= length BC.base *) + rewrite (map_nth_default _ _ _ _ 0) by omega. + apply P.base_matches_modulus; omega. + } { (* i < length BC.base, j >= length BC.base, i + j >= length BC.base *) do 2 rewrite map_nth_default_base_high by omega. - remember (nth_default 0 BC.base) as b. remember (j - length BC.base)%nat as j'. - admit. - } { - (* i >= length BC.base, j < length BC.base, i + j >= length BC.base *) + replace (i + j - length BC.base)%nat with (i + j')%nat by omega. + remember (nth_default 0 BC.base) as b. + replace (b i * (2 ^ P.k * b j')) with (2 ^ P.k * (b i * b j')) by ring. + rewrite Zdiv_mult_cancel_l by admit. + replace (b i * b j' / b (i + j')%nat * (2 ^ P.k * b (i + j')%nat)) + with ((2 ^ P.k * (b (i + j')%nat * (b i * b j' / b (i + j')%nat)))) by ring. + rewrite Z.mul_cancel_l by admit. + replace (b (i + j')%nat * (b i * b j' / b (i + j')%nat)) + with ((b i * b j' / b (i + j')%nat) * b (i + j')%nat) by ring. + subst b. + apply (BC.base_good i j'); omega. + } { (* i >= length BC.base, j < length BC.base, i + j >= length BC.base *) admit. } Qed. diff --git a/src/Specific/GF25519.v b/src/Specific/GF25519.v index c0e330825..4925f87c5 100644 --- a/src/Specific/GF25519.v +++ b/src/Specific/GF25519.v @@ -55,8 +55,8 @@ Module GF25519Base25Point5Params <: PseudoMersenneBaseParams Base25Point5_10limb (j < length base)%nat -> (i+j >= length base)%nat -> let b := nth_default 0 base in - let r := (b i * b j) / (2^k * b (i+j-length base)%nat) in - b i * b j = r * 2^k * b (i+j-length base)%nat. + let r := (b i * b j) / (2^k * b (i+j-length base)%nat) in + b i * b j = r * (2^k * b (i+j-length base)%nat). Proof. intros. assert (In i (seq 0 (length base))) by nth_tac. diff --git a/src/Util/ListUtil.v b/src/Util/ListUtil.v index c5c1eba4a..229fb7488 100644 --- a/src/Util/ListUtil.v +++ b/src/Util/ListUtil.v @@ -167,8 +167,9 @@ Lemma nth_error_app : forall {T} n (xs ys:list T), nth_error (xs ++ ys) n = then nth_error xs n else nth_error ys (n - length xs). Proof. - induction n; destruct xs; destruct ys; nth_tac. -Admitted. + induction n; destruct xs; nth_tac; + rewrite IHn; destruct (lt_dec n (length xs)); trivial; omega. +Qed. Lemma nth_default_app : forall {T} n x (xs ys:list T), nth_default x (xs ++ ys) n = if lt_dec n (length xs) |