Documentation

MIPRE.Foundations.SAT.InputRouting

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
Instances For
    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) :
    a + 1 ≤ C.inputOwner b i

    The input-copy link: external input on the first read, previous gate thereafter.

    Equations
    Instances For
      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) :
      a = b

      Each external input or previous input gate is used by at most one copy link.

      A copy link points to an input variable or to a strictly earlier gate.

      Consistency equations after replacing repeated external reads by copy links.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem MIPRE.SAT.Circuit.inputRef_value (C : Circuit) (x w : ℕ → Bool) (k i : ℕ) (hw : ∀ u < k, w u = C.valueAt x u) :
        Sum.elim x w (C.inputRef k i) = x i
        theorem MIPRE.SAT.Circuit.routedConsistent_iff (C : Circuit) (x w : ℕ → Bool) :
        C.RoutedConsistent x w ↔ ∀ k < C.size, w k = C.valueAt x k

        Routing imposes exactly the original gate values on all the same variables.

        theorem MIPRE.SAT.Circuit.eval_iff_routedConsistent (C : Circuit) (hne : C.gates ≠ []) (x : ℕ → Bool) :
        C.eval x = true ↔ ∃ (w : ℕ → Bool), C.RoutedConsistent x w ∧ w (C.size - 1) = true

        The routed consistency equations and the output literal characterize acceptance, using exactly the original input and gate variables.