Pulling second-order definability back through an interpretation #
If P ≤ᶠᵒ Q and Q is Σₖ- (resp. Πₖ-) definable, then so is P
(DescriptiveComplexity.SigmaSODefinable.of_foReduction,
DescriptiveComplexity.PiSODefinable.of_foReduction): the levels of the polynomial
hierarchy, defined by second-order alternation, are closed under first-order
reductions.
The proof pulls the defining second-order sentence back through the
interpretation I underlying the reduction, block by block:
- a second-order quantifier over an
n-ary relation on the interpreted universeTag × A^dbecomes a family of second-order quantifiers over(n·d)-ary relations onA, one pern-tuple of tags (DescriptiveComplexity.SOBlock.pull; assignments transfer bijectively viaDescriptiveComplexity.SOBlock.pullAssign/DescriptiveComplexity.SOBlock.mergeAssign); - the interpretation extends to the languages expanded by a block
(
DescriptiveComplexity.FOInterpretation.extendSO): relation variables of the block are interpreted by the corresponding pulled relation variables, reading the tag tuple off statically; interpreting-then-expanding agrees with expanding-then-interpreting (DescriptiveComplexity.FOInterpretation.extendSOEquiv); - the first-order kernel is pulled back by
DescriptiveComplexity.FOInterpretation.pullfromDescriptiveComplexity.Composition, packaged at the sentence level asDescriptiveComplexity.FOInterpretation.pullSentence.
DescriptiveComplexity.sorealize_pullSO puts these together: alternating second-order
satisfaction in the interpreted structure coincides with alternating
second-order satisfaction of the pulled sentence (over the pulled blocks) in
the base structure.
Pulling back a sentence #
The pullback of an L₂-sentence through the interpretation I: an
L₁-sentence that holds in A exactly when the original sentence holds in
I.Map A (see FOInterpretation.realize_pullSentence).
Equations
- I.pullSentence φ = FirstOrder.Language.Formula.relabel (fun (p : (Empty ⊕ Fin 0) × Fin d) => isEmptyElim p.1) (I.pull φ fun (a : Empty ⊕ Fin 0) => isEmptyElim a)
Instances For
Dependency graph
Dependency graph
Pulling back a block #
The pullback of a second-order quantifier block through a tagged
d-dimensional interpretation: an n-ary relation variable on the
interpreted universe Tag × A^d becomes one (n·d)-ary relation variable on
A per n-tuple of tags.
Equations
Instances For
Dependency graph
Transfer of an assignment on the interpreted universe to an assignment of the pulled block on the base universe.
Equations
Instances For
Dependency graph
Transfer of an assignment of the pulled block on the base universe to an assignment on the interpreted universe.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The two assignment transfers are inverse (in the direction needed to biject the second-order quantifiers).
Dependency graph
Extending an interpretation along a block #
The relation symbol of the pulled block corresponding to a relation variable of the original block and a tuple of tags.
Instances For
Dependency graph
Extension of an interpretation along a second-order quantifier block: an
interpretation of the target language expanded by the block in the source
language expanded by the pulled block. Symbols of the target language keep
their defining formulas; a relation variable of the block is interpreted by
the pulled relation variable selected by the (static) tag tuple, its
argument positions decoded by finProdFinEquiv.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Interpreting and then expanding by a block agrees with expanding by the pulled block and then interpreting through the extended interpretation: the identity map is an isomorphism over the expanded target language, when the block is interpreted by an assignment on the interpreted universe on one side and by its pulled transfer on the other.
Equations
- I.extendSOEquiv B A ρ = { toEquiv := Equiv.refl ((I.extendSO B).Map A), map_fun' := ⋯, map_rel' := ⋯ }
Instances For
Dependency graph
Pulling back an alternating second-order sentence #
The blockwise pullback of a list of blocks.
Equations
- DescriptiveComplexity.pullBlocks Tag d Bs = List.map (fun (B : DescriptiveComplexity.SOBlock) => DescriptiveComplexity.SOBlock.pull Tag d B) Bs
Instances For
Dependency graph
The pullback of a sentence over the block expansion of the target language: pull each block, then pull the first-order kernel through the (iteratively extended) interpretation.
Equations
- DescriptiveComplexity.pullSO [] x✝⁴ x✝³ x✝¹ x✝ = x✝¹.pullSentence x✝
- DescriptiveComplexity.pullSO (B :: Bs) x✝⁴ x✝³ x✝¹ x✝ = DescriptiveComplexity.pullSO Bs (x✝⁴.sum (DescriptiveComplexity.SOBlock.pull Tag d B).lang) (x✝³.sum B.lang) (x✝¹.extendSO B) x✝
Instances For
Dependency graph
Pulling second-order satisfaction back through an interpretation: alternating second-order satisfaction in the interpreted structure coincides with satisfaction of the pulled sentence, over the pulled blocks, in the base structure.
Dependency graph
Closure of the definability levels under FO reductions #
Σₖ-definability is closed under first-order reductions.
Dependency graph
Πₖ-definability is closed under first-order reductions.
Dependency graph
Pulling back atoms, guards and tag assignments #
The clausal fragments (SO-Horn, SO-Krom) pull a clause list back through an
interpretation rather than a formula: each clause becomes one clause per static
assignment of tags to its universally quantified variables, its guard becoming
an ordinary formula pullback and its atoms becoming atoms of the pulled
relation variables. The pieces that do not depend on the shape of a clause are
collected here, and are shared by DescriptiveComplexity.SecondOrderHornPull and
DescriptiveComplexity.SecondOrderKromPull.
The pullback of a second-order atom at a static assignment of tags to the
universally quantified variables: the atom of the pulled relation variable
selected by the tags, its arguments the d coordinates of each original
argument.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The interpreted valuation determined by a tag assignment and a valuation of the coordinates.
Equations
- DescriptiveComplexity.tagVal I t w p = (t p, fun (j : Fin d) => w (finProdFinEquiv (p, j)))
Instances For
Dependency graph
Dependency graph
Splitting an interpreted valuation into its tags and its coordinates.
Dependency graph
The pullback of a guard: the ordinary formula pullback at the tag
assignment t, its variables re-indexed as coordinates.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
All assignments of tags to the k universally quantified variables, as a
list: the pullback of a clause is instantiated at each of them.