The interpretation that draws an instance as a program #
The defining formulas of the reduction P ≤ᶠᵒ[≤] CODEHALT, and the
interpretation DescriptiveComplexity.codeProgInterp they assemble, of
dimension DescriptiveComplexity.dimOf V over the ordered expansion of the
source vocabulary.
Three things make the formulas short.
- The mark of an element depends only on its tag
(
DescriptiveComplexity.ProgTag.mark), because the two leavesoneNandzeroNare shared and a bit of the input is read as an edge – which of the two the last chain node points at – rather than as a mark. - The guard of an element depends only on its tag as well: a tag uses
DescriptiveComplexity.ProgTag.usedcoordinates and the rest are minima (DescriptiveComplexity.canonFofDescriptiveComplexity.Padding), so every defining formula is a conjunction of the two guards with a small body (DescriptiveComplexity.arg1Body,DescriptiveComplexity.arg2Body). - Every body is a walk of the input order: the immediate successor of a
coordinate (
DescriptiveComplexity.succF), its being a maximum, and equality of the other coordinates. No lexicographic order and no arithmetic on positions appears – that is what nesting the table by coordinate buys.
The section “Characterization of the interpreted relations” reads each
relation of FirstOrder.Language.code back through
DescriptiveComplexity.FOInterpretation.relMap_map; the two semantic
relations DescriptiveComplexity.Arg1On and DescriptiveComplexity.Arg2On
are the only interface the correctness proof uses.
Selecting the coordinates of an argument #
The coordinates of the only argument of a unary symbol.
Equations
Instances For
Dependency graph
The coordinates of the first argument of a binary symbol.
Equations
Instances For
Dependency graph
The coordinates of the second argument of a binary symbol.
Equations
Instances For
Dependency graph
The first coordinate: the one the numeral chain walks.
Equations
Instances For
Dependency graph
The atomic builders #
A symbol of the source vocabulary, in the ordered expansion.
Equations
Instances For
Dependency graph
The symbol i of the source vocabulary holds of the first coordinates of
the tuple held by the first argument, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The coordinate j of the first argument is a maximum, as a formula.
Equations
Instances For
Dependency graph
The coordinate j of the second argument is a minimum, as a formula.
Equations
Instances For
Dependency graph
The coordinate j of the second argument covers that of the first, as a
formula.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The bodies of the child relations #
The body of the first-child relation, one case per pair of tags.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.CodeProgRed.arg1Body V cP DescriptiveComplexity.ProgTag.root (DescriptiveComplexity.ProgTag.cp p) = if p = DescriptiveComplexity.codeRootPos cP then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg1Body V cP (DescriptiveComplexity.ProgTag.cp p) (DescriptiveComplexity.ProgTag.cp q) = if DescriptiveComplexity.sub1 cP p = some q then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg1Body V cP DescriptiveComplexity.ProgTag.numN DescriptiveComplexity.ProgTag.oneN = ⊤
- DescriptiveComplexity.CodeProgRed.arg1Body V cP x✝¹ x✝ = ⊥
Instances For
Dependency graph
The body of the second-child relation, one case per pair of tags.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.CodeProgRed.arg2Body V cP DescriptiveComplexity.ProgTag.root DescriptiveComplexity.ProgTag.pairN = ⊤
- DescriptiveComplexity.CodeProgRed.arg2Body V cP (DescriptiveComplexity.ProgTag.cp p) (DescriptiveComplexity.ProgTag.cp q) = if DescriptiveComplexity.sub2 cP p = some q then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg2Body V cP DescriptiveComplexity.ProgTag.pairN (DescriptiveComplexity.ProgTag.symN i) = if ↑i = 0 then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg2Body V cP DescriptiveComplexity.ProgTag.pairN DescriptiveComplexity.ProgTag.zeroN = if V.numSyms = 0 then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg2Body V cP (DescriptiveComplexity.ProgTag.symN i) (DescriptiveComplexity.ProgTag.symN i') = if ↑i' = ↑i + 1 then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg2Body V cP (DescriptiveComplexity.ProgTag.symN i) DescriptiveComplexity.ProgTag.zeroN = if ↑i + 1 = V.numSyms then ⊤ else ⊥
- DescriptiveComplexity.CodeProgRed.arg2Body V cP (DescriptiveComplexity.ProgTag.chainN i l) DescriptiveComplexity.ProgTag.zeroN = DescriptiveComplexity.CodeProgRed.maxAF l
- DescriptiveComplexity.CodeProgRed.arg2Body V cP x✝¹ x✝ = ⊥
Instances For
Dependency graph
The defining formulas #
The guard of a tag on the argument selected by sel: the coordinates it
does not use are minima.
Equations
- DescriptiveComplexity.CodeProgRed.guardF V cP sel t = DescriptiveComplexity.canonF t.used sel
Instances For
Dependency graph
The mark of a constructor, as a formula: the tag draws it, and the argument is canonically padded.
Equations
Instances For
Dependency graph
Being the root, as a formula.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.CodeProgRed.rootMarkF V cP t = ⊥
Instances For
Dependency graph
The first-child relation, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The second-child relation, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The interpretation #
The interpretation drawing an instance as a program: the root of the
drawn code composes the fixed procedure cP with the pair of the numeral of
the universe size and the nest of the tables.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The semantics of the drawing #
The element of the drawn instance with a given tag and tuple.
Equations
- DescriptiveComplexity.progPt t u = (t, u)
Instances For
Dependency graph
Dependency graph
The guard of an element: the coordinates its tag does not use are minima. Elements failing it carry no mark and no child, so they draw nothing.
Equations
Instances For
Dependency graph
The first-child relation of the drawing, one case per pair of tags.
Equations
- DescriptiveComplexity.Arg1On DescriptiveComplexity.ProgTag.root (DescriptiveComplexity.ProgTag.cp p) x✝¹ x✝ = (p = DescriptiveComplexity.codeRootPos cP)
- DescriptiveComplexity.Arg1On (DescriptiveComplexity.ProgTag.cp p) (DescriptiveComplexity.ProgTag.cp q) x✝¹ x✝ = (DescriptiveComplexity.sub1 cP p = some q)
- DescriptiveComplexity.Arg1On DescriptiveComplexity.ProgTag.pairN DescriptiveComplexity.ProgTag.numN x✝¹ x✝ = IsBot (x✝ (DescriptiveComplexity.CodeProgRed.fz V))
- DescriptiveComplexity.Arg1On DescriptiveComplexity.ProgTag.numN DescriptiveComplexity.ProgTag.oneN x✝¹ x✝ = True
- DescriptiveComplexity.Arg1On (DescriptiveComplexity.ProgTag.symN i) (DescriptiveComplexity.ProgTag.chainN i' l) x✝¹ x✝ = ((i = i' ∧ ↑l = 0) ∧ IsBot (x✝ (DescriptiveComplexity.CodeProgRed.fz V)))
- DescriptiveComplexity.Arg1On (DescriptiveComplexity.ProgTag.chainN i l) (DescriptiveComplexity.ProgTag.chainN i' l') x✝¹ x✝ = ((i = i' ∧ ↑l' = ↑l + 1) ∧ x✝ = x✝¹)
- DescriptiveComplexity.Arg1On (DescriptiveComplexity.ProgTag.chainN i l) DescriptiveComplexity.ProgTag.oneN x✝¹ x✝ = (↑l + 1 = DescriptiveComplexity.dimOf V ∧ DescriptiveComplexity.bitOf V i x✝¹)
- DescriptiveComplexity.Arg1On (DescriptiveComplexity.ProgTag.chainN i l) DescriptiveComplexity.ProgTag.zeroN x✝¹ x✝ = (↑l + 1 = DescriptiveComplexity.dimOf V ∧ ¬DescriptiveComplexity.bitOf V i x✝¹)
- DescriptiveComplexity.Arg1On x✝³ x✝² x✝¹ x✝ = False
Instances For
Dependency graph
The second-child relation of the drawing, one case per pair of tags.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Arg2On DescriptiveComplexity.ProgTag.root DescriptiveComplexity.ProgTag.pairN x✝¹ x✝ = True
- DescriptiveComplexity.Arg2On (DescriptiveComplexity.ProgTag.cp p) (DescriptiveComplexity.ProgTag.cp q) x✝¹ x✝ = (DescriptiveComplexity.sub2 cP p = some q)
- DescriptiveComplexity.Arg2On DescriptiveComplexity.ProgTag.pairN (DescriptiveComplexity.ProgTag.symN i) x✝¹ x✝ = (↑i = 0)
- DescriptiveComplexity.Arg2On DescriptiveComplexity.ProgTag.pairN DescriptiveComplexity.ProgTag.zeroN x✝¹ x✝ = (V.numSyms = 0)
- DescriptiveComplexity.Arg2On DescriptiveComplexity.ProgTag.numN DescriptiveComplexity.ProgTag.zeroN x✝¹ x✝ = IsTop (x✝¹ (DescriptiveComplexity.CodeProgRed.fz V))
- DescriptiveComplexity.Arg2On (DescriptiveComplexity.ProgTag.symN i) (DescriptiveComplexity.ProgTag.symN i') x✝¹ x✝ = (↑i' = ↑i + 1)
- DescriptiveComplexity.Arg2On (DescriptiveComplexity.ProgTag.symN i) DescriptiveComplexity.ProgTag.zeroN x✝¹ x✝ = (↑i + 1 = V.numSyms)
- DescriptiveComplexity.Arg2On (DescriptiveComplexity.ProgTag.chainN i l) DescriptiveComplexity.ProgTag.zeroN x✝¹ x✝ = IsTop (x✝¹ l)
- DescriptiveComplexity.Arg2On x✝³ x✝² x✝¹ x✝ = False