Fact eq_rect_bitwp' : forall a b Heq f w1 w2,
eq_rect b word (bitwp f w1 w2) a Heq = bitwp f (eq_rect b word w1 a Heq) (eq_rect b word w2 a Heq).
Fact eq_rect_bitwp_1 : forall a b Heq f w1 w2,
bitwp f (eq_rect a word w1 b Heq) w2 = eq_rect a word (bitwp f w1 (eq_rect b word w2 a (eq_sym Heq))) b Heq.

(* Specifications: *)
Theorem wnot_wnot'_equiv : forall sz (w : word sz), wnot w = wnot' w.
Theorem wnot_split1 : forall sz1 sz2 w, wnot (split1 sz1 sz2 w) = split1 sz1 sz2 (wnot w).
Theorem wnot_split2 : forall sz1 sz2 w, wnot (split2 sz1 sz2 w) = split2 sz1 sz2 (wnot w).
Theorem wnot_combine : forall sz1 sz2 (w1 : word sz1) (w2 : word sz2),
wnot (combine w1 w2) = combine (wnot w1) (wnot w2).
Theorem wnot_zero: forall sz, wnot (wzero sz) = wones sz.
Theorem wnot_ones : forall sz, wnot (wones sz) = wzero sz.
Theorem wnot_eq_rect : forall a b H (w : word a), wnot (eq_rect a word w b H) = eq_rect a word (wnot w) b H.
Theorem wor_unit : forall sz (x : word sz), wzero sz ^| x = x.
Theorem wor_comm : forall sz (x y : word sz), x ^| y = y ^| x.
Theorem wor_assoc : forall sz (x y z : word sz), x ^| (y ^| z) = x ^| y ^| z.
Theorem wand_unit : forall sz (x : word sz), wones sz ^& x = x.
Theorem wand_kill : forall sz (x : word sz), wzero sz ^& x = wzero sz.
Theorem wand_comm : forall sz (x y : word sz), x ^& y = y ^& x.
Theorem wand_assoc : forall sz (x y z : word sz), x ^& (y ^& z) = x ^& y ^& z.
Theorem wand_or_distr : forall sz (x y z : word sz), (x ^| y) ^& z = (x ^& z) ^| (y ^& z).
Lemma wor_wones : forall sz w, wones sz ^| w = wones sz.
Lemma wor_wzero : forall sz w, wzero sz ^| w = w.
Lemma wand_wones : forall sz w, wones sz ^& w = w.
Lemma wand_wzero : forall sz w, wzero sz ^& w = wzero sz.
Lemma wxor_wones : forall sz w, wxor (wones sz) w = wnot w.
Lemma wxor_wzero : forall sz w, wxor (wzero sz) w = w.
Lemma wxor_comm : forall sz (w1 w2 : word sz), wxor w1 w2 = wxor w2 w1.
Lemma wxor_assoc : forall sz (w1 w2 w3 : word sz), wxor w1 (wxor w2 w3) = wxor (wxor w1 w2) w3.
Lemma wor_wone : forall sz (w : word sz) b,
WS b w ^| wone _ = WS true w.
Lemma wand_wone : forall sz (w : word sz) b,
WS b w ^& wone _ = WS b (wzero _).
Lemma wxor_wone : forall sz (w : word sz) b,
wxor (WS b w) (wone _) = WS (negb b) w.