Pulling an ordered induction on the invariant structure back to the base #
The backward simulation of the Abiteboul–Vianu argument
(DescriptiveComplexity.AbiteboulVianu): an induction over the ordered
invariant vocabulary – as
produced by the PTIME capture applied on the invariant structure – runs on
the base structure A, once the canonical order on k-tuples is available
as a converged relation variable. The class compiler
(DescriptiveComplexity.backCompile) translates a formula over
((invLang L k).sum Language.order).sum B'.lang into a formula over the base
vocabulary expanded by the order block and by a k-fold copy of B'
(DescriptiveComplexity.backBlock):
- every class variable becomes
kelement variables – a representative tuple; equality of classes becomes incomparability in the order variable (≡ᵏ); - the invariant vocabulary's relations become their defining formulas – bits as atomic formulas, substitution and rearrangement as incomparability at manipulated tuples, the order symbol as «strictly below or equivalent»;
- a relation variable on classes becomes its
k-fold pullback, one flatarity · k-tuple read throughDescriptiveComplexity.backFlatten; - a quantifier over classes becomes
kquantifiers over elements.
The compiler is exact (DescriptiveComplexity.realize_backCompile), the
compiled induction DescriptiveComplexity.StepDef.backStepDef tracks the
original stage by stage over the pulled-back assignments
(DescriptiveComplexity.backAssign), and the values agree
(DescriptiveComplexity.StepDef.ifpHolds_backStepDef). Stratified over the
definable refinement (DescriptiveComplexity.Invariant.OrderDef,
DescriptiveComplexity.FixedPointStratify), this is what turns an ordered
induction on Iᵏ A into an order-free induction on A.
The pulled-back block #
The k-fold pullback of a block: each relation variable on classes
becomes one on representative tuples, its arity multiplied by k.
Equations
Instances For
Dependency graph
Reading a tuple of k-tuples as one flat tuple.
Equations
- DescriptiveComplexity.backFlatten t p = t (finProdFinEquiv.symm p).1 (finProdFinEquiv.symm p).2
Instances For
Dependency graph
Dependency graph
The pullback along the quotient map of an assignment on classes.
Equations
- DescriptiveComplexity.backAssign X' i flat = X' i fun (a : Fin (B'.arity i)) => DescriptiveComplexity.InvMap.mk S fun (q : Fin k) => flat (finProdFinEquiv (a, q))
Instances For
Dependency graph
Dependency graph
Symbols and atoms over the doubly expanded vocabulary #
The order variable, inside the second expansion.
Equations
Instances For
Dependency graph
A base relation symbol, inside the second expansion.
Equations
- DescriptiveComplexity.backBaseSym L k B' R = Sum.inl (DescriptiveComplexity.ordBaseSym L k R)
Instances For
Dependency graph
The ≺-atom between two k-tuples of variables, inside the second
expansion.
Equations
- DescriptiveComplexity.bPrecF L k f g = (DescriptiveComplexity.backPrecSym L k B').formula fun (p : Fin (k + k)) => FirstOrder.Language.var (Fin.addCases f g p)
Instances For
Dependency graph
The ≡ᵏ-atom: incomparability.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The ≤-atom on classes: strictly below or equivalent.
Equations
- DescriptiveComplexity.bLeF L k f g = DescriptiveComplexity.bPrecF L k f g ⊔ DescriptiveComplexity.bEquivF L k f g
Instances For
Dependency graph
The class compiler #
The class compiler: a formula over the ordered invariant vocabulary
expanded by a block, read on representative k-tuples over the base
vocabulary expanded by the order block and the pulled-back block. Each free
or bound class variable is a selection of k context variables.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.backCompile L k S FirstOrder.Language.BoundedFormula.falsum x✝¹ x✝ = ⊥
- DescriptiveComplexity.backCompile L k S (FirstOrder.Language.BoundedFormula.equal t₁ t₂) x✝¹ x✝ = DescriptiveComplexity.bEquivF L k (Sum.elim x✝¹ x✝ t₁.varOf) (Sum.elim x✝¹ x✝ t₂.varOf)
Instances For
Dependency graph
Exactness of the class compiler #
Exactness of the class compiler: over an order variable whose
incomparability is ≡ᵏ and an assignment corresponding to one on classes,
the compiled formula holds at representative tuples exactly when the
original formula holds at their classes on the ordered invariant
structure.
Dependency graph
The pulled-back induction #
The pulled-back induction: the induction over the ordered invariant vocabulary, compiled onto representative tuples over the base vocabulary expanded by the (frozen) order block.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The stages of the pulled-back induction are the pullbacks of the original stages.
Dependency graph
The value of the pulled-back induction is the original value: an ordered induction over the invariant structure runs on the base structure, over the frozen canonical order.