Notation xorb_assoc := xorb_assoc_reverse (only parsing). (* Compatibility *)

(* Specifications: *)
Lemma xorb_eq : forall b b':bool, xorb b b' = false -> b = b'.
Lemma xorb_move_l_r_1 :
forall b b' b'':bool, xorb b b' = b'' -> b' = xorb b b''.
Lemma xorb_move_l_r_2 :
forall b b' b'':bool, xorb b b' = b'' -> b = xorb b'' b'.
Lemma xorb_move_r_l_1 :
forall b b' b'':bool, b = xorb b' b'' -> xorb b' b = b''.
Lemma xorb_move_r_l_2 :
forall b b' b'':bool, b = xorb b' b'' -> xorb b b'' = b'.
Lemma negb_xorb a b : negb (xorb a b) = Bool.eqb a b.
Lemma negb_xorb_l : forall b b', negb (xorb b b') = xorb (negb b) b'.
Lemma negb_xorb_r : forall b b', negb (xorb b b') = xorb b (negb b').
Lemma xorb_negb_negb : forall b b', xorb (negb b) (negb b') = xorb b b'.
(** Lemmas about the [b = true] embedding of [bool] to [Prop] *)
Lemma eq_iff_eq_true : forall b1 b2, b1 = b2 <-> (b1 = true <-> b2 = true).
Lemma eq_true_iff_eq : forall b1 b2, (b1 = true <-> b2 = true) -> b1 = b2.
Notation bool_1 := eq_true_iff_eq (only parsing). (* Compatibility *)
Lemma eq_true_negb_classical : forall b:bool, negb b <> true -> b = true.
Notation bool_3 := eq_true_negb_classical (only parsing). (* Compatibility *)
Lemma eq_true_negb_classical_iff : forall b:bool, negb b <> true <-> b = true.
Lemma eq_true_not_negb : forall b:bool, b <> true -> negb b = true.
Lemma eq_true_not_negb_iff : forall b:bool, b <> true <-> negb b = true.
Notation bool_6 := eq_true_not_negb (only parsing). (* Compatibility *)
#[global]
Hint Resolve eq_true_not_negb : bool.