aboutsummaryrefslogtreecommitdiff
path: root/src/ModularArithmetic
diff options
context:
space:
mode:
authorGravatar jadep <jade.philipoom@gmail.com>2016-08-22 14:59:45 -0400
committerGravatar jadep <jade.philipoom@gmail.com>2016-08-22 14:59:45 -0400
commit88e87ee88c58f5fcf4cba3f990453eb36cabc110 (patch)
treec39627446435b82f392e37eefdf45d4782806ba8 /src/ModularArithmetic
parente72acba808ef9a0620b9d2d5275af85dfa96c3ad (diff)
Proved homomorphism between ModularBaseSystem field and F q
Diffstat (limited to 'src/ModularArithmetic')
-rw-r--r--src/ModularArithmetic/ModularBaseSystemField.v26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ModularArithmetic/ModularBaseSystemField.v b/src/ModularArithmetic/ModularBaseSystemField.v
index 8059840ab..49f2d31af 100644
--- a/src/ModularArithmetic/ModularBaseSystemField.v
+++ b/src/ModularArithmetic/ModularBaseSystemField.v
@@ -39,6 +39,32 @@ Section ModularBaseSystemField.
Lemma _zero_neq_one : not (eq zero one).
Proof. cbv [eq zero one]. erewrite !encode_rep; apply zero_neq_one. Qed.
+ Lemma encode_Proper :
+ Morphisms.Proper
+ (Morphisms.respectful Logic.eq eq) encode.
+ Proof.
+ repeat intro.
+ cbv [eq].
+ rewrite !encode_rep.
+ assumption.
+ Qed.
+
+ Lemma modular_base_system_field_homomorphism :
+ @Ring.is_homomorphism
+ (F modulus) Logic.eq F.one F.add F.mul
+ digits eq one add_opt (carry_mul_opt k_ c_)
+ encode.
+ Proof.
+ econstructor.
+ + econstructor; [ | apply encode_Proper].
+ intros; cbv [eq].
+ rewrite add_opt_correct, add_rep; apply encode_rep.
+ + intros; cbv [eq].
+ rewrite carry_mul_opt_correct by auto.
+ rewrite carry_mul_rep; apply encode_rep.
+ + reflexivity.
+ Qed.
+
Lemma modular_base_system_field :
@field digits eq zero one opp add_opt sub_opt (carry_mul_opt k_ c_) inv div.
Proof.