The sentence a reduction into FINSAT produces #
The interpretation σ_A: given the second-order block B and the first-order
kernel φ of an ∃SO[new] definition, the encoded sentence
∃x_{a₁} … ∃x_{aₙ} ( ⋀_{a ≠ b} x_a ≠ x_b ∧ φ* )
defined inside an ordered input structure. Its vocabulary is B.ι and nothing
else: neither the symbols of the input nor the marker old occur in it, because
each of their atoms is translated into a disjunction over the tuples where it
holds, whose defining formula contains the atom – the Tseitin trick, so that
the input structure is read by the interpretation and never by the sentence.
What each tag defines #
The tags are DescriptiveComplexity.FinSat.Tag
(DescriptiveComplexity.Problems.FinSat.Nodes), the positions of the kernel are
read by DescriptiveComplexity.FinSat.kernelNode and
DescriptiveComplexity.FinSat.kidOf
(DescriptiveComplexity.Problems.FinSat.Kernel), and this file adds the
accessors those two are consumed through together with one defining formula per
relation symbol of DescriptiveComplexity.FINSAT:
- the kinds (
andN,orN,allN,exN) are read off the constructor at a position and the polarity – falsity, an implication and a translated atom are a disjunction at polaritytrueand a conjunction at polarityfalse, an empty one in the case of falsity; a quantifier isallNattrueandexNatfalse; and the prefix nodes areexN; childthreads the prefix along the immediate successors of the input order, hands the last of them the top conjunction, gives that conjunction the distinctness literals and the root of the translated kernel, and inside the kernel followsDescriptiveComplexity.FinSat.kidOf. The one place the input structure is read is the child relation between a translated atom and its tuple nodes (DescriptiveComplexity.FinSat.inAtomF);bindbindsx_aat the prefix node ofaand the variable of a de Bruijn level at a quantifier node;eqL/neqLcarry the equality literals of the kernel, of the diagram and of the translated atoms;posL/negL,argandsigcarry the atoms of the relation variables, which are the only genuine atoms of the sentence;lecompares the tags by their key (DescriptiveComplexity.FinSat.Tag.tagKey) and, within one tag, the tuples lexicographically – reversed inside the prefix, whose chain descends as the input order grows;rootmarks the prefix node of the least element.
Every relation but le is guarded by canonicity
(DescriptiveComplexity.FinSat.canonG): a tag uses only its first
DescriptiveComplexity.FinSat.tagDim coordinates, and a tuple padded otherwise
is junk – an element of the encoded sentence that no node binds and no literal
reads. le carries no such guard, since it has to be a linear order on the
whole universe.
The shape of the reduction #
The subformula positions of the kernel.
Equations
- DescriptiveComplexity.FinSat.Pos B φ = ((m : ℕ) × DescriptiveComplexity.Tseitin.NodeAt φ m)
Instances For
Dependency graph
The root position of the kernel.
Equations
Instances For
Dependency graph
The dimension of the reduction: two coordinates for a distinctness literal of the diagram, and one per argument of an atom of the input vocabulary. Nothing needs a context tuple – the encoded sentence quantifies.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
The first coordinate of a tuple of the reduction.
Equations
- DescriptiveComplexity.FinSat.c0 B φ = ⟨0, ⋯⟩
Instances For
Dependency graph
The second coordinate of a tuple of the reduction.
Equations
- DescriptiveComplexity.FinSat.c1 B φ = ⟨1, ⋯⟩
Instances For
Dependency graph
The tags of the reduction.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Reading a position, through the accessors the formulas dispatch on #
The size of the subformula at a position: the layer the translation of that position sits in, and what makes the parse DAG of the image descend.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
The relation variable of a block atom at a position, if it is one.
Equations
Instances For
Dependency graph
The de Bruijn level of the j-th argument of a block atom.
Equations
Instances For
Dependency graph
An argument of a block atom sits below the arity of its symbol.
Dependency graph
A block atom has an argument at every position of its signature, and it is the variable of one of the de Bruijn levels of the kernel. Relational: a function symbol would have no level to give.
Dependency graph
The two de Bruijn levels of an equality literal at a position.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The de Bruijn level a quantifier at a position binds.
Equations
- DescriptiveComplexity.FinSat.qLevel B φ p = match DescriptiveComplexity.FinSat.kernelNode φ p.snd with | DescriptiveComplexity.FinSat.KernelNode.quant l => some l | x => none
Instances For
Dependency graph
The arity of an atom the encoded sentence must not mention: one of the input
vocabulary, or the marker old.
Equations
Instances For
Dependency graph
Dependency graph
The de Bruijn level of the j-th argument of such an atom.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Whether the position carries such an atom.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Whether the translation turns the position into an n-ary connective: an implication, falsity – the empty one – or an atom translated away.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The number of coordinates a tag uses; a tuple not padded with minima beyond them is junk.
Equations
- DescriptiveComplexity.FinSat.tagDim B φ DescriptiveComplexity.FinSat.Tag.body = 0
- DescriptiveComplexity.FinSat.tagDim B φ DescriptiveComplexity.FinSat.Tag.pre = 1
- DescriptiveComplexity.FinSat.tagDim B φ DescriptiveComplexity.FinSat.Tag.pvar = 1
- DescriptiveComplexity.FinSat.tagDim B φ DescriptiveComplexity.FinSat.Tag.neq = 2
- DescriptiveComplexity.FinSat.tagDim B φ (DescriptiveComplexity.FinSat.Tag.dbvar l) = 0
- DescriptiveComplexity.FinSat.tagDim B φ (DescriptiveComplexity.FinSat.Tag.sym i) = 0
- DescriptiveComplexity.FinSat.tagDim B φ (DescriptiveComplexity.FinSat.Tag.apos j) = 0
- DescriptiveComplexity.FinSat.tagDim B φ (DescriptiveComplexity.FinSat.Tag.nd p pol) = 0
- DescriptiveComplexity.FinSat.tagDim B φ (DescriptiveComplexity.FinSat.Tag.atup p pol) = DescriptiveComplexity.FinSat.inArity B φ p
- DescriptiveComplexity.FinSat.tagDim B φ (DescriptiveComplexity.FinSat.Tag.alit p pol j) = 1
Instances For
Dependency graph
Every tag fits in the dimension: the widest is a tuple node of a translated atom, whose arity occurs in the kernel.
Dependency graph
The sorting key of a tag: its layer, then its place in an arbitrary enumeration.
Equations
Instances For
Dependency graph
The layer of a tag, which is what a child of a node descends by everywhere but inside the existential prefix.
Equations
Instances For
Dependency graph
Dependency graph
The defining formulas #
Every argument holds a canonically padded tuple of its tag's own length.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The comparison of the two tuples inside one tag: lexicographic, and reversed inside the prefix, whose chain descends as the input order grows.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The order of the syntax: the tags by their key, and within one tag the
tuples by DescriptiveComplexity.FinSat.tupLeF. No canonicity guard: this has
to be a linear order on the whole universe, junk included.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Every relation but le and the child relation is decided by the tags alone,
so its defining formula is DescriptiveComplexity.FinSat.tagF of a named tag
predicate – never an inline match, whose realization could only be proved by
casing on every tag combination at once.
A defining formula decided by the tags: canonically padded tuples, and a condition on the tags alone.
Equations
- DescriptiveComplexity.FinSat.tagF B φ t P = DescriptiveComplexity.FinSat.canonG B φ t ⊓ if P then ⊤ else ⊥
Instances For
Dependency graph
The tags of a conjunction node: the top conjunction of the sentence, a
connective at polarity false, and the tuple node of a positively translated
atom.
Equations
- DescriptiveComplexity.FinSat.andTag B φ DescriptiveComplexity.FinSat.Tag.body = True
- DescriptiveComplexity.FinSat.andTag B φ (DescriptiveComplexity.FinSat.Tag.nd p pol) = (pol = false ∧ DescriptiveComplexity.FinSat.isConn B φ p)
- DescriptiveComplexity.FinSat.andTag B φ (DescriptiveComplexity.FinSat.Tag.atup p pol) = (pol = true ∧ DescriptiveComplexity.FinSat.isInAtom B φ p)
- DescriptiveComplexity.FinSat.andTag B φ x✝ = False
Instances For
Dependency graph
The conjunction nodes.
Equations
- DescriptiveComplexity.FinSat.andFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.andTag B φ (t 0))
Instances For
Dependency graph
The tags of a disjunction node: a connective at polarity true, and the
tuple node of a negatively translated atom.
Equations
- DescriptiveComplexity.FinSat.orTag B φ (DescriptiveComplexity.FinSat.Tag.nd p pol) = (pol = true ∧ DescriptiveComplexity.FinSat.isConn B φ p)
- DescriptiveComplexity.FinSat.orTag B φ (DescriptiveComplexity.FinSat.Tag.atup p pol) = (pol = false ∧ DescriptiveComplexity.FinSat.isInAtom B φ p)
- DescriptiveComplexity.FinSat.orTag B φ x✝ = False
Instances For
Dependency graph
The disjunction nodes.
Equations
- DescriptiveComplexity.FinSat.orFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.orTag B φ (t 0))
Instances For
Dependency graph
The tags of a universal quantifier node: a quantifier of the kernel at
polarity true.
Equations
- DescriptiveComplexity.FinSat.allTag B φ (DescriptiveComplexity.FinSat.Tag.nd p pol) = (pol = true ∧ (DescriptiveComplexity.FinSat.qLevel B φ p).isSome = true)
- DescriptiveComplexity.FinSat.allTag B φ x✝ = False
Instances For
Dependency graph
The universal quantifier nodes.
Equations
- DescriptiveComplexity.FinSat.allFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.allTag B φ (t 0))
Instances For
Dependency graph
The tags of an existential quantifier node: the prefix, and a quantifier of
the kernel at polarity false.
Equations
Instances For
Dependency graph
The existential quantifier nodes.
Equations
- DescriptiveComplexity.FinSat.exFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.exTag B φ (t 0))
Instances For
Dependency graph
The one place the input structure is read: the tuple nodes of a
translated atom are those where the atom holds, so the atom itself is a
defining formula and never a symbol of the encoded sentence. old holds of
every original element, so it filters nothing.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What makes one tag a child of another, as a named function of the two
tags: the prefix threads along the immediate successors of the input order and
hands the top conjunction to its last node, that conjunction takes the
distinctness literals and the root of the translated kernel, and inside the
kernel the child relation follows DescriptiveComplexity.FinSat.kidOf, with a
translated atom taking the tuple nodes where it holds and each of those its
equality literals. Named, rather than a match inside
DescriptiveComplexity.FinSat.childFml, so that its realization is one lemma
and each use cases only on the tags it needs.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.FinSat.childBodyF B φ DescriptiveComplexity.FinSat.Tag.pre DescriptiveComplexity.FinSat.Tag.body = DescriptiveComplexity.maxF (0, DescriptiveComplexity.FinSat.c0 B φ)
- DescriptiveComplexity.FinSat.childBodyF B φ x✝¹ x✝ = ⊥
Instances For
Dependency graph
The child relation of the parse DAG.
Equations
- DescriptiveComplexity.FinSat.childFml B φ t = DescriptiveComplexity.FinSat.canonG B φ t ⊓ DescriptiveComplexity.FinSat.childBodyF B φ (t 0) (t 1)
Instances For
Dependency graph
What a quantifier node binds, as a named function of the two tags: x_a
at the prefix node of a, and the variable of its de Bruijn level at a
quantifier of the kernel.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.FinSat.bindBodyF B φ x✝¹ x✝ = ⊥
Instances For
Dependency graph
The variable a quantifier node binds.
Equations
- DescriptiveComplexity.FinSat.bindFml B φ t = DescriptiveComplexity.FinSat.canonG B φ t ⊓ DescriptiveComplexity.FinSat.bindBodyF B φ (t 0) (t 1)
Instances For
Dependency graph
The positive equality literals, as a named function of the three tags: those of the kernel, and those of a positively translated atom.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.FinSat.eqBodyF B φ x✝² x✝¹ x✝ = ⊥
Instances For
Dependency graph
The positive equality literals.
Equations
- DescriptiveComplexity.FinSat.eqFml B φ t = DescriptiveComplexity.FinSat.canonG B φ t ⊓ DescriptiveComplexity.FinSat.eqBodyF B φ (t 0) (t 1) (t 2)
Instances For
Dependency graph
The negative equality literals, as a named function of the three tags: those of the kernel, those of a negatively translated atom, and the distinctness literals of the diagram.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.FinSat.neqBodyF B φ x✝² x✝¹ x✝ = ⊥
Instances For
Dependency graph
The negative equality literals.
Equations
- DescriptiveComplexity.FinSat.neqFml B φ t = DescriptiveComplexity.FinSat.canonG B φ t ⊓ DescriptiveComplexity.FinSat.neqBodyF B φ (t 0) (t 1) (t 2)
Instances For
Dependency graph
The tags of an atom of a relation variable at a polarity: a node of the kernel carrying a block atom, and the symbol of its relation variable.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.FinSat.atomTag B φ pol x✝¹ x✝ = False
Instances For
Dependency graph
The positive atoms of the relation variables: the only genuine atoms of the encoded sentence.
Equations
- DescriptiveComplexity.FinSat.posFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.atomTag B φ true (t 0) (t 1))
Instances For
Dependency graph
The negated atoms of the relation variables.
Equations
- DescriptiveComplexity.FinSat.negFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.atomTag B φ false (t 0) (t 1))
Instances For
Dependency graph
The de Bruijn level the argument of an atom at a given position takes, read off the tags of the node and of the argument position.
Equations
Instances For
Dependency graph
The tags of an argument of an atom: the node, an argument position, and the variable of the de Bruijn level the corresponding term takes there.
Equations
- DescriptiveComplexity.FinSat.argTag B φ t t' (DescriptiveComplexity.FinSat.Tag.dbvar l) = (DescriptiveComplexity.FinSat.argTagLevel B φ t t' = some ↑l)
- DescriptiveComplexity.FinSat.argTag B φ t t' x✝ = False
Instances For
Dependency graph
The arguments of such an atom: at each argument position, the variable of the de Bruijn level of the corresponding term.
Equations
- DescriptiveComplexity.FinSat.argFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.argTag B φ (t 0) (t 1) (t 2))
Instances For
Dependency graph
The tags of an argument position of a relation symbol: the symbol of a relation variable, and a position below its arity.
Equations
- DescriptiveComplexity.FinSat.sigTag B φ (DescriptiveComplexity.FinSat.Tag.sym i) (DescriptiveComplexity.FinSat.Tag.apos j) = (↑j < B.arity i)
- DescriptiveComplexity.FinSat.sigTag B φ x✝¹ x✝ = False
Instances For
Dependency graph
The signature of the relation symbols: one argument position per argument of the relation variable.
Equations
- DescriptiveComplexity.FinSat.sigFml B φ t = DescriptiveComplexity.FinSat.tagF B φ t (DescriptiveComplexity.FinSat.sigTag B φ (t 0) (t 1))
Instances For
Dependency graph
The root of the encoded sentence, as a named function of the tag: the prefix node of the least element of the instance, the outermost existential.
Equations
Instances For
Dependency graph
The root of the encoded sentence.
Equations
Instances For
Dependency graph
The interpretation: the encoded sentence σ_A, defined inside an
ordered input structure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The order of the image #
The four order axioms of DescriptiveComplexity.FinSat.IsWF, which is what the
image has to satisfy before it is an encoded sentence at all. Nothing else in
this section depends on the shape of the kernel: the order is the lexicographic
product of the tag key with the tuples, and is linear because both are.
The tuple comparison the order uses inside one tag, as a relation: the lexicographic order, reversed inside the prefix.
Equations
- DescriptiveComplexity.FinSat.tupLe B φ DescriptiveComplexity.FinSat.Tag.pre u v = (toLex v ≤ toLex u)
- DescriptiveComplexity.FinSat.tupLe B φ t u v = (toLex u ≤ toLex v)
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Tags are determined by their key.
Dependency graph
Reading the order formula: the tags by their key, and within one tag the
tuples by DescriptiveComplexity.FinSat.tupLe. Stated at the raw type of tagged
tuples – FOInterpretation.Map is a non-reducible definition, so a rewrite
inside it is ill-typed at matching transparency.
Dependency graph
The order of the syntax on the image.
Dependency graph
The first four fields of DescriptiveComplexity.FinSat.IsWF: the image is
linearly ordered, being the lexicographic product of the tag key with the
tuples.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Canonicity, and the shape of an atom #
A tag uses only its first DescriptiveComplexity.FinSat.tagDim coordinates, so
the tuple of a tag of dimension zero – a node, a symbol, an argument position, a
de Bruijn variable – is forced to be all minima, hence unique. That is what
makes the shape conditions of DescriptiveComplexity.FinSat.IsWF hold on the
image: the objects those conditions compare are determined by their tags.
Two tuples all of whose coordinates are minima are equal.
Dependency graph
Dependency graph
The realization of a defining formula that carries a formula of the input structure: canonicity, and that formula.
Dependency graph
The realization of a defining formula decided by the tags – one lemma for the eight relations that are, each of whose uses then cases only on the tags it needs.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
An atom's symbol tag is determined by its node tag – so an atom of the image carries at most one relation symbol.
Dependency graph
The tags of an atom of a relation variable, read out: a node carrying a block atom of the kernel, and the symbol of that block variable.
Dependency graph
Both tags of an atom use no coordinate: their tuples are all minima.
Dependency graph
Dependency graph
An argument of an atom of the image is determined by the node and the argument position – so an atom has at most one argument at each position.
Dependency graph
The tags of an argument of an atom, read out: the node, the argument position and the variable are each of their own kind, and the de Bruijn level is the one the term at that position takes.
Dependency graph
All three tags of an argument use no coordinate.
Dependency graph
The tags of an argument position of a relation symbol, read out.
Dependency graph
Both tags of a signature entry use no coordinate.
Dependency graph
The shape conditions, read on the image #
The bridge from DescriptiveComplexity.FinSat.PosG and its companions to the
tag predicates: FOInterpretation.Map is not reducible, so the arguments of the
realization lemma have to be supplied explicitly – unification will not find
them – and the tuple of a tag of dimension zero is extracted at the index it
sits at.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Building an argument relation of the image: the tags say what the argument is, and the tuples only have to be canonically padded.
Dependency graph
Dependency graph
Building a relation of the image, rather than reading one: the tags say
what holds, and the tuples only have to be canonically padded. This is the
direction DescriptiveComplexity.FinSat.IsWF.arg_sig and
DescriptiveComplexity.FinSat.IsWF.arg_tot need.
Dependency graph
Dependency graph
An atom of the image carries at most one relation symbol
(DescriptiveComplexity.FinSat.IsWF.atom_sym).
Dependency graph
An atom of the image has at most one argument at each position
(DescriptiveComplexity.FinSat.IsWF.arg_fun).
Dependency graph
An atom of the image only has arguments at the positions of its symbol's
signature (DescriptiveComplexity.FinSat.IsWF.arg_sig): an argument of a block
atom sits below the arity of its relation variable.
Dependency graph
An atom of the image has an argument at every position of its symbol's
signature (DescriptiveComplexity.FinSat.IsWF.arg_tot): the variable of the de
Bruijn level the corresponding term takes, which exists because the source
vocabulary is relational – a function symbol would have no level to give
(the junk-value hazard).
Dependency graph
The parse DAG descends along the order #
The last field of DescriptiveComplexity.FinSat.IsWF. Everywhere but inside the
existential prefix a child sits in a strictly lower layer of the tag order, so
its key is smaller; inside the prefix the two tags are equal and the chain
descends because the tuple order is reversed there – which is what the prefix
case of DescriptiveComplexity.FinSat.tupLeF is for.
Dependency graph
Every child edge descends: a child either sits in a strictly lower layer of the tag order, or the edge is one step of the existential prefix.
Dependency graph
Children come strictly earlier in the order of the syntax
(DescriptiveComplexity.FinSat.IsWF.child_lt), so the parse DAG of the image is
acyclic.
Dependency graph
The kinds of a node of the image #
Each of the four kinds, read as a condition on the tag and the tuple: the interface the correctness proof of the reduction works against, and the reason the defining formulas dispatch on named predicates. A junk tuple – one not canonically padded – is a node of no kind at all, so it is read by nothing.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The image of the reduction is a well-formed encoded sentence: the order
of its syntax is linear, its parse DAG descends along that order, and its atoms
carry one relation symbol and exactly one argument at each position of that
symbol's signature. This is what makes σ_A an instance of
DescriptiveComplexity.FINSAT at all – junk tags are elements no node reads,
and well-formedness asks nothing of them.