Definition bor (x y : bool) : bool := match x with | true => true | false => if y then true else false end. Definition band (x y : bool) : bool := match x with | false => false | true => if y then true else false end. Definition bxor (x y : bool) : bool := match x with | true => if y then false else true | false => if y then true else false end. Definition bnot (x : bool) : bool := match x with | true => false | false => true end. Definition bimpl (x y : bool) : bool := bor (bnot x) y. Definition biff (x y : bool) : bool := band (bimpl x y) (bimpl y x). Theorem de_morgan_1 : forall (x y : bool), biff (bnot (bor x y)) (band (bnot x) (bnot y)) = true. Proof. intros X Y. induction X. Focus 1. compute. reflexivity. induction Y. Focus 1. compute. reflexivity. compute. reflexivity. Qed. Corollary de_morgan_2 : forall (x y : bool), biff (bnot (band x y)) (bor (bnot x) (bnot y)) = true. Proof. intros X Y. induction X. Focus 1. induction Y. Focus 1. compute. reflexivity. Focus 1. compute. reflexivity. induction Y. Focus 1. compute. reflexivity. compute. reflexivity. Qed.