Simultaneous first-order inductions: one skeleton for IFP and PFP #
The inflationary (FO(IFP)) and partial (FO(PFP)) fixed-point logics differ in
exactly one place – what one application of the step formulas does with the
previous stage. Everything else is shared: the data (a block of relation
variables, one first-order step formula per variable, an output sentence), the
notion of a stage, stabilization on finite structures, transport along
isomorphisms, and the pullback along a first-order interpretation. This file
provides that shared skeleton; the logics themselves are built on it in
DescriptiveComplexity.FixedPointInflationary and
DescriptiveComplexity.FixedPointPartial.
The data #
A DescriptiveComplexity.StepDef over L bundles a block B of relation
variables, one step formula per variable – a first-order formula over
L.sum B.lang whose free variables are the arguments of the variable – and an
output sentence over the same expanded vocabulary. This is one simultaneous
induction with a first-order output; nesting is treated by stratification, in
DescriptiveComplexity.FixedPointInflationary.
Unlike DescriptiveComplexity.LFPDef, whose rules are clausal data (the
library's Horn-program normal form), the step formulas here are unrestricted:
positivity is exactly what the inflationary and partial iterations dispense
with. LFPDef keeps its clausal form – the two are bridged in
DescriptiveComplexity.FixedPointInflationary (rules give a StepDef) and
DescriptiveComplexity.FixedPointInflationaryLFP (the converse translation).
The two iterations #
DescriptiveComplexity.StepDef.inflStage: iterateDescriptiveComplexity.StepDef.inflStep, which accumulates the step formulas into the previous stage. The stages grow, so on a finite structure they reach a fixed point within the atom count (DescriptiveComplexity.StepDef.isFixedPt_inflStep_card– the height of the subset lattice, viaDescriptiveComplexity.exists_succ_eq_of_monotone_subset), and their unionDescriptiveComplexity.StepDef.inflLimitequals the stage at the atom count (DescriptiveComplexity.StepDef.inflLimit_eq_stage_card).DescriptiveComplexity.StepDef.partStage: iterateDescriptiveComplexity.StepDef.nextitself, replacing the previous stage. Nothing grows, and the iteration may cycle forever; if some stage is a fixed point, all fixed stages are equal (DescriptiveComplexity.StepDef.partStage_eq_of_isFixedPt) and one is reached withinNat.cardof the assignment type – the pigeonholeDescriptiveComplexity.isFixedPt_iterate_card_iff, exposed here asDescriptiveComplexity.StepDef.exists_isFixedPt_partStage_iff.
Transport #
Both iterations commute with transporting an assignment along an isomorphism
(DescriptiveComplexity.StepDef.inflStage_map,
DescriptiveComplexity.StepDef.partStage_map) and with the pullback of the
block through a first-order interpretation
(DescriptiveComplexity.StepDef.inflStage_pull,
DescriptiveComplexity.StepDef.partStage_pull, for the pulled definition
DescriptiveComplexity.StepDef.pull). Each is one commuting lemma about
DescriptiveComplexity.StepDef.next (next_map, next_pull) propagated along
the orbit; these are the lemmas isomorphism-invariance and closure under
reductions rest on, for every logic built on this skeleton.
Assignments form a finite type #
The all-empty assignment of a block: the starting point of both iterations.
Instances For
Dependency graph
Transport along an equivalence maps the empty assignment to the empty assignment.
Dependency graph
Dependency graph
Realization transport with explicit structures #
The structures a stage is read against are block expansions, which are not
instances; this is FirstOrder.Language.StrongHomClass.realize_formula with
the two structures passed explicitly, exactly as
DescriptiveComplexity.realize_sentence_of_equiv does at the sentence level.
Dependency graph
The data of a simultaneous induction #
A simultaneous first-order induction: a block of relation variables, one first-order step formula per variable – over the base vocabulary expanded by the block, its free variables the arguments of the variable – and an output sentence over the same expanded vocabulary, read at the value of the iteration. The step formulas are unrestricted; which iteration is applied to them (inflationary or partial) is chosen by the logics built on this data.
- B : SOBlock
The relation variables computed by the iteration.
The step formula of each variable; its free variables are the arguments of the variable.
The first-order output, over the expanded vocabulary – unrestricted, in particular free to negate fixed-point atoms.
Instances For
Dependency graph
One application of the step formulas to an assignment.
Instances For
Dependency graph
The inflationary step: accumulate the step formulas into the previous stage.
Instances For
Dependency graph
The stages of the inflationary iteration.
Instances For
Dependency graph
The stages of the partial iteration.
Instances For
Dependency graph
The value of the inflationary iteration: the union of the stages. On a
finite structure this is the stage at the atom count
(DescriptiveComplexity.StepDef.inflLimit_eq_stage_card).
Instances For
Dependency graph
Dependency graph
Dependency graph
The inflationary stages increase.
Dependency graph
The inflationary stages increase, monotonically.
Dependency graph
Two partial stages that are both fixed points of the step are equal: the value of a converging partial iteration does not depend on which stable stage witnesses the convergence.
Dependency graph
Stabilization on finite structures #
The inflationary stages plateau within the atom count.
Dependency graph
The inflationary iteration reaches a fixed point within the atom count – the height of the subset lattice of the block's atoms, not the number of assignments.
Dependency graph
The inflationary stages are constant from the atom count on.
Dependency graph
On a finite structure, the value of the inflationary iteration is the stage at the atom count.
Dependency graph
The value of the inflationary iteration is a fixed point of the inflationary step.
Dependency graph
If the partial iteration converges at all, it converges within the
number of assignments of the block – the pigeonhole
DescriptiveComplexity.isFixedPt_iterate_card_iff read on the stages.
Dependency graph
Transport along isomorphisms #
One application of the step formulas commutes with transporting the assignment along an isomorphism: the step formulas cannot tell isomorphic expanded structures apart.
Dependency graph
The inflationary step commutes with transport along an isomorphism.
Dependency graph
The inflationary stages transport along an isomorphism.
Dependency graph
The partial stages transport along an isomorphism.
Dependency graph
The value of the inflationary iteration transports along an isomorphism.
Dependency graph
Being a fixed point of the step is insensitive to transporting the assignment along an isomorphism.
Dependency graph
Pullback through an interpretation #
Pulling back the empty assignment gives the empty assignment.
Dependency graph
The pullback of a simultaneous induction through a tagged interpretation:
the block is pulled back variable by variable
(DescriptiveComplexity.SOBlock.pull), the step formula of a pulled variable
is the pullback of the original variable's step formula at the pulled
variable's tag tuple (DescriptiveComplexity.guardPull, through the extended
interpretation DescriptiveComplexity.FOInterpretation.extendSO), and the
output sentence is pulled through the extended interpretation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
One application of the pulled step formulas is the pullback of one application of the original ones: the single commuting square from which every transport of the iterations along a reduction follows.
Dependency graph
The inflationary step commutes with the pullback.
Dependency graph
The inflationary stages of the pulled induction are the pullbacks of the original stages.
Dependency graph
The partial stages of the pulled induction are the pullbacks of the original stages.
Dependency graph
The value of the pulled inflationary iteration is the pullback of the original value.
Dependency graph
Being a fixed point of the step is insensitive to pulling the assignment
back: the pullback of assignments is a bijection
(DescriptiveComplexity.SOBlock.mergeAssign_pullAssign) intertwining the two
steps.