A Hamilton circuit presented as a cyclic list #
The forward direction of the Vertex Cover → Hamilton Circuit reduction builds
its circuit as an explicit sequence of vertices – selectors interleaved with the
chains of the cover vertices – so it is convenient to introduce a tour from a
list: a duplicate-free list containing every vertex, along which
consecutive elements are adjacent and whose last element is adjacent to its
first, is a tour (DescriptiveComplexity.tourOn_of_cycleList).
A cyclic list is a tour. A duplicate-free list containing every element,
along which consecutive elements are R-related and whose last element is
R-related to its first, presents a tour of R.
Dependency graph
A cycle of blocks is a tour. A list of nonempty blocks whose flattening
is duplicate-free and covers everything, where each block is a chain,
consecutive blocks connect (last of one to head of the next), and the whole
wraps (last of the flattening to its head), presents a tour. This packages the
isChain_flatten step for the forward construction, whose blocks are a selector
followed by a cover vertex's chain.
Dependency graph
The traversal of a single gadget (the snake) #
The gadget vertex of index i over the ordered edge (a, b) (owner a).
Equations
- DescriptiveComplexity.gv i hi h = DescriptiveComplexity.gPt i hi h
Instances For
Dependency graph
Adjacency between two gadget vertices reduces to the intended adjacency of their (tag, tuple) pairs.
Dependency graph
Gadget vertex 0 (a side's entrance).
Equations
Instances For
Dependency graph
Gadget vertex 1.
Equations
Instances For
Dependency graph
Gadget vertex 2.
Equations
Instances For
Dependency graph
Gadget vertex 3.
Equations
Instances For
Dependency graph
Gadget vertex 4.
Equations
Instances For
Dependency graph
Gadget vertex 5 (a side's exit).
Equations
Instances For
Dependency graph
The traversal of gadget {a, b} when b is also in the cover: only the
a-side is walked, a straight horizontal path 0-1-2-3-4-5.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The traversal of gadget {a, b} when b is not in the cover: the
a-through path visiting all twelve vertices, dipping into the b-side.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Distinctness of gadget vertices #
Dependency graph
Dependency graph
Which vertices a snake contains (for covering) #
Every a-side gadget vertex is in the both-sides snake.
Dependency graph
Every a-side gadget vertex is in the through snake.
Dependency graph
Every b-side gadget vertex – a gadget vertex owned by the far endpoint – is
in the through snake. This is why an uncovered endpoint's vertices are visited by
the covered endpoint's chain.
Dependency graph
The sorted neighbour list of a vertex #
The neighbours of a in the input, listed in increasing order.
Equations
- DescriptiveComplexity.nbrList a = {b : A | DescriptiveComplexity.HEdge a b}.sort fun (x1 x2 : A) => x1 ≤ x2
Instances For
Dependency graph
Dependency graph
The neighbour list is strictly increasing.
Dependency graph
Dependency graph
The gadget chain edge: the exit ⟨g5,(a,b)⟩ of one gadget is adjacent to
the entrance ⟨g0,(a,c)⟩ of the next, given the neighbour-successor conditions
(DescriptiveComplexity.IAdjRaw, the .g5,.g0 case). This is what glues consecutive
snakes into a vertex's chain.
Dependency graph
The neighbour list is a connection-chain: consecutive neighbours b, c
of a satisfy the gadget chain edge, so the per-neighbour snakes concatenate
into a's chain.
Dependency graph
A cover vertex's chain #
The snake of gadget {a, b} in a chain of a: the a-side-only path if b
is in the cover C, the through-path otherwise (empty if a, b is not an edge,
which never happens on the neighbour list).
Equations
- DescriptiveComplexity.snakeOf C a b = if h : DescriptiveComplexity.HEdge a b then if C b then DescriptiveComplexity.snakeBoth h else DescriptiveComplexity.snakeThrough h else []
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The chain of the cover vertex a: its gadgets' snakes, concatenated in
neighbour order.
Equations
Instances For
Dependency graph
A chain is a DGEdge-chain: the snakes are chains and consecutive ones
connect via DescriptiveComplexity.chain_edge.
Dependency graph
Minima and maxima of the neighbour list #
The head of the neighbour list is the least neighbour.
Dependency graph
The last of the neighbour list is the greatest neighbour.
Dependency graph
Selector edges #
A selector is adjacent to a chain entrance ⟨g0,(a,b)⟩ when b is the least
neighbour of a.
Dependency graph
A selector is adjacent to a chain exit ⟨g5,(a,b)⟩ when b is the greatest
neighbour of a.
Dependency graph
Selectors are mutually adjacent (a self-looped clique).
Dependency graph
Which vertices a chain contains (for covering) #
Every a-side gadget vertex is in a's snake for b, whichever snake it is.
Dependency graph
A gadget vertex is in its owner's chain: ⟨i,(a,b)⟩ is visited by a's
chain (for any cover C).
Dependency graph
A gadget vertex is in the far endpoint's chain when its owner is uncovered:
if a ∉ C, the vertex ⟨i,(a,b)⟩ is visited by b's through-traversal.
Dependency graph
The endpoints of a chain #
A chain's first vertex is the entrance ⟨g0,(a,b)⟩ of the least-neighbour
gadget – which a selector is adjacent to.
Dependency graph
A chain's last vertex is the exit ⟨g5,(a,b)⟩ of the greatest-neighbour
gadget – which a selector is adjacent to.
Dependency graph
Chains of distinct cover vertices are disjoint #
Dependency graph
Dependency graph
The owner invariant of a chain: a vertex of w's chain is either owned
by w (w-side) or owned by an uncovered neighbour of w (the far side of a
through-traversal).
Dependency graph
Chains of distinct cover vertices are disjoint. Their only possible overlap is a far-side vertex, which requires an uncovered owner – but both cover vertices are covered.
Dependency graph
Dependency graph
Snakes of distinct neighbours of w are disjoint.
Dependency graph
A single chain is duplicate-free: its snakes are internally nodup and pairwise disjoint (distinct neighbours ⇒ distinct gadgets).
Dependency graph
Chain vertices are gadget vertices, never selectors.
Dependency graph
A selector is never a chain vertex.
Dependency graph
The blocks of the cycle #
A chain over a nonempty neighbour list is nonempty.
Dependency graph
A block of the cycle: a selector, optionally followed by a cover vertex's
chain. The cp is that chain when the selector is paired with a cover vertex,
and [] for a leftover selector.
Equations
- DescriptiveComplexity.block hm cp = DescriptiveComplexity.selPt hm :: cp
Instances For
Dependency graph
Dependency graph
Dependency graph
Every paired block is a DGEdge-chain: the selector connects to the chain's
entrance and the chain is a chain.
Dependency graph
Dependency graph
The last vertex of a paired block (a chain exit) is adjacent to any selector.
Dependency graph
The last vertex of an extra block (its selector) is adjacent to any selector.
Dependency graph
The marked and cover lists #
The marked vertices of the input: the selectors.
Equations
Instances For
Dependency graph
The non-isolated cover vertices: those whose chain is nonempty.
Equations
- DescriptiveComplexity.coverList C = {w : A | C w ∧ DescriptiveComplexity.nbrList w ≠ []}.toList
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
There are at most as many cover vertices as selectors, from the vertex-cover threshold.
Dependency graph
The cycle and its correctness #
The blocks of the cycle: the first |coverList| selectors each followed by
their paired cover vertex's chain, then the leftover selectors alone.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Every block of the list is a selector followed by a chain, or a lone selector – both nonempty and starting with a selector.
Dependency graph
No block is empty.
Dependency graph
Every block is a DGEdge-chain.
Dependency graph
Consecutive blocks connect – in fact every pair does, since every block starts with a selector and every block's last vertex is adjacent to every selector.
Dependency graph
Two blocks with distinct selectors and appropriately disjoint chain parts are disjoint.
Dependency graph
Every element of the first list is paired by zip when it is no longer than
the second.
Dependency graph
Every element of the second list is paired by zip when it is no longer than
the first.
Dependency graph
Zipping two duplicate-free lists gives a list whose pairs differ in both components.
Dependency graph
Every cover vertex's chain is in the cycle: a cover vertex is paired with a selector, so its chain sits in a paired block.
Dependency graph
Every selector is in the cycle: it heads either a paired block (if among
the first |coverList| selectors) or a leftover block.
Dependency graph
Covering: every vertex of the interpreted graph is in the cycle. A selector heads a block; a gadget vertex sits in a covered endpoint's chain (its owner's if covered, the neighbour's otherwise); the hub cannot occur, since there is a selector.
Dependency graph
The cycle is nonempty when there is a selector.
Dependency graph
Each block is duplicate-free.
Dependency graph
The blocks are pairwise disjoint: distinct selectors, and distinct cover vertices give disjoint chains.
Dependency graph
The cycle is duplicate-free.
Dependency graph
The wrap edge: the last vertex of the cycle is adjacent to the first (a selector), since every block's last vertex is adjacent to every selector.
Dependency graph
The non-degenerate forward direction: given a cover with at most as many vertices as the marked set, at least one marked vertex, and covering every edge, the gadget graph has a Hamilton circuit – the cycle of selectors and chains.
Dependency graph
The degenerate forward direction: with no marked vertices and no edges, the interpreted graph is the single self-looped hub, a one-element Hamilton circuit.