Ltac wlt_ind :=
match goal with
| [ |- forall (n: word ?len), ?P ] =>
refine (well_founded_ind (@wlt_wf len) (fun n => P) _)
end.

(* Specifications: *)
Theorem wordToNat_plusone: forall sz w w', w < w' ->
wordToNat (w ^+ natToWord sz 1) = S (wordToNat w).
Theorem wordToNat_minus_one': forall sz n, n <> natToWord sz 0 ->
S (wordToNat (n ^- natToWord sz 1)) = wordToNat n.
Theorem wordToNat_minus_one: forall sz n, n <> natToWord sz 0 ->
wordToNat (n ^- natToWord sz 1) = wordToNat n - 1.
Lemma lt_minus : forall a b c,
(b <= a -> b < c -> a < c -> a - b < c)%nat.
Lemma wminus_minus : forall sz (a b : word sz),
b <= a
-> wordToNat (a ^- b) = wordToNat a - wordToNat b.
Lemma wminus_minus': forall (sz : nat) (a b : word sz),
(#b <= #a)%nat ->
#(a ^- b) = #a - #b.
Lemma wordToNat_neq_inj: forall sz (a b : word sz),
a <> b <-> wordToNat a <> wordToNat b.
Lemma natToWord_discriminate: forall sz, (sz > 0)%nat -> natToWord sz 0 <> natToWord sz 1.
Definition bit_dec : forall (a : word 1), {a = $0} + {a = $1}.