Documentation

Complexity.Computability.DecisionTree.Sensitivity

Decision-tree lower bounds from query-complexity measures #

CSLib supplies sensitivity, block sensitivity and certificate complexity, including s(f) ≤ bs(f) ≤ C(f). The variables a tree queries at an input form a certificate, so C(f) ≤ D(f) [Nis91], Jukna, Section 14.3.

The numerical measures use CSLib's BooleanFunction n. The coordinate-witness lower bound card_le_complexity_of_forall_update_ne also applies to arbitrary finite coordinate types and arbitrary outputs, without introducing a second family of measures.

Main results #

References #

theorem Cslib.DecisionTree.subset_queries_of_forall_update_ne {ι : Type u_1} {β : Type u_2} [DecidableEq ι] {f : (ι → Bool) → β} {t : DecisionTree ι β} (ht : t.Computes f) {x : ι → Bool} {S : Finset ι} (hS : ∀ i ∈ S, f (Function.update x i !x i) ≠ f x) :
S ⊆ t.queries x

A tree must query every coordinate whose flip changes the function's value at x. The coordinates and outputs need not be finite.

theorem Cslib.DecisionTree.card_le_complexity_of_forall_update_ne {ι : Type u_1} {β : Type u_2} [DecidableEq ι] [Finite ι] {f : (ι → Bool) → β} {x : ι → Bool} {S : Finset ι} (hS : ∀ i ∈ S, f (Function.update x i !x i) ≠ f x) :

Exhibiting sensitive coordinates bounds decision tree complexity below, for any output type.

theorem Cslib.DecisionTree.complexity_eq_card_of_forall_update_ne {ι : Type u_1} {β : Type u_2} [DecidableEq ι] [Fintype ι] {f : (ι → Bool) → β} {x : ι → Bool} (h : ∀ (i : ι), f (Function.update x i !x i) ≠ f x) :

Sensitivity to every coordinate forces a tree to query all of them in the worst case.

The coordinates queried at an input certify the output of the tree.

Certificate complexity at an input is at most the depth of any tree computing the function.

Certificate complexity is at most decision tree complexity.

A lower bound on sensitivity at one input is a lower bound on decision tree complexity.

A function sensitive to every variable at some input needs to query all of them.