Internal: Gate Elimination Lower Bound #
This internal module proves the gate elimination lower bound: for any circuit over a bounded fan-in k AND/OR basis, if the computed function depends on n' essential variables, the circuit has size at least ⌈n'/k⌉.
The public definitions (IsEssentialInput, EssentialInputs) are in
Circ.EssentialInput. The public theorems (gate_elimination_lower_bound,
lower_bound_all_inputs) are accessible through Circ.LowerBound.
Core insensitivity lemma #
If no internal gate reads primary input i, wire values at wires
other than i are unchanged when input i is modified.
If no gate (internal or output) reads primary input i, the circuit
output is unchanged when input i is modified.
Essential variables must be read #
If c computes f and f depends on variable i, some gate
(internal or output) directly reads input wire i.
Counting argument #
For a gate over bounded fan-in k AON basis, covered inputs has card ≤ k.
Counting bound: for bounded fan-in k, the number of essential variables is at most k times the circuit size.
Gate elimination lower bound: for fan-in k, circuit size is at least ⌈n'/k⌉ where n' is the number of essential variables.
Corollary: if f depends on all N inputs, then N ≤ k · size.