theorem injective_notb: injective bool bool notb.
#b1 #b2 #H // qed.
+theorem noteq_to_eqnot: ∀b1,b2. b1 ≠ b2 → b1 = notb b2.
+* * // #H @False_ind /2/
+qed.
+
+theorem eqnot_to_noteq: ∀b1,b2. b1 = notb b2 → b1 ≠ b2.
+* * normalize // #_ @(not_to_not … not_eq_true_false) //
+qed.
+
definition andb : bool → bool → bool ≝
λb1,b2:bool. match b1 with [ true ⇒ b2 | false ⇒ false ].
match b1 with [ true ⇒ P b2 | false ⇒ P false] → P (b1 ∧ b2).
#b1 #b2 #P (elim b1) normalize // qed.
+theorem true_to_andb_true: ∀b1,b2. b1 = true → b2 = true → (b1 ∧ b2) = true.
+#b1 cases b1 normalize //
+qed.
+
theorem andb_true_l: ∀ b1,b2. (b1 ∧ b2) = true → b1 = true.
#b1 (cases b1) normalize // qed.
∀b:bool. b = true ∨ b = false.
#b (cases b) /2/ qed.
+