Fleischner's theorem
DefinitionCollapsing the complement of a set#✓fully proved
For a set \(D \subseteq V\), the collapse map sends \(V\) to \(D\) together with one new vertex, the contraction vertex: each \(v \in D\) is sent to itself, and each \(v \notin D\) is sent to the contraction vertex.
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
Used by 9
TheoremThe collapse map fixes the retained set#✓fully proved
For a set \(D \subseteq V\), the collapse map from \(V\) to \(D\) together with the contraction vertex sends each \(v \in D\) to \(v\) itself.
@[simp]
public theorem collapseOutside_of_mem {V : Type*} (D : Set V) {v : V} (hv : v ∈ D) :
collapseOutside D v = some ⟨v, hv⟩
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
MathlibExt/Combinatorics/SimpleGraph/Contraction.lean:57
Uses 1 · Used by 6
TheoremThe collapse map sends the complement to the contraction vertex#✓fully proved
For a set \(D \subseteq V\), the collapse map from \(V\) to \(D\) together with the contraction vertex sends each vertex \(v \notin D\) to the contraction vertex.
@[simp]
public theorem collapseOutside_of_notMem {V : Type*} (D : Set V) {v : V} (hv : v ∉ D) :
collapseOutside D v = none
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
MathlibExt/Combinatorics/SimpleGraph/Contraction.lean:57
Uses 1 · Used by 5
TheoremPreimages of retained vertices under the collapse map#✓fully proved
For a set \(D \subseteq V\), a vertex \(v \in V\) and an element \(a \in D\), the collapse map from \(V\) to \(D\) together with the contraction vertex sends \(v\) to \(a\) if and only if \(v = a\).
@[simp]
public theorem collapseOutside_eq_some_iff {V : Type*} (D : Set V) (v : V) (a : D) :
collapseOutside D v = some a ↔ v = a
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
MathlibExt/Combinatorics/SimpleGraph/Contraction.lean:57
Uses 3 · Used by 3
TheoremPreimage of the contraction vertex under the collapse map#✓fully proved
For a set \(D \subseteq V\) and a vertex \(v \in V\), the collapse map from \(V\) to \(D\) together with the contraction vertex sends \(v\) to the contraction vertex if and only if \(v \notin D\).
@[simp]
public theorem collapseOutside_eq_none_iff {V : Type*} (D : Set V) (v : V) :
collapseOutside D v = none ↔ v ∉ D
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
MathlibExt/Combinatorics/SimpleGraph/Contraction.lean:57
Uses 3 · Used by 1
TheoremThe collapse map is surjective#✓fully proved
For a set \(D \subseteq V\) whose complement \(V \setminus D\) is nonempty, the collapse map from \(V\) to \(D\) together with the contraction vertex is surjective.
public theorem collapseOutside_surjective {V : Type*} {D : Set V} (hD : Dᶜ.Nonempty) :
Function.Surjective (collapseOutside D)
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
MathlibExt/Combinatorics/SimpleGraph/Contraction.lean:57
Uses 3 · Used by 1
DefinitionContracting the complement of a vertex set#✓fully proved
Let \(G\) be a simple graph on a vertex set \(V\) and let \(D \subseteq V\). Contracting the complement of \(D\) to a single vertex gives the simple graph whose vertices are the elements of \(D\) together with one new vertex \(\ast\), in which two vertices \(a, b \in D\) are adjacent exactly when they are adjacent in \(G\), and a vertex \(a \in D\) is adjacent to \(\ast\) exactly when \(a\) has a neighbour in \(G\) outside \(D\). The new vertex \(\ast\) is present even when \(D = V\), and is then isolated.
public noncomputable def contractOutside {V : Type*} (G : SimpleGraph V) (D : Set V) :
SimpleGraph (Option D) :=
G.map (collapseOutside D)
public noncomputable def collapseOutside {V : Type*} (D : Set V) : V → Option D := by
classical
exact fun v ↦ if hv : v ∈ D then some ⟨v, hv⟩ else none
MathlibExt/Combinatorics/SimpleGraph/Contraction.lean:57
TheoremContraction preserves adjacency among retained vertices#✓fully proved
Let \(G\) be a graph on \(V\), let \(D \subseteq V\), and contract \(V \setminus D\) to a single vertex. Two vertices \(a, b \in D\) are adjacent in the contracted graph if and only if they are adjacent in \(G\).
@[simp]
public theorem contractOutside_adj_some {V : Type*} (G : SimpleGraph V) (D : Set V)
(a b : D) :
(G.contractOutside D).Adj (some a) (some b) ↔ G.Adj a b
Uses 4 · Used by 2
TheoremNeighbors of the contraction vertex#✓fully proved
Let \(G\) be a graph on \(V\), let \(D \subseteq V\), and contract \(V \setminus D\) to a single vertex. A vertex \(a \in D\) is adjacent to the contraction vertex in the contracted graph if and only if \(a\) is adjacent in \(G\) to some vertex \(v \notin D\).
@[simp]
public theorem contractOutside_adj_none {V : Type*} (G : SimpleGraph V) (D : Set V)
(a : D) :
(G.contractOutside D).Adj (some a) none ↔ ∃ v ∉ D, G.Adj a v
Uses 6 · Used by 1
TheoremContracting the complement preserves 2-connectivity#✓fully proved
Let \(G\) be a 2-vertex-connected graph on a finite vertex set \(V\), and let \(D \subseteq V\) be a set with at least two elements that induces a connected subgraph of \(G\) and whose complement \(V \setminus D\) is nonempty. Then the graph obtained from \(G\) by contracting \(V \setminus D\) to a single vertex is 2-vertex-connected.
public theorem IsVertexConnected.contractOutside {V : Type*} [Fintype V]
{G : SimpleGraph V} {D : Set V} [Fintype D] (hG : G.IsVertexConnected 2)
(hDcard : 1 < Fintype.card D) (hDconn : (G.induce D).Connected)
(hDout : Dᶜ.Nonempty) : (G.contractOutside D).IsVertexConnected 2
Uses 11 · Used by 1
TheoremCardinality bound for contracting the complement#✓fully proved
Let \(V\) be a finite set and \(D \subseteq V\). If the complement \(V \setminus D\) has at least two elements, then \(D\) together with one new vertex has fewer elements than \(V\), that is, \(|D| + 1 < |V|\).
This counts the vertices of the graph obtained by contracting \(V \setminus D\) to a single vertex.
public theorem card_contractOutside_lt {V : Type*} [Fintype V] (D : Set V)
[Fintype D] [Fintype ↥(Dᶜ : Set V)] (hD : 2 ≤ Fintype.card ↥(Dᶜ : Set V)) :
Fintype.card (Option D) < Fintype.card V
Used by 1
DefinitionStrong square cycle at a vertex#✓fully proved
Let \(G\) be a graph on a finite vertex set \(V\) and let \(x \in V\). Then \(G\) has a strong square cycle at \(x\) if the square \(G^2\) of \(G\) has a Hamiltonian cycle that starts and ends at \(x\) and whose two edges at \(x\), its first and its last edge, are edges of \(G\).
public def HasStrongSquareCycle {V : Type*} [Fintype V] [DecidableEq V]
(G : SimpleGraph V) (x : V) : Prop :=
∃ p : G.square.Walk x x, p.IsHamiltonianCycle ∧
G.Adj x p.snd ∧ G.Adj p.penultimate x
Uses 1 · Used by 3
TheoremCharacterization of strong square cycles#✓fully proved
Let \(G\) be a graph on a finite vertex set \(V\) and let \(x \in V\). Then \(G\) has a strong square cycle at \(x\) if and only if the square \(G^2\) of \(G\) has a Hamiltonian cycle \(p\) that starts and ends at \(x\) such that \(x\) is adjacent in \(G\) to the second vertex of \(p\) and the second-to-last vertex of \(p\) is adjacent in \(G\) to \(x\).
public theorem hasStrongSquareCycle_iff {V : Type*} [Fintype V] [DecidableEq V]
(G : SimpleGraph V) (x : V) :
G.HasStrongSquareCycle x ↔
∃ p : G.square.Walk x x, p.IsHamiltonianCycle ∧
G.Adj x p.snd ∧ G.Adj p.penultimate x
Uses 2
TheoremStrengthened Fleischner theorem#✓fully proved
Let \(G\) be a finite simple graph that is 2-vertex-connected, that is, \(G\) has at least three vertices and stays connected after deleting at most one vertex. Let \(G^2\) be the square of \(G\): the graph on the same vertices in which two distinct vertices are adjacent if and only if they are adjacent in \(G\) or have a common neighbour in \(G\). Then for every vertex \(x\) of \(G\), the graph \(G^2\) has a Hamiltonian cycle whose two edges at \(x\) are edges of \(G\).
public theorem IsVertexConnected.hasStrongSquareCycle
{V : Type u} [Fintype V] [DecidableEq V] {G : SimpleGraph V}
(hG : G.IsVertexConnected 2) (x : V) : G.HasStrongSquareCycle x
Uses 32 · Used by 1
TheoremFleischner's theorem#✓fully proved
Let \(G\) be a finite simple graph that is 2-vertex-connected, that is, \(G\) has at least three vertices and stays connected after deleting at most one vertex. Let \(H\) be the square of \(G\): the graph on the same vertices in which two distinct vertices are adjacent if and only if they are adjacent in \(G\) or have a common neighbour in \(G\). Then \(H\) is Hamiltonian: it has a cycle that passes through every vertex exactly once.
theorem fleischner : ∀ {V : Type*} [Fintype V] (G H : SimpleGraph V),
G.IsVertexConnected 2 →
(∀ u v : V, H.Adj u v ↔ (u ≠ v ∧ (G.Adj u v ∨ ∃ w, G.Adj u w ∧ G.Adj w v))) →
@SimpleGraph.IsHamiltonian V (fun a b => Classical.propDecidable _) _ H
Sources
- Herbert Fleischner, "The Square of Every Two-Connected Graph Is Hamiltonian," Journal of Combinatorial Theory, Series B 16 (1974), 29–34, DOI 10.1016/0095-8956(74)90091-4, https://doi.org/10.1016/0095-8956(74)90091-4. Proof: the strengthened vertex-rooted induction of A. Georgakopoulos, "A short proof of Fleischner's theorem", Discrete Math. 309 (2009), 6632–6634.
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.