Documentation

DescriptiveComplexity.Problems.Qsat.Peel

Peeling the blocks of the prefix #

The prefix of the constructed instance is read block by block: the two endpoints (DescriptiveComplexity.tEnds), then for each level in increasing order its midpoint (DescriptiveComplexity.tZ), its universal bit (DescriptiveComplexity.tB) and the pair it passes below (DescriptiveComplexity.tUV), and finally the auxiliary variables (DescriptiveComplexity.tAux).

The whole of that reading is the five transition lemmas below (DescriptiveComplexity.step_ends, DescriptiveComplexity.step_z, DescriptiveComplexity.step_b, DescriptiveComplexity.step_uv, DescriptiveComplexity.step_last), each an instance of DescriptiveComplexity.qPlayed_step: recognizing which block comes next is a computation on block coordinates, and every variable's block coordinates are one of three shapes (DescriptiveComplexity.keyTriple_cases).

theorem DescriptiveComplexity.keyTriple_cases {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {v : QVarTag} {p q : A} (h : QVarOn v p q) :
keyTriple v p q = (0, qBot A, 0) (∃ ( : A), IsSV s2, keyTriple v p q = (1, , s)) keyTriple v p q = (2, qBot A, 0)

The block coordinates of a variable are those of the endpoints, of a slot of a level, or of the auxiliary variables.

Dependency graph

Comparing block coordinates #

theorem DescriptiveComplexity.tripleLt_mk {A : Type} [LinearOrder A] (g s g' s' : ) (a a' : A) :
TripleLt (g, a, s) (g', a', s') g < g' g = g' (a < a' a = a' s < s')
Dependency graph
theorem DescriptiveComplexity.tripleLt_grp {A : Type} [LinearOrder A] {g g' s s' : } {a a' : A} (h : g < g') :
TripleLt (g, a, s) (g', a', s')
Dependency graph
theorem DescriptiveComplexity.not_tripleLt_grp {A : Type} [LinearOrder A] {g g' s s' : } {a a' : A} (h : g' < g) :
¬TripleLt (g, a, s) (g', a', s')
Dependency graph
theorem DescriptiveComplexity.triple_ne_grp {A : Type} {g g' s s' : } {a a' : A} (h : g g') :
(g, a, s) (g', a', s')
Dependency graph
theorem DescriptiveComplexity.tripleLt_lev {A : Type} [LinearOrder A] {ℓ'' : A} {s k : } :
TripleLt (1, ℓ'', s) (1, , k) ℓ'' < ℓ'' = s < k
Dependency graph
theorem DescriptiveComplexity.triple_eq_lev {A : Type} {ℓ'' : A} {s k : } :
(1, ℓ'', s) = (1, , k) ℓ'' = s = k
Dependency graph

The five transitions #

Before the endpoints nothing has been quantified.

Dependency graph

After the endpoints comes the midpoint of the first level.

Dependency graph

After the midpoint of a level comes its universal bit.

Dependency graph

After the universal bit of a level comes the pair it passes below.

Dependency graph
theorem DescriptiveComplexity.step_uv {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {ℓ' : A} (hpred : IsPredSV ℓ') :
qUnion (QPlayed (tUV )) (QBlk (tUV )) = QPlayed (tZ ℓ')

After the pair of a level comes the midpoint of the next one.

Dependency graph

After the pair of the last level come the auxiliary variables.

Dependency graph

Once the auxiliary variables are quantified, everything is.

Dependency graph

The polarity of each block #

theorem DescriptiveComplexity.blk_ex {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {T : × A × } (h : ∀ (v : QVarTag) (p q : A), QVarOn v p qkeyTriple v p q = Tv QVarTag.sB) (x : QM A) :
QBlk T x¬IsQAll x
Dependency graph
theorem DescriptiveComplexity.blk_all {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {T : × A × } (h : ∀ (v : QVarTag) (p q : A), QVarOn v p qkeyTriple v p q = Tv = QVarTag.sB) (x : QM A) :
QBlk T xIsQAll x
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph