Playing a whole quantifier block at once #
DescriptiveComplexity.QsatWins plays one variable at a time, in the order the
instance prescribes: that is what makes it the honest reading of a quantifier
prefix, and what the membership walk of DescriptiveComplexity.Problems.Qsat.Membership
follows step by step. Every hardness proof needs the opposite reading, the
one the textbooks write: the prefix is a sequence of blocks of like
polarity, and a block is a single quantifier over an assignment of the whole
block.
This file proves the two peeling lemmas that turn one reading into the other,
DescriptiveComplexity.qsatWins_block_ex and DescriptiveComplexity.qsatWins_block_all: if B
is a set of unplayed variables of the same polarity that comes first among the
unplayed ones (DescriptiveComplexity.QBlock), then winning the position (D, τ) is
winning (D ∪ B, τ) for some (resp. every) assignment of B. Iterating them
along the blocks of a constructed instance is how a reduction into QSAT states
its correctness.
Both go by induction on the size of B: the next variable to play lies in B
as soon as B is nonempty, and the induction hypothesis applies to B minus
that variable. The bookkeeping is done with Prop-valued updates
(DescriptiveComplexity.qSet) rather than the Bool-valued ones of the game rules, so
that a block assignment ν : A → Prop never has to be converted; the two are
related by DescriptiveComplexity.qsatWins_ex_iff' and
DescriptiveComplexity.qsatWins_all_iff'.
Propositional updates #
Giving the variable x the value P, a proposition rather than a Boolean:
the shape a block assignment produces.
Instances For
Dependency graph
Dependency graph
Dependency graph
A Boolean update is a propositional one.
Dependency graph
Dependency graph
Dependency graph
The one-variable rules, propositionally #
The existential rule, with the played value a proposition.
Dependency graph
The universal rule, with the played value a proposition.
Dependency graph
Blocks #
The union of the played variables and a block.
Equations
- DescriptiveComplexity.qUnion D B y = (D y ∨ B y)
Instances For
Dependency graph
The valuation that reads ν on the block B and τ outside it.
Instances For
Dependency graph
B is the next block of the position (D, ·): a set of unplayed
variables that comes first among the unplayed ones. Together with a uniform
polarity this is what lets the whole of B be played by one quantifier.
- isVar (x : A) : B x → IsQVar x
A block holds variables.
- unplayed (x : A) : B x → ¬D x
A block holds unplayed variables.
A block comes first among the unplayed variables.
Instances For
Dependency graph
The next variable to play lies in the block, as soon as the block is nonempty.
Dependency graph
An existential block is played by one quantifier: if B is the next
block of the position (D, τ) and all its variables are existential, winning
(D, τ) is winning (D ∪ B, τ) under some assignment of B.
Dependency graph
A universal block is played by one quantifier: dually, under every
assignment of B.
Dependency graph
The union of the played variables and a block is downward closed again, so the peeling lemmas can be iterated along the blocks of a prefix.