Vertex Cover from a Hamilton circuit #
The reverse direction of the reduction reads a vertex cover off a Hamilton
circuit of the gadget graph. Its foundation is a precise characterization of the
neighbors of each gadget vertex (DescriptiveComplexity.dgEdge_iff /
DescriptiveComplexity.IAdjRaw).
Structure #
- Neighbor sets. For each gadget vertex, the exact set of its
DescriptiveComplexity.DGEdge-neighbors (by cases on the other vertex's tag, viadgEdge_iff). The internal vertices⟨g1,(a,b)⟩and⟨g4,(a,b)⟩have exactly two neighbors,⟨g0/g2⟩and⟨g3/g5⟩respectively. - Forced edges. In a Hamilton circuit each vertex has exactly two
tour-neighbors, both adjacent to it. So a degree-two vertex uses both its
edges, forcing the paths
g0-g1-g2andg3-g4-g5in every gadget (DescriptiveComplexity.forced_g1,DescriptiveComplexity.forced_g4). - The three traversals. Propagating through
g2,g3(degree three) shows each gadget is traversed through theu-side, thev-side, or both – never neither (which would isolate it as two 6-cycles): every edge has a straight side (DescriptiveComplexity.side_straight). - Chain propagation. A straight side
(b,a)frees the entrance and exit slots of the opposite side(a,b)from the cross edges (DescriptiveComplexity.g0_other/g5_other); the freed slot is a selector at the ends ofa's chain, or a chain-link that straightens the walked side in turn (DescriptiveComplexity.straight_of_chain_down/up). Well-founded induction alonga's neighbor list puts a selector at both chain ends:ais active (DescriptiveComplexity.active_of_straight). - The cover.
C := {a | Active f a}covers every edge (DescriptiveComplexity.cover_property), and|C| ≤ |marked|by the selector-slot injection (DescriptiveComplexity.active_ncard_le).
DescriptiveComplexity.eq_gPt_of_val below reconstructs a vertex from its tag and
coordinates (sidestepping a simp/subtype mismatch), the workhorse of step 1.
Reconstruction: an interpreted vertex with a gadget tag t and
coordinates (a, b) is the gadget vertex gPt t _ h. This is the workhorse of
the neighbor characterizations of step 1 (it sidesteps the subtype/MapRel
definitional mismatch that blocks simp on raw destructured vertices).
Dependency graph
The tour successor of a cyclic enumeration f, as a permutation of the
universe: the vertex one step further along the tour.
Equations
- DescriptiveComplexity.tourSucc f = f.symm.trans (Equiv.trans (finRotate N) f)
Instances For
Dependency graph
Dependency graph
Two vertices are tour-adjacent when one is the tour successor of the other. This is symmetric, and every vertex has exactly two tour-neighbors.
Equations
- DescriptiveComplexity.TAdj f x y = ((DescriptiveComplexity.tourSucc f) x = y ∨ (DescriptiveComplexity.tourSucc f) y = x)
Instances For
Dependency graph
From the tour to the forced gadget paths #
Forced u-path. The degree-two internal vertex ⟨g1,(a,b)⟩ uses both of
its edges: ⟨g0⟩ and ⟨g2⟩ are its two tour-neighbors.
Dependency graph
Forced v-path. Symmetrically, ⟨g4,(a,b)⟩ uses both ⟨g3⟩ and ⟨g5⟩.
Dependency graph
At least one side is straight. Combining the g2 case split
(prop_g2) on both sides with not_both_crossed: for every edge, the tour runs
straight through the a-side gadget (g2-g3) or through the b-side gadget.
Dependency graph
Straightness propagates along the owner's chain #
Whether a vertex is a selector.
Equations
Instances For
Dependency graph
Dependency graph
The entrance slot of a straight-opposite side. When the b-side of the
edge {a, b} is straight, both tour-slots of ⟨g2,(b,a)⟩ are known, so the
cross edge into ⟨g0,(a,b)⟩ is unused: the tour-neighbor of ⟨g0,(a,b)⟩ other
than the forced ⟨g1,(a,b)⟩ is a selector (and b is a's least neighbor) or
the chain-link from the predecessor side.
Dependency graph
The exit slot of a straight-opposite side, symmetrically: the
tour-neighbor of ⟨g5,(a,b)⟩ other than the forced ⟨g4,(a,b)⟩ is a selector
(and b is a's greatest neighbor) or the chain-link to the successor side.
Dependency graph
A used chain-link straightens the earlier side. If the tour uses the
chain edge ⟨g0,(a,b)⟩–⟨g5,(a,c)⟩, both tour-slots of ⟨g5,(a,c)⟩ are known, so
its cross edge is unused and (by prop_g3) the side (c,a) is straight.
Dependency graph
Counting: the active chains inject into the selectors #
The neighbors of a as a finset.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
The least neighbor of a (the second coordinate of its chain entrance).
Equations
Instances For
Dependency graph
The greatest neighbor of a (the second coordinate of its chain exit).
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
The chain entrance of a: ⟨g0,(a, minNbr a)⟩.
Equations
Instances For
Dependency graph
The chain exit of a: ⟨g5,(a, maxNbr a)⟩.
Equations
Instances For
Dependency graph
Which tour-slot direction of the selector s points back at the vertex.
Equations
Instances For
Dependency graph
a is active in tour f: both its chain entrance and its chain exit are
tour-adjacent to a selector (so its whole chain is a selector-to-selector arc).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The active vertices inject into the marked ones: |C| ≤ |marked|. The map
(a, entrance/exit) ↦ (selector, slot-direction) is injective – the selector and
slot pin down the entrance/exit vertex (recover_selOf), whose owner and role
(g0 vs g5) pin down a. Two chain-endpoints per active chain, two slots per
selector, so 2|C| ≤ 2|marked|.
Dependency graph
A straight side makes the opposite owner active: if the side (u,v) of
the edge {u,v} is traversed straight through g2–g3, then v's chain runs
selector to selector, so v is active.
Dependency graph
Cover property: every edge has an active endpoint. The gadget of
{a,b} is traversed straight on the a-side or the b-side (side_straight),
and a straight side activates the opposite owner (active_of_straight).