The quantifier prefix, read from the middle #
DescriptiveComplexity.altQuant quantifies the k block assignments from the
outside in, building the tuple with Fin.cons: the assignment of index 0 is
the outermost, and the type shrinks as the recursion goes. That is the right
shape for a definition and the wrong one for a run, which fixes the blocks in
place and rewrites them one at a time with Function.update.
DescriptiveComplexity.AltQbf.AltTail is the second shape: AltTail P r m νs pol
quantifies the r blocks from m up, leaving the blocks below m at whatever
νs says. The two agree (DescriptiveComplexity.AltQbf.altTail_iff_altQuant), by an
induction that pushes one block from the tail into the prefix at a time. The
gluing map DescriptiveComplexity.AltQbf.glueTail is what translates between them,
and the whole content of the bridge is that pushing a block past it is
Function.update.
Quantification from the middle of the prefix #
One quantifier at the polarity pol.
Equations
- DescriptiveComplexity.AltQbf.polQuant true Q = ∃ (ν : A → Prop), Q ν
- DescriptiveComplexity.AltQbf.polQuant false Q = ∀ (ν : A → Prop), Q ν
Instances For
Dependency graph
Quantifying the last r blocks, the ones below m already fixed by
νs. Each block is written in place, which is the shape a run of the machine
produces: round m replaces the m-th assignment and leaves the others
alone.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.AltQbf.AltTail P 0 x✝² x✝¹ x✝ = P x✝¹
Instances For
Dependency graph
Gluing a tail onto a prefix #
The tuple that follows νs below m and reads the r blocks from m up
off σ.