Trading an expansion's domain for a mark #
An expansion carves its universe out of the tagged assignments by a domain sentence, and that is what makes walking it hard over the base: the immediate successor of a point is the least point above it, and skipping the tagged assignments that fail the domain sentence is not a first-order condition – “no point in between” quantifies over block assignments.
This file removes the difficulty at the source. X.trivialize is the same
expansion with the same tags and the same block, its domain sentence replaced
by ⊤ and the old domain kept as a new unary symbol of the expanded
vocabulary. Its universe is therefore every tagged assignment, where the
successor is the plain binary increment
(DescriptiveComplexity.SOBlock.succAssignF), and the old universe is the part
the mark selects.
What has to move along is the problem: a walk over the old universe becomes a
walk over the new one whose formulas are relativized to the mark
(DescriptiveComplexity.ExpExpansion.relSpec), which is the standard guard
insertion of DescriptiveComplexity.relativizeTo together with the renaming of
the vocabulary. The two are done by one recursion here
(DescriptiveComplexity.ExpExpansion.relLift) rather than composed, so that its
correctness is a single induction stated directly at the inclusion of the old
universe into the new – which is what the walk correspondence consumes.
The inclusion is definitional: the trivialized expansion has the same tags and the same block, so its points are the same pairs, its order is the same order, and its relations are given by the same sentences. Nothing but the domain condition changes, and that is a proof field of the subtype.
The marking vocabulary #
Relation symbols of the marking vocabulary: one unary symbol.
Instances For
Dependency graph
Equations
Instances For
Dependency graph
Dependency graph
The vocabulary of a single unary relation, marking the points an expansion's domain sentence admits.
Equations
- DescriptiveComplexity.markLang = { Functions := fun (x : ℕ) => Empty, Relations := DescriptiveComplexity.markRel }
Instances For
Dependency graph
Dependency graph
The trivialized expansion #
Reading a sentence over one copy of the block inside the one-fold replication, which is the shape a defining sentence of a unary symbol has.
Equations
- X.rep1LHom = (FirstOrder.Language.LHom.id (L.sum FirstOrder.Language.order)).sumMap (DescriptiveComplexity.SOBlock.homLHom (fun (i : X.B.ι) => (0, i)) ⋯)
Instances For
Dependency graph
Dependency graph
The expansion with a trivial domain: the same tags and the same block, so the same candidate points, but every one of them admitted, the old domain sentence surviving as the defining sentence of a new unary symbol.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The marking symbol of the trivialized vocabulary.
Equations
Instances For
Dependency graph
Every candidate point is a point of the trivialized expansion.
Dependency graph
A point of the trivialized expansion, from a candidate point.
Equations
Instances For
Dependency graph
The inclusion of the original universe into the trivialized one.
Equations
Instances For
Dependency graph
Dependency graph
The mark holds exactly of the old points.
Dependency graph
The relations are unchanged: a relation of the original vocabulary holds of included points exactly when it held of them.
Dependency graph
The included points are exactly the marked ones.
Dependency graph
The order is unchanged: the trivialized expansion orders its points by the same key, tag first and then the assignment as a binary number.
Dependency graph
Relativizing a formula to the mark #
A term of the original vocabulary, read in the marked one: over relational vocabularies a term is a variable, so there is nothing to do.
Equations
- X.termLift (FirstOrder.Language.var x_1) = FirstOrder.Language.var x_1
- X.termLift (FirstOrder.Language.func f _ts) = isEmptyElim f
Instances For
Dependency graph
A relation symbol of the original vocabulary, in the marked one.
Instances For
Dependency graph
The guard “the last bound variable is marked”.
Equations
Instances For
Dependency graph
The mark, as a formula of one variable.
Equations
Instances For
Dependency graph
Lifting and relativizing at once: the formula read in the trivialized
expansion, with every quantifier restricted to the marked points. Composing
FirstOrder.Language.LHom.onBoundedFormula with
DescriptiveComplexity.relativizeTo would do the same, but this way its
correctness is one induction, stated directly at the inclusion of the old
universe into the new.
Equations
- X.relLift FirstOrder.Language.BoundedFormula.falsum = FirstOrder.Language.BoundedFormula.falsum
- X.relLift (FirstOrder.Language.BoundedFormula.equal t₁ t₂) = FirstOrder.Language.BoundedFormula.equal (X.termLift t₁) (X.termLift t₂)
- X.relLift (FirstOrder.Language.BoundedFormula.rel r ts) = FirstOrder.Language.BoundedFormula.rel (X.symLift r) fun (i : Fin l) => X.termLift (ts i)
- X.relLift (φ.imp ψ) = (X.relLift φ).imp (X.relLift ψ)
- X.relLift φ.all = ((X.markGuard x✝).imp (X.relLift φ)).all
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The relativized formula says of the marked points what the original said of the old ones.
Dependency graph
The relativized formula, at no bound variables.
Dependency graph
The walk, carried over #
The walk of a specification, carried to the trivialized expansion: every formula relativized to the mark, and the mark of the tuple required wherever the walk enters a node – at a source, and at the target of a step.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
A node of the carried walk: the same mode, the tuple included.
Equations
- DescriptiveComplexity.ExpExpansion.relNode a = (a.1, fun (i : Fin (X.relSpec spec).k) => DescriptiveComplexity.ExpExpansion.trivIncl (a.2 i))
Instances For
Dependency graph
The conjoined marks hold exactly of a tuple of included points.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
A node whose points are all marked is the image of a node of the original walk.
Dependency graph
Dependency graph
Dependency graph
Reachability is carried over, in both directions: a walk of the carried specification that starts at an included node stays included, step by step.
Dependency graph
Dependency graph
The carried walk accepts exactly what the original one did.