intros; intro; subst.
unfold wminus in H.
rewrite wminus_inv in H.
tauto.
Qed.
Ltac word_neq := apply word_neq; let H := fresh "H" in intro H; simpl in H; ring_simplify in H; try discriminate.
Ltac word_contra := match goal with
| [ H : _ <> _ |- False ] => apply H; ring
end.
Ltac word_contra1 := match goal with
| [ H : _ <> _ |- False ] => apply H;
match goal with
| _ => ring
| [ H' : _ = _ |- _ ] => ring [H']
end
end.

(* Specifications: *)
Lemma not_wlt_ge : forall sz (l r : word sz),
((l < r) -> False) -> (r <= l).
Lemma not_wle_gt : forall sz (l r : word sz),
((l <= r) -> False) -> (r < l).
Lemma lt_le : forall sz (a b : word sz),
a < b -> a <= b.
Lemma eq_le : forall sz (a b : word sz),
a = b -> a <= b.
Lemma wordToN_inj : forall sz (a b : word sz),
wordToN a = wordToN b -> a = b.
Lemma wordToNat_inj : forall sz (a b : word sz),
wordToNat a = wordToNat b -> a = b.
Lemma unique_inverse : forall sz (a b1 b2 : word sz),
a ^+ b1 = wzero _ ->
a ^+ b2 = wzero _ ->
b1 = b2.
Lemma sub_0_eq : forall sz (a b : word sz),
a ^- b = wzero _ -> a = b.
Lemma le_neq_lt : forall sz (a b : word sz),
b <= a -> a <> b -> b < a.