Twins and Twin Transpositions #
Step (i) of the twin-flexible rung of the symmetry-breaking programme
(research/attacks/symmetry-breaking.md): two vertices are twins if
they have the same neighbours apart from each other, and the transposition
of a twin pair is a graph automorphism (twinSwapIso).
In the marking picture: if a mixed card-degree class consists of pairwise
twins, the choice of which class members are the deleted vertex's
neighbours can be re-pointed freely by composing twin transpositions —
the ambiguity that mixed classes leave (after SameDeck.nbrCount_eq fixes
their sizes) is absorbed by card automorphisms. The class-by-class
assembly is the next layer; this module provides the verified swap.
Two vertices are twins if every other vertex sees them identically. No condition is placed on the edge between them, so this covers both twin flavours at once.
Instances For
A twin transposition is an automorphism. Swapping a twin pair
preserves adjacency: pairs disjoint from {u, u'} are untouched, the pair
(u, u') maps to (u', u) (symmetry), and a mixed pair (u, z) maps to
(u', z) (twin property).
Equations
- SimpleGraph.twinSwapIso h = { toEquiv := Equiv.swap u u', map_rel_iff' := ⋯ }
Instances For
Twin-supported involutions are automorphisms #
An involution that only moves vertices to their twins preserves
adjacency. The generalization of twinSwapIso from one transposition to
any twin-supported involution; involutivity closes the corner where the
two moved pairs collide (y = f x forces f y = x).
Package a twin-supported involution as a graph automorphism.
Equations
- SimpleGraph.twinInvolutionIso hinv hmove = { toEquiv := Function.Involutive.toPerm f hinv, map_rel_iff' := ⋯ }