The matching polynomial of a disjoint union #
The matchings of a disjoint union G ⊕ H are the pairs of matchings of G and H, so the matching
numbers convolve and the matching polynomial is multiplicative. The file also defines the disjoint
union of an indexed family of graphs and proves the same multiplicativity for it, together with the
transport of vertex deletion along isomorphisms and disjoint unions.
Main definitions #
SimpleGraph.sigmaFamily G: the disjoint union of a family of graphs onΣ i, β i.
Main results #
SimpleGraph.matchingNumber_sum:m_k(G ⊕ H) = ∑_{i + j = k} m_i(G) m_j(H).SimpleGraph.matchingPartition_sum,SimpleGraph.matchingPoly_sum:Pandμare multiplicative onG ⊕ H.SimpleGraph.matchingPoly_sigmaFamily:μof an indexed disjoint union is the product.SimpleGraph.matchingPoly_true_recurrence: the vertex-deletion recurrence with the vertex removed from the vertex type.
Edges of a disjoint sum split. Every edge of G ⊕g H is either the inl-image
of an edge of G or the inr-image of an edge of H — there are no cross edges. The
combinatorial foundation of the matching convolution.
The matching convolution #
Combine a G-edge finset and an H-edge finset into an edge finset of G ⊕g H,
by tagging each side with inl / inr.
Equations
- SimpleGraph.combineEdges a b = Finset.image (Sym2.map Sum.inl) a ∪ Finset.image (Sym2.map Sum.inr) b
Instances For
The two tagged images are disjoint, so the combined edge finset has additive card.
Vertex-membership of tagged edges #
Equations
- G.instDecidableRelSumAdjSum_formalizations H x✝¹ x✝ = Classical.propDecidable ((G ⊕g H).Adj x✝¹ x✝)
The G-part of an edge set of the sum: the G-edges whose inl-tag lies in s.
Instances For
The H-part of an edge set of the sum.
Instances For
The matching convolution. A matching of the disjoint sum splits uniquely into a
matching of each part, so the matching numbers convolve:
m_k(G ⊕ H) = ∑_{j ≤ k} m_j(G) · m_{k-j}(H).
Multiplicativity of the monomer–dimer partition function on disjoint unions:
P(G ⊕ H) = P(G) · P(H). A clean Cauchy product — the convolution of matching numbers
is exactly the coefficient product. (The signless companion of Godsil L25.3.1.)
Multiplicativity of the matching polynomial on disjoint unions (Godsil L25.3.1):
μ[G ⊕ H] = μ[G] · μ[H]. Lifts the clean partition multiplicativity matchingPartition_sum
through the μ ↔ P bridge matchingPoly_reflect_card: at the common degree the reflection
of μ is P ∘ (−X²), and reflecting the product turns it into a reverse, which is
multiplicative over the domain ℝ[X] (reverse_mul_of_domain). The Godsil decomposition
T_a(G) − a = ⊔_{b∼a} T_b(G−a) then becomes μ[T_a(G) − a] = ∏_{b∼a} μ[T_b(G−a)].
Indexed disjoint union of graphs (the n-ary generalisation of SimpleGraph.sum) #
Toward the path-tree root decomposition T(G,u) − r ≅ ⊔_{b∼u} T(G−u, b): we need the
disjoint union of a family of graphs and the multiplicativity of μ over it. Mathlib has
only the binary SimpleGraph.sum, so we build the Σ-indexed union.
The disjoint union of an indexed family of graphs on Σ i, β i: two vertices are
adjacent iff they share a fibre i and are adjacent there. (Witness-style, avoiding ▸.)
Equations
Instances For
Vertices in different fibres are never adjacent in sigmaFamily.
Option-decomposition: sigmaFamily over Option α is a binary sum #
sigmaFamily over Option α splits as a binary sum: the none fibre summed with
the family over α. The Option-step of the induction proving μ multiplicative over
sigmaFamily.
Equations
- SimpleGraph.sigmaFamilyOptionIso G = { toEquiv := SimpleGraph.sigmaOptionEquiv, map_rel_iff' := ⋯ }
Instances For
Reindexing sigmaFamily along an equivalence of the index type.
Equations
- SimpleGraph.sigmaFamilyCongr e G = { toEquiv := e.sigmaCongrLeft, map_rel_iff' := ⋯ }
Instances For
The equiv ({w ≠ v} ⊕ Unit) ≃ V re-attaching the single vertex v to the rest. A top-level
def (not a let/.symm) with @[simp] lemmas keyed on the Sum *constructors, so that after obtain-splitting a sum vertex the applications reduce reliably (a .symm` coe does not).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Isolated-vertex bridge (route A). μ(G − v) = μ(G⟦≠v⟧) · X. Deleting v's incidences
leaves v isolated, so G.deleteIncidenceSet v ≅g (G.induce {w ≠ v}) ⊕ (⊥ on a point); μ of an
isolated point is X. Relates the fixed-n deletion (same vertex type, what matchingPoly_recurrence
uses) to the genuine induced subgraph (variable degree, what hl_geom_recurrence consumes).
The equiv ((({≠v,≠t}) ⊕ Unit) ⊕ Unit) ≃ V re-attaching the two distinct vertices v, t.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Two-vertex isolation (route A, double step). μ((G−v)−t) = μ(G⟦≠v,≠t⟧)·X² for t ≠ v.
True (variable-degree) matching recurrence (Godsil / Spielman L25.3.2).
μ(G) = X·μ(G⟦≠v⟧) − Σ_{u∼v} μ(G⟦≠v,≠u⟧), deletions being genuine induced subgraphs. Obtained
from the X²-padded fixed-n matchingPoly_recurrence by substituting the isolated-vertex bridges
(μ(G−v)=X·μ(G⟦≠v⟧), μ((G−v)−u)=X²·μ(G⟦≠v,≠u⟧)) and cancelling X² (ℝ[X] is a domain).
This is the recurrence the geometric Heilmann–Lieb induction (hl_geom_recurrence) consumes.
Induce-of-induce = induce-of-intersection (for μ). μ((G⟦≠a⟧)⟦≠b⟧) = μ(G⟦≠a,≠b⟧).
Lets the recurrence's second-deletion terms μ(G⟦≠a,≠b⟧) be read as one-step deletions of the
induced subgraph G⟦≠a⟧, so the induction hypothesis on G⟦≠a⟧ (fewer vertices) applies to them.
The vertex equiv is Equiv.subtypeSubtypeEquivSubtypeInter; adjacency is definitional
(induce_adj is rfl).
Vertex deletion through isomorphisms and disjoint unions #
For Godsil's identity () we apply the vertex-deletion recurrence to the path tree at its
root and must evaluate μ(T − r − c) for each child c. Transporting through rootDecompIso,
that is deleting one more vertex inside one component of (⊥ Unit) ⊕ ⊔_b T(G−u,b). These three
isos do the bookkeeping: deletion commutes with any iso, deleting a right-summand only touches
the right graph, and deleting a vertex of one sigmaFamily fibre only touches that fibre.
A graph isomorphism transports incidence deletion: deleting v from G is isomorphic to
deleting e v from H, with the same vertex map e.
Equations
- e.deleteIncidenceSet v = { toEquiv := e.toEquiv, map_rel_iff' := ⋯ }
Instances For
μ transports through an iso composed with one incidence deletion. A general lemma:
μ(G−v) = μ(H−(e v)). Proving it once for an abstract e keeps matchingPoly_iso's
matchingNumber_iso/whnf work over the deleted graph abstract; applying it to a concrete
complex iso (e.g. rootDecompIso) is then a pure instantiation, dodging the whnf blow-up that
matchingPoly_iso (e.deleteIncidenceSet v) triggers inline on a doubly-deleted Σ-graph.
Deleting a right-summand vertex Sum.inr y from G ⊕g H only touches H.
Equations
- G.sumDeleteIncidenceSetInr H y = { toEquiv := Equiv.refl (V ⊕ W), map_rel_iff' := ⋯ }
Instances For
Deleting a vertex ⟨b, y⟩ of one fibre b from sigmaFamily G only touches that fibre:
the result is sigmaFamily with G b replaced by (G b).deleteIncidenceSet y.
Equations
- SimpleGraph.sigmaFamilyDeleteIncidenceSet G b y = { toEquiv := Equiv.refl ((i : ι) × β i), map_rel_iff' := ⋯ }
Instances For
μ is multiplicative over the indexed disjoint union #
μ[sigmaFamily G] = ∏ μ[G i] over a finite index — the product the path-tree root
decomposition needs. Proved by induction on n = |ι| over Fin n (so all Fintypes are the
canonical Fin/Option/⊕ ones — avoiding the Fintype.ofEquiv diamond that makes the
direct Fintype.induction_empty_option route diverge in whnf), then transported to a general
index by one equivFin reindex. The successor step is matchingPoly_sum through
sigmaFamilyOptionIso after finSuccEquiv; the transport is matchingPoly_iso through
sigmaFamilyCongr + Equiv.prod_comp.