Theory Boolean_functions
theory Boolean_functions
imports
Main
"Jordan_Normal_Form.Matrix"
begin
section‹Boolean functions›
text‹Definition of monotonicity›
text‹We consider (monotone) Boolean
functions over vectors of length $n$, so that we can later
prove that those are isomorphic to
simplicial complexes of dimension $n$ (in $n$ vertexes).›
locale boolean_functions
= fixes n::"nat"
begin
definition bool_fun_dim_n :: "(bool vec => bool) set"
where "bool_fun_dim_n = {f. f ∈ carrier_vec n → (UNIV::bool set)}"
definition monotone_bool_fun :: "(bool vec => bool) => bool"
where "monotone_bool_fun ≡ (mono_on (carrier_vec n))"
definition monotone_bool_fun_set :: "(bool vec => bool) set"
where "monotone_bool_fun_set = (Collect monotone_bool_fun)"
text‹Some examples of Boolean functions›
definition bool_fun_top :: "bool vec => bool"
where "bool_fun_top f = True"
definition bool_fun_bot :: "bool vec => bool"
where "bool_fun_bot f = False"
end
section‹Threshold function›
definition count_true :: "bool vec => nat"
where "count_true v = sum (λi. if vec_index v i then 1 else 0::nat) {0..<dim_vec v}"
lemma "vec_index (vec (5::nat) (λi. False)) 2 = False"
by simp
lemma "vec_index (vec (5::nat) (λi. True)) 3 = True"
by simp
lemma "count_true (vec (1::nat) (λi. True)) = 1"
unfolding count_true_def by simp
lemma "count_true (vec (2::nat) (λi. True)) = 2"
unfolding count_true_def by simp
lemma "count_true (vec (5::nat) (λi. True)) = 5"
unfolding count_true_def by simp
text‹The threshold function is a Boolean function
which also satisfies the condition of being \emph{evasive}.
We follow the definition by Scoville~\<^cite>‹‹Problem 6.5› in "SC19"›.›
definition bool_fun_threshold :: "nat => (bool vec => bool)"
where "bool_fun_threshold i = (λv. if i ≤ count_true v then True else False)"
context boolean_functions
begin
lemma "mono_on UNIV bool_fun_top"
by (simp add: bool_fun_top_def mono_onI monotone_bool_fun_def)
lemma "monotone_bool_fun bool_fun_top"
by (simp add: bool_fun_top_def mono_onI monotone_bool_fun_def)
lemma "mono_on UNIV bool_fun_bot"
by (simp add: bool_fun_bot_def mono_onI monotone_bool_fun_def)
lemma "monotone_bool_fun bool_fun_bot"
by (simp add: bool_fun_bot_def mono_onI monotone_bool_fun_def)
lemma
monotone_count_true:
assumes ulev: "(u::bool vec) ≤ v"
shows "count_true u ≤ count_true v"
unfolding count_true_def
using Groups_Big.ordered_comm_monoid_add_class.sum_mono
[of "{0..<dim_vec u}"
"(λi. if vec_index u i then 1 else 0)"
"(λi. if vec_index v i then 1 else 0)"]
using ulev
unfolding Matrix.less_eq_vec_def
by fastforce
text‹The threshold function is monotone.›
lemma
monotone_threshold:
assumes ulev: "(u::bool vec) ≤ v"
shows "bool_fun_threshold n u ≤ bool_fun_threshold n v"
unfolding bool_fun_threshold_def
using monotone_count_true [OF ulev] by simp
lemma
assumes "(u::bool vec) ≤ v"
and "n < dim_vec u"
shows "bool_fun_threshold n u ≤ bool_fun_threshold n v"
using monotone_threshold [OF assms(1)] .
lemma "mono_on UNIV (bool_fun_threshold n)"
by (meson mono_onI monotone_bool_fun_def monotone_threshold)
lemma "monotone_bool_fun (bool_fun_threshold n)"
unfolding monotone_bool_fun_def
by (meson boolean_functions.monotone_threshold mono_onI)
end
end