Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit d67c469

Browse files
committed
feat(combinatorics/simple_graph/basic): edge deletion (#11054)
Function to delete edges from a simple graph, and some associated lemmas. Also defines `sym2.to_rel` as an inverse to `sym2.from_rel`.
1 parent ca2c344 commit d67c469

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

src/combinatorics/simple_graph/basic.lean

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,49 @@ vertex and the set of vertices adjacent to the vertex.
483483

484484
end incidence
485485

486+
/-! ## Edge deletion -/
487+
488+
/-- Given a set of vertex pairs, remove all of the corresponding edges from the edge set.
489+
It is fine to delete edges outside the edge set. -/
490+
def delete_edges (s : set (sym2 V)) : simple_graph V :=
491+
{ adj := G.adj \ sym2.to_rel s,
492+
symm := λ a b, by simp [adj_comm, sym2.eq_swap] }
493+
494+
@[simp] lemma delete_edges_adj (s : set (sym2 V)) (v w : V) :
495+
(G.delete_edges s).adj v w ↔ G.adj v w ∧ ¬ ⟦(v, w)⟧ ∈ s := iff.rfl
496+
497+
lemma sdiff_eq_delete_edges (G G' : simple_graph V) :
498+
G \ G' = G.delete_edges G'.edge_set :=
499+
by { ext, simp }
500+
501+
lemma compl_eq_delete_edges :
502+
Gᶜ = (⊤ : simple_graph V).delete_edges G.edge_set :=
503+
by { ext, simp }
504+
505+
@[simp] lemma delete_edges_delete_edges (s s' : set (sym2 V)) :
506+
(G.delete_edges s).delete_edges s' = G.delete_edges (s ∪ s') :=
507+
by { ext, simp [and_assoc, not_or_distrib] }
508+
509+
@[simp] lemma delete_edges_empty_eq : G.delete_edges ∅ = G :=
510+
by { ext, simp }
511+
512+
@[simp] lemma delete_edges_univ_eq : G.delete_edges set.univ = ⊥ :=
513+
by { ext, simp }
514+
515+
lemma delete_edges_le (s : set (sym2 V)) : G.delete_edges s ≤ G :=
516+
by { intro, simp { contextual := tt } }
517+
518+
lemma delete_edges_le_of_le {s s' : set (sym2 V)} (h : s ⊆ s') :
519+
G.delete_edges s' ≤ G.delete_edges s :=
520+
λ v w, begin
521+
simp only [delete_edges_adj, and_imp, true_and] { contextual := tt },
522+
exact λ ha hn hs, hn (h hs),
523+
end
524+
525+
lemma delete_edges_eq_inter_edge_set (s : set (sym2 V)) :
526+
G.delete_edges s = G.delete_edges (s ∩ G.edge_set) :=
527+
by { ext, simp [imp_false] { contextual := tt } }
528+
486529
section finite_at
487530

488531
/-!

src/combinatorics/simple_graph/subgraph.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ rel.dom_mono h.2
279279
lemma _root_.simple_graph.to_subgraph.is_spanning (H : simple_graph V) (h : H ≤ G) :
280280
(H.to_subgraph h).is_spanning := set.mem_univ
281281

282-
lemma spanning_coe.is_subgraph_of_is_subgraph {H H' : subgraph G} (h : H ≤ H') :
282+
lemma spanning_coe_le_of_le {H H' : subgraph G} (h : H ≤ H') :
283283
H.spanning_coe ≤ H'.spanning_coe := h.2
284284

285285
/-- The top of the `subgraph G` lattice is equivalent to the graph itself. -/

src/data/sym/sym2.lean

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,19 @@ instance from_rel.decidable_pred (sym : symmetric r) [h : decidable_rel r] :
304304
decidable_pred (∈ sym2.from_rel sym) :=
305305
λ z, quotient.rec_on_subsingleton z (λ x, h _ _)
306306

307+
/-- The inverse to `sym2.from_rel`. Given a set on `sym2 α`, give a symmetric relation on `α`
308+
(see `sym2.to_rel_symmetric`). -/
309+
def to_rel (s : set (sym2 α)) (x y : α) : Prop := ⟦(x, y)⟧ ∈ s
310+
311+
@[simp] lemma to_rel_prop (s : set (sym2 α)) (x y : α) : to_rel s x y ↔ ⟦(x, y)⟧ ∈ s := iff.rfl
312+
313+
lemma to_rel_symmetric (s : set (sym2 α)) : symmetric (to_rel s) := λ x y, by simp [eq_swap]
314+
315+
lemma to_rel_from_rel (sym : symmetric r) : to_rel (from_rel sym) = r := rfl
316+
317+
lemma from_rel_to_rel (s : set (sym2 α)) : from_rel (to_rel_symmetric s) = s :=
318+
set.ext (λ z, sym2.ind (λ x y, iff.rfl) z)
319+
307320
end relations
308321

309322
section sym_equiv

0 commit comments

Comments
 (0)