Semantic AC0 layer invariants #
The standard switching-lemma application advances a semantic invariant: after
a cumulative restriction, every wire through logical layer i is computed by
a decision tree of a common shallow depth. This module defines that invariant,
proves its restriction stability and its depth-zero literal base case, and
shows that every argument of a connective gate comes from a strictly earlier
logical layer.
It also identifies the finite set of AND/OR gates with the source-facing AC0 cost exactly. Later union bounds can therefore charge the mathematical circuit size rather than the raw program gate count, which may include free input negations.
The internal gates charged by the source AC0 size measure.
Equations
- Algebraic.AC0.Program.connectiveGates program = {gate : Fin g | Algebraic.AC0.Op.connective (program.lines gate).op ≠ none}
Instances For
The charged AC0 cost is exactly the number of connective gates.
The one-query decision tree computing a literal.
Equations
- literal.decisionTree = Algebraic.AC0.DecisionTree.query literal.index (Algebraic.AC0.DecisionTree.leaf !literal.value) (Algebraic.AC0.DecisionTree.leaf literal.value)
Instances For
The literal tree has exactly the expected Boolean semantics.
A literal decision tree has depth one.
Every literal function has semantic decision-tree depth at most one.
After rho, every wire up through level has a decision tree of depth at
most bound. This is the semantic induction invariant used in the standard
switching-lemma application.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Further restricting inputs preserves a semantic layer-depth bound.
Original inputs and arbitrary chains of NOT gates establish the depth-zero base of the semantic layer invariant.
Original inputs and checked input negations establish the depth-zero base of the semantic layer invariant.
Each argument of an AND or OR gate has strictly smaller source logical depth than the gate itself.
If a connective gate is in the next logical layer, each argument lies in the current layer or below.
A layer invariant supplies a shallow tree for every argument of a connective gate in the next layer.
The invariant specializes to any internal gate in the covered layers.