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).