The shape of the QSAT instance built by the Savitch reduction #
The bookkeeping of the reduction of SUCCINCT-REACH to QSAT: what its elements
are, which propositional variable each of them stands for, which clause, and in
which order the prefix quantifies them. Everything here is semantic – a
predicate on the coordinates of a tagged pair – so that the defining formulas of
DescriptiveComplexity.Problems.Qsat.Interp have something to be compared with.
The variables (DescriptiveComplexity.QVarTag) #
Write SV for the state variables of the input instance and ⊥ for the minimum
of the input order. Levels of the Savitch recursion are indexed by the state
variables themselves, in the ambient order.
| tag | coordinates | meaning |
|---|---|---|
sS, sT | (x, ⊥), x ∈ SV | the two endpoints S, T of the walk |
sZ | (ℓ, x) | the midpoint Z_ℓ chosen at level ℓ |
sU, sV | (ℓ, x) | the pair (U_ℓ, V_ℓ) passed below level ℓ |
sB | (ℓ, ⊥) | the universal bit b_ℓ choosing which half is checked |
aS, aT, aP | (a, ⊥), a arbitrary | the valuations satisfying the three clause groups |
sE | (⊥, ⊥) | the bit saying that the base case is an equality, not a step |
The clauses (DescriptiveComplexity.QClTag) #
cSrc, cTgt, cStep copy the three clause groups of the input, read on aS,
aT and aP; lS, lT, lU, lV tie those valuations to the states they must
read and write; bE is the equality branch of the base case; lev is the eight
clauses of one level. Each of them is a fixed list of literals
(DescriptiveComplexity.qLits), a literal being the tag of its variable, its
sign, and a DescriptiveComplexity.QLink saying which coordinates that variable
has – which is what keeps the whole matrix clausal and the case analysis finite.
The prefix #
Every variable tag gets a key (grp, lev, slot, sec, ord), of which grp,
slot and ord are static numerals (DescriptiveComplexity.keyGrp,
DescriptiveComplexity.keySlot, DescriptiveComplexity.keyOrd) and lev, sec
are the two coordinates in one order or the other; the
prefix is the lexicographic comparison DescriptiveComplexity.KeyLt of the keys.
It orders the prefix as S, T – then, for each level ℓ in increasing order,
Z_ℓ, b_ℓ, U_ℓ, V_ℓ – then all the auxiliary variables, with b_ℓ the only
universal one. Blocks of like polarity are exactly the sets of variables sharing
the first three components (DescriptiveComplexity.keyTriple).
Tags #
The tags of the propositional variables of the QSAT instance built by the Savitch reduction.
- sS : QVarTag
The source endpoint
Sof the walk. - sT : QVarTag
The target endpoint
Tof the walk. - sZ : QVarTag
The midpoint
Z_ℓguessed at levelℓ. - sU : QVarTag
The first component
U_ℓof the pair passed below levelℓ. - sV : QVarTag
The second component
V_ℓof the pair passed below levelℓ. - sB : QVarTag
The universal bit
b_ℓchoosing which half of levelℓis checked. - aS : QVarTag
The valuation satisfying the source clauses.
- aT : QVarTag
The valuation satisfying the target clauses.
- aP : QVarTag
The valuation satisfying the transition clauses.
- sE : QVarTag
The bit saying that the base case is an equality rather than a step.
Instances For
Dependency graph
Dependency graph
The tags of the clauses of the QSAT instance built by the Savitch reduction.
- cSrc : QClTag
A copy of a source clause, read on
aS. - cTgt : QClTag
A copy of a target clause, read on
aT. - cStep : QClTag
- lS : Bool → QClTag
aSreads the source endpointS, in one of the two directions. - lT : Bool → QClTag
aTreads the target endpointT, in one of the two directions. - lU : Bool → QClTag
- lV : Bool → QClTag
- bE : Bool → QClTag
The equality branch of the base case, guarded by
sE. - lev : Bool → Bool → Bool → QClTag
One of the eight clauses of a level: the branch of
b_ℓ, the component of the pair, and the sign.
Instances For
Dependency graph
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc DescriptiveComplexity.QClTag.cSrc = isTrue ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc DescriptiveComplexity.QClTag.cTgt = isFalse DescriptiveComplexity.instDecidableEqQClTag.decEq._proof_1
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc DescriptiveComplexity.QClTag.cStep = isFalse DescriptiveComplexity.instDecidableEqQClTag.decEq._proof_2
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc (DescriptiveComplexity.QClTag.lS a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc (DescriptiveComplexity.QClTag.lT a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc (DescriptiveComplexity.QClTag.lU a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc (DescriptiveComplexity.QClTag.lV a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc (DescriptiveComplexity.QClTag.bE a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cSrc (DescriptiveComplexity.QClTag.lev a a_1 a_2) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt DescriptiveComplexity.QClTag.cSrc = isFalse DescriptiveComplexity.instDecidableEqQClTag.decEq._proof_9
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt DescriptiveComplexity.QClTag.cTgt = isTrue ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt DescriptiveComplexity.QClTag.cStep = isFalse DescriptiveComplexity.instDecidableEqQClTag.decEq._proof_10
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt (DescriptiveComplexity.QClTag.lS a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt (DescriptiveComplexity.QClTag.lT a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt (DescriptiveComplexity.QClTag.lU a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt (DescriptiveComplexity.QClTag.lV a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt (DescriptiveComplexity.QClTag.bE a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cTgt (DescriptiveComplexity.QClTag.lev a a_1 a_2) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep DescriptiveComplexity.QClTag.cSrc = isFalse DescriptiveComplexity.instDecidableEqQClTag.decEq._proof_17
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep DescriptiveComplexity.QClTag.cTgt = isFalse DescriptiveComplexity.instDecidableEqQClTag.decEq._proof_18
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep DescriptiveComplexity.QClTag.cStep = isTrue ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep (DescriptiveComplexity.QClTag.lS a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep (DescriptiveComplexity.QClTag.lT a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep (DescriptiveComplexity.QClTag.lU a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep (DescriptiveComplexity.QClTag.lV a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep (DescriptiveComplexity.QClTag.bE a) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq DescriptiveComplexity.QClTag.cStep (DescriptiveComplexity.QClTag.lev a a_1 a_2) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) DescriptiveComplexity.QClTag.cSrc = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) DescriptiveComplexity.QClTag.cTgt = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) DescriptiveComplexity.QClTag.cStep = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) (DescriptiveComplexity.QClTag.lS b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) (DescriptiveComplexity.QClTag.lT a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) (DescriptiveComplexity.QClTag.lU a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) (DescriptiveComplexity.QClTag.lV a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) (DescriptiveComplexity.QClTag.bE a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lS a) (DescriptiveComplexity.QClTag.lev a_1 a_2 a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) DescriptiveComplexity.QClTag.cSrc = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) DescriptiveComplexity.QClTag.cTgt = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) DescriptiveComplexity.QClTag.cStep = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) (DescriptiveComplexity.QClTag.lS a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) (DescriptiveComplexity.QClTag.lT b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) (DescriptiveComplexity.QClTag.lU a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) (DescriptiveComplexity.QClTag.lV a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) (DescriptiveComplexity.QClTag.bE a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lT a) (DescriptiveComplexity.QClTag.lev a_1 a_2 a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) DescriptiveComplexity.QClTag.cSrc = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) DescriptiveComplexity.QClTag.cTgt = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) DescriptiveComplexity.QClTag.cStep = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) (DescriptiveComplexity.QClTag.lS a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) (DescriptiveComplexity.QClTag.lT a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) (DescriptiveComplexity.QClTag.lU b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) (DescriptiveComplexity.QClTag.lV a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) (DescriptiveComplexity.QClTag.bE a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lU a) (DescriptiveComplexity.QClTag.lev a_1 a_2 a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) DescriptiveComplexity.QClTag.cSrc = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) DescriptiveComplexity.QClTag.cTgt = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) DescriptiveComplexity.QClTag.cStep = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) (DescriptiveComplexity.QClTag.lS a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) (DescriptiveComplexity.QClTag.lT a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) (DescriptiveComplexity.QClTag.lU a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) (DescriptiveComplexity.QClTag.lV b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) (DescriptiveComplexity.QClTag.bE a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lV a) (DescriptiveComplexity.QClTag.lev a_1 a_2 a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) DescriptiveComplexity.QClTag.cSrc = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) DescriptiveComplexity.QClTag.cTgt = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) DescriptiveComplexity.QClTag.cStep = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) (DescriptiveComplexity.QClTag.lS a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) (DescriptiveComplexity.QClTag.lT a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) (DescriptiveComplexity.QClTag.lU a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) (DescriptiveComplexity.QClTag.lV a_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) (DescriptiveComplexity.QClTag.bE b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.bE a) (DescriptiveComplexity.QClTag.lev a_1 a_2 a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) DescriptiveComplexity.QClTag.cSrc = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) DescriptiveComplexity.QClTag.cTgt = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) DescriptiveComplexity.QClTag.cStep = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) (DescriptiveComplexity.QClTag.lS a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) (DescriptiveComplexity.QClTag.lT a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) (DescriptiveComplexity.QClTag.lU a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) (DescriptiveComplexity.QClTag.lV a_3) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqQClTag.decEq (DescriptiveComplexity.QClTag.lev a a_1 a_2) (DescriptiveComplexity.QClTag.bE a_3) = isFalse ⋯
Instances For
Dependency graph
The tags of the interpretation: a variable tag or a clause tag.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Where a literal's variable sits, relative to the coordinates (p, q) of its
clause. Each link determines the variable's coordinates, except the last two,
which range over the literals of a clause of the input instance.
- atP : QLink
The variable
(p, ⊥). - atQ : QLink
The variable
(q, ⊥). - botBoth : QLink
The variable
(⊥, ⊥). - maxAtP : QLink
The variable
(ℓ_max, p), at the bottom level. - same : QLink
The variable
(p, q). - minAtQ : QLink
The variable
(q, ⊥), only whenpis the top level. - predAtQ : QLink
The variable
(ℓ', q)forℓ'the level abovep. - occPos : QLink
A variable
(r, ⊥)occurring positively in the clausepof the input. - occNeg : QLink
A variable
(r, ⊥)occurring negatively in the clausepof the input.
Instances For
Dependency graph
Dependency graph
A literal of a clause of the constructed instance: the tag of its variable, its sign, and where the variable sits.
- vt : QVarTag
The tag of the variable the literal is on.
- sign : Bool
The sign of the literal.
- link : QLink
Where the variable sits, relative to the clause's coordinates.
Instances For
Dependency graph
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The literals of each clause #
The literal of a level clause carrying the input of the level: the
midpoint Z_ℓ on the two matching branches, and one of the two endpoints of the
level – S/U at the top, T/V at the bottom – on the two others.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The literals of each clause of the constructed instance. A clause of the
input contributes its own literals through DescriptiveComplexity.QLink.occPos
and DescriptiveComplexity.QLink.occNeg; every other clause is a fixed list of
two or three literals.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The semantics of the tags #
The element x is a state variable of the input instance.
Equations
Instances For
Dependency graph
The element x is the first state variable: the top level.
Equations
- DescriptiveComplexity.IsMinSV x = (DescriptiveComplexity.IsSV x ∧ ∀ (z : A), DescriptiveComplexity.IsSV z → ¬z < x)
Instances For
Dependency graph
The element x is the last state variable: the bottom level.
Equations
- DescriptiveComplexity.IsMaxSV x = (DescriptiveComplexity.IsSV x ∧ ∀ (z : A), DescriptiveComplexity.IsSV z → ¬x < z)
Instances For
Dependency graph
The state variable x is the one just above the state variable y.
Equations
- DescriptiveComplexity.IsPredSV x y = (DescriptiveComplexity.IsSV x ∧ DescriptiveComplexity.IsSV y ∧ x < y ∧ ∀ (z : A), DescriptiveComplexity.IsSV z → ¬(x < z ∧ z < y))
Instances For
Dependency graph
Which tagged pairs are variables: the mark each variable tag puts on its coordinates.
Equations
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sS = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sT = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sB = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sZ = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ DescriptiveComplexity.IsSV q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sU = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ DescriptiveComplexity.IsSV q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sV = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ DescriptiveComplexity.IsSV q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.aS = fun (x q : A) => IsBot q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.aT = fun (x q : A) => IsBot q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.aP = fun (x q : A) => IsBot q
- DescriptiveComplexity.QVarOn DescriptiveComplexity.QVarTag.sE = fun (p q : A) => IsBot p ∧ IsBot q
Instances For
Dependency graph
Which tagged pairs are clauses: the guard of each clause tag.
Equations
- DescriptiveComplexity.QClOn DescriptiveComplexity.QClTag.cSrc = fun (p q : A) => FirstOrder.Language.Structure.RelMap FirstOrder.Language.tsSrcCl ![p] ∧ IsBot q
- DescriptiveComplexity.QClOn DescriptiveComplexity.QClTag.cTgt = fun (p q : A) => FirstOrder.Language.Structure.RelMap FirstOrder.Language.tsTgtCl ![p] ∧ IsBot q
- DescriptiveComplexity.QClOn DescriptiveComplexity.QClTag.cStep = fun (p q : A) => FirstOrder.Language.Structure.RelMap FirstOrder.Language.tsStepCl ![p] ∧ IsBot q
- DescriptiveComplexity.QClOn (DescriptiveComplexity.QClTag.lS a) = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QClOn (DescriptiveComplexity.QClTag.lT a) = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QClOn (DescriptiveComplexity.QClTag.lU a) = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QClOn (DescriptiveComplexity.QClTag.lV a) = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ FirstOrder.Language.Structure.RelMap FirstOrder.Language.tsNext ![p, q]
- DescriptiveComplexity.QClOn (DescriptiveComplexity.QClTag.bE a) = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ IsBot q
- DescriptiveComplexity.QClOn (DescriptiveComplexity.QClTag.lev a b c) = fun (p q : A) => DescriptiveComplexity.IsSV p ∧ DescriptiveComplexity.IsSV q
Instances For
Dependency graph
Where a literal's variable sits: the coordinates (r, s) of the
variable of a literal of the clause (p, q).
Equations
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.atP = fun (p x r s : A) => r = p ∧ IsBot s
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.atQ = fun (x q r s : A) => r = q ∧ IsBot s
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.botBoth = fun (x x_1 r s : A) => IsBot r ∧ IsBot s
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.maxAtP = fun (p x r s : A) => DescriptiveComplexity.IsMaxSV r ∧ s = p
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.same = fun (p q r s : A) => r = p ∧ s = q
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.minAtQ = fun (p q r s : A) => DescriptiveComplexity.IsMinSV p ∧ r = q ∧ IsBot s
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.predAtQ = fun (p q r s : A) => DescriptiveComplexity.IsPredSV r p ∧ s = q
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.occPos = fun (p x r s : A) => FirstOrder.Language.Structure.RelMap FirstOrder.Language.tsPosIn ![p, r] ∧ IsBot s
- DescriptiveComplexity.LinkOn DescriptiveComplexity.QLink.occNeg = fun (p x r s : A) => FirstOrder.Language.Structure.RelMap FirstOrder.Language.tsNegIn ![p, r] ∧ IsBot s
Instances For
Dependency graph
The quantifier prefix #
The outermost component of the key: the endpoints, then the levels, then the auxiliary variables.
Equations
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sS = 0
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sT = 0
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sZ = 1
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sB = 1
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sU = 1
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sV = 1
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.aS = 2
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.aT = 2
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.aP = 2
- DescriptiveComplexity.keyGrp DescriptiveComplexity.QVarTag.sE = 2
Instances For
Dependency graph
The middle component of the key: within a level, the midpoint, then the universal bit, then the pair.
Equations
- DescriptiveComplexity.keySlot DescriptiveComplexity.QVarTag.sZ = 0
- DescriptiveComplexity.keySlot DescriptiveComplexity.QVarTag.sB = 1
- DescriptiveComplexity.keySlot DescriptiveComplexity.QVarTag.sU = 2
- DescriptiveComplexity.keySlot DescriptiveComplexity.QVarTag.sV = 2
- DescriptiveComplexity.keySlot x✝ = 0
Instances For
Dependency graph
The innermost component of the key, breaking ties between tags that share everything else.
Equations
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sS = 0
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sZ = 0
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sB = 0
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sU = 0
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.aS = 0
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sT = 1
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sV = 1
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.aT = 1
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.aP = 2
- DescriptiveComplexity.keyOrd DescriptiveComplexity.QVarTag.sE = 3
Instances For
Dependency graph
Whether the level of a variable is its first coordinate (its second one otherwise).
Equations
- DescriptiveComplexity.levFst DescriptiveComplexity.QVarTag.sZ = true
- DescriptiveComplexity.levFst DescriptiveComplexity.QVarTag.sB = true
- DescriptiveComplexity.levFst DescriptiveComplexity.QVarTag.sU = true
- DescriptiveComplexity.levFst DescriptiveComplexity.QVarTag.sV = true
- DescriptiveComplexity.levFst x✝ = false
Instances For
Dependency graph
The key of a variable tag is injective: the triples
(keyGrp, keySlot, keyOrd) are pairwise distinct, which is what makes the
prefix a linear order.
Dependency graph
The coordinate of a variable that carries its level.
Equations
- DescriptiveComplexity.keyLev v p q = if DescriptiveComplexity.levFst v = true then p else q
Instances For
Dependency graph
The coordinate of a variable that does not carry its level.
Equations
- DescriptiveComplexity.keySec v p q = if DescriptiveComplexity.levFst v = true then q else p
Instances For
Dependency graph
The block coordinates of a variable: the components of its key that a whole quantifier block shares.
Equations
Instances For
Dependency graph
The lexicographic comparison of block coordinates.
Equations
Instances For
Dependency graph
The quantifier prefix: the lexicographic comparison of the keys, first on the block coordinates and then on the two remaining components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The prefix is a strict linear order #
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
A variable is determined by its key together with its coordinates: this is what makes distinct variables comparable.
Dependency graph
The prefix is total on the variables: two distinct variables are comparable.
Dependency graph
A variable of a block precedes every variable of a later block.
Dependency graph
Comparable variables have comparable block coordinates.