Definition bool_fun_neg (bf : bool_fun) : bool_fun :=
fun vb : var_binding => negb (bf vb).
Definition bool_fun_or (bf1 bf2 : bool_fun) : bool_fun :=
fun vb : var_binding => bf1 vb || bf2 vb.

(* Specifications: *)
Lemma bool_fun_neg_semantics :
forall (bf : bool_fun) (vb : var_binding),
(bool_fun_eval bf vb = true -> bool_fun_eval (bool_fun_neg bf) vb = false) /\
(bool_fun_eval bf vb = false -> bool_fun_eval (bool_fun_neg bf) vb = true).
Lemma bool_fun_neg_zero : bool_fun_neg bool_fun_zero = bool_fun_one.
Lemma bool_fun_neg_one : bool_fun_neg bool_fun_one = bool_fun_zero.
Lemma bool_fun_eq_neg :
forall bf1 bf2 : bool_fun,
bool_fun_eq (bool_fun_neg bf1) (bool_fun_neg bf2) -> bool_fun_eq bf1 bf2.
Lemma bool_fun_eq_neg_1 :
forall bf1 bf2 : bool_fun,
bool_fun_eq bf1 bf2 -> bool_fun_eq (bool_fun_neg bf1) (bool_fun_neg bf2).