Documentation

DescriptiveComplexity.Problems.Qsat.Induction

One level of the recursion #

Playing the three blocks of a level – its midpoint, its universal bit, its pair – is one step of Savitch's recursion (DescriptiveComplexity.game_step): the midpoint is the existentially chosen intermediate state, the universal bit chooses which of the two halves is checked, and the level clauses force the pair passed below to be the endpoints of that half. So the position opened by a level computes DescriptiveComplexity.SavPow at one more than the depth its successor computes.

Iterating that step down the levels and finishing with DescriptiveComplexity.game_aux gives DescriptiveComplexity.game_level: the position opened by a level computes reachability in at most 2 ^ k moves, k the number of levels from it to the last one.

Readouts the three blocks of a level do not touch #

@[simp]
theorem DescriptiveComplexity.stS_over_tZ {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) ( : A) :
stS (qOver (QBlk (tZ )) τ ν) = stS τ
Dependency graph
@[simp]
theorem DescriptiveComplexity.stT_over_tZ {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) ( : A) :
stT (qOver (QBlk (tZ )) τ ν) = stT τ
Dependency graph
@[simp]
theorem DescriptiveComplexity.stU_over_tZ {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) (ℓ' : A) :
stU (qOver (QBlk (tZ )) τ ν) ℓ' = stU τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.stV_over_tZ {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) (ℓ' : A) :
stV (qOver (QBlk (tZ )) τ ν) ℓ' = stV τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.bitB_over_tZ {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) (ℓ' : A) :
bitB (qOver (QBlk (tZ )) τ ν) ℓ' bitB τ ℓ'
Dependency graph
theorem DescriptiveComplexity.stZ_over_tZ_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) {ℓ' : A} (h : ℓ' ) :
stZ (qOver (QBlk (tZ )) τ ν) ℓ' = stZ τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.stS_over_tB {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) ( : A) :
stS (qOver (QBlk (tB )) τ ν) = stS τ
Dependency graph
@[simp]
theorem DescriptiveComplexity.stT_over_tB {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) ( : A) :
stT (qOver (QBlk (tB )) τ ν) = stT τ
Dependency graph
@[simp]
theorem DescriptiveComplexity.stU_over_tB {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) (ℓ' : A) :
stU (qOver (QBlk (tB )) τ ν) ℓ' = stU τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.stV_over_tB {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) (ℓ' : A) :
stV (qOver (QBlk (tB )) τ ν) ℓ' = stV τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.stZ_over_tB {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) (ℓ' : A) :
stZ (qOver (QBlk (tB )) τ ν) ℓ' = stZ τ ℓ'
Dependency graph
theorem DescriptiveComplexity.bitB_over_tB_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) {ℓ' : A} (h : ℓ' ) :
bitB (qOver (QBlk (tB )) τ ν) ℓ' bitB τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.stS_over_tUV {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) ( : A) :
stS (qOver (QBlk (tUV )) τ ν) = stS τ
Dependency graph
@[simp]
theorem DescriptiveComplexity.stT_over_tUV {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) ( : A) :
stT (qOver (QBlk (tUV )) τ ν) = stT τ
Dependency graph
@[simp]
theorem DescriptiveComplexity.stZ_over_tUV {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) (ℓ' : A) :
stZ (qOver (QBlk (tUV )) τ ν) ℓ' = stZ τ ℓ'
Dependency graph
@[simp]
theorem DescriptiveComplexity.bitB_over_tUV {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ ν : QM AProp) (ℓ' : A) :
bitB (qOver (QBlk (tUV )) τ ν) ℓ' bitB τ ℓ'
Dependency graph
theorem DescriptiveComplexity.stU_over_tUV_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) {ℓ' : A} (h : ℓ' ) :
stU (qOver (QBlk (tUV )) τ ν) ℓ' = stU τ ℓ'
Dependency graph
theorem DescriptiveComplexity.stV_over_tUV_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ ν : QM AProp) {ℓ' : A} (h : ℓ' ) :
stV (qOver (QBlk (tUV )) τ ν) ℓ' = stV τ ℓ'
Dependency graph

