Skip to content

Commit 33e1dfa

Browse files
refactor(Combinatorics/SimpleGraph): use IsVertexPreconnected and Nontrivial typeclass
1 parent 2759029 commit 33e1dfa

1 file changed

Lines changed: 24 additions & 17 deletions

File tree

Mathlib/Combinatorics/SimpleGraph/Connectivity/VertexConnectivity.lean

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,22 @@ Authors: Youheng Luo
55
-/
66
module
77
public import Mathlib.Combinatorics.SimpleGraph.Connectivity.Connected
8-
public import Mathlib.Data.Set.Card
98
public import Mathlib.Combinatorics.SimpleGraph.IsolateVerts
9+
public import Mathlib.Data.Set.Card
10+
1011
/-!
1112
# Vertex Connectivity
1213
13-
This file defines k-vertex connectivity for simple graphs.
14+
This file defines `k`-vertex connectivity for simple graphs.
1415
1516
## Main definitions
1617
1718
* `SimpleGraph.IsVertexReachable`: Two vertices are `k`-vertex-reachable if they remain reachable
1819
after removing strictly fewer than `k` other vertices.
1920
* `SimpleGraph.IsVertexPreconnected`: A graph is `k`-vertex-preconnected if any two vertices
2021
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.
22+
* `SimpleGraph.IsVertexConnected`: A graph is `k`-vertex-connected if it is `k`-vertex-preconnected
23+
and it has more than `k` vertices.
2324
-/
2425

2526
@[expose] public section
@@ -93,8 +94,7 @@ lemma isVertexPreconnected_one : G.IsVertexPreconnected 1 ↔ G.Preconnected :=
9394
simp [IsVertexPreconnected, isVertexReachable_one_iff, Preconnected]
9495

9596
/-- A preconnected graph is 1-vertex-preconnected. -/
96-
lemma Preconnected.isVertexPreconnected_one (h : G.Preconnected) : G.IsVertexPreconnected 1 :=
97-
SimpleGraph.isVertexPreconnected_one.mpr h
97+
alias ⟨_, Preconnected.isVertexPreconnected_one⟩ := isVertexPreconnected_one
9898

9999
/-- Vertex preconnectivity is antitonic in `k`. -/
100100
@[gcongr]
@@ -116,34 +116,41 @@ lemma isVertexPreconnected_top [Fintype V] :
116116
exacts [h ▸ .refl _, .of_adj _ h]
117117

118118
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. -/
119+
/-- A graph is `k`-vertex-connected if it is `k`-vertex-preconnected and it has more than `k`
120+
vertices. -/
121121
def IsVertexConnected : Prop :=
122122
k + 1 ≤ ENat.card V ∧ G.IsVertexPreconnected k
123123

124-
/-- A 0-vertex-connected graph is just a nonempty graph. -/
124+
/-- A graph is 0-vertex-connected iff it is nonempty. -/
125125
@[simp]
126126
lemma isVertexConnected_zero : G.IsVertexConnected 0 ↔ Nonempty V := by
127127
simp [IsVertexConnected, ENat.one_le_card_iff_nonempty]
128128

129-
/-- 1-vertex-connectivity is equivalent to preconnectedness and having at least two vertices. -/
129+
lemma IsVertexConnected.zero [Nonempty V] : G.IsVertexConnected 0 :=
130+
Iff.mpr SimpleGraph.isVertexConnected_zero ‹_›
131+
132+
/-- 1-vertex-connectivity is equivalent to preconnectedness and `V` being nontrivial. -/
130133
@[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]
134+
lemma isVertexConnected_one : G.IsVertexConnected 1 ↔ Nontrivial V ∧ G.Preconnected := by
135+
rw [IsVertexConnected, isVertexPreconnected_one, ← ENat.one_lt_card_iff_nontrivial]
136+
exact and_congr_left' <| ENat.add_one_le_iff ENat.one_ne_top
137+
138+
lemma Preconnected.isVertexConnected_one [Nontrivial V] (h : G.Preconnected) :
139+
G.IsVertexConnected 1 :=
140+
Iff.mpr SimpleGraph.isVertexConnected_one ⟨‹_›, h⟩
133141

134142
/-- Vertex connectivity is antitonic in `k`. -/
135143
@[gcongr]
136144
lemma IsVertexConnected.anti (hkl : l ≤ k) (hc : G.IsVertexConnected k) :
137145
G.IsVertexConnected l := by
138146
constructor
139147
· 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
148+
exact (add_le_add_right hkl 1).trans (by rw [add_comm]; exact hc.left)
149+
· exact hc.right.anti hkl
142150

143151
/-- Vertex connectivity is monotonic in the graph. -/
144152
@[gcongr]
145-
lemma IsVertexConnected.mono (hGH : G ≤ H) (hc : G.IsVertexConnected k) :
146-
H.IsVertexConnected k :=
147-
⟨hc.1, hc.2.mono hGH⟩
153+
lemma IsVertexConnected.mono (hGH : G ≤ H) (hc : G.IsVertexConnected k) : H.IsVertexConnected k :=
154+
⟨hc.left, hc.right.mono hGH⟩
148155

149156
end SimpleGraph

0 commit comments

Comments
 (0)