Documentation

DescriptiveComplexity.Problems.Cvp.Hardness.Value

What the drawn circuit computes #

The intended value of each gate of DescriptiveComplexity.Problems.Cvp.Hardness.Interp, and the two halves of the statement that the circuit computes it.

The building half (this file's first section) walks the chains: each gate's value follows from its inputs', by induction along the order for the two chains and by strong induction on the rank of the stage for the propagation, whose gates at stage s read the propagation gates one stage below. The inverting half is the converse, and it is one induction on the derivation DescriptiveComplexity.GateVal: whatever the circuit derives, it derives for the intended reason, because the wiring lemmas leave a gate no other input to have derived it from.

Only the true rail carries information; the false rail is where the constant 0 and the unfired chains sit, and nothing downstream reads it, so the inverting half states nothing about it.

The intended values #

The value of a conjunction-chain gate: every negative literal of c up to y is forced within orank s rounds.

Equations
Instances For
    Dependency graph

    The value of a propagation-chain gate: some clause up to c forces x in one round from the stage orank s.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      Dependency graph

      The value of a top-stage conjunction-chain gate: every negative literal of c up to y is forced at all.

      Equations
      Instances For
        Dependency graph

        The value of a goal-chain gate: the instance is not Horn, or some clause up to c is a goal clause whose negative literals are all forced.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          Dependency graph

          Reading the values off the stages #

          theorem DescriptiveComplexity.CvpVal.hdVal_top {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] {M : A} (hM : ∀ (a : A), a M) (x s : A) :
          HdVal x M s ForcedIn (orank s + 1) x

          At the top of the clause walk, a propagation gate is one round of unit propagation.

          Dependency graph
          theorem DescriptiveComplexity.CvpVal.bdVal_top {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] {M : A} (hM : ∀ (a : A), a M) (c s : A) :
          BdVal c M s ∀ (y : A), SatOcc.NegIn c yForcedIn (orank s) y

          At the top of the literal walk, a conjunction gate is the body condition.

          Dependency graph
          theorem DescriptiveComplexity.CvpVal.forced_iff_top {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {M : A} (hM : ∀ (a : A), a M) (x : A) :

          The last stage is the fixed point: Nat.card A rounds of propagation force everything that is forced at all.

          Dependency graph

          Building a derivation #

          Each gate evaluates to 1 as soon as its intended value holds.

          The constant 1 gate derives 1.

          Dependency graph
          theorem DescriptiveComplexity.CvpVal.gateVal_stage {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] [Finite A] {m M : A} (hm : ∀ (a : A), m a) (hM : ∀ (a : A), a M) (n : ) (s : A) :
          orank s = n(∀ (c y : A), BdVal c y sGateVal true (CvpDraw.bdPt c y s)) ∀ (x c : A), HdVal x c sGateVal true (CvpDraw.hdPt x c s)

          The two chains of one stage, by strong induction on the rank of the stage: the conjunction chains of a stage read the propagation gates of the stage below, and the propagation chain of a stage reads the conjunction chains of its own.

          Dependency graph
          theorem DescriptiveComplexity.CvpVal.gateVal_bdTop {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {m M : A} (hm : ∀ (a : A), m a) (hM : ∀ (a : A), a M) (c y : A) (hval : BdTopVal c y) :

          A conjunction gate of the top stage evaluates to 1 when its value holds.

          Dependency graph
          theorem DescriptiveComplexity.CvpVal.gateVal_gl {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {m M : A} (hm : ∀ (a : A), m a) (hM : ∀ (a : A), a M) (c : A) (hval : GlVal c) :

          A goal-chain gate evaluates to 1 when its value holds.

          Dependency graph

          Inverting a derivation #

          Whatever the circuit derives on the true rail, it derives for the intended reason: the wiring leaves a gate no other input to have derived it from.

          The intended value of a point, by tag. The constant 1 carries no information and the constant 0 is never derived, which is what makes the induction go through.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            Dependency graph
            theorem DescriptiveComplexity.CvpVal.val_of_gateVal {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {m M : A} (hm : ∀ (a : A), m a) (hM : ∀ (a : A), a M) {b : Bool} {p : cvpInterp.Map A} :
            GateVal b pb = trueVal p

            Nothing else evaluates to 1. By induction on the derivation: every rule that can fire at a gate of the drawn circuit fires for the intended reason. The false rail carries no information and is not tracked.

            Dependency graph