aboutsummaryrefslogtreecommitdiff
path: root/src/Util/FixedWordSizesEquality.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-02-01 18:40:54 -0500
committerGravatar Jason Gross <jgross@mit.edu>2017-02-01 18:40:54 -0500
commitfd0ee9c2af644628a1d059c3c000caf3c6286910 (patch)
tree6993e9ada034bff2c2aa6496198b30a2e1194faa /src/Util/FixedWordSizesEquality.v
parent81fb8ea124190a6633723c9b92d22db60644ba71 (diff)
Add ZToWord_wordToZ_ZToWord
Diffstat (limited to 'src/Util/FixedWordSizesEquality.v')
-rw-r--r--src/Util/FixedWordSizesEquality.v27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/Util/FixedWordSizesEquality.v b/src/Util/FixedWordSizesEquality.v
index 00f232d50..99512f6a1 100644
--- a/src/Util/FixedWordSizesEquality.v
+++ b/src/Util/FixedWordSizesEquality.v
@@ -119,6 +119,15 @@ Proof.
assumption.
Qed.
+Lemma ZToWord_gen_wordToZ_gen_ZToWord_gen : forall {sz1 sz2} v,
+ (sz2 <= sz1)%nat -> @ZToWord_gen sz2 (wordToZ_gen (@ZToWord_gen sz1 v)) = ZToWord_gen v.
+Proof.
+ unfold ZToWord_gen, wordToZ_gen.
+ intros sz1 sz2 v H.
+ rewrite N2Z.id, NToWord_wordToN_NToWord by omega.
+ reflexivity.
+Qed.
+
Lemma ZToWord_wordToZ : forall {sz} v, ZToWord (@wordToZ sz v) = v.
Proof.
unfold wordT, word_case in *.
@@ -131,3 +140,21 @@ Proof.
intros; break_match; apply wordToZ_gen_ZToWord_gen;
assumption.
Qed.
+
+Lemma ZToWord_wordToZ_ZToWord : forall {sz1 sz2} v,
+ (sz2 <= sz1)%nat -> @ZToWord sz2 (wordToZ (@ZToWord sz1 v)) = ZToWord v.
+Proof.
+ unfold wordToZ, ZToWord, word_case_dep.
+ intros sz1 sz2; break_match; intros; apply ZToWord_gen_wordToZ_gen_ZToWord_gen;
+ repeat match goal with
+ | [ |- (S ?a <= 2^?b)%nat ]
+ => change (2^(Nat.log2 (S a)) <= 2^b)%nat
+ | [ |- (2^_ <= 2^_)%nat ]
+ => apply Nat.pow_le_mono_r
+ | [ |- _ <> _ ] => intro; omega
+ | _ => assumption
+ | [ |- (_ <= S _)%nat ]
+ => apply Nat.leb_le; vm_compute; reflexivity
+ | _ => exfalso; omega
+ end.
+Qed.