Routing repeated input reads through their preceding copies #
Circuit.WellFormed bounds gate fan-out, but permits arbitrarily many gates to
read the same external input. For bounded-degree consistency polynomials, the
first such gate reads the external variable and each later one reads the
preceding input gate's variable. This changes neither the variables nor the
Boolean gate values. Each variable supplies at most one of these copy links.
One plus the last gate reading input i before gate k, or zero if none.
Equations
- C.inputOwner 0 x✝ = 0
- C.inputOwner k.succ x✝ = if C.gates.getD k (MIPRE.SAT.Gate.const false) = MIPRE.SAT.Gate.input x✝ then k + 1 else C.inputOwner k x✝
Instances For
theorem
MIPRE.SAT.Circuit.inputOwner_mono
(C : Circuit)
(i : ℕ)
:
Monotone fun (k : ℕ) => C.inputOwner k i
theorem
MIPRE.SAT.Circuit.inputOwner_after
(C : Circuit)
{a b i : ℕ}
(hab : a < b)
(ha : C.gates.getD a (Gate.const false) = Gate.input i)
:
theorem
MIPRE.SAT.Circuit.inputRef_ne_of_lt
(C : Circuit)
{a b i j : ℕ}
(hab : a < b)
(ha : C.gates.getD a (Gate.const false) = Gate.input i)
(he : C.inputRef a i = C.inputRef b j)
:
theorem
MIPRE.SAT.Circuit.inputRef_injective
(C : Circuit)
{a b i j : ℕ}
(ha : C.gates.getD a (Gate.const false) = Gate.input i)
(hb : C.gates.getD b (Gate.const false) = Gate.input j)
(he : C.inputRef a i = C.inputRef b j)
:
Each external input or previous input gate is used by at most one copy link.
Routing imposes exactly the original gate values on all the same variables.