Skip to content

Commit 2759029

Browse files
mac m4 minimac m4 mini
authored andcommitted
feat: implement vertex preconnectivity and isolateVerts
1 parent 7630490 commit 2759029

2 files changed

Lines changed: 57 additions & 19 deletions

File tree

Mathlib/Combinatorics/SimpleGraph/Connectivity/VertexConnectivity.lean

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ This file defines k-vertex connectivity for simple graphs.
1616
1717
* `SimpleGraph.IsVertexReachable`: Two vertices are `k`-vertex-reachable if they remain reachable
1818
after removing strictly fewer than `k` other vertices.
19-
* `SimpleGraph.IsVertexConnected`: A graph is `k`-vertex-connected if any two vertices
19+
* `SimpleGraph.IsVertexPreconnected`: A graph is `k`-vertex-preconnected if any two vertices
2020
are `k`-vertex-reachable.
21+
* `SimpleGraph.IsVertexConnected`: A graph is `k`-vertex-connected if its order is at least
22+
`k + 1` and any two vertices are `k`-vertex-reachable.
2123
-/
2224

2325
@[expose] public section
@@ -77,40 +79,71 @@ lemma isVertexReachable_one_iff : G.IsVertexReachable 1 u v ↔ G.Reachable u v
7779
rwa [Set.encard_eq_zero.mp <| ENat.lt_one_iff_eq_zero.mp hs, isolateVerts_empty]
7880

7981
variable (G k) in
80-
/-- A graph is `k`-vertex-connected if any two vertices are `k`-vertex-reachable.
81-
Note that we do not require the graph to have more than `k` vertices, you can use
82-
`k + 1 ≤ ENat.card V ∧ G.IsVertexConnected k` if you need this additional condition. -/
83-
def IsVertexConnected : Prop :=
82+
/-- A graph is `k`-vertex-preconnected if any two vertices are `k`-vertex-reachable. -/
83+
def IsVertexPreconnected : Prop :=
8484
∀ u v : V, G.IsVertexReachable k u v
8585

8686
@[simp]
87-
lemma IsVertexConnected.zero : G.IsVertexConnected 0 :=
87+
lemma IsVertexPreconnected.zero : G.IsVertexPreconnected 0 :=
8888
fun _ _ ↦ .zero
8989

90-
/-- 1-vertex-connectivity is equivalent to preconnectedness. -/
90+
/-- 1-vertex-preconnectivity is equivalent to preconnectedness. -/
9191
@[simp]
92-
lemma isVertexConnected_one : G.IsVertexConnected 1 ↔ G.Preconnected := by
93-
simp [IsVertexConnected, isVertexReachable_one_iff, Preconnected]
92+
lemma isVertexPreconnected_one : G.IsVertexPreconnected 1 ↔ G.Preconnected := by
93+
simp [IsVertexPreconnected, isVertexReachable_one_iff, Preconnected]
9494

95-
/-- A preconnected graph is 1-vertex-connected. -/
96-
lemma Preconnected.isVertexConnected_one (h : G.Preconnected) : G.IsVertexConnected 1 :=
97-
SimpleGraph.isVertexConnected_one.mpr h
95+
/-- A preconnected graph is 1-vertex-preconnected. -/
96+
lemma Preconnected.isVertexPreconnected_one (h : G.Preconnected) : G.IsVertexPreconnected 1 :=
97+
SimpleGraph.isVertexPreconnected_one.mpr h
9898

99-
/-- Vertex connectivity is antitonic in `k`. -/
99+
/-- Vertex preconnectivity is antitonic in `k`. -/
100100
@[gcongr]
101-
lemma IsVertexConnected.anti (hkl : l ≤ k) (hc : G.IsVertexConnected k) : G.IsVertexConnected l :=
101+
lemma IsVertexPreconnected.anti (hkl : l ≤ k) (hc : G.IsVertexPreconnected k) :
102+
G.IsVertexPreconnected l :=
102103
fun u v ↦ (hc u v).anti hkl
103104

