Documentation

Complexitylib.Algebraic.LowerBound.Threshold.Internal.Components

Splits aligned with gates of support at most two #

A program whose gates each read at most two inputs defines the support graph on the inputs: two inputs are adjacent when some gate reads both. Every gate with nonempty support lies inside a single connected component. A component with v inputs is connected, so it contains at least v - 1 edges; distinct edges come from distinct gates of support exactly two inside the component, so the component carries at least v - 1 input-reading gates. Summing over the components, the number of components with exactly v - 1 gates ("tree components") is at least n - |inputGates|. Taking L tree components for the side U of a split gives |U| = (number of gates with nonempty support inside U) + L, and no gate straddles the split.

The main result is exists_split_of_support_card_le_two_internal.

The support graph of a program: two inputs are adjacent when some gate reads both.

Equations
Instances For

    The inputs of a connected component of the support graph, as a finset.

    Equations
    Instances For

      The gates with nonempty support inside a connected component of the support graph.

      Equations
      Instances For

        The support of a gate lies in the component of any of its inputs.

        (F1) The components partition the inputs.

        (F2) The input-reading gates are partitioned by the components.

        theorem Algebraic.Threshold.Program.exists_gate_of_edge {n s : ℕ} (C : Program n s) (h2 : ∀ (j : Fin s), (C.support j).card ≤ 2) (c : C.supportGraph.ConnectedComponent) (e : Sym2 ↑c.supp) (he : e ∈ c.toSimpleGraph.edgeSet) :
        ∃ j ∈ C.componentGates c, ∀ (u : Fin n), u ∈ C.support j ↔ u ∈ Sym2.map Subtype.val e

        When every gate reads at most two inputs, every edge of a component is the support of a gate of the component.

        (F3) A component with v inputs carries at least v - 1 gates: it is connected, so it has at least v - 1 edges, and distinct edges come from distinct gates.

        theorem Algebraic.Threshold.Program.exists_split_of_support_card_le_two_internal {n s : ℕ} (C : Program n s) (h2 : ∀ (j : Fin s), (C.support j).card ≤ 2) (L : ℕ) (hL : L + C.inputGates.card ≤ n) :
        ∃ (U : Finset (Fin n)), (∀ (j : Fin s), C.support j ⊆ U ∨ C.support j ⊆ Uᶜ) ∧ U.card = {j : Fin s | C.support j ⊆ U ∧ C.support j ≠ ∅}.card + L

        A program whose gates each read at most two inputs admits, for every L ≤ n - |inputGates|, a split U of the inputs that no gate straddles, with |U| exceeding the number of gates reading inputs inside U by exactly L.