A bounded extension lives inside the instance's own tuples #
DescriptiveComplexity.SigmaSONewBddDefinable guesses an extension
A ⊕ Fin m with m ≤ Nat.card (Fin d → A). That bound is exactly what it takes
for the extension to be definable inside A: there are as many invented
values as d-tuples, so the invented values can be taken to be d-tuples,
guessed as one d-ary relation.
This file builds the interpretation that says so, in the shape
DescriptiveComplexity.SecondOrderNewPull established for the other direction:
- two tags,
falsefor the original elements andtruefor the invented ones, and dimensiond; - an original element is a diagonal tuple – so that each one is a single point, which is why the dimension has to be positive;
- an invented value is a tuple the guessed relation
Nholds of – so their number isNat.card {v // N v}, which is at mostNat.card (Fin d → A)whateverNis, and reaches every value below it for a suitableN.
The defining formulas say the rest: a relation of the base vocabulary holds of
interpreted points when they are all original and it holds of the elements on
their diagonals; old marks the false-tagged points; and a relation variable
of the guessed block is read off the pulled variable selected by the tags, as in
DescriptiveComplexity.SOBlock.pull.
What comes out is DescriptiveComplexity.sorealize_bddPull – the kernel holds
over some bounded extension exactly when its pullback holds over the instance –
and from it DescriptiveComplexity.sigmaSONewBddDefinable_iff_sigmaSODefinable:
∃SO[new, d] = NP. Read beside DescriptiveComplexity.SecondOrderNewPull,
which pulls the unbounded logic through an interpretation without ever
eliminating the invention, this is what the bound is for: an interpretation
cannot invent, so the values have to come from the instance, and
the bound is exactly the promise that they can.
The guessed block #
The block guessed on the instance: the set of invented values, as a d-ary
relation, together with the pullback of the kernel's block through the two-tag
interpretation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The invented-values variable of the guessed block.
Instances For
Dependency graph
The pulled relation variable selected by a tuple of tags.
Equations
Instances For
Dependency graph
The two vocabularies #
The vocabulary the pulled-back kernel is written in: the instance's own, together with the guessed relation variables.
Equations
- DescriptiveComplexity.bddHost L d B = L.sum (DescriptiveComplexity.bddBlock d B).lang
Instances For
Dependency graph
The vocabulary the kernel is written in: the extended vocabulary together with the block's relation variables.
Equations
Instances For
Dependency graph
The interpretation #
The invented-values variable, as a symbol of the host vocabulary.
Equations
Instances For
Dependency graph
A pulled relation variable, as a symbol of the host vocabulary.
Equations
- DescriptiveComplexity.bddBlockHostSym L d B r τ = Sum.inr (DescriptiveComplexity.bddPullSym d B r τ)
Instances For
Dependency graph
The domain formula: an original point is a diagonal tuple, so that each element of the instance is one point; an invented point is a tuple the guessed relation holds of.
Equations
- DescriptiveComplexity.bddDom L d B false = FirstOrder.Language.Formula.iInf fun (j : Fin d) => (FirstOrder.Language.var j).equal (FirstOrder.Language.var 0)
- DescriptiveComplexity.bddDom L d B true = (DescriptiveComplexity.newSetHostSym L d B).formula fun (j : Fin d) => FirstOrder.Language.var j
Instances For
Dependency graph
The defining formulas: a symbol of the instance's vocabulary holds of
interpreted points exactly when they are all original and it holds of the
elements their diagonals carry, and never of an invented point; old marks the
original points; a relation variable of the block is read off the pulled
variable selected by the tags.
Equations
Instances For
Dependency graph
The extended universe, interpreted in the instance: two tags and
dimension d, the original elements on the diagonal and the invented values
wherever the guessed relation puts them.
Equations
- DescriptiveComplexity.bddInterp L d B = { relFormula := fun {n : ℕ} => DescriptiveComplexity.bddRelF L d B, domFormula := DescriptiveComplexity.bddDom L d B }
Instances For
Dependency graph
Realization in the host structure #
The invented values, as the instance's own tuples: the d-tuples the
guessed variable holds of. Their number is what the bound of
DescriptiveComplexity.SigmaSONewBddDefinable allows.
Equations
- DescriptiveComplexity.newSet ρ v = ρ (Sum.inl ()) v
Instances For
Dependency graph
The host structure: the instance, expanded by the guessed relation variables.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
The extended universe as tagged tuples #
The tagged tuple representing a point of the extended universe: an original element on its diagonal, an invented value where the embedding puts it.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The assignment of the kernel's block on the extended universe, read off a guessed assignment on the instance: the pulled variable selected by the tags of the arguments, at their coordinates.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The defining formulas, realized #
A base symbol at original points: the relation of the instance, at the elements the diagonals carry.
Dependency graph
A base symbol never holds of an invented point.
Dependency graph
The marker old holds exactly of the original points.
Dependency graph
A relation variable of the block is read off the pulled variable selected by the tags.
Dependency graph
The interpreted universe is the extended universe #
The interpreted structure is the extended structure: the map sending a
point of A ⊕ Fin m to its tagged tuple is an isomorphism over the extended
vocabulary, the block being interpreted by
DescriptiveComplexity.bddTargetAssign.
Equations
- DescriptiveComplexity.bddTargetEquiv e he ρ hN = { toEquiv := Equiv.ofBijective (fun (x : A ⊕ Fin m) => ⟨DescriptiveComplexity.bddPoint e x, ⋯⟩) ⋯, map_fun' := ⋯, map_rel' := ⋯ }
Instances For
Dependency graph
The guess, read back #
The point a tag and a tuple name: an original element on a diagonal, the invented value the embedding puts there. Off the embedding's image the value is junk, which no formula reaches – the domain formula rules those tuples out.
Equations
Instances For
Dependency graph
Dependency graph
The guessed assignment on the instance, read off an assignment on the extended universe: the invented values are the embedding's image, and a pulled variable holds where the original one holds of the points its tags and coordinates name.
Equations
- DescriptiveComplexity.bddSourceAssign e σ (Sum.inl val) v = ∃ (i : Fin m), e i = v
- DescriptiveComplexity.bddSourceAssign e σ (Sum.inr p) x_2 = σ p.fst fun (k : Fin (B.arity p.fst)) => DescriptiveComplexity.bddBack e (p.snd k) fun (j : Fin d) => x_2 (finProdFinEquiv (k, j))
Instances For
Dependency graph
Dependency graph
The two assignment transfers are inverse, in the direction an existential block needs: what the instance guesses is read back as what was guessed on the extended universe.
Dependency graph
The kernel, pulled onto the instance #
Sentence transfer: what the kernel says in the extended universe, it says in the interpreted one.
Dependency graph
A bounded extension is a guess on the instance: the kernel holds in
A ⊕ Fin m for some m below the number of d-tuples exactly when its
pullback through DescriptiveComplexity.bddInterp holds in A itself. The
bound is what makes the forward direction possible – there have to be enough
tuples to embed the invented values in – and the guessed relation is what makes
the backward one, every d-ary relation cutting out at most that many.
Dependency graph
∃SO[new, d] ⊆ Σ₁: bounded value invention is existential second-order
logic over the instance itself. The invented values are taken to be d-tuples,
guessed as one more relation variable, and the kernel is pulled back through the
two-tag interpretation. With
DescriptiveComplexity.SigmaSODefinable.toNewBdd this is ∃SO[new, d] = NP.
Dependency graph
∃SO[new, d] = NP, for a positive dimension: bounding the invented
values by the instance's d-tuples hands the search space back to the instance,
which is what the parameter was for.