(* begin hide *)
(* Compatibility *)
Notation absoption_orb := absorption_orb (only parsing).
(* end hide *)
(****************************)
(** * Properties of [implb] *)
(****************************)

(* Specifications: *)
Lemma implb_true_iff : forall b1 b2:bool, implb b1 b2 = true <-> (b1 = true -> b2 = true).
Lemma implb_false_iff : forall b1 b2:bool, implb b1 b2 = false <-> (b1 = true /\ b2 = false).
Lemma implb_orb : forall b1 b2:bool, implb b1 b2 = negb b1 || b2.
Lemma implb_negb_orb : forall b1 b2:bool, implb (negb b1) b2 = b1 || b2.
Lemma implb_true_r : forall b:bool, implb b true = true.
Lemma implb_false_r : forall b:bool, implb b false = negb b.
Lemma implb_true_l : forall b:bool, implb true b = b.
Lemma implb_false_l : forall b:bool, implb false b = true.
Lemma implb_same : forall b:bool, implb b b = true.
Lemma implb_contrapositive : forall b1 b2:bool, implb (negb b1) (negb b2) = implb b2 b1.
Lemma implb_negb : forall b1 b2:bool, implb (negb b1) b2 = implb (negb b2) b1.
Lemma implb_curry : forall b1 b2 b3:bool, implb (b1 && b2) b3 = implb b1 (implb b2 b3).
Lemma implb_andb_distrib_r : forall b1 b2 b3:bool, implb b1 (b2 && b3) = implb b1 b2 && implb b1 b3.
Lemma implb_orb_distrib_r : forall b1 b2 b3:bool, implb b1 (b2 || b3) = implb b1 b2 || implb b1 b3.
Lemma implb_orb_distrib_l : forall b1 b2 b3:bool, implb (b1 || b2) b3 = implb b1 b3 && implb b2 b3.
(***************************)
(** * Properties of [xorb] *)
(***************************)
(** [false] is neutral for [xorb] *)
Lemma xorb_false_r : forall b:bool, xorb b false = b.
Lemma xorb_false_l : forall b:bool, xorb false b = b.
Notation xorb_false := xorb_false_r (only parsing).