104-
/-- Vertex connectivity is monotonic in the graph. -/
105+
/-- Vertex preconnectivity is monotonic in the graph. -/
105106
@[gcongr]
106-
lemma IsVertexConnected.mono (hGH : G ≤ H) (hc : G.IsVertexConnected k) : H.IsVertexConnected k :=
107+
lemma IsVertexPreconnected.mono (hGH : G ≤ H) (hc : G.IsVertexPreconnected k) :
108+
H.IsVertexPreconnected k :=
107109
fun u v ↦ (hc u v).mono hGH
108110

109-
/-- The complete graph on `n` vertices is `(n-1)`-vertex-connected. -/
110-
lemma isVertexConnected_top [Fintype V] :
111-
(⊤ : SimpleGraph V).IsVertexConnected (Fintype.card V - 1) := by
111+
/-- The complete graph on `n` vertices is `(n-1)`-vertex-preconnected. -/
112+
lemma isVertexPreconnected_top [Fintype V] :
113+
(⊤ : SimpleGraph V).IsVertexPreconnected (Fintype.card V - 1) := by
112114
intro u v
113115
by_cases h : u = v
114116
exacts [h ▸ .refl _, .of_adj _ h]
115117

118+
variable (G k) in
119+
/-- A graph is `k`-vertex-connected if its order is at least `k + 1` and any two vertices
120+
are `k`-vertex-reachable. -/
121+
def IsVertexConnected : Prop :=
122+
k + 1 ≤ ENat.card V ∧ G.IsVertexPreconnected k
123+
124+
/-- A 0-vertex-connected graph is just a nonempty graph. -/
125+
@[simp]
126+
lemma isVertexConnected_zero : G.IsVertexConnected 0 ↔ Nonempty V := by
127+
simp [IsVertexConnected, ENat.one_le_card_iff_nonempty]
128+
129+
/-- 1-vertex-connectivity is equivalent to preconnectedness and having at least two vertices. -/
130+
@[simp]
131+
lemma isVertexConnected_one : G.IsVertexConnected 12 ≤ ENat.card V ∧ G.Preconnected := by
132+
rw [IsVertexConnected, isVertexPreconnected_one, show (1 : ℕ∞) + 1 = 2 from rfl]
133+
134+
/-- Vertex connectivity is antitonic in `k`. -/
135+
@[gcongr]
136+
lemma IsVertexConnected.anti (hkl : l ≤ k) (hc : G.IsVertexConnected k) :
137+
G.IsVertexConnected l := by
138+
constructor
139+
· rw [add_comm]
140+
exact (add_le_add_right hkl 1).trans (by rw [add_comm]; exact hc.1)
141+
· exact hc.2.anti hkl
142+
143+
/-- Vertex connectivity is monotonic in the graph. -/
144+
@[gcongr]
145+
lemma IsVertexConnected.mono (hGH : G ≤ H) (hc : G.IsVertexConnected k) :
146+
H.IsVertexConnected k :=
147+
⟨hc.1, hc.2.mono hGH⟩
148+
116149
end SimpleGraph

Mathlib/Combinatorics/SimpleGraph/IsolateVerts.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Youheng Luo
55
-/
66
module
77
public import Mathlib.Combinatorics.SimpleGraph.Basic
8+
public import Mathlib.Combinatorics.SimpleGraph.DeleteEdges
89

910
/-!
1011
# Isolate Vertices
@@ -33,4 +34,8 @@ lemma isolateVerts_bot : (⊥ : SimpleGraph V).isolateVerts s = ⊥ := by
3334
lemma isolateVerts_le : G.isolateVerts s ≤ G :=
3435
fun _ _ h ↦ h.2.2
3536

37+
@[simp]
38+
lemma isolateVerts_singleton (v : V) : G.isolateVerts {v} = G.deleteIncidenceSet v := by
39+
ext; simp [isolateVerts, deleteIncidenceSet_adj]; tauto
40+
3641
end SimpleGraph

0 commit comments

Comments
 (0)