The digraph-to-graph gadget #
The construction turning a directed graph into a simple one with the same
isomorphisms. It is written on a single structure – the doubling that runs it
on both sides of an instance is DescriptiveComplexity.GadgetDouble – so
everything below speaks about one graph.
Each vertex u gets
- a vertex node
V u, and - a lollipop:
M₁ uadjacent toV u, withM₁ u,M₂ u,M₃ ua triangle.
Each arc u ⟶ v gets a path of three subdivision nodes,
V u — A u v — B u v — C u v — V v
together with a pendant P u v hanging off A u v.
Two design points, both forced:
- Three subdivision nodes, not two. The source is an arbitrary binary
relation, so a self-loop
u ⟶ uis a legal instance; with two subdivisions it would close a triangle and wreck the triangle test below, with three it closes a 4-cycle. - The lollipop. Without it, a vertex incident to exactly one arc has degree one, and is interchangeable with the pendant of that arc – the swap is an automorphism, and vertices could not be recovered. With it, every vertex node is adjacent to a triangle and no other node is.
The levels are then recovered from adjacency alone, with no counting beyond
“has exactly one neighbor”: the triangle nodes are those lying on a triangle,
the vertices those adjacent to one without lying on one, A the nodes with a
leaf neighbor, and so on. Points of the tagged power that no clause makes
adjacent to anything – an arc node for a pair that is not an arc – are isolated,
hence harmless: an isomorphism matches them by degree.
The nodes #
The eight kinds of node: a vertex, its three lollipop nodes, the three subdivision nodes of an arc, and the pendant marking the arc's tail.
- vtx : GTag
The copy of a vertex.
- m₁ : GTag
The lollipop node attached to a vertex.
- m₂ : GTag
One corner of the lollipop triangle.
- m₃ : GTag
The other corner of the lollipop triangle.
- a : GTag
The subdivision node next to an arc's tail.
- b : GTag
The middle subdivision node of an arc.
- c : GTag
The subdivision node next to an arc's head.
- p : GTag
The pendant marking an arc's tail.
Instances For
Dependency graph
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
Dependency graph
Dependency graph
The defining formula #
The edges of the gadget, tag pair by tag pair. Every clause is stated in both directions, so the result is symmetric; no clause relates a tag to itself on the same point, so it is irreflexive.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.GraphGadget.edgeF t s x₀ x₁ y₀ y₁ = ⊥
Instances For
Dependency graph
The gadget: a directed graph becomes a simple graph with the same isomorphisms. Eight tags, dimension two.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The points #
A point of the construction: a tag and two coordinates. The vertex-side kinds are the diagonal ones.
Instances For
Dependency graph
The vertex node of a vertex.
Equations
Instances For
Dependency graph
The lollipop node attached to a vertex.
Equations
Instances For
Dependency graph
One corner of a lollipop triangle.
Equations
Instances For
Dependency graph
The other corner of a lollipop triangle.
Equations
Instances For
Dependency graph
The subdivision node next to an arc's tail.
Equations
Instances For
Dependency graph
The middle subdivision node of an arc.
Equations
Instances For
Dependency graph
The subdivision node next to an arc's head.
Equations
Instances For
Dependency graph
The pendant marking an arc's tail.
Equations
Instances For
Dependency graph
Every point is a named one: one eta lemma for all eight kinds.
Dependency graph
Dependency graph
Which pairs are edges #
Adjacency in the input digraph.
Equations
Instances For
Dependency graph
Adjacency in the constructed graph.
Equations
Instances For
Dependency graph
Every clause of DescriptiveComplexity.GraphGadget.edgeF, read on general
points. The coordinates of a neighbor are not known to be diagonal before the
clause is read, so these are the forms the case analysis needs; the diagonal
corollaries follow.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Which tag pairs can be joined at all #
The tag pairs the gadget joins: the lollipop's four edges in both directions, the arc path's four, and the pendant's one.
Equations
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.vtx DescriptiveComplexity.GraphGadget.GTag.m₁ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₁ DescriptiveComplexity.GraphGadget.GTag.vtx = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₁ DescriptiveComplexity.GraphGadget.GTag.m₂ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₂ DescriptiveComplexity.GraphGadget.GTag.m₁ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₁ DescriptiveComplexity.GraphGadget.GTag.m₃ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₃ DescriptiveComplexity.GraphGadget.GTag.m₁ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₂ DescriptiveComplexity.GraphGadget.GTag.m₃ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.m₃ DescriptiveComplexity.GraphGadget.GTag.m₂ = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.vtx DescriptiveComplexity.GraphGadget.GTag.a = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.a DescriptiveComplexity.GraphGadget.GTag.vtx = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.a DescriptiveComplexity.GraphGadget.GTag.b = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.b DescriptiveComplexity.GraphGadget.GTag.a = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.b DescriptiveComplexity.GraphGadget.GTag.c = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.c DescriptiveComplexity.GraphGadget.GTag.b = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.c DescriptiveComplexity.GraphGadget.GTag.vtx = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.vtx DescriptiveComplexity.GraphGadget.GTag.c = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.a DescriptiveComplexity.GraphGadget.GTag.p = True
- DescriptiveComplexity.GraphGadget.TagAdj DescriptiveComplexity.GraphGadget.GTag.p DescriptiveComplexity.GraphGadget.GTag.a = True
- DescriptiveComplexity.GraphGadget.TagAdj x✝¹ x✝ = False
Instances For
Dependency graph
An edge joins only the tag pairs the construction lists. The forty-six
other pairs need no argument: their defining formula is ⊥, so the hypothesis
is False.
Dependency graph
No clause relates a tag to itself, so the construction has no loops.
Dependency graph
The construction is a simple graph #
Symmetric: every clause of DescriptiveComplexity.GraphGadget.edgeF is
stated in both directions, so the constructed relation is undirected.
Dependency graph
Symmetric: every clause of DescriptiveComplexity.GraphGadget.edgeF is
stated in both directions, so the constructed relation is undirected.
Dependency graph
Irreflexive: no clause relates a tag to itself, so the constructed graph has no loops.
Dependency graph
The neighbors of each kind of node #
The neighbors of a vertex node: its lollipop, the tail-side subdivision of each arc out of it, and the head-side subdivision of each arc into it.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The structural predicates that recover the levels #
Lying on a triangle.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Being adjacent to a node that lies on a triangle.
Equations
Instances For
Dependency graph
Having exactly one neighbor.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Having a neighbor with exactly one neighbor.
Equations
Instances For
Dependency graph
The lollipop triangle is a triangle.
Dependency graph
A vertex node lies on no triangle: no two of its neighbors are joined.
Dependency graph
A tail-side subdivision node lies on no triangle.
Dependency graph
A middle subdivision node lies on no triangle.
Dependency graph
A head-side subdivision node lies on no triangle.
Dependency graph
A pendant lies on no triangle.
Dependency graph
Junk points are isolated #
A point whose coordinates do not fit its tag – a lollipop node off the diagonal, a subdivision node on a pair that is not an arc – is joined to nothing, so an isomorphism can only match it with another such point. This is what lets the recovery below case over all points rather than only the well-formed ones.
A vtx node off the diagonal is isolated.
Dependency graph
A m₁ node off the diagonal is isolated.
Dependency graph
A m₂ node off the diagonal is isolated.
Dependency graph
A m₃ node off the diagonal is isolated.
Dependency graph
An a node on a pair that is not an arc is isolated.
Dependency graph
An b node on a pair that is not an arc is isolated.
Dependency graph
An c node on a pair that is not an arc is isolated.
Dependency graph
An p node on a pair that is not an arc is isolated.
Dependency graph
Adjacency to a triangle: the vertices #
A vertex node is adjacent to its lollipop.
Dependency graph
No subdivision node is adjacent to a triangle.
Dependency graph
No subdivision node is adjacent to a triangle.
Dependency graph
No subdivision node is adjacent to a triangle.
Dependency graph
No subdivision node is adjacent to a triangle.
Dependency graph
The other two corners of a lollipop lie on its triangle too.
Dependency graph
The other two corners of a lollipop lie on its triangle too.
Dependency graph
The vertices are recoverable from adjacency alone: they are the nodes adjacent to a triangle without lying on one. Junk points fail the test by being isolated, lollipop nodes by lying on their triangle, and subdivision nodes and pendants by touching no triangle.
Dependency graph
Leaves: the pendant marks the tail #
The pendant of an arc is a leaf.
Dependency graph
A middle subdivision node is not a leaf: it has both an a and a c
neighbor, and those have different tags.
Dependency graph
A vertex node incident to an arc is not a leaf: it has its lollipop and the arc's subdivision node.
Dependency graph
A vertex node incident to an arc is not a leaf: it has its lollipop and the arc's subdivision node.
Dependency graph
Which nodes have a leaf neighbor: the tail side #
The tail-side subdivision node has the pendant as a neighbor.
Dependency graph
The head-side subdivision node has none: its neighbors are the middle node and the head, and the head is incident to this very arc.
Dependency graph
The arcs are recoverable #
An arc of the input is a guarded path of length four between the two
vertex nodes. Each guard rules out a concrete impostor: without ¬OnTri the
lollipop of an isolated vertex closes the chain, without ¬AdjTri it turns
back through the vertex node, without ¬Leaf it goes out to the pendant and
back, and without ¬HasLeafNbr it returns along the tail-side node – each of
which would claim an arc from a vertex to itself. The direction of the arc is
carried by HasLeafNbr: only the tail side has a pendant.
Dependency graph
An isomorphism of the constructions is one of the inputs #
An isomorphism preserves and reflects the constructed adjacency.
Dependency graph
Dependency graph
Lying on a triangle is preserved.
Dependency graph
Adjacency to a triangle is preserved.
Dependency graph
Being a leaf is preserved: the uniqueness clause transfers because every neighbor of the image is the image of a neighbor.
Dependency graph
Having a leaf neighbor is preserved.
Dependency graph
Dependency graph
The gadget reflects isomorphism: an isomorphism of the constructed
graphs restricts to the vertex nodes, and the arcs are read off it by
DescriptiveComplexity.GraphGadget.arc_iff. Together with functoriality – free
for an interpretation – this says the construction is faithful.