Assignments of the three blocks of a level #

The assignment of a midpoint block.

Equations
Instances For
    Dependency graph

    The assignment of a universal-bit block.

    Equations
    Instances For
      Dependency graph

      The assignment of a pair block.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        Dependency graph
        theorem DescriptiveComplexity.stZ_over_zVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ : QM AProp) { : A} (hℓ : IsSV ) (Z : AProp) {a : A} (ha : IsSV a) :
        stZ (qOver (QBlk (tZ )) τ (zVal Z)) a Z a
        Dependency graph
        theorem DescriptiveComplexity.bitB_over_bVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (τ : QM AProp) { : A} (hℓ : IsSV ) (β : Prop) :
        bitB (qOver (QBlk (tB )) τ (bVal β)) β
        Dependency graph
        theorem DescriptiveComplexity.stU_over_uvVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ : QM AProp) { : A} (hℓ : IsSV ) (U V : AProp) {a : A} (ha : IsSV a) :
        stU (qOver (QBlk (tUV )) τ (uvVal U V)) a U a
        Dependency graph
        theorem DescriptiveComplexity.stV_over_uvVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (τ : QM AProp) { : A} (hℓ : IsSV ) (U V : AProp) {a : A} (ha : IsSV a) :
        stV (qOver (QBlk (tUV )) τ (uvVal U V)) a V a
        Dependency graph

        The pair a level receives, and the clauses of the levels above #

        noncomputable def DescriptiveComplexity.inFst {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ : QM AProp) :
        AProp

        The first component of the pair a level receives: the source endpoint at the first level, the first component of the level above otherwise.

        Equations
        Instances For
          Dependency graph
          noncomputable def DescriptiveComplexity.inSnd {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ : QM AProp) :
          AProp

          The second component of the pair a level receives.

          Equations
          Instances For
            Dependency graph
            Dependency graph
            Dependency graph
            theorem DescriptiveComplexity.inFst_of_isPredSV {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {d : A} (h : IsPredSV d ) (τ : QM AProp) :
            inFst τ = stU τ d
            Dependency graph
            theorem DescriptiveComplexity.inSnd_of_isPredSV {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {d : A} (h : IsPredSV d ) (τ : QM AProp) :
            inSnd τ = stV τ d
            Dependency graph

            The clauses of every level strictly above hold.

            Equations
            Instances For
              Dependency graph

              The clauses of every level down to hold.

              Equations
              Instances For
                Dependency graph
                theorem DescriptiveComplexity.levUpto_iff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] { : A} (hℓ : IsSV ) (τ : QM AProp) :
                LevUpto τ LevBelow τ ∀ (b w s : Bool) (x : A), IsSV xLevSat τ b w s x
                Dependency graph
                theorem DescriptiveComplexity.levIn_fst_iff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) (s : Bool) :
                (IsMinSV (stS σ x s = true) ∃ (d : A), IsPredSV d (stU σ d x s = true)) (inFst σ x s = true)

                The input value a level clause compares its own component to.

                Dependency graph
                theorem DescriptiveComplexity.levIn_snd_iff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) (s : Bool) :
                (IsMinSV (stT σ x s = true) ∃ (d : A), IsPredSV d (stV σ d x s = true)) (inSnd σ x s = true)
                Dependency graph
                theorem DescriptiveComplexity.levSat_iff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (b w s : Bool) (x : A) :
                LevSat σ b w s x (bitB σ (!b) = true) ((if w = true then stV σ x else stU σ x) (!s) = true) ((if b = w then stZ σ x else if b = true then inFst σ x else inSnd σ x) s = true)

                A level clause, spelled out: the polarity of the universal bit, the component of the pair it constrains, and the value that component must copy.

                Dependency graph
                theorem DescriptiveComplexity.levSat_tff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ true false false x ¬bitB σ stU σ x ¬inFst σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_tft {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ true false true x ¬bitB σ ¬stU σ x inFst σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_ttf {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ true true false x ¬bitB σ stV σ x ¬stZ σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_ttt {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ true true true x ¬bitB σ ¬stV σ x stZ σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_fff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ false false false x bitB σ stU σ x ¬stZ σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_fft {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ false false true x bitB σ ¬stU σ x stZ σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_ftf {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ false true false x bitB σ stV σ x ¬inSnd σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_ftt {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) (x : A) :
                LevSat σ false true true x bitB σ ¬stV σ x inSnd σ x
                Dependency graph
                theorem DescriptiveComplexity.levSat_all_iff {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} { : A} (hℓ : IsSV ) :
                (∀ (b w s : Bool) (x : A), IsSV xLevSat σ b w s x) (bitB σ ∀ (x : A), IsSV x → (stU σ x inFst σ x) (stV σ x stZ σ x)) (¬bitB σ ∀ (x : A), IsSV x → (stU σ x stZ σ x) (stV σ x inSnd σ x))

                What the eight clauses of a level say: the pair passed below is the first half of the level when its universal bit holds, the second half otherwise.

                Dependency graph

                The three blocks of a level leave the other levels alone #

                def DescriptiveComplexity.levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] ( : A) (τ νZ νB νUV : QM AProp) :
                QM AProp

                The abbreviation for the valuation obtained by playing the three blocks of level .

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  Dependency graph
                  theorem DescriptiveComplexity.levSat_congr {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ σ' : QM AProp} {ℓ'' : A} (hs : stS σ = stS σ') (ht : stT σ = stT σ') (hz : stZ σ ℓ'' = stZ σ' ℓ'') (hb : bitB σ ℓ'' bitB σ' ℓ'') (hu : stU σ ℓ'' = stU σ' ℓ'') (hv : stV σ ℓ'' = stV σ' ℓ'') (hup : ∀ (d : A), IsPredSV d ℓ''stU σ d = stU σ' d) (hvp : ∀ (d : A), IsPredSV d ℓ''stV σ d = stV σ' d) (b w s : Bool) (x : A) :
                  LevSat σ b w s ℓ'' x LevSat σ' b w s ℓ'' x
                  Dependency graph
                  @[simp]
                  theorem DescriptiveComplexity.stS_levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ νZ νB νUV : QM AProp) :
                  stS (levOver τ νZ νB νUV) = stS τ
                  Dependency graph
                  @[simp]
                  theorem DescriptiveComplexity.stT_levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ νZ νB νUV : QM AProp) :
                  stT (levOver τ νZ νB νUV) = stT τ
                  Dependency graph
                  @[simp]
                  theorem DescriptiveComplexity.stZ_levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] ( : A) (τ νZ νB νUV : QM AProp) (ℓ'' : A) :
                  stZ (levOver τ νZ νB νUV) ℓ'' = stZ (qOver (QBlk (tZ )) τ νZ) ℓ''
                  Dependency graph
                  theorem DescriptiveComplexity.stU_levOver_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] ( : A) (τ νZ νB νUV : QM AProp) {ℓ'' : A} (h : ℓ'' ) :
                  stU (levOver τ νZ νB νUV) ℓ'' = stU τ ℓ''
                  Dependency graph
                  theorem DescriptiveComplexity.stV_levOver_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] ( : A) (τ νZ νB νUV : QM AProp) {ℓ'' : A} (h : ℓ'' ) :
                  stV (levOver τ νZ νB νUV) ℓ'' = stV τ ℓ''
                  Dependency graph
                  theorem DescriptiveComplexity.bitB_levOver_ne {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ νZ νB νUV : QM AProp) {ℓ'' : A} (h : ℓ'' ) :
                  bitB (levOver τ νZ νB νUV) ℓ'' bitB τ ℓ''
                  Dependency graph
                  theorem DescriptiveComplexity.inFst_levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ νZ νB νUV : QM AProp) :
                  inFst (levOver τ νZ νB νUV) = inFst τ
                  Dependency graph
                  theorem DescriptiveComplexity.inSnd_levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ νZ νB νUV : QM AProp) :
                  inSnd (levOver τ νZ νB νUV) = inSnd τ
                  Dependency graph
                  theorem DescriptiveComplexity.levBelow_levOver {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] ( : A) (τ νZ νB νUV : QM AProp) :
                  LevBelow (levOver τ νZ νB νUV) LevBelow τ

                  The three blocks of a level leave the levels above it alone.

                  Dependency graph
                  theorem DescriptiveComplexity.levOver_eq {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] ( : A) (τ νZ νB νUV : QM AProp) :
                  qOver (QBlk (tUV )) (qOver (QBlk (tB )) (qOver (QBlk (tZ )) τ νZ) νB) νUV = levOver τ νZ νB νUV
                  Dependency graph
                  theorem DescriptiveComplexity.bitB_levOver_bVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] { : A} (hℓ : IsSV ) (τ νZ νUV : QM AProp) (β : Prop) :
                  bitB (levOver τ νZ (bVal β) νUV) β
                  Dependency graph
                  theorem DescriptiveComplexity.stU_levOver_uvVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] { : A} (hℓ : IsSV ) (τ νZ νB : QM AProp) (U V : AProp) {a : A} (ha : IsSV a) :
                  stU (levOver τ νZ νB (uvVal U V)) a U a
                  Dependency graph
                  theorem DescriptiveComplexity.stV_levOver_uvVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] { : A} (hℓ : IsSV ) (τ νZ νB : QM AProp) (U V : AProp) {a : A} (ha : IsSV a) :
                  stV (levOver τ νZ νB (uvVal U V)) a V a
                  Dependency graph
                  theorem DescriptiveComplexity.stZ_levOver_zVal {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] { : A} (hℓ : IsSV ) (τ : QM AProp) (Z : AProp) {a : A} (ha : IsSV a) :
                  stZ (qOver (QBlk (tZ )) τ (zVal Z)) a Z a
                  Dependency graph

                  One level of the recursion #

                  theorem DescriptiveComplexity.game_step {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] { : A} (hℓ : IsSV ) {k : } {nxt : × A × } (hnxt : qUnion (QPlayed (tUV )) (QBlk (tUV )) = QPlayed nxt) (IH : ∀ (σ : QM AProp), QsatWins (QPlayed nxt) σ IsStart A (stS σ) IsGoal A (stT σ) LevUpto σ SavPow stCls (StepRel A) k (stU σ ) (stV σ )) (τ : QM AProp) :
                  QsatWins (QPlayed (tZ )) τ IsStart A (stS τ) IsGoal A (stT τ) LevBelow τ SavPow stCls (StepRel A) (k + 1) (inFst τ) (inSnd τ)

                  Playing the three blocks of a level is one step of Savitch's recursion. The midpoint is the intermediate state, the universal bit chooses which half is checked, and the level clauses force the pair passed below to be the endpoints of that half.

                  Dependency graph

                  Down the levels #

                  Dependency graph
                  theorem DescriptiveComplexity.levBelow_iff_levUpto {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {σ : QM AProp} {ℓ' : A} (hpred : IsPredSV ℓ') :
                  LevBelow ℓ' σ LevUpto σ
                  Dependency graph
                  theorem DescriptiveComplexity.game_level {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (n : ) ( : A) :
                  IsSV svAbove n∀ (τ : QM AProp), QsatWins (QPlayed (tZ )) τ IsStart A (stS τ) IsGoal A (stT τ) LevBelow τ SavPow stCls (StepRel A) (svAbove ) (inFst τ) (inSnd τ)

                  The position opened by a level computes reachability in at most 2 ^ k moves, k the number of levels from it down to the last one.

                  Dependency graph