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.
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 wxor_wone : forall sz (w : word sz) b, wxor (WS b w) (wone _) = WS (negb b) w.