aboutsummaryrefslogtreecommitdiff
path: root/src/Arithmetic/Saturated.v
diff options
context:
space:
mode:
authorGravatar jadep <jade.philipoom@gmail.com>2017-06-08 18:07:15 -0400
committerGravatar jadep <jade.philipoom@gmail.com>2017-06-08 18:07:15 -0400
commit05c63d76aab155c5f57779ef1fcdb984bc5120bf (patch)
treedf45e809cdbb79b6c13a36caa499ae312a89d568 /src/Arithmetic/Saturated.v
parent727c2902f1ec078c2359c1690125ae5a5d0e40e4 (diff)
add zero (as per #157)
Diffstat (limited to 'src/Arithmetic/Saturated.v')
-rw-r--r--src/Arithmetic/Saturated.v14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/Arithmetic/Saturated.v b/src/Arithmetic/Saturated.v
index f4f17dcee..ea44d6c3d 100644
--- a/src/Arithmetic/Saturated.v
+++ b/src/Arithmetic/Saturated.v
@@ -599,6 +599,8 @@ Section API.
Definition length : T -> nat := @length Z.
+ Definition zero (n:nat) : T := to_list _ (B.Positional.zeros n).
+
Definition divmod (p : T) : T * Z :=
(List.tl p, List.hd 0 p).
@@ -620,6 +622,18 @@ Section API.
Definition eval (p : T) : Z :=
B.Positional.eval weight (Tuple.from_list (Datatypes.length p) p (eq_refl _)).
+ Lemma eval_zero n : eval (zero n) = 0.
+ Proof.
+ cbv [eval zero]. rewrite <-from_list_default_eq with (d:=0).
+ erewrite length_to_list, from_list_default_eq, from_list_to_list.
+ autorewrite with push_basesystem_eval.
+ reflexivity.
+ Unshelve. distr_length.
+ Qed.
+
+ Lemma length_zero n : length (zero n) = n.
+ Proof. cbv [eval zero]. apply length_to_list. Qed.
+
Lemma eval_add_nz p q :
max (Datatypes.length p) (Datatypes.length q) <> 0%nat ->
eval (fst (add p q)) = eval p + eval q - snd (add p q) * weight (Datatypes.length (fst (add p q))).