combinatorics.simple_graph.basic
⟷
Mathlib.Combinatorics.SimpleGraph.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(last sync)
More lemmas about is_clique
, is_n_clique
, edge_set
. Also define clique_free_on
, a local version of clique_free
.
@@ -3,6 +3,7 @@ Copyright (c) 2020 Aaron Anderson, Jalex Stark, Kyle Miller. All rights reserved
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-/
+import data.fun_like.fintype
import data.rel
import data.set.finite
import data.sym.sym2
@@ -288,6 +289,13 @@ instance : complete_boolean_algebra (simple_graph V) :=
@[simps] instance (V : Type u) : inhabited (simple_graph V) := ⟨⊥⟩
+instance [subsingleton V] : unique (simple_graph V) :=
+{ default := ⊥,
+ uniq := λ G, by ext a b; simp [subsingleton.elim a b] }
+
+instance [nontrivial V] : nontrivial (simple_graph V) :=
+⟨⟨⊥, ⊤, λ h, not_subsingleton V ⟨by simpa [ext_iff, function.funext_iff] using h⟩⟩⟩
+
section decidable
variables (V) (H : simple_graph V) [decidable_rel G.adj] [decidable_rel H.adj]
@@ -372,6 +380,17 @@ by { ext ⟨x, y⟩, refl }
@[simp] lemma edge_set_sdiff : (G₁ \ G₂).edge_set = G₁.edge_set \ G₂.edge_set :=
by { ext ⟨x, y⟩, refl }
+variables {G G₁ G₂}
+
+@[simp] lemma disjoint_edge_set : disjoint G₁.edge_set G₂.edge_set ↔ disjoint G₁ G₂ :=
+by rw [set.disjoint_iff, disjoint_iff_inf_le, ←edge_set_inf, ←edge_set_bot, ←set.le_iff_subset,
+ order_embedding.le_iff_le]
+
+@[simp] lemma edge_set_eq_empty : G.edge_set = ∅ ↔ G = ⊥ := by rwa [←edge_set_bot, edge_set_inj]
+
+@[simp] lemma edge_set_nonempty : G.edge_set.nonempty ↔ G ≠ ⊥ :=
+by rw [set.nonempty_iff_ne_empty, edge_set_eq_empty.ne]
+
/--
This lemma, combined with `edge_set_sdiff` and `edge_set_from_edge_set`,
allows proving `(G \ from_edge_set s).edge_set = G.edge_set \ s` by `simp`.
@@ -406,6 +425,8 @@ end
lemma adj_iff_exists_edge_coe : G.adj a b ↔ ∃ (e : G.edge_set), ↑e = ⟦(a, b)⟧ :=
by simp only [mem_edge_set, exists_prop, set_coe.exists, exists_eq_right, subtype.coe_mk]
+variables (G G₁ G₂)
+
lemma edge_other_ne {e : sym2 V} (he : e ∈ G.edge_set) {v : V} (h : v ∈ e) : h.other ≠ v :=
begin
erw [← sym2.other_spec h, sym2.eq_swap] at he,
@@ -482,6 +503,16 @@ begin
exact λ vws _, h vws,
end
+@[simp] lemma disjoint_from_edge_set : disjoint G (from_edge_set s) ↔ disjoint G.edge_set s :=
+begin
+ conv_rhs { rw ←set.diff_union_inter s {e | e.is_diag} },
+ rw [←disjoint_edge_set, edge_set_from_edge_set, set.disjoint_union_right, and_iff_left],
+ exact set.disjoint_left.2 (λ e he he', not_is_diag_of_mem_edge_set _ he he'.2),
+end
+
+@[simp] lemma from_edge_set_disjoint : disjoint (from_edge_set s) G ↔ disjoint s G.edge_set :=
+by rw [disjoint.comm, disjoint_from_edge_set, disjoint.comm]
+
instance [decidable_eq V] [fintype s] : fintype (from_edge_set s).edge_set :=
by { rw edge_set_from_edge_set s, apply_instance }
@@ -680,6 +711,9 @@ end edge_finset
@[simp] lemma mem_neighbor_set (v w : V) : w ∈ G.neighbor_set v ↔ G.adj v w :=
iff.rfl
+@[simp] lemma not_mem_neighbor_set_self : a ∉ G.neighbor_set a :=
+(mem_neighbor_set _ _ _).not.2 $ G.loopless _
+
@[simp] lemma mem_incidence_set (v w : V) : ⟦(v, w)⟧ ∈ G.incidence_set v ↔ G.adj v w :=
by simp [incidence_set]
@@ -821,6 +855,9 @@ lemma delete_edges_eq_sdiff_from_edge_set (s : set (sym2 V)) :
G.delete_edges s = G \ from_edge_set s :=
by { ext, exact ⟨λ h, ⟨h.1, not_and_of_not_left _ h.2⟩, λ h, ⟨h.1, not_and'.mp h.2 h.ne⟩⟩ }
+@[simp] lemma delete_edges_eq {s : set (sym2 V)} : G.delete_edges s = G ↔ disjoint G.edge_set s :=
+by rw [delete_edges_eq_sdiff_from_edge_set, sdiff_eq_left, disjoint_from_edge_set]
+
lemma compl_eq_delete_edges :
Gᶜ = (⊤ : simple_graph V).delete_edges G.edge_set :=
by { ext, simp }
@@ -871,18 +908,17 @@ get a graph with the property `p`. -/
def delete_far (p : simple_graph V → Prop) (r : 𝕜) : Prop :=
∀ ⦃s⦄, s ⊆ G.edge_finset → p (G.delete_edges s) → r ≤ s.card
-open_locale classical
-
variables {G}
lemma delete_far_iff :
- G.delete_far p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edge_finset.card - H.edge_finset.card :=
+ G.delete_far p r ↔ ∀ ⦃H : simple_graph _⦄ [decidable_rel H.adj],
+ by exactI H ≤ G → p H → r ≤ G.edge_finset.card - H.edge_finset.card :=
begin
- refine ⟨λ h H hHG hH, _, λ h s hs hG, _⟩,
+ refine ⟨λ h H _ hHG hH, _, λ h s hs hG, _⟩,
{ have := h (sdiff_subset G.edge_finset H.edge_finset),
simp only [delete_edges_sdiff_eq_of_le _ hHG, edge_finset_mono hHG, card_sdiff,
card_le_of_subset, coe_sdiff, coe_edge_finset, nat.cast_sub] at this,
- exact this hH },
+ convert this hH },
{ simpa [card_sdiff hs, edge_finset_delete_edges, -set.to_finset_card, nat.cast_sub,
card_le_of_subset hs] using h (G.delete_edges_le s) hG }
end
@@ -906,9 +942,22 @@ protected def map (f : V ↪ W) (G : simple_graph V) : simple_graph W :=
@[simp] lemma map_adj (f : V ↪ W) (G : simple_graph V) (u v : W) :
(G.map f).adj u v ↔ ∃ (u' v' : V), G.adj u' v' ∧ f u' = u ∧ f v' = v := iff.rfl
+lemma map_adj_apply {G : simple_graph V} {f : V ↪ W} {a b : V} :
+ (G.map f).adj (f a) (f b) ↔ G.adj a b := by simp
+
lemma map_monotone (f : V ↪ W) : monotone (simple_graph.map f) :=
by { rintros G G' h _ _ ⟨u, v, ha, rfl, rfl⟩, exact ⟨_, _, h ha, rfl, rfl⟩ }
+@[simp] lemma map_id : G.map (function.embedding.refl _) = G :=
+ext _ _ $ relation.map_id_id _
+
+@[simp] lemma map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
+ext _ _ $ relation.map_map _ _ _ _ _
+
+instance decidable_map (f : V ↪ W) (G : simple_graph V) [decidable_rel (relation.map G.adj f f)] :
+ decidable_rel (G.map f).adj :=
+‹decidable_rel _›
+
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
adjacency relation.
This is one of the ways of creating induced graphs. See `simple_graph.induce` for a wrapper.
@@ -917,6 +966,24 @@ This is surjective when `f` is injective (see `simple_graph.comap_surjective`).-
@[simps] protected def comap (f : V → W) (G : simple_graph W) : simple_graph V :=
{ adj := λ u v, G.adj (f u) (f v) }
+@[simp] lemma comap_id {G : simple_graph V} : G.comap id = G := ext _ _ rfl
+
+@[simp] lemma comap_comap {G : simple_graph X} (f : V → W) (g : W → X) :
+ (G.comap g).comap f = G.comap (g ∘ f) := rfl
+
+instance decidable_comap (f : V → W) (G : simple_graph W) [decidable_rel G.adj] :
+ decidable_rel (simple_graph.comap f G).adj :=
+λ _ _, ‹decidable_rel G.adj› _ _
+
+lemma comap_symm (G : simple_graph V) (e : V ≃ W) :
+ G.comap e.symm.to_embedding = G.map e.to_embedding :=
+by { ext, simp only [equiv.apply_eq_iff_eq_symm_apply, comap_adj, map_adj, equiv.to_embedding_apply,
+ exists_eq_right_right, exists_eq_right] }
+
+lemma map_symm (G : simple_graph W) (e : V ≃ W) :
+ G.map e.symm.to_embedding = G.comap e.to_embedding :=
+by rw [←comap_symm, e.symm_symm]
+
lemma comap_monotone (f : V ↪ W) : monotone (simple_graph.comap f) :=
by { intros G G' h _ _ ha, exact h ha }
@@ -939,6 +1006,23 @@ lemma map_le_iff_le_comap (f : V ↪ W) (G : simple_graph V) (G' : simple_graph
lemma map_comap_le (f : V ↪ W) (G : simple_graph W) : (G.comap f).map f ≤ G :=
by { rw map_le_iff_le_comap, exact le_refl _ }
+/-- Equivalent types have equivalent simple graphs. -/
+@[simps apply] protected def _root_.equiv.simple_graph (e : V ≃ W) :
+ simple_graph V ≃ simple_graph W :=
+{ to_fun := simple_graph.comap e.symm,
+ inv_fun := simple_graph.comap e,
+ left_inv := λ _, by simp,
+ right_inv := λ _, by simp }
+
+@[simp] lemma _root_.equiv.simple_graph_refl : (equiv.refl V).simple_graph = equiv.refl _ :=
+by { ext, refl }
+
+@[simp] lemma _root_.equiv.simple_graph_trans (e₁ : V ≃ W) (e₂ : W ≃ X) :
+ (e₁.trans e₂).simple_graph = e₁.simple_graph.trans e₂.simple_graph := rfl
+
+@[simp] lemma _root_.equiv.symm_simple_graph (e : V ≃ W) :
+ e.simple_graph.symm = e.symm.simple_graph := rfl
+
/-! ## Induced graphs -/
/- Given a set `s` of vertices, we can restrict a graph to those vertices by restricting its
@@ -1296,10 +1380,23 @@ infix ` ↪g ` : 50 := embedding
infix ` ≃g ` : 50 := iso
namespace hom
-variables {G G'} (f : G →g G')
+variables {G G'} {H : simple_graph W} (f : G →g G')
/-- The identity homomorphism from a graph to itself. -/
-abbreviation id : G →g G := rel_hom.id _
+protected abbreviation id : G →g G := rel_hom.id _
+
+@[simp, norm_cast] lemma coe_id : ⇑(hom.id : G →g G) = _root_.id := rfl
+
+instance [subsingleton (V → W)] : subsingleton (G →g H) := fun_like.coe_injective.subsingleton
+
+instance [is_empty V] : unique (G →g H) :=
+{ default := ⟨is_empty_elim, is_empty_elim⟩,
+ uniq := λ _, subsingleton.elim _ _ }
+
+noncomputable instance [fintype V] [fintype W] : fintype (G →g H) :=
+by classical; exact fun_like.fintype _
+
+instance [finite V] [finite W] : finite (G →g H) := fun_like.finite _
lemma map_adj {v w : V} (h : G.adj v w) : G'.adj (f v) (f w) := f.map_rel' h
@@ -1358,10 +1455,15 @@ abbreviation comp (f' : G' →g G'') (f : G →g G') : G →g G'' := f'.comp f
@[simp] lemma coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f := rfl
+/-- The graph homomorphism from a smaller graph to a bigger one. -/
+def of_le {H : simple_graph V} (h : G ≤ H) : G →g H := ⟨id, h⟩
+
+@[simp, norm_cast] lemma coe_of_le {H : simple_graph V} (h : G ≤ H) : ⇑(of_le h) = id := rfl
+
end hom
namespace embedding
-variables {G G'} (f : G ↪g G')
+variables {G G'} {H : simple_graph W} (f : G ↪g G')
/-- The identity embedding from a graph to itself. -/
abbreviation refl : G ↪g G := rel_embedding.refl _
@@ -1369,7 +1471,9 @@ abbreviation refl : G ↪g G := rel_embedding.refl _
/-- An embedding of graphs gives rise to a homomorphism of graphs. -/
abbreviation to_hom : G →g G' := f.to_rel_hom
-lemma map_adj_iff {v w : V} : G'.adj (f v) (f w) ↔ G.adj v w := f.map_rel_iff
+@[simp] lemma coe_to_hom (f : G ↪g H) : ⇑f.to_hom = f := rfl
+
+@[simp] lemma map_adj_iff {v w : V} : G'.adj (f v) (f w) ↔ G.adj v w := f.map_rel_iff
lemma map_mem_edge_set_iff {e : sym2 V} : e.map f ∈ G'.edge_set ↔ e ∈ G.edge_set :=
quotient.ind (λ ⟨v, w⟩, f.map_adj_iff) e
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Upgrade the boolean_algebra (simple_graph α)
and lattice G.subgraph
instances to complete_boolean_algebra (simple_graph α)
and complete_distrib_lattice G.subgraph
respectively. Add distrib_lattice
/complete_distrib_lattice
instances for G.finsubgraph
.
@@ -43,8 +43,9 @@ finitely many vertices.
graph isomorphisms. Note that a graph embedding is a stronger notion than an
injective graph homomorphism, since its image is an induced subgraph.
-* `boolean_algebra` instance: Under the subgraph relation, `simple_graph` forms a `boolean_algebra`.
- In other words, this is the lattice of spanning subgraphs of the complete graph.
+* `complete_boolean_algebra` instance: Under the subgraph relation, `simple_graph` forms a
+ `complete_boolean_algebra`. In other words, this is the complete lattice of spanning subgraphs of
+ the complete graph.
## Notations
@@ -68,8 +69,6 @@ finitely many vertices.
## Todo
-* Upgrade `simple_graph.boolean_algebra` to a `complete_boolean_algebra`.
-
* This is the simplest notion of an unoriented graph. This should
eventually fit into a more complete combinatorics hierarchy which
includes multigraphs and directed graphs. We begin with simple graphs
@@ -138,7 +137,7 @@ def complete_bipartite_graph (V W : Type*) : simple_graph (V ⊕ W) :=
end }
namespace simple_graph
-variables {𝕜 : Type*} {V : Type u} {W : Type v} {X : Type w} (G : simple_graph V)
+variables {ι : Sort*} {𝕜 : Type*} {V : Type u} {W : Type v} {X : Type w} (G : simple_graph V)
(G' : simple_graph W) {a b c u v w : V} {e : sym2 V}
@[simp] protected lemma irrefl {v : V} : ¬G.adj v v := G.loopless v
@@ -158,6 +157,11 @@ protected lemma adj.ne' {G : simple_graph V} {a b : V} (h : G.adj a b) : b ≠ a
lemma ne_of_adj_of_not_adj {v w x : V} (h : G.adj v x) (hn : ¬ G.adj w x) : v ≠ w :=
λ h', hn (h' ▸ h)
+lemma adj_injective : injective (adj : simple_graph V → V → V → Prop) :=
+λ G H h, by { cases G, cases H, congr' }
+
+@[simp] lemma adj_inj {G H : simple_graph V} : G.adj = H.adj ↔ G = H := adj_injective.eq_iff
+
section order
/-- The relation that one `simple_graph` is a subgraph of another.
@@ -205,7 +209,44 @@ instance : has_sdiff (simple_graph V) := ⟨λ x y,
@[simp] lemma sdiff_adj (x y : simple_graph V) (v w : V) :
(x \ y).adj v w ↔ (x.adj v w ∧ ¬ y.adj v w) := iff.rfl
-instance : boolean_algebra (simple_graph V) :=
+instance : has_Sup (simple_graph V) :=
+⟨λ s, { adj := λ a b, ∃ G ∈ s, adj G a b,
+ symm := λ a b, Exists₂.imp $ λ _ _, adj.symm,
+ loopless := by { rintro a ⟨G, hG, ha⟩, exact ha.ne rfl } }⟩
+
+instance : has_Inf (simple_graph V) :=
+⟨λ s, { adj := λ a b, (∀ ⦃G⦄, G ∈ s → adj G a b) ∧ a ≠ b,
+ symm := λ _ _, and.imp (forall₂_imp $ λ _ _, adj.symm) ne.symm,
+ loopless := λ a h, h.2 rfl }⟩
+
+@[simp] lemma Sup_adj {s : set (simple_graph V)} {a b : V} : (Sup s).adj a b ↔ ∃ G ∈ s, adj G a b :=
+iff.rfl
+
+@[simp] lemma Inf_adj {s : set (simple_graph V)} : (Inf s).adj a b ↔ (∀ G ∈ s, adj G a b) ∧ a ≠ b :=
+iff.rfl
+
+@[simp] lemma supr_adj {f : ι → simple_graph V} : (⨆ i, f i).adj a b ↔ ∃ i, (f i).adj a b :=
+by simp [supr]
+
+@[simp] lemma infi_adj {f : ι → simple_graph V} :
+ (⨅ i, f i).adj a b ↔ (∀ i, (f i).adj a b) ∧ a ≠ b :=
+by simp [infi]
+
+lemma Inf_adj_of_nonempty {s : set (simple_graph V)} (hs : s.nonempty) :
+ (Inf s).adj a b ↔ ∀ G ∈ s, adj G a b :=
+Inf_adj.trans $ and_iff_left_of_imp $ by { obtain ⟨G, hG⟩ := hs, exact λ h, (h _ hG).ne }
+
+lemma infi_adj_of_nonempty [nonempty ι] {f : ι → simple_graph V} :
+ (⨅ i, f i).adj a b ↔ ∀ i, (f i).adj a b :=
+by simp [infi, Inf_adj_of_nonempty (set.range_nonempty _)]
+
+/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.adj a b → H.adj a b`. -/
+instance : distrib_lattice (simple_graph V) :=
+{ le := λ G H, ∀ ⦃a b⦄, G.adj a b → H.adj a b,
+ ..show distrib_lattice (simple_graph V),
+ from adj_injective.distrib_lattice _ (λ _ _, rfl) (λ _ _, rfl) }
+
+instance : complete_boolean_algebra (simple_graph V) :=
{ le := (≤),
sup := (⊔),
inf := (⊓),
@@ -215,19 +256,27 @@ instance : boolean_algebra (simple_graph V) :=
bot := empty_graph V,
le_top := λ x v w h, x.ne_of_adj h,
bot_le := λ x v w h, h.elim,
- sup_le := λ x y z hxy hyz v w h, h.cases_on (λ h, hxy h) (λ h, hyz h),
sdiff_eq := λ x y, by { ext v w, refine ⟨λ h, ⟨h.1, ⟨_, h.2⟩⟩, λ h, ⟨h.1, h.2.2⟩⟩,
rintro rfl, exact x.irrefl h.1 },
- le_sup_left := λ x y v w h, or.inl h,
- le_sup_right := λ x y v w h, or.inr h,
- le_inf := λ x y z hxy hyz v w h, ⟨hxy h, hyz h⟩,
- le_sup_inf := λ a b c v w h, or.dcases_on h.2 or.inl $
- or.dcases_on h.1 (λ h _, or.inl h) $ λ hb hc, or.inr ⟨hb, hc⟩,
inf_compl_le_bot := λ a v w h, false.elim $ h.2.2 h.1,
top_le_sup_compl := λ a v w ne, by { by_cases a.adj v w, exact or.inl h, exact or.inr ⟨ne, h⟩ },
- inf_le_left := λ x y v w h, h.1,
- inf_le_right := λ x y v w h, h.2,
- .. partial_order.lift adj ext }
+ Sup := Sup,
+ le_Sup := λ s G hG a b hab, ⟨G, hG, hab⟩,
+ Sup_le := λ s G hG a b, by { rintro ⟨H, hH, hab⟩, exact hG _ hH hab },
+ Inf := Inf,
+ Inf_le := λ s G hG a b hab, hab.1 hG,
+ le_Inf := λ s G hG a b hab, ⟨λ H hH, hG _ hH hab, hab.ne⟩,
+ inf_Sup_le_supr_inf := λ G s a b hab, by simpa only [exists_prop, Sup_adj, and_imp,
+ forall_exists_index, Inf_adj, supr_adj, inf_adj, ←exists_and_distrib_right,
+ exists_and_distrib_left, and_assoc, and_self_right] using hab,
+ infi_sup_le_sup_Inf := λ G s a b hab, begin
+ simp only [sup_adj, Inf_adj, infi_adj] at ⊢ hab,
+ have : (∀ G' ∈ s, adj G a b ∨ adj G' a b) ∧ a ≠ b :=
+ (and_congr_left $ λ h, forall_congr $ λ H, _).1 hab,
+ simpa [forall_or_distrib_left, or_and_distrib_right, and_iff_left_of_imp adj.ne] using this,
+ exact and_iff_left h,
+ end,
+ ..simple_graph.distrib_lattice }
@[simp] lemma top_adj (v w : V) : (⊤ : simple_graph V).adj v w ↔ v ≠ w := iff.rfl
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -382,7 +382,7 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
le_inf := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.Ne⟩
inf_sup_le_iSup_inf := fun G s a b hab => by
simpa only [exists_prop, Sup_adj, and_imp, forall_exists_index, Inf_adj, supr_adj, inf_adj, ←
- exists_and_right, exists_and_left, and_assoc', and_self_right] using hab
+ exists_and_right, exists_and_left, and_assoc, and_self_right] using hab
iInf_sup_le_sup_inf := fun G s a b hab =>
by
simp only [sup_adj, Inf_adj, infi_adj] at hab ⊢
@@ -1250,7 +1250,7 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
#print SimpleGraph.neighborSet_compl /-
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
- by ext w; simp [and_comm', eq_comm]
+ by ext w; simp [and_comm, eq_comm]
#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_compl
-/
@@ -1422,7 +1422,7 @@ theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSe
#print SimpleGraph.deleteEdges_deleteEdges /-
@[simp]
theorem deleteEdges_deleteEdges (s s' : Set (Sym2 V)) :
- (G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') := by ext; simp [and_assoc', not_or]
+ (G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') := by ext; simp [and_assoc, not_or]
#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdges
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -649,9 +649,9 @@ theorem adj_iff_exists_edge {v w : V} :
refine' ⟨fun _ => ⟨G.ne_of_adj ‹_›, ⟦(v, w)⟧, _⟩, _⟩
· simpa
· rintro ⟨hne, e, he, hv⟩
- rw [Sym2.mem_and_mem_iff hne] at hv
+ rw [Sym2.mem_and_mem_iff hne] at hv
subst e
- rwa [mem_edge_set] at he
+ rwa [mem_edge_set] at he
#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edge
-/
@@ -666,7 +666,7 @@ variable (G G₁ G₂)
#print SimpleGraph.edge_other_ne /-
theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) {v : V} (h : v ∈ e) :
h.other ≠ v := by
- erw [← Sym2.other_spec h, Sym2.eq_swap] at he
+ erw [← Sym2.other_spec h, Sym2.eq_swap] at he
exact G.ne_of_adj he
#align simple_graph.edge_other_ne SimpleGraph.edge_other_ne
-/
@@ -1222,7 +1222,7 @@ theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
by
rw [Set.disjoint_iff]
rintro w ⟨h, h'⟩
- rw [mem_neighbor_set, compl_adj] at h'
+ rw [mem_neighbor_set, compl_adj] at h'
exact h'.2 h
#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjoint
-/
@@ -1342,7 +1342,7 @@ theorem edge_other_incident_set {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v
#print SimpleGraph.incidence_other_prop /-
theorem incidence_other_prop {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) :
G.otherVertexOfIncident h ∈ G.neighborSet v := by cases' h with he hv;
- rwa [← Sym2.other_spec' hv, mem_edge_set] at he
+ rwa [← Sym2.other_spec' hv, mem_edge_set] at he
#align simple_graph.incidence_other_prop SimpleGraph.incidence_other_prop
-/
@@ -1505,7 +1505,7 @@ theorem deleteFar_iff :
refine' ⟨fun h H _ hHG hH => _, fun h s hs hG => _⟩
· have := h (sdiff_subset G.edge_finset H.edge_finset)
simp only [delete_edges_sdiff_eq_of_le _ hHG, edge_finset_mono hHG, card_sdiff,
- card_le_of_subset, coe_sdiff, coe_edge_finset, Nat.cast_sub] at this
+ card_le_of_subset, coe_sdiff, coe_edge_finset, Nat.cast_sub] at this
convert this hH
·
simpa [card_sdiff hs, edge_finset_delete_edges, -Set.toFinset_card, Nat.cast_sub,
@@ -2021,7 +2021,7 @@ theorem exists_maximal_degree_vertex [DecidableRel G.Adj] [Nonempty V] :
by
obtain ⟨t, ht⟩ := max_of_nonempty (univ_nonempty.image fun v => G.degree v)
have ht₂ := mem_of_max ht
- simp only [mem_image, mem_univ, exists_prop_of_true] at ht₂
+ simp only [mem_image, mem_univ, exists_prop_of_true] at ht₂
rcases ht₂ with ⟨v, rfl⟩
refine' ⟨v, _⟩
rw [max_degree, ht]
@@ -2050,7 +2050,7 @@ theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀
obtain ⟨v, hv⟩ := G.exists_maximal_degree_vertex
rw [hv]
apply h
- · rw [not_nonempty_iff_eq_empty] at hV
+ · rw [not_nonempty_iff_eq_empty] at hV
rw [max_degree, hV, image_empty]
exact zero_le k
#align simple_graph.max_degree_le_of_forall_degree_le SimpleGraph.maxDegree_le_of_forall_degree_le
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -98,7 +98,8 @@ structure SimpleGraph (V : Type u) where
#align simple_graph SimpleGraph
-/
-noncomputable instance {V : Type u} [Fintype V] : Fintype (SimpleGraph V) := by classical
+noncomputable instance {V : Type u} [Fintype V] : Fintype (SimpleGraph V) := by
+ classical exact Fintype.ofInjective SimpleGraph.Adj SimpleGraph.ext
#print SimpleGraph.fromRel /-
/-- Construct the simple graph induced by the given relation. It
@@ -1242,7 +1243,8 @@ theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V) (v : V)
[h : Fintype (G.neighborSet v ∪ Gᶜ.neighborSet v : Set V)] :
(@Set.toFinset _ (G.neighborSet v ∪ Gᶜ.neighborSet v) h).card = Fintype.card V - 1 := by
- classical
+ classical simp_rw [neighbor_set_union_compl_neighbor_set_eq, Set.toFinset_compl,
+ Finset.card_compl, Set.toFinset_card, Set.card_singleton]
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
-/
@@ -1816,7 +1818,10 @@ theorem degree_pos_iff_exists_adj : 0 < G.degree v ↔ ∃ w, G.Adj v w := by
#print SimpleGraph.degree_compl /-
theorem degree_compl [Fintype (Gᶜ.neighborSet v)] [Fintype V] :
- Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by classical
+ Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by
+ classical
+ rw [← card_neighbor_set_union_compl_neighbor_set G v, Set.toFinset_union]
+ simp [card_disjoint_union (set.disjoint_to_finset.mpr (compl_neighbor_set_disjoint G v))]
#align simple_graph.degree_compl SimpleGraph.degree_compl
-/
@@ -2054,6 +2059,9 @@ theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀
#print SimpleGraph.degree_lt_card_verts /-
theorem degree_lt_card_verts [DecidableRel G.Adj] (v : V) : G.degree v < Fintype.card V := by
classical
+ apply Finset.card_lt_card
+ rw [Finset.ssubset_iff]
+ exact ⟨v, by simp, Finset.subset_univ _⟩
#align simple_graph.degree_lt_card_verts SimpleGraph.degree_lt_card_verts
-/
@@ -2099,7 +2107,20 @@ theorem card_commonNeighbors_lt_card_verts [DecidableRel G.Adj] (v w : V) :
the best we can do in general.
-/
theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.Adj] {v w : V}
- (h : G.Adj v w) : Fintype.card (G.commonNeighbors v w) < G.degree v := by classical
+ (h : G.Adj v w) : Fintype.card (G.commonNeighbors v w) < G.degree v := by
+ classical
+ erw [← Set.toFinset_card]
+ apply Finset.card_lt_card
+ rw [Finset.ssubset_iff]
+ use w
+ constructor
+ · rw [Set.mem_toFinset]
+ apply not_mem_common_neighbors_right
+ · rw [Finset.insert_subset_iff]
+ constructor
+ · simpa
+ · rw [neighbor_finset, Set.toFinset_subset_toFinset]
+ exact G.common_neighbors_subset_neighbor_set_left _ _
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
-/
@@ -2181,7 +2202,8 @@ instance [IsEmpty V] : Unique (G →g H)
default := ⟨isEmptyElim, isEmptyElim⟩
uniq _ := Subsingleton.elim _ _
-noncomputable instance [Fintype V] [Fintype W] : Fintype (G →g H) := by classical
+noncomputable instance [Fintype V] [Fintype W] : Fintype (G →g H) := by
+ classical exact DFunLike.fintype _
instance [Finite V] [Finite W] : Finite (G →g H) :=
DFunLike.finite _
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -98,8 +98,7 @@ structure SimpleGraph (V : Type u) where
#align simple_graph SimpleGraph
-/
-noncomputable instance {V : Type u} [Fintype V] : Fintype (SimpleGraph V) := by
- classical exact Fintype.ofInjective SimpleGraph.Adj SimpleGraph.ext
+noncomputable instance {V : Type u} [Fintype V] : Fintype (SimpleGraph V) := by classical
#print SimpleGraph.fromRel /-
/-- Construct the simple graph induced by the given relation. It
@@ -1243,8 +1242,7 @@ theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V) (v : V)
[h : Fintype (G.neighborSet v ∪ Gᶜ.neighborSet v : Set V)] :
(@Set.toFinset _ (G.neighborSet v ∪ Gᶜ.neighborSet v) h).card = Fintype.card V - 1 := by
- classical simp_rw [neighbor_set_union_compl_neighbor_set_eq, Set.toFinset_compl,
- Finset.card_compl, Set.toFinset_card, Set.card_singleton]
+ classical
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
-/
@@ -1818,10 +1816,7 @@ theorem degree_pos_iff_exists_adj : 0 < G.degree v ↔ ∃ w, G.Adj v w := by
#print SimpleGraph.degree_compl /-
theorem degree_compl [Fintype (Gᶜ.neighborSet v)] [Fintype V] :
- Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by
- classical
- rw [← card_neighbor_set_union_compl_neighbor_set G v, Set.toFinset_union]
- simp [card_disjoint_union (set.disjoint_to_finset.mpr (compl_neighbor_set_disjoint G v))]
+ Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by classical
#align simple_graph.degree_compl SimpleGraph.degree_compl
-/
@@ -2059,9 +2054,6 @@ theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀
#print SimpleGraph.degree_lt_card_verts /-
theorem degree_lt_card_verts [DecidableRel G.Adj] (v : V) : G.degree v < Fintype.card V := by
classical
- apply Finset.card_lt_card
- rw [Finset.ssubset_iff]
- exact ⟨v, by simp, Finset.subset_univ _⟩
#align simple_graph.degree_lt_card_verts SimpleGraph.degree_lt_card_verts
-/
@@ -2107,20 +2099,7 @@ theorem card_commonNeighbors_lt_card_verts [DecidableRel G.Adj] (v w : V) :
the best we can do in general.
-/
theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.Adj] {v w : V}
- (h : G.Adj v w) : Fintype.card (G.commonNeighbors v w) < G.degree v := by
- classical
- erw [← Set.toFinset_card]
- apply Finset.card_lt_card
- rw [Finset.ssubset_iff]
- use w
- constructor
- · rw [Set.mem_toFinset]
- apply not_mem_common_neighbors_right
- · rw [Finset.insert_subset_iff]
- constructor
- · simpa
- · rw [neighbor_finset, Set.toFinset_subset_toFinset]
- exact G.common_neighbors_subset_neighbor_set_left _ _
+ (h : G.Adj v w) : Fintype.card (G.commonNeighbors v w) < G.degree v := by classical
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
-/
@@ -2202,8 +2181,7 @@ instance [IsEmpty V] : Unique (G →g H)
default := ⟨isEmptyElim, isEmptyElim⟩
uniq _ := Subsingleton.elim _ _
-noncomputable instance [Fintype V] [Fintype W] : Fintype (G →g H) := by
- classical exact DFunLike.fintype _
+noncomputable instance [Fintype V] [Fintype W] : Fintype (G →g H) := by classical
instance [Finite V] [Finite W] : Finite (G →g H) :=
DFunLike.finite _
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2314,18 +2314,18 @@ theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f
#align simple_graph.hom.coe_comp SimpleGraph.Hom.coe_comp
-/
-#print SimpleGraph.Hom.ofLe /-
+#print SimpleGraph.Hom.ofLE /-
/-- The graph homomorphism from a smaller graph to a bigger one. -/
-def ofLe {H : SimpleGraph V} (h : G ≤ H) : G →g H :=
+def ofLE {H : SimpleGraph V} (h : G ≤ H) : G →g H :=
⟨id, h⟩
-#align simple_graph.hom.of_le SimpleGraph.Hom.ofLe
+#align simple_graph.hom.of_le SimpleGraph.Hom.ofLE
-/
-#print SimpleGraph.Hom.coe_ofLe /-
+#print SimpleGraph.Hom.coe_ofLE /-
@[simp, norm_cast]
-theorem coe_ofLe {H : SimpleGraph V} (h : G ≤ H) : ⇑(ofLe h) = id :=
+theorem coe_ofLE {H : SimpleGraph V} (h : G ≤ H) : ⇑(ofLE h) = id :=
rfl
-#align simple_graph.hom.coe_of_le SimpleGraph.Hom.coe_ofLe
+#align simple_graph.hom.coe_of_le SimpleGraph.Hom.coe_ofLE
-/
end Hom
@@ -2585,10 +2585,10 @@ def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSet
-/
-#print SimpleGraph.Iso.card_eq_of_iso /-
-theorem card_eq_of_iso [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
+#print SimpleGraph.Iso.card_eq /-
+theorem card_eq [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
convert (Fintype.ofEquiv_card f.to_equiv).symm
-#align simple_graph.iso.card_eq_of_iso SimpleGraph.Iso.card_eq_of_iso
+#align simple_graph.iso.card_eq_of_iso SimpleGraph.Iso.card_eq
-/
#print SimpleGraph.Iso.comap /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2195,7 +2195,7 @@ theorem coe_id : ⇑(Hom.id : G →g G) = id :=
-/
instance [Subsingleton (V → W)] : Subsingleton (G →g H) :=
- FunLike.coe_injective.Subsingleton
+ DFunLike.coe_injective.Subsingleton
instance [IsEmpty V] : Unique (G →g H)
where
@@ -2203,10 +2203,10 @@ instance [IsEmpty V] : Unique (G →g H)
uniq _ := Subsingleton.elim _ _
noncomputable instance [Fintype V] [Fintype W] : Fintype (G →g H) := by
- classical exact FunLike.fintype _
+ classical exact DFunLike.fintype _
instance [Finite V] [Finite W] : Finite (G →g H) :=
- FunLike.finite _
+ DFunLike.finite _
#print SimpleGraph.Hom.map_adj /-
theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -903,7 +903,7 @@ theorem Dart.symm_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).symm = Dar
#print SimpleGraph.Dart.edge_symm /-
@[simp]
theorem Dart.edge_symm (d : G.Dart) : d.symm.edge = d.edge :=
- Sym2.mk''_prod_swap_eq
+ Sym2.mk_prod_swap_eq
#align simple_graph.dart.edge_symm SimpleGraph.Dart.edge_symm
-/
@@ -936,14 +936,14 @@ theorem Dart.symm_ne (d : G.Dart) : d.symm ≠ d :=
#print SimpleGraph.dart_edge_eq_iff /-
theorem dart_edge_eq_iff : ∀ d₁ d₂ : G.Dart, d₁.edge = d₂.edge ↔ d₁ = d₂ ∨ d₁ = d₂.symm := by
- rintro ⟨p, hp⟩ ⟨q, hq⟩; simp [Sym2.mk''_eq_mk''_iff]
+ rintro ⟨p, hp⟩ ⟨q, hq⟩; simp [Sym2.mk_eq_mk_iff]
#align simple_graph.dart_edge_eq_iff SimpleGraph.dart_edge_eq_iff
-/
#print SimpleGraph.dart_edge_eq_mk'_iff /-
theorem dart_edge_eq_mk'_iff :
∀ {d : G.Dart} {p : V × V}, d.edge = ⟦p⟧ ↔ d.toProd = p ∨ d.toProd = p.symm := by rintro ⟨p, h⟩;
- apply Sym2.mk''_eq_mk''_iff
+ apply Sym2.mk_eq_mk_iff
#align simple_graph.dart_edge_eq_mk_iff SimpleGraph.dart_edge_eq_mk'_iff
-/
@@ -1011,13 +1011,13 @@ theorem mk'_mem_incidenceSet_iff : ⟦(b, c)⟧ ∈ G.incidenceSet a ↔ G.Adj b
#print SimpleGraph.mk'_mem_incidenceSet_left_iff /-
theorem mk'_mem_incidenceSet_left_iff : ⟦(a, b)⟧ ∈ G.incidenceSet a ↔ G.Adj a b :=
- and_iff_left <| Sym2.mem_mk''_left _ _
+ and_iff_left <| Sym2.mem_mk_left _ _
#align simple_graph.mk_mem_incidence_set_left_iff SimpleGraph.mk'_mem_incidenceSet_left_iff
-/
#print SimpleGraph.mk'_mem_incidenceSet_right_iff /-
theorem mk'_mem_incidenceSet_right_iff : ⟦(a, b)⟧ ∈ G.incidenceSet b ↔ G.Adj a b :=
- and_iff_left <| Sym2.mem_mk''_right _ _
+ and_iff_left <| Sym2.mem_mk_right _ _
#align simple_graph.mk_mem_incidence_set_right_iff SimpleGraph.mk'_mem_incidenceSet_right_iff
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -600,22 +600,26 @@ theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \
variable {G G₁ G₂}
+#print SimpleGraph.disjoint_edgeSet /-
@[simp]
-theorem disjoint_edgeSetEmbedding :
- Disjoint G₁.edgeSetEmbedding G₂.edgeSetEmbedding ↔ Disjoint G₁ G₂ := by
+theorem disjoint_edgeSet : Disjoint G₁.edgeSetEmbedding G₂.edgeSetEmbedding ↔ Disjoint G₁ G₂ := by
rw [Set.disjoint_iff, disjoint_iff_inf_le, ← edge_set_inf, ← edge_set_bot, ← Set.le_iff_subset,
OrderEmbedding.le_iff_le]
-#align simple_graph.disjoint_edge_set SimpleGraph.disjoint_edgeSetEmbedding
+#align simple_graph.disjoint_edge_set SimpleGraph.disjoint_edgeSet
+-/
+#print SimpleGraph.edgeSet_eq_empty /-
@[simp]
-theorem edgeSetEmbedding_eq_empty : G.edgeSetEmbedding = ∅ ↔ G = ⊥ := by
- rwa [← edge_set_bot, edge_set_inj]
-#align simple_graph.edge_set_eq_empty SimpleGraph.edgeSetEmbedding_eq_empty
+theorem edgeSet_eq_empty : G.edgeSetEmbedding = ∅ ↔ G = ⊥ := by rwa [← edge_set_bot, edge_set_inj]
+#align simple_graph.edge_set_eq_empty SimpleGraph.edgeSet_eq_empty
+-/
+#print SimpleGraph.edgeSet_nonempty /-
@[simp]
-theorem edgeSetEmbedding_nonempty : G.edgeSetEmbedding.Nonempty ↔ G ≠ ⊥ := by
+theorem edgeSet_nonempty : G.edgeSetEmbedding.Nonempty ↔ G ≠ ⊥ := by
rw [Set.nonempty_iff_ne_empty, edge_set_eq_empty.ne]
-#align simple_graph.edge_set_nonempty SimpleGraph.edgeSetEmbedding_nonempty
+#align simple_graph.edge_set_nonempty SimpleGraph.edgeSet_nonempty
+-/
#print SimpleGraph.edgeSet_sdiff_sdiff_isDiag /-
/-- This lemma, combined with `edge_set_sdiff` and `edge_set_from_edge_set`,
@@ -1178,10 +1182,12 @@ theorem mem_neighborSet (v w : V) : w ∈ G.neighborSet v ↔ G.Adj v w :=
#align simple_graph.mem_neighbor_set SimpleGraph.mem_neighborSet
-/
+#print SimpleGraph.not_mem_neighborSet_self /-
@[simp]
theorem not_mem_neighborSet_self : a ∉ G.neighborSet a :=
(mem_neighborSet _ _ _).Not.2 <| G.loopless _
#align simple_graph.not_mem_neighbor_set_self SimpleGraph.not_mem_neighborSet_self
+-/
#print SimpleGraph.mem_incidenceSet /-
@[simp]
@@ -1399,11 +1405,12 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s =
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
-/
-#print SimpleGraph.deleteEdges_eq /-
+#print SimpleGraph.deleteEdges_eq_self /-
@[simp]
-theorem deleteEdges_eq {s : Set (Sym2 V)} : G.deleteEdges s = G ↔ Disjoint G.edgeSetEmbedding s :=
- by rw [delete_edges_eq_sdiff_from_edge_set, sdiff_eq_left, disjoint_from_edge_set]
-#align simple_graph.delete_edges_eq SimpleGraph.deleteEdges_eq
+theorem deleteEdges_eq_self {s : Set (Sym2 V)} :
+ G.deleteEdges s = G ↔ Disjoint G.edgeSetEmbedding s := by
+ rw [delete_edges_eq_sdiff_from_edge_set, sdiff_eq_left, disjoint_from_edge_set]
+#align simple_graph.delete_edges_eq SimpleGraph.deleteEdges_eq_self
-/
#print SimpleGraph.compl_eq_deleteEdges /-
@@ -1564,10 +1571,12 @@ theorem map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g
#align simple_graph.map_map SimpleGraph.map_map
-/
-instance decidableMap (f : V ↪ W) (G : SimpleGraph V) [DecidableRel (Relation.Map G.Adj f f)] :
- DecidableRel (G.map f).Adj :=
+#print SimpleGraph.instDecidableMapAdj /-
+instance instDecidableMapAdj (f : V ↪ W) (G : SimpleGraph V)
+ [DecidableRel (Relation.Map G.Adj f f)] : DecidableRel (G.map f).Adj :=
‹DecidableRel _›
-#align simple_graph.decidable_map SimpleGraph.decidableMap
+#align simple_graph.decidable_map SimpleGraph.instDecidableMapAdj
+-/
#print SimpleGraph.comap /-
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -794,6 +794,7 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
-/
+#print SimpleGraph.disjoint_fromEdgeSet /-
@[simp]
theorem disjoint_fromEdgeSet : Disjoint G (fromEdgeSet s) ↔ Disjoint G.edgeSetEmbedding s :=
by
@@ -801,11 +802,14 @@ theorem disjoint_fromEdgeSet : Disjoint G (fromEdgeSet s) ↔ Disjoint G.edgeSet
rw [← disjoint_edge_set, edge_set_from_edge_set, Set.disjoint_union_right, and_iff_left]
exact Set.disjoint_left.2 fun e he he' => not_is_diag_of_mem_edge_set _ he he'.2
#align simple_graph.disjoint_from_edge_set SimpleGraph.disjoint_fromEdgeSet
+-/
+#print SimpleGraph.fromEdgeSet_disjoint /-
@[simp]
theorem fromEdgeSet_disjoint : Disjoint (fromEdgeSet s) G ↔ Disjoint s G.edgeSetEmbedding := by
rw [disjoint_comm, disjoint_from_edge_set, disjoint_comm]
#align simple_graph.from_edge_set_disjoint SimpleGraph.fromEdgeSet_disjoint
+-/
instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSetEmbedding := by
rw [edge_set_from_edge_set s]; infer_instance
@@ -1395,10 +1399,12 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s =
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
-/
+#print SimpleGraph.deleteEdges_eq /-
@[simp]
theorem deleteEdges_eq {s : Set (Sym2 V)} : G.deleteEdges s = G ↔ Disjoint G.edgeSetEmbedding s :=
by rw [delete_edges_eq_sdiff_from_edge_set, sdiff_eq_left, disjoint_from_edge_set]
#align simple_graph.delete_edges_eq SimpleGraph.deleteEdges_eq
+-/
#print SimpleGraph.compl_eq_deleteEdges /-
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding := by ext;
@@ -1532,9 +1538,11 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
#align simple_graph.map_adj SimpleGraph.map_adj
-/
+#print SimpleGraph.map_adj_apply /-
theorem map_adj_apply {G : SimpleGraph V} {f : V ↪ W} {a b : V} :
(G.map f).Adj (f a) (f b) ↔ G.Adj a b := by simp
#align simple_graph.map_adj_apply SimpleGraph.map_adj_apply
+-/
#print SimpleGraph.map_monotone /-
theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
@@ -1542,15 +1550,19 @@ theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
#align simple_graph.map_monotone SimpleGraph.map_monotone
-/
+#print SimpleGraph.map_id /-
@[simp]
theorem map_id : G.map (Function.Embedding.refl _) = G :=
ext _ _ <| Relation.map_id_id _
#align simple_graph.map_id SimpleGraph.map_id
+-/
+#print SimpleGraph.map_map /-
@[simp]
theorem map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
ext _ _ <| Relation.map_map _ _ _ _ _
#align simple_graph.map_map SimpleGraph.map_map
+-/
instance decidableMap (f : V ↪ W) (G : SimpleGraph V) [DecidableRel (Relation.Map G.Adj f f)] :
DecidableRel (G.map f).Adj :=
@@ -1569,30 +1581,38 @@ protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V
#align simple_graph.comap SimpleGraph.comap
-/
+#print SimpleGraph.comap_id /-
@[simp]
theorem comap_id {G : SimpleGraph V} : G.comap id = G :=
ext _ _ rfl
#align simple_graph.comap_id SimpleGraph.comap_id
+-/
+#print SimpleGraph.comap_comap /-
@[simp]
theorem comap_comap {G : SimpleGraph X} (f : V → W) (g : W → X) :
(G.comap g).comap f = G.comap (g ∘ f) :=
rfl
#align simple_graph.comap_comap SimpleGraph.comap_comap
+-/
instance decidableComap (f : V → W) (G : SimpleGraph W) [DecidableRel G.Adj] :
DecidableRel (SimpleGraph.comap f G).Adj := fun _ _ => ‹DecidableRel G.Adj› _ _
#align simple_graph.decidable_comap SimpleGraph.decidableComap
+#print SimpleGraph.comap_symm /-
theorem comap_symm (G : SimpleGraph V) (e : V ≃ W) :
G.comap e.symm.toEmbedding = G.map e.toEmbedding := by ext;
simp only [Equiv.apply_eq_iff_eq_symm_apply, comap_adj, map_adj, Equiv.toEmbedding_apply,
exists_eq_right_right, exists_eq_right]
#align simple_graph.comap_symm SimpleGraph.comap_symm
+-/
+#print SimpleGraph.map_symm /-
theorem map_symm (G : SimpleGraph W) (e : V ≃ W) :
G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [← comap_symm, e.symm_symm]
#align simple_graph.map_symm SimpleGraph.map_symm
+-/
#print SimpleGraph.comap_monotone /-
theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by intro G G' h _ _ ha;
@@ -1638,6 +1658,7 @@ theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G
#align simple_graph.map_comap_le SimpleGraph.map_comap_le
-/
+#print Equiv.simpleGraph /-
/-- Equivalent types have equivalent simple graphs. -/
@[simps apply]
protected def Equiv.simpleGraph (e : V ≃ W) : SimpleGraph V ≃ SimpleGraph W
@@ -1647,21 +1668,28 @@ protected def Equiv.simpleGraph (e : V ≃ W) : SimpleGraph V ≃ SimpleGraph W
left_inv _ := by simp
right_inv _ := by simp
#align equiv.simple_graph Equiv.simpleGraph
+-/
+#print Equiv.simpleGraph_refl /-
@[simp]
theorem Equiv.simpleGraph_refl : (Equiv.refl V).SimpleGraph = Equiv.refl _ := by ext; rfl
#align equiv.simple_graph_refl Equiv.simpleGraph_refl
+-/
+#print Equiv.simpleGraph_trans /-
@[simp]
theorem Equiv.simpleGraph_trans (e₁ : V ≃ W) (e₂ : W ≃ X) :
(e₁.trans e₂).SimpleGraph = e₁.SimpleGraph.trans e₂.SimpleGraph :=
rfl
#align equiv.simple_graph_trans Equiv.simpleGraph_trans
+-/
+#print Equiv.symm_simpleGraph /-
@[simp]
theorem Equiv.symm_simpleGraph (e : V ≃ W) : e.SimpleGraph.symm = e.symm.SimpleGraph :=
rfl
#align equiv.symm_simple_graph Equiv.symm_simpleGraph
+-/
/-! ## Induced graphs -/
@@ -2150,10 +2178,12 @@ protected abbrev id : G →g G :=
#align simple_graph.hom.id SimpleGraph.Hom.id
-/
+#print SimpleGraph.Hom.coe_id /-
@[simp, norm_cast]
theorem coe_id : ⇑(Hom.id : G →g G) = id :=
rfl
#align simple_graph.hom.coe_id SimpleGraph.Hom.coe_id
+-/
instance [Subsingleton (V → W)] : Subsingleton (G →g H) :=
FunLike.coe_injective.Subsingleton
@@ -2275,15 +2305,19 @@ theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f
#align simple_graph.hom.coe_comp SimpleGraph.Hom.coe_comp
-/
+#print SimpleGraph.Hom.ofLe /-
/-- The graph homomorphism from a smaller graph to a bigger one. -/
def ofLe {H : SimpleGraph V} (h : G ≤ H) : G →g H :=
⟨id, h⟩
#align simple_graph.hom.of_le SimpleGraph.Hom.ofLe
+-/
+#print SimpleGraph.Hom.coe_ofLe /-
@[simp, norm_cast]
theorem coe_ofLe {H : SimpleGraph V} (h : G ≤ H) : ⇑(ofLe h) = id :=
rfl
#align simple_graph.hom.coe_of_le SimpleGraph.Hom.coe_ofLe
+-/
end Hom
@@ -2305,10 +2339,12 @@ abbrev toHom : G →g G' :=
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
-/
+#print SimpleGraph.Embedding.coe_toHom /-
@[simp]
theorem coe_toHom (f : G ↪g H) : ⇑f.toHom = f :=
rfl
#align simple_graph.embedding.coe_to_hom SimpleGraph.Embedding.coe_toHom
+-/
#print SimpleGraph.Embedding.map_adj_iff /-
@[simp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe
@@ -3,11 +3,12 @@ Copyright (c) 2020 Aaron Anderson, Jalex Stark, Kyle Miller. All rights reserved
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-/
+import Data.FunLike.Fintype
import Data.Rel
import Data.Set.Finite
import Data.Sym.Sym2
-#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"c6ef6387ede9983aee397d442974e61f89dfd87b"
+#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe"
/-!
# Simple graphs
@@ -422,6 +423,14 @@ theorem emptyGraph_eq_bot (V : Type u) : emptyGraph V = ⊥ :=
instance (V : Type u) : Inhabited (SimpleGraph V) :=
⟨⊥⟩
+instance [Subsingleton V] : Unique (SimpleGraph V)
+ where
+ default := ⊥
+ uniq G := by ext a b <;> simp [Subsingleton.elim a b]
+
+instance [Nontrivial V] : Nontrivial (SimpleGraph V) :=
+ ⟨⟨⊥, ⊤, fun h => not_subsingleton V ⟨by simpa [ext_iff, Function.funext_iff] using h⟩⟩⟩
+
section Decidable
variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
@@ -589,6 +598,25 @@ theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \
#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiff
-/
+variable {G G₁ G₂}
+
+@[simp]
+theorem disjoint_edgeSetEmbedding :
+ Disjoint G₁.edgeSetEmbedding G₂.edgeSetEmbedding ↔ Disjoint G₁ G₂ := by
+ rw [Set.disjoint_iff, disjoint_iff_inf_le, ← edge_set_inf, ← edge_set_bot, ← Set.le_iff_subset,
+ OrderEmbedding.le_iff_le]
+#align simple_graph.disjoint_edge_set SimpleGraph.disjoint_edgeSetEmbedding
+
+@[simp]
+theorem edgeSetEmbedding_eq_empty : G.edgeSetEmbedding = ∅ ↔ G = ⊥ := by
+ rwa [← edge_set_bot, edge_set_inj]
+#align simple_graph.edge_set_eq_empty SimpleGraph.edgeSetEmbedding_eq_empty
+
+@[simp]
+theorem edgeSetEmbedding_nonempty : G.edgeSetEmbedding.Nonempty ↔ G ≠ ⊥ := by
+ rw [Set.nonempty_iff_ne_empty, edge_set_eq_empty.ne]
+#align simple_graph.edge_set_nonempty SimpleGraph.edgeSetEmbedding_nonempty
+
#print SimpleGraph.edgeSet_sdiff_sdiff_isDiag /-
/-- This lemma, combined with `edge_set_sdiff` and `edge_set_from_edge_set`,
allows proving `(G \ from_edge_set s).edge_set = G.edge_set \ s` by `simp`.
@@ -629,6 +657,8 @@ theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSetEmbedding, ↑e
#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coe
-/
+variable (G G₁ G₂)
+
#print SimpleGraph.edge_other_ne /-
theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) {v : V} (h : v ∈ e) :
h.other ≠ v := by
@@ -764,6 +794,19 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
-/
+@[simp]
+theorem disjoint_fromEdgeSet : Disjoint G (fromEdgeSet s) ↔ Disjoint G.edgeSetEmbedding s :=
+ by
+ conv_rhs => rw [← Set.diff_union_inter s {e | e.IsDiag}]
+ rw [← disjoint_edge_set, edge_set_from_edge_set, Set.disjoint_union_right, and_iff_left]
+ exact Set.disjoint_left.2 fun e he he' => not_is_diag_of_mem_edge_set _ he he'.2
+#align simple_graph.disjoint_from_edge_set SimpleGraph.disjoint_fromEdgeSet
+
+@[simp]
+theorem fromEdgeSet_disjoint : Disjoint (fromEdgeSet s) G ↔ Disjoint s G.edgeSetEmbedding := by
+ rw [disjoint_comm, disjoint_from_edge_set, disjoint_comm]
+#align simple_graph.from_edge_set_disjoint SimpleGraph.fromEdgeSet_disjoint
+
instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSetEmbedding := by
rw [edge_set_from_edge_set s]; infer_instance
@@ -1131,6 +1174,11 @@ theorem mem_neighborSet (v w : V) : w ∈ G.neighborSet v ↔ G.Adj v w :=
#align simple_graph.mem_neighbor_set SimpleGraph.mem_neighborSet
-/
+@[simp]
+theorem not_mem_neighborSet_self : a ∉ G.neighborSet a :=
+ (mem_neighborSet _ _ _).Not.2 <| G.loopless _
+#align simple_graph.not_mem_neighbor_set_self SimpleGraph.not_mem_neighborSet_self
+
#print SimpleGraph.mem_incidenceSet /-
@[simp]
theorem mem_incidenceSet (v w : V) : ⟦(v, w)⟧ ∈ G.incidenceSet v ↔ G.Adj v w := by
@@ -1347,6 +1395,11 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s =
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
-/
+@[simp]
+theorem deleteEdges_eq {s : Set (Sym2 V)} : G.deleteEdges s = G ↔ Disjoint G.edgeSetEmbedding s :=
+ by rw [delete_edges_eq_sdiff_from_edge_set, sdiff_eq_left, disjoint_from_edge_set]
+#align simple_graph.delete_edges_eq SimpleGraph.deleteEdges_eq
+
#print SimpleGraph.compl_eq_deleteEdges /-
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding := by ext;
simp
@@ -1428,19 +1481,19 @@ def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
#align simple_graph.delete_far SimpleGraph.DeleteFar
-/
-open scoped Classical
-
variable {G}
#print SimpleGraph.deleteFar_iff /-
theorem deleteFar_iff :
- G.DeleteFar p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card :=
+ G.DeleteFar p r ↔
+ ∀ ⦃H : SimpleGraph _⦄ [DecidableRel H.Adj],
+ H ≤ G → p H → r ≤ G.edge_finset.card - H.edge_finset.card :=
by
- refine' ⟨fun h H hHG hH => _, fun h s hs hG => _⟩
+ refine' ⟨fun h H _ hHG hH => _, fun h s hs hG => _⟩
· have := h (sdiff_subset G.edge_finset H.edge_finset)
simp only [delete_edges_sdiff_eq_of_le _ hHG, edge_finset_mono hHG, card_sdiff,
card_le_of_subset, coe_sdiff, coe_edge_finset, Nat.cast_sub] at this
- exact this hH
+ convert this hH
·
simpa [card_sdiff hs, edge_finset_delete_edges, -Set.toFinset_card, Nat.cast_sub,
card_le_of_subset hs] using h (G.delete_edges_le s) hG
@@ -1479,12 +1532,31 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
#align simple_graph.map_adj SimpleGraph.map_adj
-/
+theorem map_adj_apply {G : SimpleGraph V} {f : V ↪ W} {a b : V} :
+ (G.map f).Adj (f a) (f b) ↔ G.Adj a b := by simp
+#align simple_graph.map_adj_apply SimpleGraph.map_adj_apply
+
#print SimpleGraph.map_monotone /-
theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩; exact ⟨_, _, h ha, rfl, rfl⟩
#align simple_graph.map_monotone SimpleGraph.map_monotone
-/
+@[simp]
+theorem map_id : G.map (Function.Embedding.refl _) = G :=
+ ext _ _ <| Relation.map_id_id _
+#align simple_graph.map_id SimpleGraph.map_id
+
+@[simp]
+theorem map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
+ ext _ _ <| Relation.map_map _ _ _ _ _
+#align simple_graph.map_map SimpleGraph.map_map
+
+instance decidableMap (f : V ↪ W) (G : SimpleGraph V) [DecidableRel (Relation.Map G.Adj f f)] :
+ DecidableRel (G.map f).Adj :=
+ ‹DecidableRel _›
+#align simple_graph.decidable_map SimpleGraph.decidableMap
+
#print SimpleGraph.comap /-
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
adjacency relation.
@@ -1497,6 +1569,31 @@ protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V
#align simple_graph.comap SimpleGraph.comap
-/
+@[simp]
+theorem comap_id {G : SimpleGraph V} : G.comap id = G :=
+ ext _ _ rfl
+#align simple_graph.comap_id SimpleGraph.comap_id
+
+@[simp]
+theorem comap_comap {G : SimpleGraph X} (f : V → W) (g : W → X) :
+ (G.comap g).comap f = G.comap (g ∘ f) :=
+ rfl
+#align simple_graph.comap_comap SimpleGraph.comap_comap
+
+instance decidableComap (f : V → W) (G : SimpleGraph W) [DecidableRel G.Adj] :
+ DecidableRel (SimpleGraph.comap f G).Adj := fun _ _ => ‹DecidableRel G.Adj› _ _
+#align simple_graph.decidable_comap SimpleGraph.decidableComap
+
+theorem comap_symm (G : SimpleGraph V) (e : V ≃ W) :
+ G.comap e.symm.toEmbedding = G.map e.toEmbedding := by ext;
+ simp only [Equiv.apply_eq_iff_eq_symm_apply, comap_adj, map_adj, Equiv.toEmbedding_apply,
+ exists_eq_right_right, exists_eq_right]
+#align simple_graph.comap_symm SimpleGraph.comap_symm
+
+theorem map_symm (G : SimpleGraph W) (e : V ≃ W) :
+ G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [← comap_symm, e.symm_symm]
+#align simple_graph.map_symm SimpleGraph.map_symm
+
#print SimpleGraph.comap_monotone /-
theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by intro G G' h _ _ ha;
exact h ha
@@ -1541,6 +1638,31 @@ theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G
#align simple_graph.map_comap_le SimpleGraph.map_comap_le
-/
+/-- Equivalent types have equivalent simple graphs. -/
+@[simps apply]
+protected def Equiv.simpleGraph (e : V ≃ W) : SimpleGraph V ≃ SimpleGraph W
+ where
+ toFun := SimpleGraph.comap e.symm
+ invFun := SimpleGraph.comap e
+ left_inv _ := by simp
+ right_inv _ := by simp
+#align equiv.simple_graph Equiv.simpleGraph
+
+@[simp]
+theorem Equiv.simpleGraph_refl : (Equiv.refl V).SimpleGraph = Equiv.refl _ := by ext; rfl
+#align equiv.simple_graph_refl Equiv.simpleGraph_refl
+
+@[simp]
+theorem Equiv.simpleGraph_trans (e₁ : V ≃ W) (e₂ : W ≃ X) :
+ (e₁.trans e₂).SimpleGraph = e₁.SimpleGraph.trans e₂.SimpleGraph :=
+ rfl
+#align equiv.simple_graph_trans Equiv.simpleGraph_trans
+
+@[simp]
+theorem Equiv.symm_simpleGraph (e : V ≃ W) : e.SimpleGraph.symm = e.symm.SimpleGraph :=
+ rfl
+#align equiv.symm_simple_graph Equiv.symm_simpleGraph
+
/-! ## Induced graphs -/
@@ -2019,15 +2141,34 @@ infixl:50 " ≃g " => Iso
namespace Hom
-variable {G G'} (f : G →g G')
+variable {G G'} {H : SimpleGraph W} (f : G →g G')
#print SimpleGraph.Hom.id /-
/-- The identity homomorphism from a graph to itself. -/
-abbrev id : G →g G :=
+protected abbrev id : G →g G :=
RelHom.id _
#align simple_graph.hom.id SimpleGraph.Hom.id
-/
+@[simp, norm_cast]
+theorem coe_id : ⇑(Hom.id : G →g G) = id :=
+ rfl
+#align simple_graph.hom.coe_id SimpleGraph.Hom.coe_id
+
+instance [Subsingleton (V → W)] : Subsingleton (G →g H) :=
+ FunLike.coe_injective.Subsingleton
+
+instance [IsEmpty V] : Unique (G →g H)
+ where
+ default := ⟨isEmptyElim, isEmptyElim⟩
+ uniq _ := Subsingleton.elim _ _
+
+noncomputable instance [Fintype V] [Fintype W] : Fintype (G →g H) := by
+ classical exact FunLike.fintype _
+
+instance [Finite V] [Finite W] : Finite (G →g H) :=
+ FunLike.finite _
+
#print SimpleGraph.Hom.map_adj /-
theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
f.map_rel' h
@@ -2134,11 +2275,21 @@ theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f
#align simple_graph.hom.coe_comp SimpleGraph.Hom.coe_comp
-/
+/-- The graph homomorphism from a smaller graph to a bigger one. -/
+def ofLe {H : SimpleGraph V} (h : G ≤ H) : G →g H :=
+ ⟨id, h⟩
+#align simple_graph.hom.of_le SimpleGraph.Hom.ofLe
+
+@[simp, norm_cast]
+theorem coe_ofLe {H : SimpleGraph V} (h : G ≤ H) : ⇑(ofLe h) = id :=
+ rfl
+#align simple_graph.hom.coe_of_le SimpleGraph.Hom.coe_ofLe
+
end Hom
namespace Embedding
-variable {G G'} (f : G ↪g G')
+variable {G G'} {H : SimpleGraph W} (f : G ↪g G')
#print SimpleGraph.Embedding.refl /-
/-- The identity embedding from a graph to itself. -/
@@ -2154,7 +2305,13 @@ abbrev toHom : G →g G' :=
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
-/
+@[simp]
+theorem coe_toHom (f : G ↪g H) : ⇑f.toHom = f :=
+ rfl
+#align simple_graph.embedding.coe_to_hom SimpleGraph.Embedding.coe_toHom
+
#print SimpleGraph.Embedding.map_adj_iff /-
+@[simp]
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2020 Aaron Anderson, Jalex Stark, Kyle Miller. All rights reserved
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-/
-import Mathbin.Data.Rel
-import Mathbin.Data.Set.Finite
-import Mathbin.Data.Sym.Sym2
+import Data.Rel
+import Data.Set.Finite
+import Data.Sym.Sym2
#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"c6ef6387ede9983aee397d442974e61f89dfd87b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -551,10 +551,10 @@ theorem edgeSet_injective : Injective (edgeSetEmbedding : SimpleGraph V → Set
#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injective
-/
-alias edge_set_subset_edge_set ↔ _ edge_set_mono
+alias ⟨_, edge_set_mono⟩ := edge_set_subset_edge_set
#align simple_graph.edge_set_mono SimpleGraph.edgeSet_mono
-alias edge_set_ssubset_edge_set ↔ _ edge_set_strict_mono
+alias ⟨_, edge_set_strict_mono⟩ := edge_set_ssubset_edge_set
#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_mono
attribute [mono] edge_set_mono edge_set_strict_mono
@@ -1074,10 +1074,10 @@ theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔
#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
-/
-alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
+alias ⟨_, edge_finset_mono⟩ := edge_finset_subset_edge_finset
#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
-alias edge_finset_ssubset_edge_finset ↔ _ edge_finset_strict_mono
+alias ⟨_, edge_finset_strict_mono⟩ := edge_finset_ssubset_edge_finset
#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
attribute [mono] edge_finset_mono edge_finset_strict_mono
@@ -1447,7 +1447,7 @@ theorem deleteFar_iff :
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
-/
-alias delete_far_iff ↔ delete_far.le_card_sub_card _
+alias ⟨delete_far.le_card_sub_card, _⟩ := delete_far_iff
#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
#print SimpleGraph.DeleteFar.mono /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -2262,18 +2262,18 @@ section InduceHom
variable {G G'} {G'' : SimpleGraph X} {s : Set V} {t : Set W} {r : Set X} (φ : G →g G')
(φst : Set.MapsTo φ s t) (ψ : G' →g G'') (ψtr : Set.MapsTo ψ t r)
-#print SimpleGraph.InduceHom /-
+#print SimpleGraph.induceHom /-
/-- The restriction of a morphism of graphs to induced subgraphs. -/
-def InduceHom : G.induce s →g G'.induce t
+def induceHom : G.induce s →g G'.induce t
where
toFun := Set.MapsTo.restrict φ s t φst
map_rel' _ _ := φ.map_rel'
-#align simple_graph.induce_hom SimpleGraph.InduceHom
+#align simple_graph.induce_hom SimpleGraph.induceHom
-/
#print SimpleGraph.coe_induceHom /-
@[simp, norm_cast]
-theorem coe_induceHom : ⇑(InduceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
+theorem coe_induceHom : ⇑(induceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
rfl
#align simple_graph.coe_induce_hom SimpleGraph.coe_induceHom
-/
@@ -2281,14 +2281,14 @@ theorem coe_induceHom : ⇑(InduceHom φ φst) = Set.MapsTo.restrict φ s t φst
#print SimpleGraph.induceHom_id /-
@[simp]
theorem induceHom_id (G : SimpleGraph V) (s) :
- InduceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id := by ext x; rfl
+ induceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id := by ext x; rfl
#align simple_graph.induce_hom_id SimpleGraph.induceHom_id
-/
#print SimpleGraph.induceHom_comp /-
@[simp]
theorem induceHom_comp :
- (InduceHom ψ ψtr).comp (InduceHom φ φst) = InduceHom (ψ.comp φ) (ψtr.comp φst) := by ext x; rfl
+ (induceHom ψ ψtr).comp (induceHom φ φst) = induceHom (ψ.comp φ) (ψtr.comp φst) := by ext x; rfl
#align simple_graph.induce_hom_comp SimpleGraph.induceHom_comp
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2020 Aaron Anderson, Jalex Stark, Kyle Miller. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-
-! This file was ported from Lean 3 source module combinatorics.simple_graph.basic
-! leanprover-community/mathlib commit c6ef6387ede9983aee397d442974e61f89dfd87b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Rel
import Mathbin.Data.Set.Finite
import Mathbin.Data.Sym.Sym2
+#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"c6ef6387ede9983aee397d442974e61f89dfd87b"
+
/-!
# Simple graphs
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -1960,7 +1960,7 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
constructor
· rw [Set.mem_toFinset]
apply not_mem_common_neighbors_right
- · rw [Finset.insert_subset]
+ · rw [Finset.insert_subset_iff]
constructor
· simpa
· rw [neighbor_finset, Set.toFinset_subset_toFinset]
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -372,7 +372,7 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
le_top := fun x v w h => x.ne_of_adj h
bot_le := fun x v w h => h.elim
sdiff_eq := fun x y => by
- ext (v w); refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
+ ext v w; refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
rintro rfl; exact x.irrefl h.1
inf_compl_le_bot := fun a v w h => False.elim <| h.2.2 h.1
top_le_sup_compl := fun a v w ne => by by_cases a.adj v w; exact Or.inl h; exact Or.inr ⟨Ne, h⟩
@@ -713,21 +713,21 @@ theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ {e | e.IsDi
#print SimpleGraph.fromEdgeSet_edgeSet /-
@[simp]
-theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G := by ext (v w);
+theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G := by ext v w;
exact ⟨fun h => h.1, fun h => ⟨h, G.ne_of_adj h⟩⟩
#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSet
-/
#print SimpleGraph.fromEdgeSet_empty /-
@[simp]
-theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ := by ext (v w);
+theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ := by ext v w;
simp only [from_edge_set_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_empty
-/
#print SimpleGraph.fromEdgeSet_univ /-
@[simp]
-theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by ext (v w);
+theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by ext v w;
simp only [from_edge_set_adj, Set.mem_univ, true_and_iff, top_adj]
#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univ
-/
@@ -735,7 +735,7 @@ theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by ext
#print SimpleGraph.fromEdgeSet_inf /-
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
- fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by ext (v w);
+ fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by ext v w;
simp only [from_edge_set_adj, Set.mem_inter_iff, Ne.def, inf_adj]; tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
-/
@@ -743,7 +743,7 @@ theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
#print SimpleGraph.fromEdgeSet_sup /-
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
- fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) := by ext (v w);
+ fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) := by ext v w;
simp [Set.mem_union, or_and_right]
#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_sup
-/
@@ -751,7 +751,7 @@ theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
#print SimpleGraph.fromEdgeSet_sdiff /-
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
- fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) := by ext (v w);
+ fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) := by ext v w;
constructor <;> simp (config := { contextual := true })
#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiff
-/
@@ -1399,7 +1399,7 @@ theorem deleteEdges_eq_inter_edgeSet (s : Set (Sym2 V)) :
#print SimpleGraph.deleteEdges_sdiff_eq_of_le /-
theorem deleteEdges_sdiff_eq_of_le {H : SimpleGraph V} (h : H ≤ G) :
- G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H := by ext (v w);
+ G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H := by ext v w;
constructor <;> simp (config := { contextual := true }) [@h v w]
#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_le
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -250,10 +250,12 @@ instance : Sup (SimpleGraph V) :=
{ Adj := x.Adj ⊔ y.Adj
symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }⟩
+#print SimpleGraph.sup_adj /-
@[simp]
theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v w ∨ y.Adj v w :=
Iff.rfl
#align simple_graph.sup_adj SimpleGraph.sup_adj
+-/
/-- The infimum of two graphs `x ⊓ y` has edges where both `x` and `y` have edges. -/
instance : Inf (SimpleGraph V) :=
@@ -261,10 +263,12 @@ instance : Inf (SimpleGraph V) :=
{ Adj := x.Adj ⊓ y.Adj
symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }⟩
+#print SimpleGraph.inf_adj /-
@[simp]
theorem inf_adj (x y : SimpleGraph V) (v w : V) : (x ⊓ y).Adj v w ↔ x.Adj v w ∧ y.Adj v w :=
Iff.rfl
#align simple_graph.inf_adj SimpleGraph.inf_adj
+-/
/-- We define `Gᶜ` to be the `simple_graph V` such that no two adjacent vertices in `G`
are adjacent in the complement, and every nonadjacent pair of vertices is adjacent
@@ -289,10 +293,12 @@ instance : SDiff (SimpleGraph V) :=
{ Adj := x.Adj \ y.Adj
symm := fun v w h => by change x.adj w v ∧ ¬y.adj w v <;> rwa [x.adj_comm, y.adj_comm] }⟩
+#print SimpleGraph.sdiff_adj /-
@[simp]
theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v w ∧ ¬y.Adj v w :=
Iff.rfl
#align simple_graph.sdiff_adj SimpleGraph.sdiff_adj
+-/
instance : SupSet (SimpleGraph V) :=
⟨fun s =>
@@ -306,34 +312,46 @@ instance : InfSet (SimpleGraph V) :=
symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
loopless := fun a h => h.2 rfl }⟩
+#print SimpleGraph.sSup_adj /-
@[simp]
theorem sSup_adj {s : Set (SimpleGraph V)} {a b : V} : (sSup s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
Iff.rfl
#align simple_graph.Sup_adj SimpleGraph.sSup_adj
+-/
+#print SimpleGraph.sInf_adj /-
@[simp]
theorem sInf_adj {s : Set (SimpleGraph V)} : (sInf s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
Iff.rfl
#align simple_graph.Inf_adj SimpleGraph.sInf_adj
+-/
+#print SimpleGraph.iSup_adj /-
@[simp]
theorem iSup_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [iSup]
#align simple_graph.supr_adj SimpleGraph.iSup_adj
+-/
+#print SimpleGraph.iInf_adj /-
@[simp]
theorem iInf_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
simp [iInf]
#align simple_graph.infi_adj SimpleGraph.iInf_adj
+-/
+#print SimpleGraph.sInf_adj_of_nonempty /-
theorem sInf_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
(sInf s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
sInf_adj.trans <| and_iff_left_of_imp <| by obtain ⟨G, hG⟩ := hs; exact fun h => (h _ hG).Ne
#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonempty
+-/
+#print SimpleGraph.iInf_adj_of_nonempty /-
theorem iInf_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
(⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
simp [iInf, Inf_adj_of_nonempty (Set.range_nonempty _)]
#align simple_graph.infi_adj_of_nonempty SimpleGraph.iInf_adj_of_nonempty
+-/
/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.adj a b → H.adj a b`. -/
instance : DistribLattice (SimpleGraph V) :=
@@ -375,25 +393,33 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
simpa [forall_or_left, or_and_right, and_iff_left_of_imp adj.ne] using this
exact and_iff_left h }
+#print SimpleGraph.top_adj /-
@[simp]
theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
Iff.rfl
#align simple_graph.top_adj SimpleGraph.top_adj
+-/
+#print SimpleGraph.bot_adj /-
@[simp]
theorem bot_adj (v w : V) : (⊥ : SimpleGraph V).Adj v w ↔ False :=
Iff.rfl
#align simple_graph.bot_adj SimpleGraph.bot_adj
+-/
+#print SimpleGraph.completeGraph_eq_top /-
@[simp]
theorem completeGraph_eq_top (V : Type u) : completeGraph V = ⊤ :=
rfl
#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_top
+-/
+#print SimpleGraph.emptyGraph_eq_bot /-
@[simp]
theorem emptyGraph_eq_bot (V : Type u) : emptyGraph V = ⊥ :=
rfl
#align simple_graph.empty_graph_eq_bot SimpleGraph.emptyGraph_eq_bot
+-/
@[simps]
instance (V : Type u) : Inhabited (SimpleGraph V) :=
@@ -403,22 +429,32 @@ section Decidable
variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
+#print SimpleGraph.Bot.adjDecidable /-
instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => decidableFalse
#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidable
+-/
+#print SimpleGraph.Sup.adjDecidable /-
instance Sup.adjDecidable : DecidableRel (G ⊔ H).Adj := fun v w => Or.decidable
#align simple_graph.sup.adj_decidable SimpleGraph.Sup.adjDecidable
+-/
+#print SimpleGraph.Inf.adjDecidable /-
instance Inf.adjDecidable : DecidableRel (G ⊓ H).Adj := fun v w => And.decidable
#align simple_graph.inf.adj_decidable SimpleGraph.Inf.adjDecidable
+-/
+#print SimpleGraph.Sdiff.adjDecidable /-
instance Sdiff.adjDecidable : DecidableRel (G \ H).Adj := fun v w => And.decidable
#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidable
+-/
variable [DecidableEq V]
+#print SimpleGraph.Top.adjDecidable /-
instance Top.adjDecidable : DecidableRel (⊤ : SimpleGraph V).Adj := fun v w => Not.decidable
#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidable
+-/
#print SimpleGraph.Compl.adjDecidable /-
instance Compl.adjDecidable : DecidableRel Gᶜ.Adj := fun v w => And.decidable
@@ -478,33 +514,45 @@ def edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V) :=
#align simple_graph.edge_set SimpleGraph.edgeSetEmbedding
-/
+#print SimpleGraph.mem_edgeSet /-
@[simp]
theorem mem_edgeSet : ⟦(v, w)⟧ ∈ G.edgeSetEmbedding ↔ G.Adj v w :=
Iff.rfl
#align simple_graph.mem_edge_set SimpleGraph.mem_edgeSet
+-/
+#print SimpleGraph.not_isDiag_of_mem_edgeSet /-
theorem not_isDiag_of_mem_edgeSet : e ∈ G.edgeSetEmbedding → ¬e.IsDiag :=
Sym2.ind (fun v w => Adj.ne) e
#align simple_graph.not_is_diag_of_mem_edge_set SimpleGraph.not_isDiag_of_mem_edgeSet
+-/
+#print SimpleGraph.edgeSet_inj /-
@[simp]
theorem edgeSet_inj : G₁.edgeSetEmbedding = G₂.edgeSetEmbedding ↔ G₁ = G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).eq_iff_eq
#align simple_graph.edge_set_inj SimpleGraph.edgeSet_inj
+-/
+#print SimpleGraph.edgeSet_subset_edgeSet /-
@[simp]
theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding ↔ G₁ ≤ G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).le_iff_le
#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSet
+-/
+#print SimpleGraph.edgeSet_ssubset_edgeSet /-
@[simp]
theorem edgeSet_ssubset_edgeSet : G₁.edgeSetEmbedding ⊂ G₂.edgeSetEmbedding ↔ G₁ < G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).lt_iff_lt
#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSet
+-/
+#print SimpleGraph.edgeSet_injective /-
theorem edgeSet_injective : Injective (edgeSetEmbedding : SimpleGraph V → Set (Sym2 V)) :=
edgeSetEmbedding.Injective
#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injective
+-/
alias edge_set_subset_edge_set ↔ _ edge_set_mono
#align simple_graph.edge_set_mono SimpleGraph.edgeSet_mono
@@ -516,26 +564,35 @@ attribute [mono] edge_set_mono edge_set_strict_mono
variable (G₁ G₂)
+#print SimpleGraph.edgeSet_bot /-
@[simp]
theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSetEmbedding = ∅ :=
Sym2.fromRel_bot
#align simple_graph.edge_set_bot SimpleGraph.edgeSet_bot
+-/
+#print SimpleGraph.edgeSet_sup /-
@[simp]
theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∪ G₂.edgeSetEmbedding := by
ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_sup SimpleGraph.edgeSet_sup
+-/
+#print SimpleGraph.edgeSet_inf /-
@[simp]
theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∩ G₂.edgeSetEmbedding := by
ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_inf SimpleGraph.edgeSet_inf
+-/
+#print SimpleGraph.edgeSet_sdiff /-
@[simp]
theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \ G₂.edgeSetEmbedding := by
ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiff
+-/
+#print SimpleGraph.edgeSet_sdiff_sdiff_isDiag /-
/-- This lemma, combined with `edge_set_sdiff` and `edge_set_from_edge_set`,
allows proving `(G \ from_edge_set s).edge_set = G.edge_set \ s` by `simp`.
-/
@@ -548,7 +605,9 @@ theorem edgeSet_sdiff_sdiff_isDiag (G : SimpleGraph V) (s : Set (Sym2 V)) :
intro h
simp only [G.not_is_diag_of_mem_edge_set h, imp_false]
#align simple_graph.edge_set_sdiff_sdiff_is_diag SimpleGraph.edgeSet_sdiff_sdiff_isDiag
+-/
+#print SimpleGraph.adj_iff_exists_edge /-
/-- Two vertices are adjacent iff there is an edge between them. The
condition `v ≠ w` ensures they are different endpoints of the edge,
which is necessary since when `v = w` the existential
@@ -565,44 +624,61 @@ theorem adj_iff_exists_edge {v w : V} :
subst e
rwa [mem_edge_set] at he
#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edge
+-/
+#print SimpleGraph.adj_iff_exists_edge_coe /-
theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSetEmbedding, ↑e = ⟦(a, b)⟧ := by
simp only [mem_edge_set, exists_prop, SetCoe.exists, exists_eq_right, Subtype.coe_mk]
#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coe
+-/
+#print SimpleGraph.edge_other_ne /-
theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) {v : V} (h : v ∈ e) :
h.other ≠ v := by
erw [← Sym2.other_spec h, Sym2.eq_swap] at he
exact G.ne_of_adj he
#align simple_graph.edge_other_ne SimpleGraph.edge_other_ne
+-/
+#print SimpleGraph.decidableMemEdgeSet /-
instance decidableMemEdgeSet [DecidableRel G.Adj] : DecidablePred (· ∈ G.edgeSetEmbedding) :=
Sym2.fromRel.decidablePred _
#align simple_graph.decidable_mem_edge_set SimpleGraph.decidableMemEdgeSet
+-/
+#print SimpleGraph.fintypeEdgeSet /-
instance fintypeEdgeSet [DecidableEq V] [Fintype V] [DecidableRel G.Adj] :
Fintype G.edgeSetEmbedding :=
Subtype.fintype _
#align simple_graph.fintype_edge_set SimpleGraph.fintypeEdgeSet
+-/
+#print SimpleGraph.fintypeEdgeSetBot /-
instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding := by rw [edge_set_bot];
infer_instance
#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBot
+-/
+#print SimpleGraph.fintypeEdgeSetSup /-
instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊔ G₂).edgeSetEmbedding := by rw [edge_set_sup];
infer_instance
#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSup
+-/
+#print SimpleGraph.fintypeEdgeSetInf /-
instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊓ G₂).edgeSetEmbedding := by rw [edge_set_inf];
exact Set.fintypeInter _ _
#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInf
+-/
+#print SimpleGraph.fintypeEdgeSetSdiff /-
instance fintypeEdgeSetSdiff [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ \ G₂).edgeSetEmbedding := by rw [edge_set_sdiff];
exact Set.fintypeDiff _ _
#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiff
+-/
end EdgeSet
@@ -626,45 +702,59 @@ theorem fromEdgeSet_adj : (fromEdgeSet s).Adj v w ↔ ⟦(v, w)⟧ ∈ s ∧ v
#align simple_graph.from_edge_set_adj SimpleGraph.fromEdgeSet_adj
-/
+#print SimpleGraph.edgeSet_fromEdgeSet /-
-- Note: we need to make sure `from_edge_set_adj` and this lemma are confluent.
-- In particular, both yield `⟦(u, v)⟧ ∈ (from_edge_set s).edge_set` ==> `⟦(v, w)⟧ ∈ s ∧ v ≠ w`.
@[simp]
theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ {e | e.IsDiag} := by ext e;
exact Sym2.ind (by simp) e
#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSet
+-/
+#print SimpleGraph.fromEdgeSet_edgeSet /-
@[simp]
theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G := by ext (v w);
exact ⟨fun h => h.1, fun h => ⟨h, G.ne_of_adj h⟩⟩
#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSet
+-/
+#print SimpleGraph.fromEdgeSet_empty /-
@[simp]
theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ := by ext (v w);
simp only [from_edge_set_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_empty
+-/
+#print SimpleGraph.fromEdgeSet_univ /-
@[simp]
theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by ext (v w);
simp only [from_edge_set_adj, Set.mem_univ, true_and_iff, top_adj]
#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univ
+-/
+#print SimpleGraph.fromEdgeSet_inf /-
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by ext (v w);
simp only [from_edge_set_adj, Set.mem_inter_iff, Ne.def, inf_adj]; tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
+-/
+#print SimpleGraph.fromEdgeSet_sup /-
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) := by ext (v w);
simp [Set.mem_union, or_and_right]
#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_sup
+-/
+#print SimpleGraph.fromEdgeSet_sdiff /-
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) := by ext (v w);
constructor <;> simp (config := { contextual := true })
#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiff
+-/
#print SimpleGraph.fromEdgeSet_mono /-
@[mono]
@@ -740,10 +830,12 @@ theorem Dart.edge_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).edge = ⟦
#align simple_graph.dart.edge_mk SimpleGraph.Dart.edge_mk
-/
+#print SimpleGraph.Dart.edge_mem /-
@[simp]
theorem Dart.edge_mem (d : G.Dart) : d.edge ∈ G.edgeSetEmbedding :=
d.is_adj
#align simple_graph.dart.edge_mem SimpleGraph.Dart.edge_mem
+-/
#print SimpleGraph.Dart.symm /-
/-- The dart with reversed orientation from a given dart. -/
@@ -840,9 +932,11 @@ theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighb
#align simple_graph.dart_of_neighbor_set_injective SimpleGraph.dartOfNeighborSet_injective
-/
+#print SimpleGraph.nonempty_dart_top /-
instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart := by
obtain ⟨v, w, h⟩ := exists_pair_ne V; exact ⟨⟨(v, w), h⟩⟩
#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_top
+-/
end Darts
@@ -856,8 +950,10 @@ def incidenceSet (v : V) : Set (Sym2 V) :=
#align simple_graph.incidence_set SimpleGraph.incidenceSet
-/
+#print SimpleGraph.incidenceSet_subset /-
theorem incidenceSet_subset (v : V) : G.incidenceSet v ⊆ G.edgeSetEmbedding := fun _ h => h.1
#align simple_graph.incidence_set_subset SimpleGraph.incidenceSet_subset
+-/
#print SimpleGraph.mk'_mem_incidenceSet_iff /-
theorem mk'_mem_incidenceSet_iff : ⟦(b, c)⟧ ∈ G.incidenceSet a ↔ G.Adj b c ∧ (a = b ∨ a = c) :=
@@ -877,16 +973,21 @@ theorem mk'_mem_incidenceSet_right_iff : ⟦(a, b)⟧ ∈ G.incidenceSet b ↔ G
#align simple_graph.mk_mem_incidence_set_right_iff SimpleGraph.mk'_mem_incidenceSet_right_iff
-/
+#print SimpleGraph.edge_mem_incidenceSet_iff /-
theorem edge_mem_incidenceSet_iff {e : G.edgeSetEmbedding} :
↑e ∈ G.incidenceSet a ↔ a ∈ (e : Sym2 V) :=
and_iff_right e.2
#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iff
+-/
+#print SimpleGraph.incidenceSet_inter_incidenceSet_subset /-
theorem incidenceSet_inter_incidenceSet_subset (h : a ≠ b) :
G.incidenceSet a ∩ G.incidenceSet b ⊆ {⟦(a, b)⟧} := fun e he =>
(Sym2.mem_and_mem_iff h).1 ⟨he.1.2, he.2.2⟩
#align simple_graph.incidence_set_inter_incidence_set_subset SimpleGraph.incidenceSet_inter_incidenceSet_subset
+-/
+#print SimpleGraph.incidenceSet_inter_incidenceSet_of_adj /-
theorem incidenceSet_inter_incidenceSet_of_adj (h : G.Adj a b) :
G.incidenceSet a ∩ G.incidenceSet b = {⟦(a, b)⟧} :=
by
@@ -894,6 +995,7 @@ theorem incidenceSet_inter_incidenceSet_of_adj (h : G.Adj a b) :
rintro _ (rfl : _ = ⟦(a, b)⟧)
exact ⟨G.mk_mem_incidence_set_left_iff.2 h, G.mk_mem_incidence_set_right_iff.2 h⟩
#align simple_graph.incidence_set_inter_incidence_set_of_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_adj
+-/
#print SimpleGraph.adj_of_mem_incidenceSet /-
theorem adj_of_mem_incidenceSet (h : a ≠ b) (ha : e ∈ G.incidenceSet a)
@@ -903,6 +1005,7 @@ theorem adj_of_mem_incidenceSet (h : a ≠ b) (ha : e ∈ G.incidenceSet a)
#align simple_graph.adj_of_mem_incidence_set SimpleGraph.adj_of_mem_incidenceSet
-/
+#print SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adj /-
theorem incidenceSet_inter_incidenceSet_of_not_adj (h : ¬G.Adj a b) (hn : a ≠ b) :
G.incidenceSet a ∩ G.incidenceSet b = ∅ :=
by
@@ -910,6 +1013,7 @@ theorem incidenceSet_inter_incidenceSet_of_not_adj (h : ¬G.Adj a b) (hn : a ≠
intro u ha hb
exact h (G.adj_of_mem_incidence_set hn ha hb)
#align simple_graph.incidence_set_inter_incidence_set_of_not_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adj
+-/
#print SimpleGraph.decidableMemIncidenceSet /-
instance decidableMemIncidenceSet [DecidableEq V] [DecidableRel G.Adj] (v : V) :
@@ -922,42 +1026,56 @@ section EdgeFinset
variable {G₁ G₂ : SimpleGraph V} [Fintype G.edgeSetEmbedding] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding]
+#print SimpleGraph.edgeFinset /-
/-- The `edge_set` of the graph as a `finset`.
-/
@[reducible]
def edgeFinset : Finset (Sym2 V) :=
Set.toFinset G.edgeSetEmbedding
#align simple_graph.edge_finset SimpleGraph.edgeFinset
+-/
+#print SimpleGraph.coe_edgeFinset /-
@[simp, norm_cast]
theorem coe_edgeFinset : (G.edgeFinset : Set (Sym2 V)) = G.edgeSetEmbedding :=
Set.coe_toFinset _
#align simple_graph.coe_edge_finset SimpleGraph.coe_edgeFinset
+-/
variable {G}
+#print SimpleGraph.mem_edgeFinset /-
@[simp]
theorem mem_edgeFinset : e ∈ G.edgeFinset ↔ e ∈ G.edgeSetEmbedding :=
Set.mem_toFinset
#align simple_graph.mem_edge_finset SimpleGraph.mem_edgeFinset
+-/
+#print SimpleGraph.not_isDiag_of_mem_edgeFinset /-
theorem not_isDiag_of_mem_edgeFinset : e ∈ G.edgeFinset → ¬e.IsDiag :=
not_isDiag_of_mem_edgeSet _ ∘ mem_edgeFinset.1
#align simple_graph.not_is_diag_of_mem_edge_finset SimpleGraph.not_isDiag_of_mem_edgeFinset
+-/
+#print SimpleGraph.edgeFinset_inj /-
@[simp]
theorem edgeFinset_inj : G₁.edgeFinset = G₂.edgeFinset ↔ G₁ = G₂ := by simp [edge_finset]
#align simple_graph.edge_finset_inj SimpleGraph.edgeFinset_inj
+-/
+#print SimpleGraph.edgeFinset_subset_edgeFinset /-
@[simp]
theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G₁ ≤ G₂ := by
simp [edge_finset]
#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinset
+-/
+#print SimpleGraph.edgeFinset_ssubset_edgeFinset /-
@[simp]
theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by
simp [edge_finset]
#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
+-/
alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
@@ -967,33 +1085,45 @@ alias edge_finset_ssubset_edge_finset ↔ _ edge_finset_strict_mono
attribute [mono] edge_finset_mono edge_finset_strict_mono
+#print SimpleGraph.edgeFinset_bot /-
@[simp]
theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edge_finset]
#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_bot
+-/
+#print SimpleGraph.edgeFinset_sup /-
@[simp]
theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeFinset ∪ G₂.edgeFinset := by
simp [edge_finset]
#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_sup
+-/
+#print SimpleGraph.edgeFinset_inf /-
@[simp]
theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset := by
simp [edge_finset]
#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_inf
+-/
+#print SimpleGraph.edgeFinset_sdiff /-
@[simp]
theorem edgeFinset_sdiff [DecidableEq V] : (G₁ \ G₂).edgeFinset = G₁.edgeFinset \ G₂.edgeFinset :=
by simp [edge_finset]
#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiff
+-/
+#print SimpleGraph.edgeFinset_card /-
theorem edgeFinset_card : G.edgeFinset.card = Fintype.card G.edgeSetEmbedding :=
Set.toFinset_card _
#align simple_graph.edge_finset_card SimpleGraph.edgeFinset_card
+-/
+#print SimpleGraph.edgeSet_univ_card /-
@[simp]
theorem edgeSet_univ_card : (univ : Finset G.edgeSetEmbedding).card = G.edgeFinset.card :=
Fintype.card_of_subtype G.edgeFinset fun _ => mem_edgeFinset
#align simple_graph.edge_set_univ_card SimpleGraph.edgeSet_univ_card
+-/
end EdgeFinset
@@ -1017,6 +1147,7 @@ theorem mem_incidence_iff_neighbor {v w : V} : ⟦(v, w)⟧ ∈ G.incidenceSet v
#align simple_graph.mem_incidence_iff_neighbor SimpleGraph.mem_incidence_iff_neighbor
-/
+#print SimpleGraph.adj_incidenceSet_inter /-
theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) (h : v ∈ e) :
G.incidenceSet v ∩ G.incidenceSet h.other = {e} :=
by
@@ -1028,7 +1159,9 @@ theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSetEmbeddi
· rintro rfl
exact ⟨⟨he, h⟩, he, Sym2.other_mem _⟩
#align simple_graph.adj_incidence_set_inter SimpleGraph.adj_incidenceSet_inter
+-/
+#print SimpleGraph.compl_neighborSet_disjoint /-
theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
Disjoint (G.neighborSet v) (Gᶜ.neighborSet v) :=
by
@@ -1037,7 +1170,9 @@ theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
rw [mem_neighbor_set, compl_adj] at h'
exact h'.2 h
#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjoint
+-/
+#print SimpleGraph.neighborSet_union_compl_neighborSet_eq /-
theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
G.neighborSet v ∪ Gᶜ.neighborSet v = {v}ᶜ :=
by
@@ -1046,7 +1181,9 @@ theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
simp_rw [Set.mem_union, mem_neighbor_set, compl_adj, Set.mem_compl_iff, Set.mem_singleton_iff]
tauto
#align simple_graph.neighbor_set_union_compl_neighbor_set_eq SimpleGraph.neighborSet_union_compl_neighborSet_eq
+-/
+#print SimpleGraph.card_neighborSet_union_compl_neighborSet /-
-- TODO find out why TC inference has `h` failing a defeq check for `to_finset`
theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V) (v : V)
[h : Fintype (G.neighborSet v ∪ Gᶜ.neighborSet v : Set V)] :
@@ -1054,10 +1191,13 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
classical simp_rw [neighbor_set_union_compl_neighbor_set_eq, Set.toFinset_compl,
Finset.card_compl, Set.toFinset_card, Set.card_singleton]
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
+-/
+#print SimpleGraph.neighborSet_compl /-
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
by ext w; simp [and_comm', eq_comm]
#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_compl
+-/
#print SimpleGraph.commonNeighbors /-
/-- The set of common neighbors between two vertices `v` and `w` in a graph `G` is the
@@ -1068,9 +1208,11 @@ def commonNeighbors (v w : V) : Set V :=
#align simple_graph.common_neighbors SimpleGraph.commonNeighbors
-/
+#print SimpleGraph.commonNeighbors_eq /-
theorem commonNeighbors_eq (v w : V) : G.commonNeighbors v w = G.neighborSet v ∩ G.neighborSet w :=
rfl
#align simple_graph.common_neighbors_eq SimpleGraph.commonNeighbors_eq
+-/
#print SimpleGraph.mem_commonNeighbors /-
theorem mem_commonNeighbors {u v w : V} : u ∈ G.commonNeighbors v w ↔ G.Adj v u ∧ G.Adj w u :=
@@ -1116,10 +1258,12 @@ instance decidableMemCommonNeighbors [DecidableRel G.Adj] (v w : V) :
#align simple_graph.decidable_mem_common_neighbors SimpleGraph.decidableMemCommonNeighbors
-/
+#print SimpleGraph.commonNeighbors_top_eq /-
theorem commonNeighbors_top_eq {v w : V} :
(⊤ : SimpleGraph V).commonNeighbors v w = Set.univ \ {v, w} := by ext u;
simp [common_neighbors, eq_comm, not_or_distrib.symm]
#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eq
+-/
section Incidence
@@ -1194,22 +1338,30 @@ theorem deleteEdges_adj (s : Set (Sym2 V)) (v w : V) :
#align simple_graph.delete_edges_adj SimpleGraph.deleteEdges_adj
-/
+#print SimpleGraph.sdiff_eq_deleteEdges /-
theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.edgeSetEmbedding :=
by ext; simp
#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdges
+-/
+#print SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet /-
theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s = G \ fromEdgeSet s :=
by ext; exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.Ne⟩⟩
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
+-/
+#print SimpleGraph.compl_eq_deleteEdges /-
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding := by ext;
simp
#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdges
+-/
+#print SimpleGraph.deleteEdges_deleteEdges /-
@[simp]
theorem deleteEdges_deleteEdges (s s' : Set (Sym2 V)) :
(G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') := by ext; simp [and_assoc', not_or]
#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdges
+-/
#print SimpleGraph.deleteEdges_empty_eq /-
@[simp]
@@ -1217,9 +1369,11 @@ theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G := by ext; simp
#align simple_graph.delete_edges_empty_eq SimpleGraph.deleteEdges_empty_eq
-/
+#print SimpleGraph.deleteEdges_univ_eq /-
@[simp]
theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ := by ext; simp
#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eq
+-/
#print SimpleGraph.deleteEdges_le /-
theorem deleteEdges_le (s : Set (Sym2 V)) : G.deleteEdges s ≤ G := by intro;
@@ -1236,41 +1390,52 @@ theorem deleteEdges_le_of_le {s s' : Set (Sym2 V)} (h : s ⊆ s') :
#align simple_graph.delete_edges_le_of_le SimpleGraph.deleteEdges_le_of_le
-/
+#print SimpleGraph.deleteEdges_eq_inter_edgeSet /-
theorem deleteEdges_eq_inter_edgeSet (s : Set (Sym2 V)) :
G.deleteEdges s = G.deleteEdges (s ∩ G.edgeSetEmbedding) := by ext;
simp (config := { contextual := true }) [imp_false]
#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSet
+-/
+#print SimpleGraph.deleteEdges_sdiff_eq_of_le /-
theorem deleteEdges_sdiff_eq_of_le {H : SimpleGraph V} (h : H ≤ G) :
G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H := by ext (v w);
constructor <;> simp (config := { contextual := true }) [@h v w]
#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_le
+-/
+#print SimpleGraph.edgeSet_deleteEdges /-
theorem edgeSet_deleteEdges (s : Set (Sym2 V)) :
(G.deleteEdges s).edgeSetEmbedding = G.edgeSetEmbedding \ s := by ext e; refine' Sym2.ind _ e;
simp
#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdges
+-/
+#print SimpleGraph.edgeFinset_deleteEdges /-
theorem edgeFinset_deleteEdges [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
(s : Finset (Sym2 V)) [DecidableRel (G.deleteEdges s).Adj] :
(G.deleteEdges s).edgeFinset = G.edgeFinset \ s := by ext e; simp [edge_set_delete_edges]
#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdges
+-/
section DeleteFar
variable (G) [OrderedRing 𝕜] [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
{p : SimpleGraph V → Prop} {r r₁ r₂ : 𝕜}
+#print SimpleGraph.DeleteFar /-
/-- A graph is `r`-*delete-far* from a property `p` if we must delete at least `r` edges from it to
get a graph with the property `p`. -/
def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
∀ ⦃s⦄, s ⊆ G.edgeFinset → p (G.deleteEdges s) → r ≤ s.card
#align simple_graph.delete_far SimpleGraph.DeleteFar
+-/
open scoped Classical
variable {G}
+#print SimpleGraph.deleteFar_iff /-
theorem deleteFar_iff :
G.DeleteFar p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card :=
by
@@ -1283,13 +1448,16 @@ theorem deleteFar_iff :
simpa [card_sdiff hs, edge_finset_delete_edges, -Set.toFinset_card, Nat.cast_sub,
card_le_of_subset hs] using h (G.delete_edges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
+-/
alias delete_far_iff ↔ delete_far.le_card_sub_card _
#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
+#print SimpleGraph.DeleteFar.mono /-
theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteFar p r₁ := fun s hs hG =>
hr.trans <| h hs hG
#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.mono
+-/
end DeleteFar
@@ -1459,13 +1627,17 @@ theorem not_mem_neighborFinset_self : v ∉ G.neighborFinset v :=
#align simple_graph.not_mem_neighbor_finset_self SimpleGraph.not_mem_neighborFinset_self
-/
+#print SimpleGraph.neighborFinset_disjoint_singleton /-
theorem neighborFinset_disjoint_singleton : Disjoint (G.neighborFinset v) {v} :=
Finset.disjoint_singleton_right.mpr <| not_mem_neighborFinset_self _ _
#align simple_graph.neighbor_finset_disjoint_singleton SimpleGraph.neighborFinset_disjoint_singleton
+-/
+#print SimpleGraph.singleton_disjoint_neighborFinset /-
theorem singleton_disjoint_neighborFinset : Disjoint {v} (G.neighborFinset v) :=
Finset.disjoint_singleton_left.mpr <| not_mem_neighborFinset_self _ _
#align simple_graph.singleton_disjoint_neighbor_finset SimpleGraph.singleton_disjoint_neighborFinset
+-/
#print SimpleGraph.degree /-
/-- `G.degree v` is the number of vertices adjacent to `v`.
@@ -1534,6 +1706,7 @@ theorem mem_incidenceFinset [DecidableEq V] (e : Sym2 V) :
#align simple_graph.mem_incidence_finset SimpleGraph.mem_incidenceFinset
-/
+#print SimpleGraph.incidenceFinset_eq_filter /-
theorem incidenceFinset_eq_filter [DecidableEq V] [Fintype G.edgeSetEmbedding] :
G.incidenceFinset v = G.edgeFinset.filterₓ (Membership.Mem v) :=
by
@@ -1541,6 +1714,7 @@ theorem incidenceFinset_eq_filter [DecidableEq V] [Fintype G.edgeSetEmbedding] :
refine' Sym2.ind (fun x y => _) e
simp [mk_mem_incidence_set_iff]
#align simple_graph.incidence_finset_eq_filter SimpleGraph.incidenceFinset_eq_filter
+-/
end FiniteAt
@@ -1606,21 +1780,27 @@ theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_compl
-/
+#print SimpleGraph.complete_graph_degree /-
@[simp]
theorem complete_graph_degree [DecidableEq V] (v : V) :
(⊤ : SimpleGraph V).degree v = Fintype.card V - 1 := by
erw [degree, neighbor_finset_eq_filter, filter_ne, card_erase_of_mem (mem_univ v), card_univ]
#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degree
+-/
+#print SimpleGraph.bot_degree /-
theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 :=
by
erw [degree, neighbor_finset_eq_filter, filter_false]
exact Finset.card_empty
#align simple_graph.bot_degree SimpleGraph.bot_degree
+-/
+#print SimpleGraph.IsRegularOfDegree.top /-
theorem IsRegularOfDegree.top [DecidableEq V] :
(⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) := by intro v; simp
#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.top
+-/
#print SimpleGraph.minDegree /-
/-- The minimum degree of all vertices (and `0` if there are no vertices).
@@ -1788,6 +1968,7 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
-/
+#print SimpleGraph.card_commonNeighbors_top /-
theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
Fintype.card ((⊤ : SimpleGraph V).commonNeighbors v w) = Fintype.card V - 2 :=
by
@@ -1796,6 +1977,7 @@ theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
· simp [Finset.card_univ, h]
· simp only [Set.toFinset_subset_toFinset, Set.subset_univ]
#align simple_graph.card_common_neighbors_top SimpleGraph.card_commonNeighbors_top
+-/
end Finite
@@ -1832,13 +2014,10 @@ abbrev Iso :=
#align simple_graph.iso SimpleGraph.Iso
-/
--- mathport name: «expr →g »
infixl:50 " →g " => Hom
--- mathport name: «expr ↪g »
infixl:50 " ↪g " => Embedding
--- mathport name: «expr ≃g »
infixl:50 " ≃g " => Iso
namespace Hom
@@ -1858,9 +2037,11 @@ theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
#align simple_graph.hom.map_adj SimpleGraph.Hom.map_adj
-/
+#print SimpleGraph.Hom.map_mem_edgeSet /-
theorem map_mem_edgeSet {e : Sym2 V} (h : e ∈ G.edgeSetEmbedding) : e.map f ∈ G'.edgeSetEmbedding :=
Quotient.ind (fun e h => Sym2.fromRel_prop.mpr (f.map_rel' h)) e h
#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSet
+-/
#print SimpleGraph.Hom.apply_mem_neighborSet /-
theorem apply_mem_neighborSet {v w : V} (h : w ∈ G.neighborSet v) : f w ∈ G'.neighborSet (f v) :=
@@ -1868,12 +2049,14 @@ theorem apply_mem_neighborSet {v w : V} (h : w ∈ G.neighborSet v) : f w ∈ G'
#align simple_graph.hom.apply_mem_neighbor_set SimpleGraph.Hom.apply_mem_neighborSet
-/
+#print SimpleGraph.Hom.mapEdgeSet /-
/-- The map between edge sets induced by a homomorphism.
The underlying map on edges is given by `sym2.map`. -/
@[simps]
def mapEdgeSet (e : G.edgeSetEmbedding) : G'.edgeSetEmbedding :=
⟨Sym2.map f e, f.map_mem_edgeSet e.property⟩
#align simple_graph.hom.map_edge_set SimpleGraph.Hom.mapEdgeSet
+-/
#print SimpleGraph.Hom.mapNeighborSet /-
/-- The map between neighbor sets induced by a homomorphism. -/
@@ -1907,6 +2090,7 @@ def mapSpanningSubgraphs {G G' : SimpleGraph V} (h : G ≤ G') : G →g G'
#align simple_graph.hom.map_spanning_subgraphs SimpleGraph.Hom.mapSpanningSubgraphs
-/
+#print SimpleGraph.Hom.mapEdgeSet.injective /-
theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective f.mapEdgeSet :=
by
rintro ⟨e₁, h₁⟩ ⟨e₂, h₂⟩
@@ -1914,7 +2098,9 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
repeat' rw [Subtype.mk_eq_mk]
apply Sym2.map.injective hinj
#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injective
+-/
+#print SimpleGraph.Hom.injective_of_top_hom /-
/-- Every graph homomomorphism from a complete graph is injective. -/
theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f :=
by
@@ -1922,6 +2108,7 @@ theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Inje
contrapose! h
exact G'.ne_of_adj (map_adj _ ((top_adj _ _).mpr h))
#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_hom
+-/
#print SimpleGraph.Hom.comap /-
/-- There is a homomorphism to a graph from a comapped graph.
@@ -1970,18 +2157,25 @@ abbrev toHom : G →g G' :=
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
-/
+#print SimpleGraph.Embedding.map_adj_iff /-
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iff
+-/
+#print SimpleGraph.Embedding.map_mem_edgeSet_iff /-
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iff
+-/
+#print SimpleGraph.Embedding.apply_mem_neighborSet_iff /-
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iff
+-/
+#print SimpleGraph.Embedding.mapEdgeSet /-
/-- A graph embedding induces an embedding of edge sets. -/
@[simps]
def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
@@ -1989,7 +2183,9 @@ def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
toFun := Hom.mapEdgeSet f
inj' := Hom.mapEdgeSet.injective f f.inj'
#align simple_graph.embedding.map_edge_set SimpleGraph.Embedding.mapEdgeSet
+-/
+#print SimpleGraph.Embedding.mapNeighborSet /-
/-- A graph embedding induces an embedding of neighbor sets. -/
@[simps]
def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
@@ -2000,6 +2196,7 @@ def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
rw [Subtype.mk_eq_mk] at h ⊢
exact f.inj' h
#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSet
+-/
#print SimpleGraph.Embedding.comap /-
/-- Given an injective function, there is an embedding from the comapped graph into the original
@@ -2037,11 +2234,13 @@ protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe
#align simple_graph.embedding.spanning_coe SimpleGraph.Embedding.spanningCoe
-/
+#print SimpleGraph.Embedding.completeGraph /-
/-- Embeddings of types induce embeddings of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ↪ β) :
(⊤ : SimpleGraph α) ↪g (⊤ : SimpleGraph β) :=
{ f with map_rel_iff' := by simp }
#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraph
+-/
variable {G'' : SimpleGraph X}
@@ -2052,10 +2251,12 @@ abbrev comp (f' : G' ↪g G'') (f : G ↪g G') : G ↪g G'' :=
#align simple_graph.embedding.comp SimpleGraph.Embedding.comp
-/
+#print SimpleGraph.Embedding.coe_comp /-
@[simp]
theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
#align simple_graph.embedding.coe_comp SimpleGraph.Embedding.coe_comp
+-/
end Embedding
@@ -2128,18 +2329,25 @@ abbrev symm : G' ≃g G :=
#align simple_graph.iso.symm SimpleGraph.Iso.symm
-/
+#print SimpleGraph.Iso.map_adj_iff /-
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iff
+-/
+#print SimpleGraph.Iso.map_mem_edgeSet_iff /-
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iff
+-/
+#print SimpleGraph.Iso.apply_mem_neighborSet_iff /-
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iff
+-/
+#print SimpleGraph.Iso.mapEdgeSet /-
/-- An isomorphism of graphs induces an equivalence of edge sets. -/
@[simps]
def mapEdgeSet : G.edgeSetEmbedding ≃ G'.edgeSetEmbedding
@@ -2161,7 +2369,9 @@ def mapEdgeSet : G.edgeSetEmbedding ≃ G'.edgeSetEmbedding
convert Sym2.map_id
exact funext fun _ => RelIso.apply_symm_apply _ _
#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSet
+-/
+#print SimpleGraph.Iso.mapNeighborSet /-
/-- A graph isomorphism induces an equivalence of neighbor sets. -/
@[simps]
def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
@@ -2174,6 +2384,7 @@ def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
left_inv w := by simp
right_inv w := by simp
#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSet
+-/
#print SimpleGraph.Iso.card_eq_of_iso /-
theorem card_eq_of_iso [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
@@ -2198,16 +2409,20 @@ protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding
#align simple_graph.iso.map SimpleGraph.Iso.map
-/
+#print SimpleGraph.Iso.completeGraph /-
/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ≃ β) :
(⊤ : SimpleGraph α) ≃g (⊤ : SimpleGraph β) :=
{ f with map_rel_iff' := by simp }
#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraph
+-/
+#print SimpleGraph.Iso.toEmbedding_completeGraph /-
theorem toEmbedding_completeGraph {α β : Type _} (f : α ≃ β) :
(Iso.completeGraph f).toEmbedding = Embedding.completeGraph f.toEmbedding :=
rfl
#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraph
+-/
variable {G'' : SimpleGraph X}
@@ -2218,10 +2433,12 @@ abbrev comp (f' : G' ≃g G'') (f : G ≃g G') : G ≃g G'' :=
#align simple_graph.iso.comp SimpleGraph.Iso.comp
-/
+#print SimpleGraph.Iso.coe_comp /-
@[simp]
theorem coe_comp (f' : G' ≃g G'') (f : G ≃g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
#align simple_graph.iso.coe_comp SimpleGraph.Iso.coe_comp
+-/
end Iso
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -541,7 +541,7 @@ allows proving `(G \ from_edge_set s).edge_set = G.edge_set \ s` by `simp`.
-/
@[simp]
theorem edgeSet_sdiff_sdiff_isDiag (G : SimpleGraph V) (s : Set (Sym2 V)) :
- G.edgeSetEmbedding \ (s \ { e | e.IsDiag }) = G.edgeSetEmbedding \ s :=
+ G.edgeSetEmbedding \ (s \ {e | e.IsDiag}) = G.edgeSetEmbedding \ s :=
by
ext e
simp only [Set.mem_diff, Set.mem_setOf_eq, not_and, Classical.not_not, and_congr_right_iff]
@@ -629,7 +629,7 @@ theorem fromEdgeSet_adj : (fromEdgeSet s).Adj v w ↔ ⟦(v, w)⟧ ∈ s ∧ v
-- Note: we need to make sure `from_edge_set_adj` and this lemma are confluent.
-- In particular, both yield `⟦(u, v)⟧ ∈ (from_edge_set s).edge_set` ==> `⟦(v, w)⟧ ∈ s ∧ v ≠ w`.
@[simp]
-theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ { e | e.IsDiag } := by ext e;
+theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ {e | e.IsDiag} := by ext e;
exact Sym2.ind (by simp) e
#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSet
@@ -852,7 +852,7 @@ end Darts
#print SimpleGraph.incidenceSet /-
/-- Set of edges incident to a given vertex, aka incidence set. -/
def incidenceSet (v : V) : Set (Sym2 V) :=
- { e ∈ G.edgeSetEmbedding | v ∈ e }
+ {e ∈ G.edgeSetEmbedding | v ∈ e}
#align simple_graph.incidence_set SimpleGraph.incidenceSet
-/
@@ -1052,7 +1052,7 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
[h : Fintype (G.neighborSet v ∪ Gᶜ.neighborSet v : Set V)] :
(@Set.toFinset _ (G.neighborSet v ∪ Gᶜ.neighborSet v) h).card = Fintype.card V - 1 := by
classical simp_rw [neighbor_set_union_compl_neighbor_set_eq, Set.toFinset_compl,
- Finset.card_compl, Set.toFinset_card, Set.card_singleton]
+ Finset.card_compl, Set.toFinset_card, Set.card_singleton]
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
@@ -1492,8 +1492,8 @@ theorem degree_pos_iff_exists_adj : 0 < G.degree v ↔ ∃ w, G.Adj v w := by
theorem degree_compl [Fintype (Gᶜ.neighborSet v)] [Fintype V] :
Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by
classical
- rw [← card_neighbor_set_union_compl_neighbor_set G v, Set.toFinset_union]
- simp [card_disjoint_union (set.disjoint_to_finset.mpr (compl_neighbor_set_disjoint G v))]
+ rw [← card_neighbor_set_union_compl_neighbor_set G v, Set.toFinset_union]
+ simp [card_disjoint_union (set.disjoint_to_finset.mpr (compl_neighbor_set_disjoint G v))]
#align simple_graph.degree_compl SimpleGraph.degree_compl
-/
@@ -1723,9 +1723,9 @@ theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀
#print SimpleGraph.degree_lt_card_verts /-
theorem degree_lt_card_verts [DecidableRel G.Adj] (v : V) : G.degree v < Fintype.card V := by
classical
- apply Finset.card_lt_card
- rw [Finset.ssubset_iff]
- exact ⟨v, by simp, Finset.subset_univ _⟩
+ apply Finset.card_lt_card
+ rw [Finset.ssubset_iff]
+ exact ⟨v, by simp, Finset.subset_univ _⟩
#align simple_graph.degree_lt_card_verts SimpleGraph.degree_lt_card_verts
-/
@@ -1773,18 +1773,18 @@ the best we can do in general.
theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.Adj] {v w : V}
(h : G.Adj v w) : Fintype.card (G.commonNeighbors v w) < G.degree v := by
classical
- erw [← Set.toFinset_card]
- apply Finset.card_lt_card
- rw [Finset.ssubset_iff]
- use w
+ erw [← Set.toFinset_card]
+ apply Finset.card_lt_card
+ rw [Finset.ssubset_iff]
+ use w
+ constructor
+ · rw [Set.mem_toFinset]
+ apply not_mem_common_neighbors_right
+ · rw [Finset.insert_subset]
constructor
- · rw [Set.mem_toFinset]
- apply not_mem_common_neighbors_right
- · rw [Finset.insert_subset]
- constructor
- · simpa
- · rw [neighbor_finset, Set.toFinset_subset_toFinset]
- exact G.common_neighbors_subset_neighbor_set_left _ _
+ · simpa
+ · rw [neighbor_finset, Set.toFinset_subset_toFinset]
+ exact G.common_neighbors_subset_neighbor_set_left _ _
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
-/
@@ -2177,7 +2177,7 @@ def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
#print SimpleGraph.Iso.card_eq_of_iso /-
theorem card_eq_of_iso [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
- convert(Fintype.ofEquiv_card f.to_equiv).symm
+ convert (Fintype.ofEquiv_card f.to_equiv).symm
#align simple_graph.iso.card_eq_of_iso SimpleGraph.Iso.card_eq_of_iso
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -369,7 +369,7 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
exists_and_right, exists_and_left, and_assoc', and_self_right] using hab
iInf_sup_le_sup_inf := fun G s a b hab =>
by
- simp only [sup_adj, Inf_adj, infi_adj] at hab⊢
+ simp only [sup_adj, Inf_adj, infi_adj] at hab ⊢
have : (∀ G' ∈ s, adj G a b ∨ adj G' a b) ∧ a ≠ b :=
(and_congr_left fun h => forall_congr' fun H => _).1 hab
simpa [forall_or_left, or_and_right, and_iff_left_of_imp adj.ne] using this
@@ -561,9 +561,9 @@ theorem adj_iff_exists_edge {v w : V} :
refine' ⟨fun _ => ⟨G.ne_of_adj ‹_›, ⟦(v, w)⟧, _⟩, _⟩
· simpa
· rintro ⟨hne, e, he, hv⟩
- rw [Sym2.mem_and_mem_iff hne] at hv
+ rw [Sym2.mem_and_mem_iff hne] at hv
subst e
- rwa [mem_edge_set] at he
+ rwa [mem_edge_set] at he
#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edge
theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSetEmbedding, ↑e = ⟦(a, b)⟧ := by
@@ -572,7 +572,7 @@ theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSetEmbedding, ↑e
theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) {v : V} (h : v ∈ e) :
h.other ≠ v := by
- erw [← Sym2.other_spec h, Sym2.eq_swap] at he
+ erw [← Sym2.other_spec h, Sym2.eq_swap] at he
exact G.ne_of_adj he
#align simple_graph.edge_other_ne SimpleGraph.edge_other_ne
@@ -718,7 +718,7 @@ theorem Dart.toProd_injective : Function.Injective (Dart.toProd : G.Dart → V
#print SimpleGraph.Dart.fintype /-
instance Dart.fintype [Fintype V] [DecidableRel G.Adj] : Fintype G.Dart :=
- Fintype.ofEquiv (Σv, G.neighborSet v)
+ Fintype.ofEquiv (Σ v, G.neighborSet v)
{ toFun := fun s => ⟨(s.fst, s.snd), s.snd.property⟩
invFun := fun d => ⟨d.fst, d.snd, d.is_adj⟩
left_inv := fun s => by ext <;> simp
@@ -1034,7 +1034,7 @@ theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
by
rw [Set.disjoint_iff]
rintro w ⟨h, h'⟩
- rw [mem_neighbor_set, compl_adj] at h'
+ rw [mem_neighbor_set, compl_adj] at h'
exact h'.2 h
#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjoint
@@ -1143,7 +1143,7 @@ theorem edge_other_incident_set {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v
#print SimpleGraph.incidence_other_prop /-
theorem incidence_other_prop {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) :
G.otherVertexOfIncident h ∈ G.neighborSet v := by cases' h with he hv;
- rwa [← Sym2.other_spec' hv, mem_edge_set] at he
+ rwa [← Sym2.other_spec' hv, mem_edge_set] at he
#align simple_graph.incidence_other_prop SimpleGraph.incidence_other_prop
-/
@@ -1222,7 +1222,7 @@ theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ := by ext; simp
#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eq
#print SimpleGraph.deleteEdges_le /-
-theorem deleteEdges_le (s : Set (Sym2 V)) : G.deleteEdges s ≤ G := by intro ;
+theorem deleteEdges_le (s : Set (Sym2 V)) : G.deleteEdges s ≤ G := by intro;
simp (config := { contextual := true })
#align simple_graph.delete_edges_le SimpleGraph.deleteEdges_le
-/
@@ -1277,7 +1277,7 @@ theorem deleteFar_iff :
refine' ⟨fun h H hHG hH => _, fun h s hs hG => _⟩
· have := h (sdiff_subset G.edge_finset H.edge_finset)
simp only [delete_edges_sdiff_eq_of_le _ hHG, edge_finset_mono hHG, card_sdiff,
- card_le_of_subset, coe_sdiff, coe_edge_finset, Nat.cast_sub] at this
+ card_le_of_subset, coe_sdiff, coe_edge_finset, Nat.cast_sub] at this
exact this hH
·
simpa [card_sdiff hs, edge_finset_delete_edges, -Set.toFinset_card, Nat.cast_sub,
@@ -1685,7 +1685,7 @@ theorem exists_maximal_degree_vertex [DecidableRel G.Adj] [Nonempty V] :
by
obtain ⟨t, ht⟩ := max_of_nonempty (univ_nonempty.image fun v => G.degree v)
have ht₂ := mem_of_max ht
- simp only [mem_image, mem_univ, exists_prop_of_true] at ht₂
+ simp only [mem_image, mem_univ, exists_prop_of_true] at ht₂
rcases ht₂ with ⟨v, rfl⟩
refine' ⟨v, _⟩
rw [max_degree, ht]
@@ -1714,7 +1714,7 @@ theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀
obtain ⟨v, hv⟩ := G.exists_maximal_degree_vertex
rw [hv]
apply h
- · rw [not_nonempty_iff_eq_empty] at hV
+ · rw [not_nonempty_iff_eq_empty] at hV
rw [max_degree, hV, image_empty]
exact zero_le k
#align simple_graph.max_degree_le_of_forall_degree_le SimpleGraph.maxDegree_le_of_forall_degree_le
@@ -1997,7 +1997,7 @@ def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
toFun w := ⟨f w, f.apply_mem_neighborSet_iff.mpr w.2⟩
inj' := by
rintro ⟨w₁, h₁⟩ ⟨w₂, h₂⟩ h
- rw [Subtype.mk_eq_mk] at h⊢
+ rw [Subtype.mk_eq_mk] at h ⊢
exact f.inj' h
#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSet
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -1267,7 +1267,7 @@ def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
∀ ⦃s⦄, s ⊆ G.edgeFinset → p (G.deleteEdges s) → r ≤ s.card
#align simple_graph.delete_far SimpleGraph.DeleteFar
-open Classical
+open scoped Classical
variable {G}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -250,12 +250,6 @@ instance : Sup (SimpleGraph V) :=
{ Adj := x.Adj ⊔ y.Adj
symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }⟩
-/- warning: simple_graph.sup_adj -> SimpleGraph.sup_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) x y) v w) (Or (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
-but is expected to have type
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) x y) v w) (Or (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
-Case conversion may be inaccurate. Consider using '#align simple_graph.sup_adj SimpleGraph.sup_adjₓ'. -/
@[simp]
theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v w ∨ y.Adj v w :=
Iff.rfl
@@ -267,12 +261,6 @@ instance : Inf (SimpleGraph V) :=
{ Adj := x.Adj ⊓ y.Adj
symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }⟩
-/- warning: simple_graph.inf_adj -> SimpleGraph.inf_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
-but is expected to have type
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
-Case conversion may be inaccurate. Consider using '#align simple_graph.inf_adj SimpleGraph.inf_adjₓ'. -/
@[simp]
theorem inf_adj (x y : SimpleGraph V) (v w : V) : (x ⊓ y).Adj v w ↔ x.Adj v w ∧ y.Adj v w :=
Iff.rfl
@@ -301,12 +289,6 @@ instance : SDiff (SimpleGraph V) :=
{ Adj := x.Adj \ y.Adj
symm := fun v w h => by change x.adj w v ∧ ¬y.adj w v <;> rwa [x.adj_comm, y.adj_comm] }⟩
-/- warning: simple_graph.sdiff_adj -> SimpleGraph.sdiff_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
-but is expected to have type
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_adj SimpleGraph.sdiff_adjₓ'. -/
@[simp]
theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v w ∧ ¬y.Adj v w :=
Iff.rfl
@@ -324,66 +306,30 @@ instance : InfSet (SimpleGraph V) :=
symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
loopless := fun a h => h.2 rfl }⟩
-/- warning: simple_graph.Sup_adj -> SimpleGraph.sSup_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.sSup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => Exists.{0} (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) (fun (H : Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) => SimpleGraph.Adj.{u1} V G a b)))
-but is expected to have type
- forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.sSup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.supSet.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => And (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) (SimpleGraph.Adj.{u1} V G a b)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.Sup_adj SimpleGraph.sSup_adjₓ'. -/
@[simp]
theorem sSup_adj {s : Set (SimpleGraph V)} {a b : V} : (sSup s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
Iff.rfl
#align simple_graph.Sup_adj SimpleGraph.sSup_adj
-/- warning: simple_graph.Inf_adj -> SimpleGraph.sInf_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
-but is expected to have type
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj SimpleGraph.sInf_adjₓ'. -/
@[simp]
theorem sInf_adj {s : Set (SimpleGraph V)} : (sInf s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
Iff.rfl
#align simple_graph.Inf_adj SimpleGraph.sInf_adj
-/- warning: simple_graph.supr_adj -> SimpleGraph.iSup_adj is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (iSup.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) ι (fun (i : ι) => f i)) a b) (Exists.{u2} ι (fun (i : ι) => SimpleGraph.Adj.{u1} V (f i) a b))
-but is expected to have type
- forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (iSup.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.supSet.{u2} V) ι (fun (i : ι) => f i)) a b) (Exists.{u1} ι (fun (i : ι) => SimpleGraph.Adj.{u2} V (f i) a b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.supr_adj SimpleGraph.iSup_adjₓ'. -/
@[simp]
theorem iSup_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [iSup]
#align simple_graph.supr_adj SimpleGraph.iSup_adj
-/- warning: simple_graph.infi_adj -> SimpleGraph.iInf_adj is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (iInf.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b) (Ne.{succ u1} V a b))
-but is expected to have type
- forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (iInf.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b) (Ne.{succ u2} V a b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj SimpleGraph.iInf_adjₓ'. -/
@[simp]
theorem iInf_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
simp [iInf]
#align simple_graph.infi_adj SimpleGraph.iInf_adj
-/- warning: simple_graph.Inf_adj_of_nonempty -> SimpleGraph.sInf_adj_of_nonempty is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
-but is expected to have type
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonemptyₓ'. -/
theorem sInf_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
(sInf s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
sInf_adj.trans <| and_iff_left_of_imp <| by obtain ⟨G, hG⟩ := hs; exact fun h => (h _ hG).Ne
#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonempty
-/- warning: simple_graph.infi_adj_of_nonempty -> SimpleGraph.iInf_adj_of_nonempty is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} [_inst_1 : Nonempty.{u2} ι] {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (iInf.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b)
-but is expected to have type
- forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} [_inst_1 : Nonempty.{u1} ι] {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (iInf.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b)
-Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj_of_nonempty SimpleGraph.iInf_adj_of_nonemptyₓ'. -/
theorem iInf_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
(⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
simp [iInf, Inf_adj_of_nonempty (Set.range_nonempty _)]
@@ -429,45 +375,21 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
simpa [forall_or_left, or_and_right, and_iff_left_of_imp adj.ne] using this
exact and_iff_left h }
-/- warning: simple_graph.top_adj -> SimpleGraph.top_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (Ne.{succ u1} V v w)
-but is expected to have type
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (Ne.{succ u1} V v w)
-Case conversion may be inaccurate. Consider using '#align simple_graph.top_adj SimpleGraph.top_adjₓ'. -/
@[simp]
theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
Iff.rfl
#align simple_graph.top_adj SimpleGraph.top_adj
-/- warning: simple_graph.bot_adj -> SimpleGraph.bot_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) False
-but is expected to have type
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) False
-Case conversion may be inaccurate. Consider using '#align simple_graph.bot_adj SimpleGraph.bot_adjₓ'. -/
@[simp]
theorem bot_adj (v w : V) : (⊥ : SimpleGraph V).Adj v w ↔ False :=
Iff.rfl
#align simple_graph.bot_adj SimpleGraph.bot_adj
-/- warning: simple_graph.complete_graph_eq_top -> SimpleGraph.completeGraph_eq_top is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-but is expected to have type
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_topₓ'. -/
@[simp]
theorem completeGraph_eq_top (V : Type u) : completeGraph V = ⊤ :=
rfl
#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_top
-/- warning: simple_graph.empty_graph_eq_bot -> SimpleGraph.emptyGraph_eq_bot is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-but is expected to have type
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.empty_graph_eq_bot SimpleGraph.emptyGraph_eq_botₓ'. -/
@[simp]
theorem emptyGraph_eq_bot (V : Type u) : emptyGraph V = ⊥ :=
rfl
@@ -481,50 +403,20 @@ section Decidable
variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
-/- warning: simple_graph.bot.adj_decidable -> SimpleGraph.Bot.adjDecidable is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
-but is expected to have type
- forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidableₓ'. -/
instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => decidableFalse
#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidable
-/- warning: simple_graph.sup.adj_decidable -> SimpleGraph.Sup.adjDecidable is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G H))
-but is expected to have type
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G H))
-Case conversion may be inaccurate. Consider using '#align simple_graph.sup.adj_decidable SimpleGraph.Sup.adjDecidableₓ'. -/
instance Sup.adjDecidable : DecidableRel (G ⊔ H).Adj := fun v w => Or.decidable
#align simple_graph.sup.adj_decidable SimpleGraph.Sup.adjDecidable
-/- warning: simple_graph.inf.adj_decidable -> SimpleGraph.Inf.adjDecidable is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G H))
-but is expected to have type
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G H))
-Case conversion may be inaccurate. Consider using '#align simple_graph.inf.adj_decidable SimpleGraph.Inf.adjDecidableₓ'. -/
instance Inf.adjDecidable : DecidableRel (G ⊓ H).Adj := fun v w => And.decidable
#align simple_graph.inf.adj_decidable SimpleGraph.Inf.adjDecidable
-/- warning: simple_graph.sdiff.adj_decidable -> SimpleGraph.Sdiff.adjDecidable is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G H))
-but is expected to have type
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G H))
-Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidableₓ'. -/
instance Sdiff.adjDecidable : DecidableRel (G \ H).Adj := fun v w => And.decidable
#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidable
variable [DecidableEq V]
-/- warning: simple_graph.top.adj_decidable -> SimpleGraph.Top.adjDecidable is a dubious translation:
-lean 3 declaration is
- forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
-but is expected to have type
- forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidableₓ'. -/
instance Top.adjDecidable : DecidableRel (⊤ : SimpleGraph V).Adj := fun v w => Not.decidable
#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidable
@@ -586,85 +478,37 @@ def edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V) :=
#align simple_graph.edge_set SimpleGraph.edgeSetEmbedding
-/
-/- warning: simple_graph.mem_edge_set -> SimpleGraph.mem_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (Membership.Mem.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V v w)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (SimpleGraph.Adj.{u1} V G v w)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (Membership.mem.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V v w)) (SimpleGraph.edgeSet.{u1} V G)) (SimpleGraph.Adj.{u1} V G v w)
-Case conversion may be inaccurate. Consider using '#align simple_graph.mem_edge_set SimpleGraph.mem_edgeSetₓ'. -/
@[simp]
theorem mem_edgeSet : ⟦(v, w)⟧ ∈ G.edgeSetEmbedding ↔ G.Adj v w :=
Iff.rfl
#align simple_graph.mem_edge_set SimpleGraph.mem_edgeSet
-/- warning: simple_graph.not_is_diag_of_mem_edge_set -> SimpleGraph.not_isDiag_of_mem_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (Not (Sym2.IsDiag.{u1} V e))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (Not (Sym2.IsDiag.{u1} V e))
-Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_diag_of_mem_edge_set SimpleGraph.not_isDiag_of_mem_edgeSetₓ'. -/
theorem not_isDiag_of_mem_edgeSet : e ∈ G.edgeSetEmbedding → ¬e.IsDiag :=
Sym2.ind (fun v w => Adj.ne) e
#align simple_graph.not_is_diag_of_mem_edge_set SimpleGraph.not_isDiag_of_mem_edgeSet
-/- warning: simple_graph.edge_set_inj -> SimpleGraph.edgeSet_inj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_inj SimpleGraph.edgeSet_injₓ'. -/
@[simp]
theorem edgeSet_inj : G₁.edgeSetEmbedding = G₂.edgeSetEmbedding ↔ G₁ = G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).eq_iff_eq
#align simple_graph.edge_set_inj SimpleGraph.edgeSet_inj
-/- warning: simple_graph.edge_set_subset_edge_set -> SimpleGraph.edgeSet_subset_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂)
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSetₓ'. -/
@[simp]
theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding ↔ G₁ ≤ G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).le_iff_le
#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSet
-/- warning: simple_graph.edge_set_ssubset_edge_set -> SimpleGraph.edgeSet_ssubset_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSetₓ'. -/
@[simp]
theorem edgeSet_ssubset_edgeSet : G₁.edgeSetEmbedding ⊂ G₂.edgeSetEmbedding ↔ G₁ < G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).lt_iff_lt
#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSet
-/- warning: simple_graph.edge_set_injective -> SimpleGraph.edgeSet_injective is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}}, Function.Injective.{succ u1, succ u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V))
-but is expected to have type
- forall {V : Type.{u1}}, Function.Injective.{succ u1, succ u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injectiveₓ'. -/
theorem edgeSet_injective : Injective (edgeSetEmbedding : SimpleGraph V → Set (Sym2 V)) :=
edgeSetEmbedding.Injective
#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injective
-/- warning: simple_graph.edge_set_mono -> SimpleGraph.edgeSet_mono is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_mono SimpleGraph.edgeSet_monoₓ'. -/
alias edge_set_subset_edge_set ↔ _ edge_set_mono
#align simple_graph.edge_set_mono SimpleGraph.edgeSet_mono
-/- warning: simple_graph.edge_set_strict_mono -> SimpleGraph.edgeSet_strict_mono is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_monoₓ'. -/
alias edge_set_ssubset_edge_set ↔ _ edge_set_strict_mono
#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_mono
@@ -672,56 +516,26 @@ attribute [mono] edge_set_mono edge_set_strict_mono
variable (G₁ G₂)
-/- warning: simple_graph.edge_set_bot -> SimpleGraph.edgeSet_bot is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))
-but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_bot SimpleGraph.edgeSet_botₓ'. -/
@[simp]
theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSetEmbedding = ∅ :=
Sym2.fromRel_bot
#align simple_graph.edge_set_bot SimpleGraph.edgeSet_bot
-/- warning: simple_graph.edge_set_sup -> SimpleGraph.edgeSet_sup is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
-but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sup SimpleGraph.edgeSet_supₓ'. -/
@[simp]
theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∪ G₂.edgeSetEmbedding := by
ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_sup SimpleGraph.edgeSet_sup
-/- warning: simple_graph.edge_set_inf -> SimpleGraph.edgeSet_inf is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
-but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_inf SimpleGraph.edgeSet_infₓ'. -/
@[simp]
theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∩ G₂.edgeSetEmbedding := by
ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_inf SimpleGraph.edgeSet_inf
-/- warning: simple_graph.edge_set_sdiff -> SimpleGraph.edgeSet_sdiff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
-but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiffₓ'. -/
@[simp]
theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \ G₂.edgeSetEmbedding := by
ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiff
-/- warning: simple_graph.edge_set_sdiff_sdiff_is_diag -> SimpleGraph.edgeSet_sdiff_sdiff_isDiag is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) s)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) s)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sdiff_sdiff_is_diag SimpleGraph.edgeSet_sdiff_sdiff_isDiagₓ'. -/
/-- This lemma, combined with `edge_set_sdiff` and `edge_set_from_edge_set`,
allows proving `(G \ from_edge_set s).edge_set = G.edge_set \ s` by `simp`.
-/
@@ -735,12 +549,6 @@ theorem edgeSet_sdiff_sdiff_isDiag (G : SimpleGraph V) (s : Set (Sym2 V)) :
simp only [G.not_is_diag_of_mem_edge_set h, imp_false]
#align simple_graph.edge_set_sdiff_sdiff_is_diag SimpleGraph.edgeSet_sdiff_sdiff_isDiag
-/- warning: simple_graph.adj_iff_exists_edge -> SimpleGraph.adj_iff_exists_edge is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (SimpleGraph.Adj.{u1} V G v w) (And (Ne.{succ u1} V v w) (Exists.{succ u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Exists.{0} (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (fun (H : Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) => And (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v e) (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) w e)))))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (SimpleGraph.Adj.{u1} V G v w) (And (Ne.{succ u1} V v w) (Exists.{succ u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => And (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) (And (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v e) (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) w e)))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edgeₓ'. -/
/-- Two vertices are adjacent iff there is an edge between them. The
condition `v ≠ w` ensures they are different endpoints of the edge,
which is necessary since when `v = w` the existential
@@ -758,87 +566,39 @@ theorem adj_iff_exists_edge {v w : V} :
rwa [mem_edge_set] at he
#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edge
-/- warning: simple_graph.adj_iff_exists_edge_coe -> SimpleGraph.adj_iff_exists_edge_coe is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V G a b) (Exists.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (fun (e : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) => Eq.{succ u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (coeSubtype.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))))) e) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V G a b) (Exists.{succ u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (fun (e : Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) => Eq.{succ u1} (Sym2.{u1} V) (Subtype.val.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) x (SimpleGraph.edgeSet.{u1} V G)) e) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coeₓ'. -/
theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSetEmbedding, ↑e = ⟦(a, b)⟧ := by
simp only [mem_edge_set, exists_prop, SetCoe.exists, exists_eq_right, Subtype.coe_mk]
#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coe
-/- warning: simple_graph.edge_other_ne -> SimpleGraph.edge_other_ne is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (forall {v : V} (h : Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v e), Ne.{succ u1} V (Sym2.Mem.other.{u1} V v e h) v)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (forall {v : V} (h : Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v e), Ne.{succ u1} V (Sym2.Mem.other.{u1} V v e h) v)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_other_ne SimpleGraph.edge_other_neₓ'. -/
theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) {v : V} (h : v ∈ e) :
h.other ≠ v := by
erw [← Sym2.other_spec h, Sym2.eq_swap] at he
exact G.ne_of_adj he
#align simple_graph.edge_other_ne SimpleGraph.edge_other_ne
-/- warning: simple_graph.decidable_mem_edge_set -> SimpleGraph.decidableMemEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], DecidablePred.{succ u1} (Sym2.{u1} V) (fun (_x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) _x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], DecidablePred.{succ u1} (Sym2.{u1} V) (fun (_x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) _x (SimpleGraph.edgeSet.{u1} V G))
-Case conversion may be inaccurate. Consider using '#align simple_graph.decidable_mem_edge_set SimpleGraph.decidableMemEdgeSetₓ'. -/
instance decidableMemEdgeSet [DecidableRel G.Adj] : DecidablePred (· ∈ G.edgeSetEmbedding) :=
Sym2.fromRel.decidablePred _
#align simple_graph.decidable_mem_edge_set SimpleGraph.decidableMemEdgeSet
-/- warning: simple_graph.fintype_edge_set -> SimpleGraph.fintypeEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Sym2.{u1} V)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))
-Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set SimpleGraph.fintypeEdgeSetₓ'. -/
instance fintypeEdgeSet [DecidableEq V] [Fintype V] [DecidableRel G.Adj] :
Fintype G.edgeSetEmbedding :=
Subtype.fintype _
#align simple_graph.fintype_edge_set SimpleGraph.fintypeEdgeSet
-/- warning: simple_graph.fintype_edge_set_bot -> SimpleGraph.fintypeEdgeSetBot is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}}, Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))))
-but is expected to have type
- forall {V : Type.{u1}}, Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBotₓ'. -/
instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding := by rw [edge_set_bot];
infer_instance
#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBot
-/- warning: simple_graph.fintype_edge_set_sup -> SimpleGraph.fintypeEdgeSetSup is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)))
-but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSupₓ'. -/
instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊔ G₂).edgeSetEmbedding := by rw [edge_set_sup];
infer_instance
#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSup
-/- warning: simple_graph.fintype_edge_set_inf -> SimpleGraph.fintypeEdgeSetInf is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)))
-but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInfₓ'. -/
instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊓ G₂).edgeSetEmbedding := by rw [edge_set_inf];
exact Set.fintypeInter _ _
#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInf
-/- warning: simple_graph.fintype_edge_set_sdiff -> SimpleGraph.fintypeEdgeSetSdiff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂)))
-but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiffₓ'. -/
instance fintypeEdgeSetSdiff [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ \ G₂).edgeSetEmbedding := by rw [edge_set_sdiff];
exact Set.fintypeDiff _ _
@@ -866,12 +626,6 @@ theorem fromEdgeSet_adj : (fromEdgeSet s).Adj v w ↔ ⟦(v, w)⟧ ∈ s ∧ v
#align simple_graph.from_edge_set_adj SimpleGraph.fromEdgeSet_adj
-/
-/- warning: simple_graph.edge_set_from_edge_set -> SimpleGraph.edgeSet_fromEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))
-but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SimpleGraph.fromEdgeSet.{u1} V s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSetₓ'. -/
-- Note: we need to make sure `from_edge_set_adj` and this lemma are confluent.
-- In particular, both yield `⟦(u, v)⟧ ∈ (from_edge_set s).edge_set` ==> `⟦(v, w)⟧ ∈ s ∧ v ≠ w`.
@[simp]
@@ -879,69 +633,33 @@ theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ { e | e.IsD
exact Sym2.ind (by simp) e
#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSet
-/- warning: simple_graph.from_edge_set_edge_set -> SimpleGraph.fromEdgeSet_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) G
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (SimpleGraph.edgeSet.{u1} V G)) G
-Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSetₓ'. -/
@[simp]
theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G := by ext (v w);
exact ⟨fun h => h.1, fun h => ⟨h, G.ne_of_adj h⟩⟩
#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSet
-/- warning: simple_graph.from_edge_set_empty -> SimpleGraph.fromEdgeSet_empty is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_emptyₓ'. -/
@[simp]
theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ := by ext (v w);
simp only [from_edge_set_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_empty
-/- warning: simple_graph.from_edge_set_univ -> SimpleGraph.fromEdgeSet_univ is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univₓ'. -/
@[simp]
theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by ext (v w);
simp only [from_edge_set_adj, Set.mem_univ, true_and_iff, top_adj]
#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univ
-/- warning: simple_graph.from_edge_set_inf -> SimpleGraph.fromEdgeSet_inf is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) s t))
-but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s t))
-Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_infₓ'. -/
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by ext (v w);
simp only [from_edge_set_adj, Set.mem_inter_iff, Ne.def, inf_adj]; tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
-/- warning: simple_graph.from_edge_set_sup -> SimpleGraph.fromEdgeSet_sup is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) s t))
-but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) s t))
-Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_supₓ'. -/
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) := by ext (v w);
simp [Set.mem_union, or_and_right]
#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_sup
-/- warning: simple_graph.from_edge_set_sdiff -> SimpleGraph.fromEdgeSet_sdiff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s t))
-but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s t))
-Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiffₓ'. -/
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) := by ext (v w);
@@ -1022,12 +740,6 @@ theorem Dart.edge_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).edge = ⟦
#align simple_graph.dart.edge_mk SimpleGraph.Dart.edge_mk
-/
-/- warning: simple_graph.dart.edge_mem -> SimpleGraph.Dart.edge_mem is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} (d : SimpleGraph.Dart.{u1} V G), Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) (SimpleGraph.Dart.edge.{u1} V G d) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)
-but is expected to have type
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} (d : SimpleGraph.Dart.{u1} V G), Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) (SimpleGraph.Dart.edge.{u1} V G d) (SimpleGraph.edgeSet.{u1} V G)
-Case conversion may be inaccurate. Consider using '#align simple_graph.dart.edge_mem SimpleGraph.Dart.edge_memₓ'. -/
@[simp]
theorem Dart.edge_mem (d : G.Dart) : d.edge ∈ G.edgeSetEmbedding :=
d.is_adj
@@ -1128,12 +840,6 @@ theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighb
#align simple_graph.dart_of_neighbor_set_injective SimpleGraph.dartOfNeighborSet_injective
-/
-/- warning: simple_graph.nonempty_dart_top -> SimpleGraph.nonempty_dart_top is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
-but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_topₓ'. -/
instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart := by
obtain ⟨v, w, h⟩ := exists_pair_ne V; exact ⟨⟨(v, w), h⟩⟩
#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_top
@@ -1150,12 +856,6 @@ def incidenceSet (v : V) : Set (Sym2 V) :=
#align simple_graph.incidence_set SimpleGraph.incidenceSet
-/
-/- warning: simple_graph.incidence_set_subset -> SimpleGraph.incidenceSet_subset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (SimpleGraph.edgeSet.{u1} V G)
-Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_subset SimpleGraph.incidenceSet_subsetₓ'. -/
theorem incidenceSet_subset (v : V) : G.incidenceSet v ⊆ G.edgeSetEmbedding := fun _ h => h.1
#align simple_graph.incidence_set_subset SimpleGraph.incidenceSet_subset
@@ -1177,31 +877,16 @@ theorem mk'_mem_incidenceSet_right_iff : ⟦(a, b)⟧ ∈ G.incidenceSet b ↔ G
#align simple_graph.mk_mem_incidence_set_right_iff SimpleGraph.mk'_mem_incidenceSet_right_iff
-/
-/- warning: simple_graph.edge_mem_incidence_set_iff -> SimpleGraph.edge_mem_incidenceSet_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iffₓ'. -/
theorem edge_mem_incidenceSet_iff {e : G.edgeSetEmbedding} :
↑e ∈ G.incidenceSet a ↔ a ∈ (e : Sym2 V) :=
and_iff_right e.2
#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iff
-/- warning: simple_graph.incidence_set_inter_incidence_set_subset -> SimpleGraph.incidenceSet_inter_incidenceSet_subset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Ne.{succ u1} V a b) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasSingleton.{u1} (Sym2.{u1} V)) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Ne.{succ u1} V a b) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.instSingletonSet.{u1} (Sym2.{u1} V)) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_inter_incidence_set_subset SimpleGraph.incidenceSet_inter_incidenceSet_subsetₓ'. -/
theorem incidenceSet_inter_incidenceSet_subset (h : a ≠ b) :
G.incidenceSet a ∩ G.incidenceSet b ⊆ {⟦(a, b)⟧} := fun e he =>
(Sym2.mem_and_mem_iff h).1 ⟨he.1.2, he.2.2⟩
#align simple_graph.incidence_set_inter_incidence_set_subset SimpleGraph.incidenceSet_inter_incidenceSet_subset
-/- warning: simple_graph.incidence_set_inter_incidence_set_of_adj -> SimpleGraph.incidenceSet_inter_incidenceSet_of_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (SimpleGraph.Adj.{u1} V G a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasSingleton.{u1} (Sym2.{u1} V)) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (SimpleGraph.Adj.{u1} V G a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.instSingletonSet.{u1} (Sym2.{u1} V)) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_inter_incidence_set_of_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_adjₓ'. -/
theorem incidenceSet_inter_incidenceSet_of_adj (h : G.Adj a b) :
G.incidenceSet a ∩ G.incidenceSet b = {⟦(a, b)⟧} :=
by
@@ -1218,12 +903,6 @@ theorem adj_of_mem_incidenceSet (h : a ≠ b) (ha : e ∈ G.incidenceSet a)
#align simple_graph.adj_of_mem_incidence_set SimpleGraph.adj_of_mem_incidenceSet
-/
-/- warning: simple_graph.incidence_set_inter_incidence_set_of_not_adj -> SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Not (SimpleGraph.Adj.{u1} V G a b)) -> (Ne.{succ u1} V a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V))))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Not (SimpleGraph.Adj.{u1} V G a b)) -> (Ne.{succ u1} V a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_inter_incidence_set_of_not_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adjₓ'. -/
theorem incidenceSet_inter_incidenceSet_of_not_adj (h : ¬G.Adj a b) (hn : a ≠ b) :
G.incidenceSet a ∩ G.incidenceSet b = ∅ :=
by
@@ -1243,12 +922,6 @@ section EdgeFinset
variable {G₁ G₂ : SimpleGraph V} [Fintype G.edgeSetEmbedding] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding]
-/- warning: simple_graph.edge_finset -> SimpleGraph.edgeFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Finset.{u1} (Sym2.{u1} V)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Finset.{u1} (Sym2.{u1} V)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset SimpleGraph.edgeFinsetₓ'. -/
/-- The `edge_set` of the graph as a `finset`.
-/
@[reducible]
@@ -1256,12 +929,6 @@ def edgeFinset : Finset (Sym2 V) :=
Set.toFinset G.edgeSetEmbedding
#align simple_graph.edge_finset SimpleGraph.edgeFinset
-/- warning: simple_graph.coe_edge_finset -> SimpleGraph.coe_edgeFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Finset.toSet.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (SimpleGraph.edgeSet.{u1} V G)
-Case conversion may be inaccurate. Consider using '#align simple_graph.coe_edge_finset SimpleGraph.coe_edgeFinsetₓ'. -/
@[simp, norm_cast]
theorem coe_edgeFinset : (G.edgeFinset : Set (Sym2 V)) = G.edgeSetEmbedding :=
Set.coe_toFinset _
@@ -1269,138 +936,60 @@ theorem coe_edgeFinset : (G.edgeFinset : Set (Sym2 V)) = G.edgeSetEmbedding :=
variable {G}
-/- warning: simple_graph.mem_edge_finset -> SimpleGraph.mem_edgeFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Iff (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.hasMem.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
-but is expected to have type
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Iff (Membership.mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.instMembershipFinset.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
-Case conversion may be inaccurate. Consider using '#align simple_graph.mem_edge_finset SimpleGraph.mem_edgeFinsetₓ'. -/
@[simp]
theorem mem_edgeFinset : e ∈ G.edgeFinset ↔ e ∈ G.edgeSetEmbedding :=
Set.mem_toFinset
#align simple_graph.mem_edge_finset SimpleGraph.mem_edgeFinset
-/- warning: simple_graph.not_is_diag_of_mem_edge_finset -> SimpleGraph.not_isDiag_of_mem_edgeFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.hasMem.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) -> (Not (Sym2.IsDiag.{u1} V e))
-but is expected to have type
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], (Membership.mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.instMembershipFinset.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) -> (Not (Sym2.IsDiag.{u1} V e))
-Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_diag_of_mem_edge_finset SimpleGraph.not_isDiag_of_mem_edgeFinsetₓ'. -/
theorem not_isDiag_of_mem_edgeFinset : e ∈ G.edgeFinset → ¬e.IsDiag :=
not_isDiag_of_mem_edgeSet _ ∘ mem_edgeFinset.1
#align simple_graph.not_is_diag_of_mem_edge_finset SimpleGraph.not_isDiag_of_mem_edgeFinset
-/- warning: simple_graph.edge_finset_inj -> SimpleGraph.edgeFinset_inj is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_inj SimpleGraph.edgeFinset_injₓ'. -/
@[simp]
theorem edgeFinset_inj : G₁.edgeFinset = G₂.edgeFinset ↔ G₁ = G₂ := by simp [edge_finset]
#align simple_graph.edge_finset_inj SimpleGraph.edgeFinset_inj
-/- warning: simple_graph.edge_finset_subset_edge_finset -> SimpleGraph.edgeFinset_subset_edgeFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂)
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinsetₓ'. -/
@[simp]
theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G₁ ≤ G₂ := by
simp [edge_finset]
#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinset
-/- warning: simple_graph.edge_finset_ssubset_edge_finset -> SimpleGraph.edgeFinset_ssubset_edgeFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinsetₓ'. -/
@[simp]
theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by
simp [edge_finset]
#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
-/- warning: simple_graph.edge_finset_mono -> SimpleGraph.edgeFinset_mono is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_monoₓ'. -/
alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
-/- warning: simple_graph.edge_finset_strict_mono -> SimpleGraph.edgeFinset_strict_mono is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_monoₓ'. -/
alias edge_finset_ssubset_edge_finset ↔ _ edge_finset_strict_mono
#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
attribute [mono] edge_finset_mono edge_finset_strict_mono
-/- warning: simple_graph.edge_finset_bot -> SimpleGraph.edgeFinset_bot is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasEmptyc.{u1} (Sym2.{u1} V)))
-but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instEmptyCollectionFinset.{u1} (Sym2.{u1} V)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_botₓ'. -/
@[simp]
theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edge_finset]
#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_bot
-/- warning: simple_graph.edge_finset_sup -> SimpleGraph.edgeFinset_sup is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasUnion.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instUnionFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_supₓ'. -/
@[simp]
theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeFinset ∪ G₂.edgeFinset := by
simp [edge_finset]
#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_sup
-/- warning: simple_graph.edge_finset_inf -> SimpleGraph.edgeFinset_inf is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasInter.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instInterFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_infₓ'. -/
@[simp]
theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset := by
simp [edge_finset]
#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_inf
-/- warning: simple_graph.edge_finset_sdiff -> SimpleGraph.edgeFinset_sdiff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiffₓ'. -/
@[simp]
theorem edgeFinset_sdiff [DecidableEq V] : (G₁ \ G₂).edgeFinset = G₁.edgeFinset \ G₂.edgeFinset :=
by simp [edge_finset]
#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiff
-/- warning: simple_graph.edge_finset_card -> SimpleGraph.edgeFinset_card is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{1} Nat (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) _inst_1)
-but is expected to have type
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{1} Nat (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Fintype.card.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) _inst_1)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_card SimpleGraph.edgeFinset_cardₓ'. -/
theorem edgeFinset_card : G.edgeFinset.card = Fintype.card G.edgeSetEmbedding :=
Set.toFinset_card _
#align simple_graph.edge_finset_card SimpleGraph.edgeFinset_card
-/- warning: simple_graph.edge_set_univ_card -> SimpleGraph.edgeSet_univ_card is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{1} Nat (Finset.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Finset.univ.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) _inst_1)) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1))
-but is expected to have type
- forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{1} Nat (Finset.card.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Finset.univ.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) _inst_1)) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1))
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_univ_card SimpleGraph.edgeSet_univ_cardₓ'. -/
@[simp]
theorem edgeSet_univ_card : (univ : Finset G.edgeSetEmbedding).card = G.edgeFinset.card :=
Fintype.card_of_subtype G.edgeFinset fun _ => mem_edgeFinset
@@ -1428,12 +1017,6 @@ theorem mem_incidence_iff_neighbor {v w : V} : ⟦(v, w)⟧ ∈ G.incidenceSet v
#align simple_graph.mem_incidence_iff_neighbor SimpleGraph.mem_incidence_iff_neighbor
-/
-/- warning: simple_graph.adj_incidence_set_inter -> SimpleGraph.adj_incidenceSet_inter is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (forall (h : Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v e), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (SimpleGraph.incidenceSet.{u1} V G (Sym2.Mem.other.{u1} V v e h))) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasSingleton.{u1} (Sym2.{u1} V)) e))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (forall (h : Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v e), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (SimpleGraph.incidenceSet.{u1} V G (Sym2.Mem.other.{u1} V v e h))) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instSingletonSet.{u1} (Sym2.{u1} V)) e))
-Case conversion may be inaccurate. Consider using '#align simple_graph.adj_incidence_set_inter SimpleGraph.adj_incidenceSet_interₓ'. -/
theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) (h : v ∈ e) :
G.incidenceSet v ∩ G.incidenceSet h.other = {e} :=
by
@@ -1446,12 +1029,6 @@ theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSetEmbeddi
exact ⟨⟨he, h⟩, he, Sym2.other_mem _⟩
#align simple_graph.adj_incidence_set_inter SimpleGraph.adj_incidenceSet_inter
-/- warning: simple_graph.compl_neighbor_set_disjoint -> SimpleGraph.compl_neighborSet_disjoint is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.completeBooleanAlgebra.{u1} V)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} V) (Preorder.toLE.{u1} (Set.{u1} V) (PartialOrder.toPreorder.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)
-Case conversion may be inaccurate. Consider using '#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjointₓ'. -/
theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
Disjoint (G.neighborSet v) (Gᶜ.neighborSet v) :=
by
@@ -1461,12 +1038,6 @@ theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
exact h'.2 h
#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjoint
-/- warning: simple_graph.neighbor_set_union_compl_neighbor_set_eq -> SimpleGraph.neighborSet_union_compl_neighborSet_eq is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) v))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
-Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_union_compl_neighbor_set_eq SimpleGraph.neighborSet_union_compl_neighborSet_eqₓ'. -/
theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
G.neighborSet v ∪ Gᶜ.neighborSet v = {v}ᶜ :=
by
@@ -1476,12 +1047,6 @@ theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
tauto
#align simple_graph.neighbor_set_union_compl_neighbor_set_eq SimpleGraph.neighborSet_union_compl_neighborSet_eq
-/- warning: simple_graph.card_neighbor_set_union_compl_neighbor_set -> SimpleGraph.card_neighborSet_union_compl_neighborSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
-but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (Set.Elem.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSetₓ'. -/
-- TODO find out why TC inference has `h` failing a defeq check for `to_finset`
theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V) (v : V)
[h : Fintype (G.neighborSet v ∪ Gᶜ.neighborSet v : Set V)] :
@@ -1490,12 +1055,6 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
Finset.card_compl, Set.toFinset_card, Set.card_singleton]
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
-/- warning: simple_graph.neighbor_set_compl -> SimpleGraph.neighborSet_compl is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) v))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
-Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_complₓ'. -/
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
by ext w; simp [and_comm', eq_comm]
#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_compl
@@ -1509,12 +1068,6 @@ def commonNeighbors (v w : V) : Set V :=
#align simple_graph.common_neighbors SimpleGraph.commonNeighbors
-/
-/- warning: simple_graph.common_neighbors_eq -> SimpleGraph.commonNeighbors_eq is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) (w : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V G v w) (Inter.inter.{u1} (Set.{u1} V) (Set.hasInter.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V G w))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) (w : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V G v w) (Inter.inter.{u1} (Set.{u1} V) (Set.instInterSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V G w))
-Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_eq SimpleGraph.commonNeighbors_eqₓ'. -/
theorem commonNeighbors_eq (v w : V) : G.commonNeighbors v w = G.neighborSet v ∩ G.neighborSet w :=
rfl
#align simple_graph.common_neighbors_eq SimpleGraph.commonNeighbors_eq
@@ -1563,12 +1116,6 @@ instance decidableMemCommonNeighbors [DecidableRel G.Adj] (v w : V) :
#align simple_graph.decidable_mem_common_neighbors SimpleGraph.decidableMemCommonNeighbors
-/
-/- warning: simple_graph.common_neighbors_top_eq -> SimpleGraph.commonNeighbors_top_eq is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.hasInsert.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) w)))
-but is expected to have type
- forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.instInsertSet.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) w)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eqₓ'. -/
theorem commonNeighbors_top_eq {v w : V} :
(⊤ : SimpleGraph V).commonNeighbors v w = Set.univ \ {v, w} := by ext u;
simp [common_neighbors, eq_comm, not_or_distrib.symm]
@@ -1647,42 +1194,18 @@ theorem deleteEdges_adj (s : Set (Sym2 V)) (v w : V) :
#align simple_graph.delete_edges_adj SimpleGraph.deleteEdges_adj
-/
-/- warning: simple_graph.sdiff_eq_delete_edges -> SimpleGraph.sdiff_eq_deleteEdges is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G'))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (SimpleGraph.edgeSet.{u1} V G'))
-Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdgesₓ'. -/
theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.edgeSetEmbedding :=
by ext; simp
#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdges
-/- warning: simple_graph.delete_edges_eq_sdiff_from_edge_set -> SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSetₓ'. -/
theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s = G \ fromEdgeSet s :=
by ext; exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.Ne⟩⟩
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
-/- warning: simple_graph.compl_eq_delete_edges -> SimpleGraph.compl_eq_deleteEdges is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.edgeSet.{u1} V G))
-Case conversion may be inaccurate. Consider using '#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdgesₓ'. -/
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding := by ext;
simp
#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdges
-/- warning: simple_graph.delete_edges_delete_edges -> SimpleGraph.deleteEdges_deleteEdges is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)) (s' : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V (SimpleGraph.deleteEdges.{u1} V G s) s') (SimpleGraph.deleteEdges.{u1} V G (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) s s'))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)) (s' : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V (SimpleGraph.deleteEdges.{u1} V G s) s') (SimpleGraph.deleteEdges.{u1} V G (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) s s'))
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdgesₓ'. -/
@[simp]
theorem deleteEdges_deleteEdges (s s' : Set (Sym2 V)) :
(G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') := by ext; simp [and_assoc', not_or]
@@ -1694,12 +1217,6 @@ theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G := by ext; simp
#align simple_graph.delete_edges_empty_eq SimpleGraph.deleteEdges_empty_eq
-/
-/- warning: simple_graph.delete_edges_univ_eq -> SimpleGraph.deleteEdges_univ_eq is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eqₓ'. -/
@[simp]
theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ := by ext; simp
#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eq
@@ -1719,45 +1236,21 @@ theorem deleteEdges_le_of_le {s s' : Set (Sym2 V)} (h : s ⊆ s') :
#align simple_graph.delete_edges_le_of_le SimpleGraph.deleteEdges_le_of_le
-/
-/- warning: simple_graph.delete_edges_eq_inter_edge_set -> SimpleGraph.deleteEdges_eq_inter_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SimpleGraph.deleteEdges.{u1} V G (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) s (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SimpleGraph.deleteEdges.{u1} V G (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s (SimpleGraph.edgeSet.{u1} V G)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSetₓ'. -/
theorem deleteEdges_eq_inter_edgeSet (s : Set (Sym2 V)) :
G.deleteEdges s = G.deleteEdges (s ∩ G.edgeSetEmbedding) := by ext;
simp (config := { contextual := true }) [imp_false]
#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSet
-/- warning: simple_graph.delete_edges_sdiff_eq_of_le -> SimpleGraph.deleteEdges_sdiff_eq_of_le is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {H : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) H))) H)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {H : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) H G) -> (Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) (SimpleGraph.edgeSet.{u1} V H))) H)
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_leₓ'. -/
theorem deleteEdges_sdiff_eq_of_le {H : SimpleGraph V} (h : H ≤ G) :
G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H := by ext (v w);
constructor <;> simp (config := { contextual := true }) [@h v w]
#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_le
-/- warning: simple_graph.edge_set_delete_edges -> SimpleGraph.edgeSet_deleteEdges is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) s)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) s)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdgesₓ'. -/
theorem edgeSet_deleteEdges (s : Set (Sym2 V)) :
(G.deleteEdges s).edgeSetEmbedding = G.edgeSetEmbedding \ s := by ext e; refine' Sym2.ind _ e;
simp
#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdges
-/- warning: simple_graph.edge_finset_delete_edges -> SimpleGraph.edgeFinset_deleteEdges is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)) (fun (a : V) (b : V) => _inst_2 a b) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_2 a b) _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Sym2.{u1} V)] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdgesₓ'. -/
theorem edgeFinset_deleteEdges [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
(s : Finset (Sym2 V)) [DecidableRel (G.deleteEdges s).Adj] :
(G.deleteEdges s).edgeFinset = G.edgeFinset \ s := by ext e; simp [edge_set_delete_edges]
@@ -1768,12 +1261,6 @@ section DeleteFar
variable (G) [OrderedRing 𝕜] [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
{p : SimpleGraph V → Prop} {r r₁ r₂ : 𝕜}
-/- warning: simple_graph.delete_far -> SimpleGraph.DeleteFar is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], ((SimpleGraph.{u1} V) -> Prop) -> 𝕜 -> Prop
-but is expected to have type
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} (Sym2.{u1} V)] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], ((SimpleGraph.{u1} V) -> Prop) -> 𝕜 -> Prop
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far SimpleGraph.DeleteFarₓ'. -/
/-- A graph is `r`-*delete-far* from a property `p` if we must delete at least `r` edges from it to
get a graph with the property `p`. -/
def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
@@ -1784,12 +1271,6 @@ open Classical
variable {G}
-/- warning: simple_graph.delete_far_iff -> SimpleGraph.deleteFar_iff is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iffₓ'. -/
theorem deleteFar_iff :
G.DeleteFar p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card :=
by
@@ -1803,21 +1284,9 @@ theorem deleteFar_iff :
card_le_of_subset hs] using h (G.delete_edges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
-/- warning: simple_graph.delete_far.le_card_sub_card -> SimpleGraph.DeleteFar.le_card_sub_card is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_cardₓ'. -/
alias delete_far_iff ↔ delete_far.le_card_sub_card _
#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
-/- warning: simple_graph.delete_far.mono -> SimpleGraph.DeleteFar.mono is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r₁ : 𝕜} {r₂ : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₂) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r₁ r₂) -> (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₁)
-but is expected to have type
- forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {_inst_4 : (SimpleGraph.{u2} V) -> Prop} {p : 𝕜} {r₁ : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) _inst_4 r₁) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) p r₁) -> (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) _inst_4 p)
-Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.monoₓ'. -/
theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteFar p r₁ := fun s hs hG =>
hr.trans <| h hs hG
#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.mono
@@ -1990,22 +1459,10 @@ theorem not_mem_neighborFinset_self : v ∉ G.neighborFinset v :=
#align simple_graph.not_mem_neighbor_finset_self SimpleGraph.not_mem_neighborFinset_self
-/
-/- warning: simple_graph.neighbor_finset_disjoint_singleton -> SimpleGraph.neighborFinset_disjoint_singleton is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.orderBot.{u1} V) (SimpleGraph.neighborFinset.{u1} V G v _inst_1) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.hasSingleton.{u1} V) v)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} V) (SimpleGraph.neighborFinset.{u1} V G v _inst_1) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.instSingletonFinset.{u1} V) v)
-Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_finset_disjoint_singleton SimpleGraph.neighborFinset_disjoint_singletonₓ'. -/
theorem neighborFinset_disjoint_singleton : Disjoint (G.neighborFinset v) {v} :=
Finset.disjoint_singleton_right.mpr <| not_mem_neighborFinset_self _ _
#align simple_graph.neighbor_finset_disjoint_singleton SimpleGraph.neighborFinset_disjoint_singleton
-/- warning: simple_graph.singleton_disjoint_neighbor_finset -> SimpleGraph.singleton_disjoint_neighborFinset is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.orderBot.{u1} V) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.hasSingleton.{u1} V) v) (SimpleGraph.neighborFinset.{u1} V G v _inst_1)
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} V) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.instSingletonFinset.{u1} V) v) (SimpleGraph.neighborFinset.{u1} V G v _inst_1)
-Case conversion may be inaccurate. Consider using '#align simple_graph.singleton_disjoint_neighbor_finset SimpleGraph.singleton_disjoint_neighborFinsetₓ'. -/
theorem singleton_disjoint_neighborFinset : Disjoint {v} (G.neighborFinset v) :=
Finset.disjoint_singleton_left.mpr <| not_mem_neighborFinset_self _ _
#align simple_graph.singleton_disjoint_neighbor_finset SimpleGraph.singleton_disjoint_neighborFinset
@@ -2077,12 +1534,6 @@ theorem mem_incidenceFinset [DecidableEq V] (e : Sym2 V) :
#align simple_graph.mem_incidence_finset SimpleGraph.mem_incidenceFinset
-/
-/- warning: simple_graph.incidence_finset_eq_filter -> SimpleGraph.incidenceFinset_eq_filter is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v))] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceFinset.{u1} V G v _inst_1 (fun (a : V) (b : V) => _inst_2 a b)) (Finset.filter.{u1} (Sym2.{u1} V) (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v) (fun (a : Sym2.{u1} V) => Sym2.Mem.decidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) v a) (SimpleGraph.edgeFinset.{u1} V G _inst_3))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v))] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceFinset.{u1} V G v _inst_1 (fun (a : V) (b : V) => _inst_2 a b)) (Finset.filter.{u1} (Sym2.{u1} V) (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v) (fun (a : Sym2.{u1} V) => Sym2.Mem.decidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) v a) (SimpleGraph.edgeFinset.{u1} V G _inst_3))
-Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_finset_eq_filter SimpleGraph.incidenceFinset_eq_filterₓ'. -/
theorem incidenceFinset_eq_filter [DecidableEq V] [Fintype G.edgeSetEmbedding] :
G.incidenceFinset v = G.edgeFinset.filterₓ (Membership.Mem v) :=
by
@@ -2155,36 +1606,18 @@ theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_compl
-/
-/- warning: simple_graph.complete_graph_degree -> SimpleGraph.complete_graph_degree is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
-but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degreeₓ'. -/
@[simp]
theorem complete_graph_degree [DecidableEq V] (v : V) :
(⊤ : SimpleGraph V).degree v = Fintype.card V - 1 := by
erw [degree, neighbor_finset_eq_filter, filter_ne, card_erase_of_mem (mem_univ v), card_univ]
#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degree
-/- warning: simple_graph.bot_degree -> SimpleGraph.bot_degree is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
-but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
-Case conversion may be inaccurate. Consider using '#align simple_graph.bot_degree SimpleGraph.bot_degreeₓ'. -/
theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 :=
by
erw [degree, neighbor_finset_eq_filter, filter_false]
exact Finset.card_empty
#align simple_graph.bot_degree SimpleGraph.bot_degree
-/- warning: simple_graph.is_regular_of_degree.top -> SimpleGraph.IsRegularOfDegree.top is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
-but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.topₓ'. -/
theorem IsRegularOfDegree.top [DecidableEq V] :
(⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) := by intro v; simp
#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.top
@@ -2355,12 +1788,6 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
-/
-/- warning: simple_graph.card_common_neighbors_top -> SimpleGraph.card_commonNeighbors_top is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
-but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (Set.Elem.{u1} V (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.card_common_neighbors_top SimpleGraph.card_commonNeighbors_topₓ'. -/
theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
Fintype.card ((⊤ : SimpleGraph V).commonNeighbors v w) = Fintype.card V - 2 :=
by
@@ -2431,12 +1858,6 @@ theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
#align simple_graph.hom.map_adj SimpleGraph.Hom.map_adj
-/
-/- warning: simple_graph.hom.map_mem_edge_set -> SimpleGraph.Hom.map_mem_edgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W G G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G'))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G'))
-Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSetₓ'. -/
theorem map_mem_edgeSet {e : Sym2 V} (h : e ∈ G.edgeSetEmbedding) : e.map f ∈ G'.edgeSetEmbedding :=
Quotient.ind (fun e h => Sym2.fromRel_prop.mpr (f.map_rel' h)) e h
#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSet
@@ -2447,12 +1868,6 @@ theorem apply_mem_neighborSet {v w : V} (h : w ∈ G.neighborSet v) : f w ∈ G'
#align simple_graph.hom.apply_mem_neighbor_set SimpleGraph.Hom.apply_mem_neighborSet
-/
-/- warning: simple_graph.hom.map_edge_set -> SimpleGraph.Hom.mapEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Hom.{u1, u2} V W G G') -> (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G'))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Hom.{u1, u2} V W G G') -> (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) -> (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G'))
-Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_edge_set SimpleGraph.Hom.mapEdgeSetₓ'. -/
/-- The map between edge sets induced by a homomorphism.
The underlying map on edges is given by `sym2.map`. -/
@[simps]
@@ -2492,12 +1907,6 @@ def mapSpanningSubgraphs {G G' : SimpleGraph V} (h : G ≤ G') : G →g G'
#align simple_graph.hom.map_spanning_subgraphs SimpleGraph.Hom.mapSpanningSubgraphs
-/
-/- warning: simple_graph.hom.map_edge_set.injective -> SimpleGraph.Hom.mapEdgeSet.injective is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W G G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f)) -> (Function.Injective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f)) -> (Function.Injective.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
-Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injectiveₓ'. -/
theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective f.mapEdgeSet :=
by
rintro ⟨e₁, h₁⟩ ⟨e₂, h₂⟩
@@ -2506,12 +1915,6 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
apply Sym2.map.injective hinj
#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injective
-/- warning: simple_graph.hom.injective_of_top_hom -> SimpleGraph.Hom.injective_of_top_hom is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) f)
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G'))) f)
-Case conversion may be inaccurate. Consider using '#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_homₓ'. -/
/-- Every graph homomomorphism from a complete graph is injective. -/
theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f :=
by
@@ -2567,42 +1970,18 @@ abbrev toHom : G →g G' :=
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
-/
-/- warning: simple_graph.embedding.map_adj_iff -> SimpleGraph.Embedding.map_adj_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w)) (SimpleGraph.Adj.{u1} V G v w)
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iff
-/- warning: simple_graph.embedding.map_mem_edge_set_iff -> SimpleGraph.Embedding.map_mem_edgeSet_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iffₓ'. -/
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iff
-/- warning: simple_graph.embedding.apply_mem_neighbor_set_iff -> SimpleGraph.Embedding.apply_mem_neighborSet_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iff
-/- warning: simple_graph.embedding.map_edge_set -> SimpleGraph.Embedding.mapEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Embedding.{u1, u2} V W G G') -> (Function.Embedding.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Embedding.{u1, u2} V W G G') -> (Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')))
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_edge_set SimpleGraph.Embedding.mapEdgeSetₓ'. -/
/-- A graph embedding induces an embedding of edge sets. -/
@[simps]
def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
@@ -2611,12 +1990,6 @@ def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
inj' := Hom.mapEdgeSet.injective f f.inj'
#align simple_graph.embedding.map_edge_set SimpleGraph.Embedding.mapEdgeSet
-/- warning: simple_graph.embedding.map_neighbor_set -> SimpleGraph.Embedding.mapNeighborSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSetₓ'. -/
/-- A graph embedding induces an embedding of neighbor sets. -/
@[simps]
def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
@@ -2664,12 +2037,6 @@ protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe
#align simple_graph.embedding.spanning_coe SimpleGraph.Embedding.spanningCoe
-/
-/- warning: simple_graph.embedding.complete_graph -> SimpleGraph.Embedding.completeGraph is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraphₓ'. -/
/-- Embeddings of types induce embeddings of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ↪ β) :
(⊤ : SimpleGraph α) ↪g (⊤ : SimpleGraph β) :=
@@ -2685,12 +2052,6 @@ abbrev comp (f' : G' ↪g G'') (f : G ↪g G') : G ↪g G'' :=
#align simple_graph.embedding.comp SimpleGraph.Embedding.comp
-/
-/- warning: simple_graph.embedding.coe_comp -> SimpleGraph.Embedding.coe_comp is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Embedding.{u1, u3} V X G G'') (fun (_x : RelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelEmbedding.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Embedding.{u2, u3} W X G' G'') (fun (_x : RelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelEmbedding.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => X) _x) (RelHomClass.toFunLike.{max u1 u3, u1, u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G''))) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W (fun (_x : W) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : W) => X) _x) (RelHomClass.toFunLike.{max u2 u3, u2, u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G''))) f') (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f))
-Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.coe_comp SimpleGraph.Embedding.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
@@ -2767,42 +2128,18 @@ abbrev symm : G' ≃g G :=
#align simple_graph.iso.symm SimpleGraph.Iso.symm
-/
-/- warning: simple_graph.iso.map_adj_iff -> SimpleGraph.Iso.map_adj_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w)) (SimpleGraph.Adj.{u1} V G v w)
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iff
-/- warning: simple_graph.iso.map_mem_edge_set_iff -> SimpleGraph.Iso.map_mem_edgeSet_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iffₓ'. -/
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iff
-/- warning: simple_graph.iso.apply_mem_neighbor_set_iff -> SimpleGraph.Iso.apply_mem_neighborSet_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} W (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iff
-/- warning: simple_graph.iso.map_edge_set -> SimpleGraph.Iso.mapEdgeSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Iso.{u1, u2} V W G G') -> (Equiv.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Iso.{u1, u2} V W G G') -> (Equiv.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSetₓ'. -/
/-- An isomorphism of graphs induces an equivalence of edge sets. -/
@[simps]
def mapEdgeSet : G.edgeSetEmbedding ≃ G'.edgeSetEmbedding
@@ -2825,12 +2162,6 @@ def mapEdgeSet : G.edgeSetEmbedding ≃ G'.edgeSetEmbedding
exact funext fun _ => RelIso.apply_symm_apply _ _
#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSet
-/- warning: simple_graph.iso.map_neighbor_set -> SimpleGraph.Iso.mapNeighborSet is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSetₓ'. -/
/-- A graph isomorphism induces an equivalence of neighbor sets. -/
@[simps]
def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
@@ -2867,24 +2198,12 @@ protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding
#align simple_graph.iso.map SimpleGraph.Iso.map
-/
-/- warning: simple_graph.iso.complete_graph -> SimpleGraph.Iso.completeGraph is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraphₓ'. -/
/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ≃ β) :
(⊤ : SimpleGraph α) ≃g (⊤ : SimpleGraph β) :=
{ f with map_rel_iff' := by simp }
#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraph
-/- warning: simple_graph.iso.to_embedding_complete_graph -> SimpleGraph.Iso.toEmbedding_completeGraph is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (f : Equiv.{succ u1, succ u2} α β), Eq.{max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β))))))) (SimpleGraph.Iso.toEmbedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))) (SimpleGraph.Iso.completeGraph.{u1, u2} α β f)) (SimpleGraph.Embedding.completeGraph.{u1, u2} α β (Equiv.toEmbedding.{succ u1, succ u2} α β f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (f : Equiv.{succ u2, succ u1} α β), Eq.{max (succ u2) (succ u1)} (SimpleGraph.Embedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} α) (SimpleGraph.completeBooleanAlgebra.{u2} α)))))) (Top.top.{u1} (SimpleGraph.{u1} β) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} β) (SimpleGraph.completeBooleanAlgebra.{u1} β))))))) (SimpleGraph.Iso.toEmbedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} α) (SimpleGraph.completeBooleanAlgebra.{u2} α)))))) (Top.top.{u1} (SimpleGraph.{u1} β) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} β) (SimpleGraph.completeBooleanAlgebra.{u1} β)))))) (SimpleGraph.Iso.completeGraph.{u2, u1} α β f)) (SimpleGraph.Embedding.completeGraph.{u2, u1} α β (Equiv.toEmbedding.{succ u2, succ u1} α β f))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraphₓ'. -/
theorem toEmbedding_completeGraph {α β : Type _} (f : α ≃ β) :
(Iso.completeGraph f).toEmbedding = Embedding.completeGraph f.toEmbedding :=
rfl
@@ -2899,12 +2218,6 @@ abbrev comp (f' : G' ≃g G'') (f : G ≃g G') : G ≃g G'' :=
#align simple_graph.iso.comp SimpleGraph.Iso.comp
-/
-/- warning: simple_graph.iso.coe_comp -> SimpleGraph.Iso.coe_comp is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Iso.{u1, u3} V X G G'') (fun (_x : RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelIso.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Iso.{u2, u3} W X G' G'') (fun (_x : RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelIso.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) V (fun (_x : V) => X) (RelHomClass.toFunLike.{max u1 u3, u1, u3} (RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelIso.instRelHomClassRelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G''))) (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) W (fun (_x : W) => X) (RelHomClass.toFunLike.{max u2 u3, u2, u3} (RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelIso.instRelHomClassRelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G''))) f') (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f))
-Case conversion may be inaccurate. Consider using '#align simple_graph.iso.coe_comp SimpleGraph.Iso.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ≃g G'') (f : G ≃g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -189,10 +189,7 @@ theorem Adj.symm {G : SimpleGraph V} {u v : V} (h : G.Adj u v) : G.Adj v u :=
-/
#print SimpleGraph.ne_of_adj /-
-theorem ne_of_adj (h : G.Adj a b) : a ≠ b :=
- by
- rintro rfl
- exact G.irrefl h
+theorem ne_of_adj (h : G.Adj a b) : a ≠ b := by rintro rfl; exact G.irrefl h
#align simple_graph.ne_of_adj SimpleGraph.ne_of_adj
-/
@@ -215,11 +212,8 @@ theorem ne_of_adj_of_not_adj {v w x : V} (h : G.Adj v x) (hn : ¬G.Adj w x) : v
-/
#print SimpleGraph.adj_injective /-
-theorem adj_injective : Injective (Adj : SimpleGraph V → V → V → Prop) := fun G H h =>
- by
- cases G
- cases H
- congr
+theorem adj_injective : Injective (Adj : SimpleGraph V → V → V → Prop) := fun G H h => by cases G;
+ cases H; congr
#align simple_graph.adj_injective SimpleGraph.adj_injective
-/
@@ -322,9 +316,7 @@ instance : SupSet (SimpleGraph V) :=
⟨fun s =>
{ Adj := fun a b => ∃ G ∈ s, Adj G a b
symm := fun a b => Exists₂.imp fun _ _ => Adj.symm
- loopless := by
- rintro a ⟨G, hG, ha⟩
- exact ha.ne rfl }⟩
+ loopless := by rintro a ⟨G, hG, ha⟩; exact ha.ne rfl }⟩
instance : InfSet (SimpleGraph V) :=
⟨fun s =>
@@ -383,10 +375,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonemptyₓ'. -/
theorem sInf_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
(sInf s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
- sInf_adj.trans <|
- and_iff_left_of_imp <| by
- obtain ⟨G, hG⟩ := hs
- exact fun h => (h _ hG).Ne
+ sInf_adj.trans <| and_iff_left_of_imp <| by obtain ⟨G, hG⟩ := hs; exact fun h => (h _ hG).Ne
#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonempty
/- warning: simple_graph.infi_adj_of_nonempty -> SimpleGraph.iInf_adj_of_nonempty is a dubious translation:
@@ -419,20 +408,13 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
le_top := fun x v w h => x.ne_of_adj h
bot_le := fun x v w h => h.elim
sdiff_eq := fun x y => by
- ext (v w)
- refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
- rintro rfl
- exact x.irrefl h.1
+ ext (v w); refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
+ rintro rfl; exact x.irrefl h.1
inf_compl_le_bot := fun a v w h => False.elim <| h.2.2 h.1
- top_le_sup_compl := fun a v w ne => by
- by_cases a.adj v w
- exact Or.inl h
- exact Or.inr ⟨Ne, h⟩
+ top_le_sup_compl := fun a v w ne => by by_cases a.adj v w; exact Or.inl h; exact Or.inr ⟨Ne, h⟩
sSup := sSup
le_sup := fun s G hG a b hab => ⟨G, hG, hab⟩
- sup_le := fun s G hG a b => by
- rintro ⟨H, hH, hab⟩
- exact hG _ hH hab
+ sup_le := fun s G hG a b => by rintro ⟨H, hH, hab⟩; exact hG _ hH hab
sInf := sInf
inf_le := fun s G hG a b hab => hab.1 hG
le_inf := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.Ne⟩
@@ -583,10 +565,7 @@ def neighborSet (v : V) : Set V :=
#print SimpleGraph.neighborSet.memDecidable /-
instance neighborSet.memDecidable (v : V) [DecidableRel G.Adj] :
- DecidablePred (· ∈ G.neighborSet v) :=
- by
- unfold neighbor_set
- infer_instance
+ DecidablePred (· ∈ G.neighborSet v) := by unfold neighbor_set; infer_instance
#align simple_graph.neighbor_set.mem_decidable SimpleGraph.neighborSet.memDecidable
-/
@@ -711,10 +690,8 @@ but is expected to have type
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sup SimpleGraph.edgeSet_supₓ'. -/
@[simp]
-theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∪ G₂.edgeSetEmbedding :=
- by
- ext ⟨x, y⟩
- rfl
+theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∪ G₂.edgeSetEmbedding := by
+ ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_sup SimpleGraph.edgeSet_sup
/- warning: simple_graph.edge_set_inf -> SimpleGraph.edgeSet_inf is a dubious translation:
@@ -724,10 +701,8 @@ but is expected to have type
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_inf SimpleGraph.edgeSet_infₓ'. -/
@[simp]
-theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∩ G₂.edgeSetEmbedding :=
- by
- ext ⟨x, y⟩
- rfl
+theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∩ G₂.edgeSetEmbedding := by
+ ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_inf SimpleGraph.edgeSet_inf
/- warning: simple_graph.edge_set_sdiff -> SimpleGraph.edgeSet_sdiff is a dubious translation:
@@ -737,10 +712,8 @@ but is expected to have type
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiffₓ'. -/
@[simp]
-theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \ G₂.edgeSetEmbedding :=
- by
- ext ⟨x, y⟩
- rfl
+theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \ G₂.edgeSetEmbedding := by
+ ext ⟨x, y⟩; rfl
#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiff
/- warning: simple_graph.edge_set_sdiff_sdiff_is_diag -> SimpleGraph.edgeSet_sdiff_sdiff_isDiag is a dubious translation:
@@ -834,9 +807,7 @@ lean 3 declaration is
but is expected to have type
forall {V : Type.{u1}}, Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBotₓ'. -/
-instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding :=
- by
- rw [edge_set_bot]
+instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding := by rw [edge_set_bot];
infer_instance
#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBot
@@ -847,9 +818,7 @@ but is expected to have type
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂)))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSupₓ'. -/
instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
- [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊔ G₂).edgeSetEmbedding :=
- by
- rw [edge_set_sup]
+ [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊔ G₂).edgeSetEmbedding := by rw [edge_set_sup];
infer_instance
#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSup
@@ -860,9 +829,7 @@ but is expected to have type
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂)))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInfₓ'. -/
instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
- [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊓ G₂).edgeSetEmbedding :=
- by
- rw [edge_set_inf]
+ [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊓ G₂).edgeSetEmbedding := by rw [edge_set_inf];
exact Set.fintypeInter _ _
#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInf
@@ -873,9 +840,7 @@ but is expected to have type
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂)))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiffₓ'. -/
instance fintypeEdgeSetSdiff [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
- [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ \ G₂).edgeSetEmbedding :=
- by
- rw [edge_set_sdiff]
+ [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ \ G₂).edgeSetEmbedding := by rw [edge_set_sdiff];
exact Set.fintypeDiff _ _
#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiff
@@ -910,9 +875,7 @@ Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_
-- Note: we need to make sure `from_edge_set_adj` and this lemma are confluent.
-- In particular, both yield `⟦(u, v)⟧ ∈ (from_edge_set s).edge_set` ==> `⟦(v, w)⟧ ∈ s ∧ v ≠ w`.
@[simp]
-theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ { e | e.IsDiag } :=
- by
- ext e
+theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ { e | e.IsDiag } := by ext e;
exact Sym2.ind (by simp) e
#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSet
@@ -923,9 +886,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (SimpleGraph.edgeSet.{u1} V G)) G
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSetₓ'. -/
@[simp]
-theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G :=
- by
- ext (v w)
+theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G := by ext (v w);
exact ⟨fun h => h.1, fun h => ⟨h, G.ne_of_adj h⟩⟩
#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSet
@@ -936,9 +897,7 @@ but is expected to have type
forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_emptyₓ'. -/
@[simp]
-theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ :=
- by
- ext (v w)
+theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ := by ext (v w);
simp only [from_edge_set_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_empty
@@ -949,9 +908,7 @@ but is expected to have type
forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univₓ'. -/
@[simp]
-theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ :=
- by
- ext (v w)
+theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by ext (v w);
simp only [from_edge_set_adj, Set.mem_univ, true_and_iff, top_adj]
#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univ
@@ -963,11 +920,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_infₓ'. -/
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
- fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) :=
- by
- ext (v w)
- simp only [from_edge_set_adj, Set.mem_inter_iff, Ne.def, inf_adj]
- tauto
+ fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by ext (v w);
+ simp only [from_edge_set_adj, Set.mem_inter_iff, Ne.def, inf_adj]; tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
/- warning: simple_graph.from_edge_set_sup -> SimpleGraph.fromEdgeSet_sup is a dubious translation:
@@ -978,9 +932,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_supₓ'. -/
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
- fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) :=
- by
- ext (v w)
+ fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) := by ext (v w);
simp [Set.mem_union, or_and_right]
#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_sup
@@ -992,9 +944,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiffₓ'. -/
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
- fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) :=
- by
- ext (v w)
+ fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) := by ext (v w);
constructor <;> simp (config := { contextual := true })
#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiff
@@ -1009,10 +959,8 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
-/
-instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSetEmbedding :=
- by
- rw [edge_set_from_edge_set s]
- infer_instance
+instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSetEmbedding := by
+ rw [edge_set_from_edge_set s]; infer_instance
end FromEdgeSet
@@ -1135,18 +1083,14 @@ theorem Dart.symm_ne (d : G.Dart) : d.symm ≠ d :=
-/
#print SimpleGraph.dart_edge_eq_iff /-
-theorem dart_edge_eq_iff : ∀ d₁ d₂ : G.Dart, d₁.edge = d₂.edge ↔ d₁ = d₂ ∨ d₁ = d₂.symm :=
- by
- rintro ⟨p, hp⟩ ⟨q, hq⟩
- simp [Sym2.mk''_eq_mk''_iff]
+theorem dart_edge_eq_iff : ∀ d₁ d₂ : G.Dart, d₁.edge = d₂.edge ↔ d₁ = d₂ ∨ d₁ = d₂.symm := by
+ rintro ⟨p, hp⟩ ⟨q, hq⟩; simp [Sym2.mk''_eq_mk''_iff]
#align simple_graph.dart_edge_eq_iff SimpleGraph.dart_edge_eq_iff
-/
#print SimpleGraph.dart_edge_eq_mk'_iff /-
theorem dart_edge_eq_mk'_iff :
- ∀ {d : G.Dart} {p : V × V}, d.edge = ⟦p⟧ ↔ d.toProd = p ∨ d.toProd = p.symm :=
- by
- rintro ⟨p, h⟩
+ ∀ {d : G.Dart} {p : V × V}, d.edge = ⟦p⟧ ↔ d.toProd = p ∨ d.toProd = p.symm := by rintro ⟨p, h⟩;
apply Sym2.mk''_eq_mk''_iff
#align simple_graph.dart_edge_eq_mk_iff SimpleGraph.dart_edge_eq_mk'_iff
-/
@@ -1154,10 +1098,7 @@ theorem dart_edge_eq_mk'_iff :
#print SimpleGraph.dart_edge_eq_mk'_iff' /-
theorem dart_edge_eq_mk'_iff' :
∀ {d : G.Dart} {u v : V}, d.edge = ⟦(u, v)⟧ ↔ d.fst = u ∧ d.snd = v ∨ d.fst = v ∧ d.snd = u :=
- by
- rintro ⟨⟨a, b⟩, h⟩ u v
- rw [dart_edge_eq_mk_iff]
- simp
+ by rintro ⟨⟨a, b⟩, h⟩ u v; rw [dart_edge_eq_mk_iff]; simp
#align simple_graph.dart_edge_eq_mk_iff' SimpleGraph.dart_edge_eq_mk'_iff'
-/
@@ -1183,10 +1124,7 @@ def dartOfNeighborSet (v : V) (w : G.neighborSet v) : G.Dart :=
#print SimpleGraph.dartOfNeighborSet_injective /-
theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighborSet v) :=
- fun e₁ e₂ h =>
- Subtype.ext <| by
- injection h with h'
- convert congr_arg Prod.snd h'
+ fun e₁ e₂ h => Subtype.ext <| by injection h with h'; convert congr_arg Prod.snd h'
#align simple_graph.dart_of_neighbor_set_injective SimpleGraph.dartOfNeighborSet_injective
-/
@@ -1196,10 +1134,8 @@ lean 3 declaration is
but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_topₓ'. -/
-instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart :=
- by
- obtain ⟨v, w, h⟩ := exists_pair_ne V
- exact ⟨⟨(v, w), h⟩⟩
+instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart := by
+ obtain ⟨v, w, h⟩ := exists_pair_ne V; exact ⟨⟨(v, w), h⟩⟩
#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_top
end Darts
@@ -1561,9 +1497,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_complₓ'. -/
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
- by
- ext w
- simp [and_comm', eq_comm]
+ by ext w; simp [and_comm', eq_comm]
#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_compl
#print SimpleGraph.commonNeighbors /-
@@ -1636,9 +1570,7 @@ but is expected to have type
forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.instInsertSet.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) w)))
Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eqₓ'. -/
theorem commonNeighbors_top_eq {v w : V} :
- (⊤ : SimpleGraph V).commonNeighbors v w = Set.univ \ {v, w} :=
- by
- ext u
+ (⊤ : SimpleGraph V).commonNeighbors v w = Set.univ \ {v, w} := by ext u;
simp [common_neighbors, eq_comm, not_or_distrib.symm]
#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eq
@@ -1656,18 +1588,14 @@ def otherVertexOfIncident {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) : V
#print SimpleGraph.edge_other_incident_set /-
theorem edge_other_incident_set {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) :
- e ∈ G.incidenceSet (G.otherVertexOfIncident h) :=
- by
- use h.1
+ e ∈ G.incidenceSet (G.otherVertexOfIncident h) := by use h.1;
simp [other_vertex_of_incident, Sym2.other_mem']
#align simple_graph.edge_other_incident_set SimpleGraph.edge_other_incident_set
-/
#print SimpleGraph.incidence_other_prop /-
theorem incidence_other_prop {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) :
- G.otherVertexOfIncident h ∈ G.neighborSet v :=
- by
- cases' h with he hv
+ G.otherVertexOfIncident h ∈ G.neighborSet v := by cases' h with he hv;
rwa [← Sym2.other_spec' hv, mem_edge_set] at he
#align simple_graph.incidence_other_prop SimpleGraph.incidence_other_prop
-/
@@ -1726,9 +1654,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (SimpleGraph.edgeSet.{u1} V G'))
Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdgesₓ'. -/
theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.edgeSetEmbedding :=
- by
- ext
- simp
+ by ext; simp
#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdges
/- warning: simple_graph.delete_edges_eq_sdiff_from_edge_set -> SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet is a dubious translation:
@@ -1738,9 +1664,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSetₓ'. -/
theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s = G \ fromEdgeSet s :=
- by
- ext
- exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.Ne⟩⟩
+ by ext; exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.Ne⟩⟩
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
/- warning: simple_graph.compl_eq_delete_edges -> SimpleGraph.compl_eq_deleteEdges is a dubious translation:
@@ -1749,9 +1673,7 @@ lean 3 declaration is
but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.edgeSet.{u1} V G))
Case conversion may be inaccurate. Consider using '#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdgesₓ'. -/
-theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding :=
- by
- ext
+theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding := by ext;
simp
#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdges
@@ -1763,18 +1685,12 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdgesₓ'. -/
@[simp]
theorem deleteEdges_deleteEdges (s s' : Set (Sym2 V)) :
- (G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') :=
- by
- ext
- simp [and_assoc', not_or]
+ (G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') := by ext; simp [and_assoc', not_or]
#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdges
#print SimpleGraph.deleteEdges_empty_eq /-
@[simp]
-theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G :=
- by
- ext
- simp
+theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G := by ext; simp
#align simple_graph.delete_edges_empty_eq SimpleGraph.deleteEdges_empty_eq
-/
@@ -1785,16 +1701,11 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eqₓ'. -/
@[simp]
-theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ :=
- by
- ext
- simp
+theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ := by ext; simp
#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eq
#print SimpleGraph.deleteEdges_le /-
-theorem deleteEdges_le (s : Set (Sym2 V)) : G.deleteEdges s ≤ G :=
- by
- intro
+theorem deleteEdges_le (s : Set (Sym2 V)) : G.deleteEdges s ≤ G := by intro ;
simp (config := { contextual := true })
#align simple_graph.delete_edges_le SimpleGraph.deleteEdges_le
-/
@@ -1815,9 +1726,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SimpleGraph.deleteEdges.{u1} V G (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s (SimpleGraph.edgeSet.{u1} V G)))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSetₓ'. -/
theorem deleteEdges_eq_inter_edgeSet (s : Set (Sym2 V)) :
- G.deleteEdges s = G.deleteEdges (s ∩ G.edgeSetEmbedding) :=
- by
- ext
+ G.deleteEdges s = G.deleteEdges (s ∩ G.edgeSetEmbedding) := by ext;
simp (config := { contextual := true }) [imp_false]
#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSet
@@ -1828,9 +1737,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {H : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) H G) -> (Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) (SimpleGraph.edgeSet.{u1} V H))) H)
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_leₓ'. -/
theorem deleteEdges_sdiff_eq_of_le {H : SimpleGraph V} (h : H ≤ G) :
- G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H :=
- by
- ext (v w)
+ G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H := by ext (v w);
constructor <;> simp (config := { contextual := true }) [@h v w]
#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_le
@@ -1841,10 +1748,7 @@ but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) s)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdgesₓ'. -/
theorem edgeSet_deleteEdges (s : Set (Sym2 V)) :
- (G.deleteEdges s).edgeSetEmbedding = G.edgeSetEmbedding \ s :=
- by
- ext e
- refine' Sym2.ind _ e
+ (G.deleteEdges s).edgeSetEmbedding = G.edgeSetEmbedding \ s := by ext e; refine' Sym2.ind _ e;
simp
#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdges
@@ -1856,10 +1760,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdgesₓ'. -/
theorem edgeFinset_deleteEdges [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
(s : Finset (Sym2 V)) [DecidableRel (G.deleteEdges s).Adj] :
- (G.deleteEdges s).edgeFinset = G.edgeFinset \ s :=
- by
- ext e
- simp [edge_set_delete_edges]
+ (G.deleteEdges s).edgeFinset = G.edgeFinset \ s := by ext e; simp [edge_set_delete_edges]
#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdges
section DeleteFar
@@ -1945,10 +1846,8 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
-/
#print SimpleGraph.map_monotone /-
-theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) :=
- by
- rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩
- exact ⟨_, _, h ha, rfl, rfl⟩
+theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
+ rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩; exact ⟨_, _, h ha, rfl, rfl⟩
#align simple_graph.map_monotone SimpleGraph.map_monotone
-/
@@ -1965,19 +1864,14 @@ protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V
-/
#print SimpleGraph.comap_monotone /-
-theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) :=
- by
- intro G G' h _ _ ha
+theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by intro G G' h _ _ ha;
exact h ha
#align simple_graph.comap_monotone SimpleGraph.comap_monotone
-/
#print SimpleGraph.comap_map_eq /-
@[simp]
-theorem comap_map_eq (f : V ↪ W) (G : SimpleGraph V) : (G.map f).comap f = G :=
- by
- ext
- simp
+theorem comap_map_eq (f : V ↪ W) (G : SimpleGraph V) : (G.map f).comap f = G := by ext; simp
#align simple_graph.comap_map_eq SimpleGraph.comap_map_eq
-/
@@ -2003,18 +1897,13 @@ theorem comap_surjective (f : V ↪ W) : Function.Surjective (SimpleGraph.comap
#print SimpleGraph.map_le_iff_le_comap /-
theorem map_le_iff_le_comap (f : V ↪ W) (G : SimpleGraph V) (G' : SimpleGraph W) :
G.map f ≤ G' ↔ G ≤ G'.comap f :=
- ⟨fun h u v ha => h ⟨_, _, ha, rfl, rfl⟩,
- by
- rintro h _ _ ⟨u, v, ha, rfl, rfl⟩
- exact h ha⟩
+ ⟨fun h u v ha => h ⟨_, _, ha, rfl, rfl⟩, by rintro h _ _ ⟨u, v, ha, rfl, rfl⟩; exact h ha⟩
#align simple_graph.map_le_iff_le_comap SimpleGraph.map_le_iff_le_comap
-/
#print SimpleGraph.map_comap_le /-
-theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G :=
- by
- rw [map_le_iff_le_comap]
- exact le_refl _
+theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G := by
+ rw [map_le_iff_le_comap]; exact le_refl _
#align simple_graph.map_comap_le SimpleGraph.map_comap_le
-/
@@ -2168,19 +2057,15 @@ def incidenceFinset [DecidableEq V] : Finset (Sym2 V) :=
#print SimpleGraph.card_incidenceSet_eq_degree /-
@[simp]
theorem card_incidenceSet_eq_degree [DecidableEq V] :
- Fintype.card (G.incidenceSet v) = G.degree v :=
- by
- rw [Fintype.card_congr (G.incidence_set_equiv_neighbor_set v)]
- simp
+ Fintype.card (G.incidenceSet v) = G.degree v := by
+ rw [Fintype.card_congr (G.incidence_set_equiv_neighbor_set v)]; simp
#align simple_graph.card_incidence_set_eq_degree SimpleGraph.card_incidenceSet_eq_degree
-/
#print SimpleGraph.card_incidenceFinset_eq_degree /-
@[simp]
theorem card_incidenceFinset_eq_degree [DecidableEq V] : (G.incidenceFinset v).card = G.degree v :=
- by
- rw [← G.card_incidence_set_eq_degree]
- apply Set.toFinset_card
+ by rw [← G.card_incidence_set_eq_degree]; apply Set.toFinset_card
#align simple_graph.card_incidence_finset_eq_degree SimpleGraph.card_incidenceFinset_eq_degree
-/
@@ -2239,10 +2124,8 @@ theorem IsRegularOfDegree.degree_eq {d : ℕ} (h : G.IsRegularOfDegree d) (v : V
#print SimpleGraph.IsRegularOfDegree.compl /-
theorem IsRegularOfDegree.compl [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj]
- {k : ℕ} (h : G.IsRegularOfDegree k) : Gᶜ.IsRegularOfDegree (Fintype.card V - 1 - k) :=
- by
- intro v
- rw [degree_compl, h v]
+ {k : ℕ} (h : G.IsRegularOfDegree k) : Gᶜ.IsRegularOfDegree (Fintype.card V - 1 - k) := by
+ intro v; rw [degree_compl, h v]
#align simple_graph.is_regular_of_degree.compl SimpleGraph.IsRegularOfDegree.compl
-/
@@ -2254,20 +2137,13 @@ variable [Fintype V]
#print SimpleGraph.neighborSetFintype /-
instance neighborSetFintype [DecidableRel G.Adj] (v : V) : Fintype (G.neighborSet v) :=
- @Subtype.fintype _ _
- (by
- simp_rw [mem_neighbor_set]
- infer_instance)
- _
+ @Subtype.fintype _ _ (by simp_rw [mem_neighbor_set]; infer_instance) _
#align simple_graph.neighbor_set_fintype SimpleGraph.neighborSetFintype
-/
#print SimpleGraph.neighborFinset_eq_filter /-
theorem neighborFinset_eq_filter {v : V} [DecidableRel G.Adj] :
- G.neighborFinset v = Finset.univ.filterₓ (G.Adj v) :=
- by
- ext
- simp
+ G.neighborFinset v = Finset.univ.filterₓ (G.Adj v) := by ext; simp
#align simple_graph.neighbor_finset_eq_filter SimpleGraph.neighborFinset_eq_filter
-/
@@ -2310,10 +2186,7 @@ but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.topₓ'. -/
theorem IsRegularOfDegree.top [DecidableEq V] :
- (⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) :=
- by
- intro v
- simp
+ (⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) := by intro v; simp
#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.top
#print SimpleGraph.minDegree /-
@@ -2355,11 +2228,8 @@ degree. Note the assumption that the graph is nonempty is necessary as long as `
defined to be a natural.
-/
theorem le_minDegree_of_forall_le_degree [DecidableRel G.Adj] [Nonempty V] (k : ℕ)
- (h : ∀ v, k ≤ G.degree v) : k ≤ G.minDegree :=
- by
- rcases G.exists_minimal_degree_vertex with ⟨v, hv⟩
- rw [hv]
- apply h
+ (h : ∀ v, k ≤ G.degree v) : k ≤ G.minDegree := by
+ rcases G.exists_minimal_degree_vertex with ⟨v, hv⟩; rw [hv]; apply h
#align simple_graph.le_min_degree_of_forall_le_degree SimpleGraph.le_minDegree_of_forall_le_degree
-/
@@ -2852,20 +2722,14 @@ theorem coe_induceHom : ⇑(InduceHom φ φst) = Set.MapsTo.restrict φ s t φst
#print SimpleGraph.induceHom_id /-
@[simp]
theorem induceHom_id (G : SimpleGraph V) (s) :
- InduceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id :=
- by
- ext x
- rfl
+ InduceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id := by ext x; rfl
#align simple_graph.induce_hom_id SimpleGraph.induceHom_id
-/
#print SimpleGraph.induceHom_comp /-
@[simp]
theorem induceHom_comp :
- (InduceHom ψ ψtr).comp (InduceHom φ φst) = InduceHom (ψ.comp φ) (ψtr.comp φst) :=
- by
- ext x
- rfl
+ (InduceHom ψ ψtr).comp (InduceHom φ φst) = InduceHom (ψ.comp φ) (ψtr.comp φst) := by ext x; rfl
#align simple_graph.induce_hom_comp SimpleGraph.induceHom_comp
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -1242,10 +1242,7 @@ theorem mk'_mem_incidenceSet_right_iff : ⟦(a, b)⟧ ∈ G.incidenceSet b ↔ G
-/
/- warning: simple_graph.edge_mem_incidence_set_iff -> SimpleGraph.edge_mem_incidenceSet_iff is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {e : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)}, Iff (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeSubtype.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))))) e) (SimpleGraph.incidenceSet.{u1} V G a)) (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) a ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeSubtype.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))))) e))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {e : Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)}, Iff (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) (Subtype.val.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) x (SimpleGraph.edgeSet.{u1} V G)) e) (SimpleGraph.incidenceSet.{u1} V G a)) (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) a (Subtype.val.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) x (SimpleGraph.edgeSet.{u1} V G)) e))
+<too large>
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iffₓ'. -/
theorem edge_mem_incidenceSet_iff {e : G.edgeSetEmbedding} :
↑e ∈ G.incidenceSet a ↔ a ∈ (e : Sym2 V) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -2568,7 +2568,7 @@ theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W G G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G'))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G'))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G'))
Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSetₓ'. -/
theorem map_mem_edgeSet {e : Sym2 V} (h : e ∈ G.edgeSetEmbedding) : e.map f ∈ G'.edgeSetEmbedding :=
Quotient.ind (fun e h => Sym2.fromRel_prop.mpr (f.map_rel' h)) e h
@@ -2629,7 +2629,7 @@ def mapSpanningSubgraphs {G G' : SimpleGraph V} (h : G ≤ G') : G →g G'
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W G G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f)) -> (Function.Injective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f)) -> (Function.Injective.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f)) -> (Function.Injective.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injectiveₓ'. -/
theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective f.mapEdgeSet :=
by
@@ -2643,7 +2643,7 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) f)
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G'))) f)
+ forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G'))) f)
Case conversion may be inaccurate. Consider using '#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_homₓ'. -/
/-- Every graph homomomorphism from a complete graph is injective. -/
theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f :=
@@ -2704,7 +2704,7 @@ abbrev toHom : G →g G' :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w)) (SimpleGraph.Adj.{u1} V G v w)
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w)) (SimpleGraph.Adj.{u1} V G v w)
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
@@ -2714,7 +2714,7 @@ theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iffₓ'. -/
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
@@ -2724,7 +2724,7 @@ theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
@@ -2748,7 +2748,7 @@ def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v)))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v)))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSetₓ'. -/
/-- A graph embedding induces an embedding of neighbor sets. -/
@[simps]
@@ -2822,7 +2822,7 @@ abbrev comp (f' : G' ↪g G'') (f : G ↪g G') : G ↪g G'' :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Embedding.{u1, u3} V X G G'') (fun (_x : RelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelEmbedding.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Embedding.{u2, u3} W X G' G'') (fun (_x : RelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelEmbedding.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => X) _x) (RelHomClass.toFunLike.{max u1 u3, u1, u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G''))) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W (fun (_x : W) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : W) => X) _x) (RelHomClass.toFunLike.{max u2 u3, u2, u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G''))) f') (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f))
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => X) _x) (RelHomClass.toFunLike.{max u1 u3, u1, u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G''))) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W (fun (_x : W) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : W) => X) _x) (RelHomClass.toFunLike.{max u2 u3, u2, u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G''))) f') (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.coe_comp SimpleGraph.Embedding.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -652,7 +652,7 @@ theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding
/- warning: simple_graph.edge_set_ssubset_edge_set -> SimpleGraph.edgeSet_ssubset_edgeSet is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSetₓ'. -/
@@ -682,7 +682,7 @@ alias edge_set_subset_edge_set ↔ _ edge_set_mono
/- warning: simple_graph.edge_set_strict_mono -> SimpleGraph.edgeSet_strict_mono is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_monoₓ'. -/
@@ -1380,7 +1380,7 @@ theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G
/- warning: simple_graph.edge_finset_ssubset_edge_finset -> SimpleGraph.edgeFinset_ssubset_edgeFinset is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinsetₓ'. -/
@@ -1400,7 +1400,7 @@ alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
/- warning: simple_graph.edge_finset_strict_mono -> SimpleGraph.edgeFinset_strict_mono is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toHasLt.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_monoₓ'. -/
@@ -1888,7 +1888,7 @@ variable {G}
/- warning: simple_graph.delete_far_iff -> SimpleGraph.deleteFar_iff is a dubious translation:
lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
but is expected to have type
forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iffₓ'. -/
@@ -1907,7 +1907,7 @@ theorem deleteFar_iff :
/- warning: simple_graph.delete_far.le_card_sub_card -> SimpleGraph.DeleteFar.le_card_sub_card is a dubious translation:
lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
but is expected to have type
forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_cardₓ'. -/
@@ -1916,7 +1916,7 @@ alias delete_far_iff ↔ delete_far.le_card_sub_card _
/- warning: simple_graph.delete_far.mono -> SimpleGraph.DeleteFar.mono is a dubious translation:
lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r₁ : 𝕜} {r₂ : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₂) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r₁ r₂) -> (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₁)
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r₁ : 𝕜} {r₂ : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₂) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r₁ r₂) -> (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₁)
but is expected to have type
forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {_inst_4 : (SimpleGraph.{u2} V) -> Prop} {p : 𝕜} {r₁ : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) _inst_4 r₁) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) p r₁) -> (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) _inst_4 p)
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.monoₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -332,73 +332,73 @@ instance : InfSet (SimpleGraph V) :=
symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
loopless := fun a h => h.2 rfl }⟩
-/- warning: simple_graph.Sup_adj -> SimpleGraph.supₛ_adj is a dubious translation:
+/- warning: simple_graph.Sup_adj -> SimpleGraph.sSup_adj is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.supₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => Exists.{0} (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) (fun (H : Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) => SimpleGraph.Adj.{u1} V G a b)))
+ forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.sSup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => Exists.{0} (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) (fun (H : Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) => SimpleGraph.Adj.{u1} V G a b)))
but is expected to have type
- forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.supₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.supSet.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => And (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) (SimpleGraph.Adj.{u1} V G a b)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.Sup_adj SimpleGraph.supₛ_adjₓ'. -/
+ forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.sSup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.supSet.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => And (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) (SimpleGraph.Adj.{u1} V G a b)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.Sup_adj SimpleGraph.sSup_adjₓ'. -/
@[simp]
-theorem supₛ_adj {s : Set (SimpleGraph V)} {a b : V} : (supₛ s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
+theorem sSup_adj {s : Set (SimpleGraph V)} {a b : V} : (sSup s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
Iff.rfl
-#align simple_graph.Sup_adj SimpleGraph.supₛ_adj
+#align simple_graph.Sup_adj SimpleGraph.sSup_adj
-/- warning: simple_graph.Inf_adj -> SimpleGraph.infₛ_adj is a dubious translation:
+/- warning: simple_graph.Inf_adj -> SimpleGraph.sInf_adj is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
but is expected to have type
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj SimpleGraph.infₛ_adjₓ'. -/
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj SimpleGraph.sInf_adjₓ'. -/
@[simp]
-theorem infₛ_adj {s : Set (SimpleGraph V)} : (infₛ s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
+theorem sInf_adj {s : Set (SimpleGraph V)} : (sInf s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
Iff.rfl
-#align simple_graph.Inf_adj SimpleGraph.infₛ_adj
+#align simple_graph.Inf_adj SimpleGraph.sInf_adj
-/- warning: simple_graph.supr_adj -> SimpleGraph.supᵢ_adj is a dubious translation:
+/- warning: simple_graph.supr_adj -> SimpleGraph.iSup_adj is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (supᵢ.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) ι (fun (i : ι) => f i)) a b) (Exists.{u2} ι (fun (i : ι) => SimpleGraph.Adj.{u1} V (f i) a b))
+ forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (iSup.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) ι (fun (i : ι) => f i)) a b) (Exists.{u2} ι (fun (i : ι) => SimpleGraph.Adj.{u1} V (f i) a b))
but is expected to have type
- forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (supᵢ.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.supSet.{u2} V) ι (fun (i : ι) => f i)) a b) (Exists.{u1} ι (fun (i : ι) => SimpleGraph.Adj.{u2} V (f i) a b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.supr_adj SimpleGraph.supᵢ_adjₓ'. -/
+ forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (iSup.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.supSet.{u2} V) ι (fun (i : ι) => f i)) a b) (Exists.{u1} ι (fun (i : ι) => SimpleGraph.Adj.{u2} V (f i) a b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.supr_adj SimpleGraph.iSup_adjₓ'. -/
@[simp]
-theorem supᵢ_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [supᵢ]
-#align simple_graph.supr_adj SimpleGraph.supᵢ_adj
+theorem iSup_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [iSup]
+#align simple_graph.supr_adj SimpleGraph.iSup_adj
-/- warning: simple_graph.infi_adj -> SimpleGraph.infᵢ_adj is a dubious translation:
+/- warning: simple_graph.infi_adj -> SimpleGraph.iInf_adj is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (infᵢ.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b) (Ne.{succ u1} V a b))
+ forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (iInf.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b) (Ne.{succ u1} V a b))
but is expected to have type
- forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (infᵢ.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b) (Ne.{succ u2} V a b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj SimpleGraph.infᵢ_adjₓ'. -/
+ forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (iInf.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b) (Ne.{succ u2} V a b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj SimpleGraph.iInf_adjₓ'. -/
@[simp]
-theorem infᵢ_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
- simp [infᵢ]
-#align simple_graph.infi_adj SimpleGraph.infᵢ_adj
+theorem iInf_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
+ simp [iInf]
+#align simple_graph.infi_adj SimpleGraph.iInf_adj
-/- warning: simple_graph.Inf_adj_of_nonempty -> SimpleGraph.infₛ_adj_of_nonempty is a dubious translation:
+/- warning: simple_graph.Inf_adj_of_nonempty -> SimpleGraph.sInf_adj_of_nonempty is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
but is expected to have type
- forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
-Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonemptyₓ'. -/
-theorem infₛ_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
- (infₛ s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
- infₛ_adj.trans <|
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.sInf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonemptyₓ'. -/
+theorem sInf_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
+ (sInf s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
+ sInf_adj.trans <|
and_iff_left_of_imp <| by
obtain ⟨G, hG⟩ := hs
exact fun h => (h _ hG).Ne
-#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonempty
+#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonempty
-/- warning: simple_graph.infi_adj_of_nonempty -> SimpleGraph.infᵢ_adj_of_nonempty is a dubious translation:
+/- warning: simple_graph.infi_adj_of_nonempty -> SimpleGraph.iInf_adj_of_nonempty is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} [_inst_1 : Nonempty.{u2} ι] {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (infᵢ.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b)
+ forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} [_inst_1 : Nonempty.{u2} ι] {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (iInf.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b)
but is expected to have type
- forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} [_inst_1 : Nonempty.{u1} ι] {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (infᵢ.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b)
-Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonemptyₓ'. -/
-theorem infᵢ_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
+ forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} [_inst_1 : Nonempty.{u1} ι] {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (iInf.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b)
+Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj_of_nonempty SimpleGraph.iInf_adj_of_nonemptyₓ'. -/
+theorem iInf_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
(⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
- simp [infᵢ, Inf_adj_of_nonempty (Set.range_nonempty _)]
-#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonempty
+ simp [iInf, Inf_adj_of_nonempty (Set.range_nonempty _)]
+#align simple_graph.infi_adj_of_nonempty SimpleGraph.iInf_adj_of_nonempty
/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.adj a b → H.adj a b`. -/
instance : DistribLattice (SimpleGraph V) :=
@@ -428,18 +428,18 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
by_cases a.adj v w
exact Or.inl h
exact Or.inr ⟨Ne, h⟩
- supₛ := supₛ
+ sSup := sSup
le_sup := fun s G hG a b hab => ⟨G, hG, hab⟩
sup_le := fun s G hG a b => by
rintro ⟨H, hH, hab⟩
exact hG _ hH hab
- infₛ := infₛ
+ sInf := sInf
inf_le := fun s G hG a b hab => hab.1 hG
le_inf := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.Ne⟩
- inf_sup_le_supᵢ_inf := fun G s a b hab => by
+ inf_sup_le_iSup_inf := fun G s a b hab => by
simpa only [exists_prop, Sup_adj, and_imp, forall_exists_index, Inf_adj, supr_adj, inf_adj, ←
exists_and_right, exists_and_left, and_assoc', and_self_right] using hab
- infᵢ_sup_le_sup_inf := fun G s a b hab =>
+ iInf_sup_le_sup_inf := fun G s a b hab =>
by
simp only [sup_adj, Inf_adj, infi_adj] at hab⊢
have : (∀ G' ∈ s, adj G a b ∨ adj G' a b) ∧ a ≠ b :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -1890,7 +1890,7 @@ variable {G}
lean 3 declaration is
forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
+ forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iffₓ'. -/
theorem deleteFar_iff :
G.DeleteFar p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card :=
@@ -1909,7 +1909,7 @@ theorem deleteFar_iff :
lean 3 declaration is
forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
but is expected to have type
- forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
+ forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (OrderedSemiring.toSemiring.{u1} 𝕜 (OrderedRing.toOrderedSemiring.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_cardₓ'. -/
alias delete_far_iff ↔ delete_far.le_card_sub_card _
#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b8ba04e2f326f3f7cf24ad129beda58531ada61
@@ -505,7 +505,7 @@ lean 3 declaration is
but is expected to have type
forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidableₓ'. -/
-instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => Decidable.false
+instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => decidableFalse
#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidable
/- warning: simple_graph.sup.adj_decidable -> SimpleGraph.Sup.adjDecidable is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/730c6d4cab72b9d84fcfb9e95e8796e9cd8f40ba
@@ -2704,7 +2704,7 @@ abbrev toHom : G →g G' :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) w)) (SimpleGraph.Adj.{u1} V G v w)
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w)) (SimpleGraph.Adj.{u1} V G v w)
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
@@ -2714,7 +2714,7 @@ theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iffₓ'. -/
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
@@ -2724,7 +2724,7 @@ theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
@@ -2748,7 +2748,7 @@ def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) v)))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v)))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSetₓ'. -/
/-- A graph embedding induces an embedding of neighbor sets. -/
@[simps]
@@ -2822,7 +2822,7 @@ abbrev comp (f' : G' ↪g G'') (f : G ↪g G') : G ↪g G'' :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Embedding.{u1, u3} V X G G'') (fun (_x : RelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelEmbedding.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Embedding.{u2, u3} W X G' G'') (fun (_x : RelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelEmbedding.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V X (Function.instEmbeddingLikeEmbedding.{succ u1, succ u3} V X)) (RelEmbedding.toEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f))) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W (fun (_x : W) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : W) => X) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W X (Function.instEmbeddingLikeEmbedding.{succ u2, succ u3} W X)) (RelEmbedding.toEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') f')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)))
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => X) _x) (RelHomClass.toFunLike.{max u1 u3, u1, u3} (SimpleGraph.Embedding.{u1, u3} V X G G'') V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G''))) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W (fun (_x : W) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : W) => X) _x) (RelHomClass.toFunLike.{max u2 u3, u2, u3} (SimpleGraph.Embedding.{u2, u3} W X G' G'') W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelEmbedding.instRelHomClassRelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G''))) f') (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Embedding.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelEmbedding.instRelHomClassRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.coe_comp SimpleGraph.Embedding.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f :=
@@ -2910,7 +2910,7 @@ abbrev symm : G' ≃g G :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) w)) (SimpleGraph.Adj.{u1} V G v w)
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w)) (SimpleGraph.Adj.{u1} V G v w)
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
@@ -2920,7 +2920,7 @@ theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f))) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iffₓ'. -/
theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
@@ -2930,7 +2930,7 @@ theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} W (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
@@ -2968,7 +2968,7 @@ def mapEdgeSet : G.edgeSetEmbedding ≃ G'.edgeSetEmbedding
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) v)))
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f v)))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSetₓ'. -/
/-- A graph isomorphism induces an equivalence of neighbor sets. -/
@[simps]
@@ -3042,7 +3042,7 @@ abbrev comp (f' : G' ≃g G'') (f : G ≃g G') : G ≃g G'' :=
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Iso.{u1, u3} V X G G'') (fun (_x : RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelIso.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Iso.{u2, u3} W X G' G'') (fun (_x : RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelIso.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V X (Function.instEmbeddingLikeEmbedding.{succ u1, succ u3} V X)) (RelEmbedding.toEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelIso.toRelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)))) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W (fun (_x : W) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : W) => X) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W X (Function.instEmbeddingLikeEmbedding.{succ u2, succ u3} W X)) (RelEmbedding.toEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelIso.toRelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') f'))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f))))
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) V (fun (_x : V) => X) (RelHomClass.toFunLike.{max u1 u3, u1, u3} (RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelIso.instRelHomClassRelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G''))) (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) W (fun (_x : W) => X) (RelHomClass.toFunLike.{max u2 u3, u2, u3} (RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelIso.instRelHomClassRelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G''))) f') (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V (fun (_x : V) => W) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.instRelHomClassRelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.coe_comp SimpleGraph.Iso.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ≃g G'') (f : G ≃g G') : ⇑(f'.comp f) = f' ∘ f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -214,17 +214,21 @@ theorem ne_of_adj_of_not_adj {v w x : V} (h : G.Adj v x) (hn : ¬G.Adj w x) : v
#align simple_graph.ne_of_adj_of_not_adj SimpleGraph.ne_of_adj_of_not_adj
-/
+#print SimpleGraph.adj_injective /-
theorem adj_injective : Injective (Adj : SimpleGraph V → V → V → Prop) := fun G H h =>
by
cases G
cases H
congr
#align simple_graph.adj_injective SimpleGraph.adj_injective
+-/
+#print SimpleGraph.adj_inj /-
@[simp]
theorem adj_inj {G H : SimpleGraph V} : G.Adj = H.Adj ↔ G = H :=
adj_injective.eq_iff
#align simple_graph.adj_inj SimpleGraph.adj_inj
+-/
section Order
@@ -307,7 +311,7 @@ instance : SDiff (SimpleGraph V) :=
lean 3 declaration is
forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
but is expected to have type
- forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_adj SimpleGraph.sdiff_adjₓ'. -/
@[simp]
theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v w ∧ ¬y.Adj v w :=
@@ -328,25 +332,55 @@ instance : InfSet (SimpleGraph V) :=
symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
loopless := fun a h => h.2 rfl }⟩
+/- warning: simple_graph.Sup_adj -> SimpleGraph.supₛ_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.supₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => Exists.{0} (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) (fun (H : Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) => SimpleGraph.Adj.{u1} V G a b)))
+but is expected to have type
+ forall {V : Type.{u1}} {s : Set.{u1} (SimpleGraph.{u1} V)} {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V (SupSet.supₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.supSet.{u1} V) s) a b) (Exists.{succ u1} (SimpleGraph.{u1} V) (fun (G : SimpleGraph.{u1} V) => And (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) (SimpleGraph.Adj.{u1} V G a b)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.Sup_adj SimpleGraph.supₛ_adjₓ'. -/
@[simp]
theorem supₛ_adj {s : Set (SimpleGraph V)} {a b : V} : (supₛ s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
Iff.rfl
#align simple_graph.Sup_adj SimpleGraph.supₛ_adj
+/- warning: simple_graph.Inf_adj -> SimpleGraph.infₛ_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
+but is expected to have type
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (And (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)) (Ne.{succ u1} V a b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj SimpleGraph.infₛ_adjₓ'. -/
@[simp]
theorem infₛ_adj {s : Set (SimpleGraph V)} : (infₛ s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
Iff.rfl
#align simple_graph.Inf_adj SimpleGraph.infₛ_adj
+/- warning: simple_graph.supr_adj -> SimpleGraph.supᵢ_adj is a dubious translation:
+lean 3 declaration is
+ forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (supᵢ.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) ι (fun (i : ι) => f i)) a b) (Exists.{u2} ι (fun (i : ι) => SimpleGraph.Adj.{u1} V (f i) a b))
+but is expected to have type
+ forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (supᵢ.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.supSet.{u2} V) ι (fun (i : ι) => f i)) a b) (Exists.{u1} ι (fun (i : ι) => SimpleGraph.Adj.{u2} V (f i) a b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.supr_adj SimpleGraph.supᵢ_adjₓ'. -/
@[simp]
theorem supᵢ_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [supᵢ]
#align simple_graph.supr_adj SimpleGraph.supᵢ_adj
+/- warning: simple_graph.infi_adj -> SimpleGraph.infᵢ_adj is a dubious translation:
+lean 3 declaration is
+ forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (infᵢ.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b) (Ne.{succ u1} V a b))
+but is expected to have type
+ forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (infᵢ.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (And (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b) (Ne.{succ u2} V a b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj SimpleGraph.infᵢ_adjₓ'. -/
@[simp]
theorem infᵢ_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
simp [infᵢ]
#align simple_graph.infi_adj SimpleGraph.infᵢ_adj
+/- warning: simple_graph.Inf_adj_of_nonempty -> SimpleGraph.infₛ_adj_of_nonempty is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.Mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.hasMem.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
+but is expected to have type
+ forall {V : Type.{u1}} {a : V} {b : V} {s : Set.{u1} (SimpleGraph.{u1} V)}, (Set.Nonempty.{u1} (SimpleGraph.{u1} V) s) -> (Iff (SimpleGraph.Adj.{u1} V (InfSet.infₛ.{u1} (SimpleGraph.{u1} V) (SimpleGraph.infSet.{u1} V) s) a b) (forall (G : SimpleGraph.{u1} V), (Membership.mem.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (SimpleGraph.{u1} V)) (Set.instMembershipSet.{u1} (SimpleGraph.{u1} V)) G s) -> (SimpleGraph.Adj.{u1} V G a b)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonemptyₓ'. -/
theorem infₛ_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
(infₛ s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
infₛ_adj.trans <|
@@ -355,6 +389,12 @@ theorem infₛ_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
exact fun h => (h _ hG).Ne
#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonempty
+/- warning: simple_graph.infi_adj_of_nonempty -> SimpleGraph.infᵢ_adj_of_nonempty is a dubious translation:
+lean 3 declaration is
+ forall {ι : Sort.{u2}} {V : Type.{u1}} {a : V} {b : V} [_inst_1 : Nonempty.{u2} ι] {f : ι -> (SimpleGraph.{u1} V)}, Iff (SimpleGraph.Adj.{u1} V (infᵢ.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u1} V (f i) a b)
+but is expected to have type
+ forall {ι : Sort.{u1}} {V : Type.{u2}} {a : V} {b : V} [_inst_1 : Nonempty.{u1} ι] {f : ι -> (SimpleGraph.{u2} V)}, Iff (SimpleGraph.Adj.{u2} V (infᵢ.{u2, u1} (SimpleGraph.{u2} V) (SimpleGraph.infSet.{u2} V) ι (fun (i : ι) => f i)) a b) (forall (i : ι), SimpleGraph.Adj.{u2} V (f i) a b)
+Case conversion may be inaccurate. Consider using '#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonemptyₓ'. -/
theorem infᵢ_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
(⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
simp [infᵢ, Inf_adj_of_nonempty (Set.range_nonempty _)]
@@ -411,7 +451,7 @@ instance : CompleteBooleanAlgebra (SimpleGraph V) :=
lean 3 declaration is
forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (Ne.{succ u1} V v w)
but is expected to have type
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) (Ne.{succ u1} V v w)
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (Ne.{succ u1} V v w)
Case conversion may be inaccurate. Consider using '#align simple_graph.top_adj SimpleGraph.top_adjₓ'. -/
@[simp]
theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
@@ -422,7 +462,7 @@ theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
lean 3 declaration is
forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) False
but is expected to have type
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) False
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) False
Case conversion may be inaccurate. Consider using '#align simple_graph.bot_adj SimpleGraph.bot_adjₓ'. -/
@[simp]
theorem bot_adj (v w : V) : (⊥ : SimpleGraph V).Adj v w ↔ False :=
@@ -433,7 +473,7 @@ theorem bot_adj (v w : V) : (⊥ : SimpleGraph V).Adj v w ↔ False :=
lean 3 declaration is
forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_topₓ'. -/
@[simp]
theorem completeGraph_eq_top (V : Type u) : completeGraph V = ⊤ :=
@@ -444,7 +484,7 @@ theorem completeGraph_eq_top (V : Type u) : completeGraph V = ⊤ :=
lean 3 declaration is
forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.empty_graph_eq_bot SimpleGraph.emptyGraph_eq_botₓ'. -/
@[simp]
theorem emptyGraph_eq_bot (V : Type u) : emptyGraph V = ⊥ :=
@@ -463,7 +503,7 @@ variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
lean 3 declaration is
forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
but is expected to have type
- forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
+ forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidableₓ'. -/
instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => Decidable.false
#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidable
@@ -490,7 +530,7 @@ instance Inf.adjDecidable : DecidableRel (G ⊓ H).Adj := fun v w => And.decidab
lean 3 declaration is
forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G H))
but is expected to have type
- forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G H))
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G H))
Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidableₓ'. -/
instance Sdiff.adjDecidable : DecidableRel (G \ H).Adj := fun v w => And.decidable
#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidable
@@ -501,7 +541,7 @@ variable [DecidableEq V]
lean 3 declaration is
forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
but is expected to have type
- forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
+ forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidableₓ'. -/
instance Top.adjDecidable : DecidableRel (⊤ : SimpleGraph V).Adj := fun v w => Not.decidable
#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidable
@@ -614,7 +654,7 @@ theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSetₓ'. -/
@[simp]
theorem edgeSet_ssubset_edgeSet : G₁.edgeSetEmbedding ⊂ G₂.edgeSetEmbedding ↔ G₁ < G₂ :=
@@ -644,7 +684,7 @@ alias edge_set_subset_edge_set ↔ _ edge_set_mono
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_monoₓ'. -/
alias edge_set_ssubset_edge_set ↔ _ edge_set_strict_mono
#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_mono
@@ -657,7 +697,7 @@ variable (G₁ G₂)
lean 3 declaration is
forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))
but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_bot SimpleGraph.edgeSet_botₓ'. -/
@[simp]
theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSetEmbedding = ∅ :=
@@ -694,7 +734,7 @@ theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding
lean 3 declaration is
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiffₓ'. -/
@[simp]
theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \ G₂.edgeSetEmbedding :=
@@ -792,7 +832,7 @@ instance fintypeEdgeSet [DecidableEq V] [Fintype V] [DecidableRel G.Adj] :
lean 3 declaration is
forall {V : Type.{u1}}, Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))))
but is expected to have type
- forall {V : Type.{u1}}, Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))))
+ forall {V : Type.{u1}}, Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBotₓ'. -/
instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding :=
by
@@ -830,7 +870,7 @@ instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
lean 3 declaration is
forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂)))
but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂)))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂)))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiffₓ'. -/
instance fintypeEdgeSetSdiff [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ \ G₂).edgeSetEmbedding :=
@@ -893,7 +933,7 @@ theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G :=
lean 3 declaration is
forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_emptyₓ'. -/
@[simp]
theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ :=
@@ -906,7 +946,7 @@ theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ :=
lean 3 declaration is
forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univₓ'. -/
@[simp]
theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ :=
@@ -948,7 +988,7 @@ theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
lean 3 declaration is
forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s t))
but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s t))
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s t))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiffₓ'. -/
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
@@ -1154,7 +1194,7 @@ theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighb
lean 3 declaration is
forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
+ forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_topₓ'. -/
instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart :=
by
@@ -1342,7 +1382,7 @@ theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinsetₓ'. -/
@[simp]
theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by
@@ -1362,7 +1402,7 @@ alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_monoₓ'. -/
alias edge_finset_ssubset_edge_finset ↔ _ edge_finset_strict_mono
#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
@@ -1373,7 +1413,7 @@ attribute [mono] edge_finset_mono edge_finset_strict_mono
lean 3 declaration is
forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasEmptyc.{u1} (Sym2.{u1} V)))
but is expected to have type
- forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instEmptyCollectionFinset.{u1} (Sym2.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instEmptyCollectionFinset.{u1} (Sym2.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_botₓ'. -/
@[simp]
theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edge_finset]
@@ -1405,7 +1445,7 @@ theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeF
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiffₓ'. -/
@[simp]
theorem edgeFinset_sdiff [DecidableEq V] : (G₁ \ G₂).edgeFinset = G₁.edgeFinset \ G₂.edgeFinset :=
@@ -1477,7 +1517,7 @@ theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSetEmbeddi
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.completeBooleanAlgebra.{u1} V)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} V) (Preorder.toLE.{u1} (Set.{u1} V) (PartialOrder.toPreorder.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} V) (Preorder.toLE.{u1} (Set.{u1} V) (PartialOrder.toPreorder.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)
Case conversion may be inaccurate. Consider using '#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjointₓ'. -/
theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
Disjoint (G.neighborSet v) (Gᶜ.neighborSet v) :=
@@ -1492,7 +1532,7 @@ theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) v))
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_union_compl_neighbor_set_eq SimpleGraph.neighborSet_union_compl_neighborSet_eqₓ'. -/
theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
G.neighborSet v ∪ Gᶜ.neighborSet v = {v}ᶜ :=
@@ -1507,7 +1547,7 @@ theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
lean 3 declaration is
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (Set.Elem.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (Set.Elem.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSetₓ'. -/
-- TODO find out why TC inference has `h` failing a defeq check for `to_finset`
theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V) (v : V)
@@ -1521,7 +1561,7 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) v))
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_complₓ'. -/
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
by
@@ -1596,7 +1636,7 @@ instance decidableMemCommonNeighbors [DecidableRel G.Adj] (v w : V) :
lean 3 declaration is
forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.hasInsert.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) w)))
but is expected to have type
- forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.instInsertSet.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) w)))
+ forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.instInsertSet.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) w)))
Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eqₓ'. -/
theorem commonNeighbors_top_eq {v w : V} :
(⊤ : SimpleGraph V).commonNeighbors v w = Set.univ \ {v, w} :=
@@ -1686,7 +1726,7 @@ theorem deleteEdges_adj (s : Set (Sym2 V)) (v w : V) :
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G'))
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (SimpleGraph.edgeSet.{u1} V G'))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (SimpleGraph.edgeSet.{u1} V G'))
Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdgesₓ'. -/
theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.edgeSetEmbedding :=
by
@@ -1698,7 +1738,7 @@ theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.sdiff.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSetₓ'. -/
theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s = G \ fromEdgeSet s :=
by
@@ -1710,7 +1750,7 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s =
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (SimpleGraph.edgeSet.{u1} V G))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.edgeSet.{u1} V G))
Case conversion may be inaccurate. Consider using '#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdgesₓ'. -/
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding :=
by
@@ -1745,7 +1785,7 @@ theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G :=
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eqₓ'. -/
@[simp]
theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ :=
@@ -1907,17 +1947,13 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
#align simple_graph.map_adj SimpleGraph.map_adj
-/
-/- warning: simple_graph.map_monotone -> SimpleGraph.map_monotone is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (CompleteSemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (CompleteLattice.toCompleteSemilatticeInf.{u2} (SimpleGraph.{u2} W) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} W) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} W) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} W) (SimpleGraph.completeBooleanAlgebra.{u2} W))))))) (SimpleGraph.map.{u1, u2} V W f)
-but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (SemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (Lattice.toSemilatticeInf.{u2} (SimpleGraph.{u2} W) (GeneralizedCoheytingAlgebra.toLattice.{u2} (SimpleGraph.{u2} W) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BiheytingAlgebra.toCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BooleanAlgebra.toBiheytingAlgebra.{u2} (SimpleGraph.{u2} W) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} W)))))))) (SimpleGraph.map.{u1, u2} V W f)
-Case conversion may be inaccurate. Consider using '#align simple_graph.map_monotone SimpleGraph.map_monotoneₓ'. -/
+#print SimpleGraph.map_monotone /-
theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) :=
by
rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩
exact ⟨_, _, h ha, rfl, rfl⟩
#align simple_graph.map_monotone SimpleGraph.map_monotone
+-/
#print SimpleGraph.comap /-
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
@@ -2250,7 +2286,7 @@ theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
lean 3 declaration is
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degreeₓ'. -/
@[simp]
theorem complete_graph_degree [DecidableEq V] (v : V) :
@@ -2262,7 +2298,7 @@ theorem complete_graph_degree [DecidableEq V] (v : V) :
lean 3 declaration is
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
Case conversion may be inaccurate. Consider using '#align simple_graph.bot_degree SimpleGraph.bot_degreeₓ'. -/
theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 :=
by
@@ -2274,7 +2310,7 @@ theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 :=
lean 3 declaration is
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.topₓ'. -/
theorem IsRegularOfDegree.top [DecidableEq V] :
(⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) :=
@@ -2456,7 +2492,7 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
lean 3 declaration is
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
but is expected to have type
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (Set.Elem.{u1} V (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (Set.Elem.{u1} V (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
Case conversion may be inaccurate. Consider using '#align simple_graph.card_common_neighbors_top SimpleGraph.card_commonNeighbors_topₓ'. -/
theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
Fintype.card ((⊤ : SimpleGraph V).commonNeighbors v w) = Fintype.card V - 2 :=
@@ -2607,7 +2643,7 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
lean 3 declaration is
forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) f)
but is expected to have type
- forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (SimpleGraph.Adj.{u2} W G'))) f)
+ forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G'))) f)
Case conversion may be inaccurate. Consider using '#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_homₓ'. -/
/-- Every graph homomomorphism from a complete graph is injective. -/
theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f :=
@@ -2765,7 +2801,7 @@ protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} β))))
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraphₓ'. -/
/-- Embeddings of types induce embeddings of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ↪ β) :
@@ -2974,7 +3010,7 @@ protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} β))))
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraphₓ'. -/
/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ≃ β) :
@@ -2986,7 +3022,7 @@ protected def completeGraph {α β : Type _} (f : α ≃ β) :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} (f : Equiv.{succ u1, succ u2} α β), Eq.{max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β))))))) (SimpleGraph.Iso.toEmbedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))) (SimpleGraph.Iso.completeGraph.{u1, u2} α β f)) (SimpleGraph.Embedding.completeGraph.{u1, u2} α β (Equiv.toEmbedding.{succ u1, succ u2} α β f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} (f : Equiv.{succ u2, succ u1} α β), Eq.{max (succ u2) (succ u1)} (SimpleGraph.Embedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} α))) (Top.top.{u1} (SimpleGraph.{u1} β) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} β)))) (SimpleGraph.Iso.toEmbedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} α))) (Top.top.{u1} (SimpleGraph.{u1} β) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} β))) (SimpleGraph.Iso.completeGraph.{u2, u1} α β f)) (SimpleGraph.Embedding.completeGraph.{u2, u1} α β (Equiv.toEmbedding.{succ u2, succ u1} α β f))
+ forall {α : Type.{u2}} {β : Type.{u1}} (f : Equiv.{succ u2, succ u1} α β), Eq.{max (succ u2) (succ u1)} (SimpleGraph.Embedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} α) (SimpleGraph.completeBooleanAlgebra.{u2} α)))))) (Top.top.{u1} (SimpleGraph.{u1} β) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} β) (SimpleGraph.completeBooleanAlgebra.{u1} β))))))) (SimpleGraph.Iso.toEmbedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (CompleteLattice.toTop.{u2} (SimpleGraph.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} α) (SimpleGraph.completeBooleanAlgebra.{u2} α)))))) (Top.top.{u1} (SimpleGraph.{u1} β) (CompleteLattice.toTop.{u1} (SimpleGraph.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} β) (SimpleGraph.completeBooleanAlgebra.{u1} β)))))) (SimpleGraph.Iso.completeGraph.{u2, u1} α β f)) (SimpleGraph.Embedding.completeGraph.{u2, u1} α β (Equiv.toEmbedding.{succ u2, succ u1} α β f))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraphₓ'. -/
theorem toEmbedding_completeGraph {α β : Type _} (f : α ≃ β) :
(Iso.completeGraph f).toEmbedding = Embedding.completeGraph f.toEmbedding :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -1848,7 +1848,7 @@ variable {G}
/- warning: simple_graph.delete_far_iff -> SimpleGraph.deleteFar_iff is a dubious translation:
lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
but is expected to have type
forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iffₓ'. -/
@@ -1867,7 +1867,7 @@ theorem deleteFar_iff :
/- warning: simple_graph.delete_far.le_card_sub_card -> SimpleGraph.DeleteFar.le_card_sub_card is a dubious translation:
lean 3 declaration is
- forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
but is expected to have type
forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_cardₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/b19481deb571022990f1baa9cbf9172e6757a479
@@ -1383,7 +1383,7 @@ theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edge
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasUnion.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instUnionFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instUnionFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_supₓ'. -/
@[simp]
theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeFinset ∪ G₂.edgeFinset := by
@@ -1394,7 +1394,7 @@ theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeF
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasInter.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instInterFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instInterFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_infₓ'. -/
@[simp]
theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset := by
@@ -1405,7 +1405,7 @@ theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeF
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiffₓ'. -/
@[simp]
theorem edgeFinset_sdiff [DecidableEq V] : (G₁ \ G₂).edgeFinset = G₁.edgeFinset \ G₂.edgeFinset :=
@@ -1815,7 +1815,7 @@ theorem edgeSet_deleteEdges (s : Set (Sym2 V)) :
lean 3 declaration is
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)) (fun (a : V) (b : V) => _inst_2 a b) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_2 a b) _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Sym2.{u1} V)] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Sym2.{u1} V)] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.instRelDecidable'.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdgesₓ'. -/
theorem edgeFinset_deleteEdges [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
(s : Finset (Sym2 V)) [DecidableRel (G.deleteEdges s).Adj] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -2949,7 +2949,7 @@ def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
#print SimpleGraph.Iso.card_eq_of_iso /-
theorem card_eq_of_iso [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
- convert (Fintype.ofEquiv_card f.to_equiv).symm
+ convert(Fintype.ofEquiv_card f.to_equiv).symm
#align simple_graph.iso.card_eq_of_iso SimpleGraph.Iso.card_eq_of_iso
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -2238,17 +2238,13 @@ theorem neighborFinset_eq_filter {v : V} [DecidableRel G.Adj] :
#align simple_graph.neighbor_finset_eq_filter SimpleGraph.neighborFinset_eq_filter
-/
-/- warning: simple_graph.neighbor_finset_compl -> SimpleGraph.neighborFinset_compl is a dubious translation:
-lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (v : V), Eq.{succ u1} (Finset.{u1} V) (SimpleGraph.neighborFinset.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v (SimpleGraph.neighborSetFintype.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Compl.adjDecidable.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (SDiff.sdiff.{u1} (Finset.{u1} V) (Finset.hasSdiff.{u1} V (fun (a : V) (b : V) => _inst_2 a b)) (HasCompl.compl.{u1} (Finset.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} V) (Finset.booleanAlgebra.{u1} V _inst_1 (fun (a : V) (b : V) => _inst_2 a b))) (SimpleGraph.neighborFinset.{u1} V G v (SimpleGraph.neighborSetFintype.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b) v))) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.hasSingleton.{u1} V) v))
-but is expected to have type
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (v : V), Eq.{succ u1} (Finset.{u1} V) (SimpleGraph.neighborFinset.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v (SimpleGraph.neighborSetFintype.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Compl.adjDecidable.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (SDiff.sdiff.{u1} (Finset.{u1} V) (Finset.instSDiffFinset.{u1} V (fun (a : V) (b : V) => _inst_2 a b)) (HasCompl.compl.{u1} (Finset.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} V) (Finset.instBooleanAlgebraFinset.{u1} V _inst_1 (fun (a : V) (b : V) => _inst_2 a b))) (SimpleGraph.neighborFinset.{u1} V G v (SimpleGraph.neighborSetFintype.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b) v))) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.instSingletonFinset.{u1} V) v))
-Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_complₓ'. -/
+#print SimpleGraph.neighborFinset_compl /-
theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
Gᶜ.neighborFinset v = G.neighborFinset vᶜ \ {v} := by
simp only [neighbor_finset, neighbor_set_compl, Set.toFinset_diff, Set.toFinset_compl,
Set.toFinset_singleton]
#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_compl
+-/
/- warning: simple_graph.complete_graph_degree -> SimpleGraph.complete_graph_degree is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -562,7 +562,7 @@ The way `edge_set` is defined is such that `mem_edge_set` is proved by `refl`.
(That is, `⟦(v, w)⟧ ∈ G.edge_set` is definitionally equal to `G.adj v w`.)
-/
def edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V) :=
- OrderEmbedding.ofMapLeIff (fun G => Sym2.fromRel G.symm) fun G G' =>
+ OrderEmbedding.ofMapLEIff (fun G => Sym2.fromRel G.symm) fun G G' =>
⟨fun h a b => @h ⟦(a, b)⟧, fun h e => Sym2.ind (@h) e⟩
#align simple_graph.edge_set SimpleGraph.edgeSetEmbedding
-/
@@ -610,16 +610,16 @@ theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).le_iff_le
#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSet
-/- warning: simple_graph.edge_set_ssubset_edge_set -> SimpleGraph.edgeSet_sSubset_edgeSet is a dubious translation:
+/- warning: simple_graph.edge_set_ssubset_edge_set -> SimpleGraph.edgeSet_ssubset_edgeSet is a dubious translation:
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_sSubset_edgeSetₓ'. -/
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSetₓ'. -/
@[simp]
-theorem edgeSet_sSubset_edgeSet : G₁.edgeSetEmbedding ⊂ G₂.edgeSetEmbedding ↔ G₁ < G₂ :=
+theorem edgeSet_ssubset_edgeSet : G₁.edgeSetEmbedding ⊂ G₂.edgeSetEmbedding ↔ G₁ < G₂ :=
(edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).lt_iff_lt
-#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_sSubset_edgeSet
+#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSet
/- warning: simple_graph.edge_set_injective -> SimpleGraph.edgeSet_injective is a dubious translation:
lean 3 declaration is
@@ -1338,16 +1338,16 @@ theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G
simp [edge_finset]
#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinset
-/- warning: simple_graph.edge_finset_ssubset_edge_finset -> SimpleGraph.edgeFinset_sSubset_edgeFinset is a dubious translation:
+/- warning: simple_graph.edge_finset_ssubset_edge_finset -> SimpleGraph.edgeFinset_ssubset_edgeFinset is a dubious translation:
lean 3 declaration is
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
-Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_sSubset_edgeFinsetₓ'. -/
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinsetₓ'. -/
@[simp]
-theorem edgeFinset_sSubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by
+theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by
simp [edge_finset]
-#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_sSubset_edgeFinset
+#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
/- warning: simple_graph.edge_finset_mono -> SimpleGraph.edgeFinset_mono is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
! This file was ported from Lean 3 source module combinatorics.simple_graph.basic
-! leanprover-community/mathlib commit db53863fb135228820ee0b08e8dce9349a3d911b
+! leanprover-community/mathlib commit c6ef6387ede9983aee397d442974e61f89dfd87b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.Data.Sym.Sym2
/-!
# Simple graphs
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This module defines simple graphs on a vertex type `V` as an
irreflexive symmetric relation.
@@ -45,8 +48,9 @@ finitely many vertices.
graph isomorphisms. Note that a graph embedding is a stronger notion than an
injective graph homomorphism, since its image is an induced subgraph.
-* `boolean_algebra` instance: Under the subgraph relation, `simple_graph` forms a `boolean_algebra`.
- In other words, this is the lattice of spanning subgraphs of the complete graph.
+* `complete_boolean_algebra` instance: Under the subgraph relation, `simple_graph` forms a
+ `complete_boolean_algebra`. In other words, this is the complete lattice of spanning subgraphs of
+ the complete graph.
## Notations
@@ -70,8 +74,6 @@ finitely many vertices.
## Todo
-* Upgrade `simple_graph.boolean_algebra` to a `complete_boolean_algebra`.
-
* This is the simplest notion of an unoriented graph. This should
eventually fit into a more complete combinatorics hierarchy which
includes multigraphs and directed graphs. We begin with simple graphs
@@ -157,7 +159,7 @@ def completeBipartiteGraph (V W : Type _) : SimpleGraph (Sum V W)
namespace SimpleGraph
-variable {𝕜 : Type _} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
+variable {ι : Sort _} {𝕜 : Type _} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
(G' : SimpleGraph W) {a b c u v w : V} {e : Sym2 V}
#print SimpleGraph.irrefl /-
@@ -212,6 +214,18 @@ theorem ne_of_adj_of_not_adj {v w x : V} (h : G.Adj v x) (hn : ¬G.Adj w x) : v
#align simple_graph.ne_of_adj_of_not_adj SimpleGraph.ne_of_adj_of_not_adj
-/
+theorem adj_injective : Injective (Adj : SimpleGraph V → V → V → Prop) := fun G H h =>
+ by
+ cases G
+ cases H
+ congr
+#align simple_graph.adj_injective SimpleGraph.adj_injective
+
+@[simp]
+theorem adj_inj {G H : SimpleGraph V} : G.Adj = H.Adj ↔ G = H :=
+ adj_injective.eq_iff
+#align simple_graph.adj_inj SimpleGraph.adj_inj
+
section Order
#print SimpleGraph.IsSubgraph /-
@@ -300,8 +314,61 @@ theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v
Iff.rfl
#align simple_graph.sdiff_adj SimpleGraph.sdiff_adj
-instance : BooleanAlgebra (SimpleGraph V) :=
- { PartialOrder.lift Adj ext with
+instance : SupSet (SimpleGraph V) :=
+ ⟨fun s =>
+ { Adj := fun a b => ∃ G ∈ s, Adj G a b
+ symm := fun a b => Exists₂.imp fun _ _ => Adj.symm
+ loopless := by
+ rintro a ⟨G, hG, ha⟩
+ exact ha.ne rfl }⟩
+
+instance : InfSet (SimpleGraph V) :=
+ ⟨fun s =>
+ { Adj := fun a b => (∀ ⦃G⦄, G ∈ s → Adj G a b) ∧ a ≠ b
+ symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
+ loopless := fun a h => h.2 rfl }⟩
+
+@[simp]
+theorem supₛ_adj {s : Set (SimpleGraph V)} {a b : V} : (supₛ s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
+ Iff.rfl
+#align simple_graph.Sup_adj SimpleGraph.supₛ_adj
+
+@[simp]
+theorem infₛ_adj {s : Set (SimpleGraph V)} : (infₛ s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
+ Iff.rfl
+#align simple_graph.Inf_adj SimpleGraph.infₛ_adj
+
+@[simp]
+theorem supᵢ_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [supᵢ]
+#align simple_graph.supr_adj SimpleGraph.supᵢ_adj
+
+@[simp]
+theorem infᵢ_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
+ simp [infᵢ]
+#align simple_graph.infi_adj SimpleGraph.infᵢ_adj
+
+theorem infₛ_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
+ (infₛ s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
+ infₛ_adj.trans <|
+ and_iff_left_of_imp <| by
+ obtain ⟨G, hG⟩ := hs
+ exact fun h => (h _ hG).Ne
+#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonempty
+
+theorem infᵢ_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
+ (⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
+ simp [infᵢ, Inf_adj_of_nonempty (Set.range_nonempty _)]
+#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonempty
+
+/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.adj a b → H.adj a b`. -/
+instance : DistribLattice (SimpleGraph V) :=
+ {
+ show DistribLattice (SimpleGraph V) from
+ adj_injective.DistribLattice _ (fun _ _ => rfl) fun _ _ => rfl with
+ le := fun G H => ∀ ⦃a b⦄, G.Adj a b → H.Adj a b }
+
+instance : CompleteBooleanAlgebra (SimpleGraph V) :=
+ { SimpleGraph.distribLattice with
le := (· ≤ ·)
sup := (· ⊔ ·)
inf := (· ⊓ ·)
@@ -311,28 +378,38 @@ instance : BooleanAlgebra (SimpleGraph V) :=
bot := emptyGraph V
le_top := fun x v w h => x.ne_of_adj h
bot_le := fun x v w h => h.elim
- sup_le := fun x y z hxy hyz v w h => h.casesOn (fun h => hxy h) fun h => hyz h
sdiff_eq := fun x y => by
ext (v w)
refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
rintro rfl
exact x.irrefl h.1
- le_sup_left := fun x y v w h => Or.inl h
- le_sup_right := fun x y v w h => Or.inr h
- le_inf := fun x y z hxy hyz v w h => ⟨hxy h, hyz h⟩
- le_sup_inf := fun a b c v w h =>
- Or.dcases_on h.2 Or.inl <| Or.dcases_on h.1 (fun h _ => Or.inl h) fun hb hc => Or.inr ⟨hb, hc⟩
inf_compl_le_bot := fun a v w h => False.elim <| h.2.2 h.1
top_le_sup_compl := fun a v w ne => by
by_cases a.adj v w
exact Or.inl h
exact Or.inr ⟨Ne, h⟩
- inf_le_left := fun x y v w h => h.1
- inf_le_right := fun x y v w h => h.2 }
+ supₛ := supₛ
+ le_sup := fun s G hG a b hab => ⟨G, hG, hab⟩
+ sup_le := fun s G hG a b => by
+ rintro ⟨H, hH, hab⟩
+ exact hG _ hH hab
+ infₛ := infₛ
+ inf_le := fun s G hG a b hab => hab.1 hG
+ le_inf := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.Ne⟩
+ inf_sup_le_supᵢ_inf := fun G s a b hab => by
+ simpa only [exists_prop, Sup_adj, and_imp, forall_exists_index, Inf_adj, supr_adj, inf_adj, ←
+ exists_and_right, exists_and_left, and_assoc', and_self_right] using hab
+ infᵢ_sup_le_sup_inf := fun G s a b hab =>
+ by
+ simp only [sup_adj, Inf_adj, infi_adj] at hab⊢
+ have : (∀ G' ∈ s, adj G a b ∨ adj G' a b) ∧ a ≠ b :=
+ (and_congr_left fun h => forall_congr' fun H => _).1 hab
+ simpa [forall_or_left, or_and_right, and_iff_left_of_imp adj.ne] using this
+ exact and_iff_left h }
/- warning: simple_graph.top_adj -> SimpleGraph.top_adj is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w) (Ne.{succ u1} V v w)
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (Ne.{succ u1} V v w)
but is expected to have type
forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) (Ne.{succ u1} V v w)
Case conversion may be inaccurate. Consider using '#align simple_graph.top_adj SimpleGraph.top_adjₓ'. -/
@@ -343,7 +420,7 @@ theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
/- warning: simple_graph.bot_adj -> SimpleGraph.bot_adj is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w) False
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) False
but is expected to have type
forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) False
Case conversion may be inaccurate. Consider using '#align simple_graph.bot_adj SimpleGraph.bot_adjₓ'. -/
@@ -354,7 +431,7 @@ theorem bot_adj (v w : V) : (⊥ : SimpleGraph V).Adj v w ↔ False :=
/- warning: simple_graph.complete_graph_eq_top -> SimpleGraph.completeGraph_eq_top is a dubious translation:
lean 3 declaration is
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_topₓ'. -/
@@ -365,7 +442,7 @@ theorem completeGraph_eq_top (V : Type u) : completeGraph V = ⊤ :=
/- warning: simple_graph.empty_graph_eq_bot -> SimpleGraph.emptyGraph_eq_bot is a dubious translation:
lean 3 declaration is
- forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.empty_graph_eq_bot SimpleGraph.emptyGraph_eq_botₓ'. -/
@@ -384,7 +461,7 @@ variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
/- warning: simple_graph.bot.adj_decidable -> SimpleGraph.Bot.adjDecidable is a dubious translation:
lean 3 declaration is
- forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))
+ forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
but is expected to have type
forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
Case conversion may be inaccurate. Consider using '#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidableₓ'. -/
@@ -422,7 +499,7 @@ variable [DecidableEq V]
/- warning: simple_graph.top.adj_decidable -> SimpleGraph.Top.adjDecidable is a dubious translation:
lean 3 declaration is
- forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))
+ forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
but is expected to have type
forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
Case conversion may be inaccurate. Consider using '#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidableₓ'. -/
@@ -535,7 +612,7 @@ theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding
/- warning: simple_graph.edge_set_ssubset_edge_set -> SimpleGraph.edgeSet_sSubset_edgeSet is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂)
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_sSubset_edgeSetₓ'. -/
@@ -565,7 +642,7 @@ alias edge_set_subset_edge_set ↔ _ edge_set_mono
/- warning: simple_graph.edge_set_strict_mono -> SimpleGraph.edgeSet_strict_mono is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_monoₓ'. -/
@@ -578,7 +655,7 @@ variable (G₁ G₂)
/- warning: simple_graph.edge_set_bot -> SimpleGraph.edgeSet_bot is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))
but is expected to have type
forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_bot SimpleGraph.edgeSet_botₓ'. -/
@@ -713,7 +790,7 @@ instance fintypeEdgeSet [DecidableEq V] [Fintype V] [DecidableRel G.Adj] :
/- warning: simple_graph.fintype_edge_set_bot -> SimpleGraph.fintypeEdgeSetBot is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}}, Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))
+ forall {V : Type.{u1}}, Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))))
but is expected to have type
forall {V : Type.{u1}}, Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBotₓ'. -/
@@ -814,7 +891,7 @@ theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G :=
/- warning: simple_graph.from_edge_set_empty -> SimpleGraph.fromEdgeSet_empty is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_emptyₓ'. -/
@@ -827,7 +904,7 @@ theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ :=
/- warning: simple_graph.from_edge_set_univ -> SimpleGraph.fromEdgeSet_univ is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univₓ'. -/
@@ -1075,7 +1152,7 @@ theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighb
/- warning: simple_graph.nonempty_dart_top -> SimpleGraph.nonempty_dart_top is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))
+ forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))
but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_topₓ'. -/
@@ -1263,7 +1340,7 @@ theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G
/- warning: simple_graph.edge_finset_ssubset_edge_finset -> SimpleGraph.edgeFinset_sSubset_edgeFinset is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂)
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂)
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_sSubset_edgeFinsetₓ'. -/
@@ -1283,7 +1360,7 @@ alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
/- warning: simple_graph.edge_finset_strict_mono -> SimpleGraph.edgeFinset_strict_mono is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_monoₓ'. -/
@@ -1294,7 +1371,7 @@ attribute [mono] edge_finset_mono edge_finset_strict_mono
/- warning: simple_graph.edge_finset_bot -> SimpleGraph.edgeFinset_bot is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasEmptyc.{u1} (Sym2.{u1} V)))
+ forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasEmptyc.{u1} (Sym2.{u1} V)))
but is expected to have type
forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instEmptyCollectionFinset.{u1} (Sym2.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_botₓ'. -/
@@ -1517,7 +1594,7 @@ instance decidableMemCommonNeighbors [DecidableRel G.Adj] (v w : V) :
/- warning: simple_graph.common_neighbors_top_eq -> SimpleGraph.commonNeighbors_top_eq is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.hasInsert.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) w)))
+ forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.hasInsert.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) w)))
but is expected to have type
forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.instInsertSet.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) w)))
Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eqₓ'. -/
@@ -1631,7 +1708,7 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s =
/- warning: simple_graph.compl_eq_delete_edges -> SimpleGraph.compl_eq_deleteEdges is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (SimpleGraph.edgeSet.{u1} V G))
Case conversion may be inaccurate. Consider using '#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdgesₓ'. -/
@@ -1666,7 +1743,7 @@ theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G :=
/- warning: simple_graph.delete_edges_univ_eq -> SimpleGraph.deleteEdges_univ_eq is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))
but is expected to have type
forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eqₓ'. -/
@@ -1832,7 +1909,7 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
/- warning: simple_graph.map_monotone -> SimpleGraph.map_monotone is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (SemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (Lattice.toSemilatticeInf.{u2} (SimpleGraph.{u2} W) (GeneralizedCoheytingAlgebra.toLattice.{u2} (SimpleGraph.{u2} W) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (SimpleGraph.{u2} W) (SimpleGraph.booleanAlgebra.{u2} W))))))) (SimpleGraph.map.{u1, u2} V W f)
+ forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (CompleteSemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (CompleteLattice.toCompleteSemilatticeInf.{u2} (SimpleGraph.{u2} W) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} W) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} W) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} W) (SimpleGraph.completeBooleanAlgebra.{u2} W))))))) (SimpleGraph.map.{u1, u2} V W f)
but is expected to have type
forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (SemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (Lattice.toSemilatticeInf.{u2} (SimpleGraph.{u2} W) (GeneralizedCoheytingAlgebra.toLattice.{u2} (SimpleGraph.{u2} W) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BiheytingAlgebra.toCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BooleanAlgebra.toBiheytingAlgebra.{u2} (SimpleGraph.{u2} W) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} W)))))))) (SimpleGraph.map.{u1, u2} V W f)
Case conversion may be inaccurate. Consider using '#align simple_graph.map_monotone SimpleGraph.map_monotoneₓ'. -/
@@ -2175,7 +2252,7 @@ theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
/- warning: simple_graph.complete_graph_degree -> SimpleGraph.complete_graph_degree is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degreeₓ'. -/
@@ -2187,7 +2264,7 @@ theorem complete_graph_degree [DecidableEq V] (v : V) :
/- warning: simple_graph.bot_degree -> SimpleGraph.bot_degree is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasBot.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
Case conversion may be inaccurate. Consider using '#align simple_graph.bot_degree SimpleGraph.bot_degreeₓ'. -/
@@ -2199,7 +2276,7 @@ theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 :=
/- warning: simple_graph.is_regular_of_degree.top -> SimpleGraph.IsRegularOfDegree.top is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.topₓ'. -/
@@ -2381,7 +2458,7 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
/- warning: simple_graph.card_common_neighbors_top -> SimpleGraph.card_commonNeighbors_top is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
but is expected to have type
forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (Set.Elem.{u1} V (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
Case conversion may be inaccurate. Consider using '#align simple_graph.card_common_neighbors_top SimpleGraph.card_commonNeighbors_topₓ'. -/
@@ -2532,7 +2609,7 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
/- warning: simple_graph.hom.injective_of_top_hom -> SimpleGraph.Hom.injective_of_top_hom is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) G'), Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))) (SimpleGraph.Adj.{u2} W G')) f)
+ forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G'), Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V)))))) G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} V) (SimpleGraph.completeBooleanAlgebra.{u1} V))))))) (SimpleGraph.Adj.{u2} W G')) f)
but is expected to have type
forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (SimpleGraph.Adj.{u2} W G'))) f)
Case conversion may be inaccurate. Consider using '#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_homₓ'. -/
@@ -2690,7 +2767,7 @@ protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe
/- warning: simple_graph.embedding.complete_graph -> SimpleGraph.Embedding.completeGraph is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β))))
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} β))))
Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraphₓ'. -/
@@ -2899,7 +2976,7 @@ protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding
/- warning: simple_graph.iso.complete_graph -> SimpleGraph.Iso.completeGraph is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β))))
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} β))))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraphₓ'. -/
@@ -2911,7 +2988,7 @@ protected def completeGraph {α β : Type _} (f : α ≃ β) :
/- warning: simple_graph.iso.to_embedding_complete_graph -> SimpleGraph.Iso.toEmbedding_completeGraph is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} (f : Equiv.{succ u1, succ u2} α β), Eq.{max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β)))) (SimpleGraph.Iso.toEmbedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β))) (SimpleGraph.Iso.completeGraph.{u1, u2} α β f)) (SimpleGraph.Embedding.completeGraph.{u1, u2} α β (Equiv.toEmbedding.{succ u1, succ u2} α β f))
+ forall {α : Type.{u1}} {β : Type.{u2}} (f : Equiv.{succ u1, succ u2} α β), Eq.{max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β))))))) (SimpleGraph.Iso.toEmbedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (CompleteLattice.toHasTop.{u1} (SimpleGraph.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (SimpleGraph.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (SimpleGraph.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (SimpleGraph.{u1} α) (SimpleGraph.completeBooleanAlgebra.{u1} α)))))) (Top.top.{u2} (SimpleGraph.{u2} β) (CompleteLattice.toHasTop.{u2} (SimpleGraph.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (SimpleGraph.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (SimpleGraph.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (SimpleGraph.{u2} β) (SimpleGraph.completeBooleanAlgebra.{u2} β)))))) (SimpleGraph.Iso.completeGraph.{u1, u2} α β f)) (SimpleGraph.Embedding.completeGraph.{u1, u2} α β (Equiv.toEmbedding.{succ u1, succ u2} α β f))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} (f : Equiv.{succ u2, succ u1} α β), Eq.{max (succ u2) (succ u1)} (SimpleGraph.Embedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} α))) (Top.top.{u1} (SimpleGraph.{u1} β) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} β)))) (SimpleGraph.Iso.toEmbedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} α))) (Top.top.{u1} (SimpleGraph.{u1} β) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} β))) (SimpleGraph.Iso.completeGraph.{u2, u1} α β f)) (SimpleGraph.Embedding.completeGraph.{u2, u1} α β (Equiv.toEmbedding.{succ u2, succ u1} α β f))
Case conversion may be inaccurate. Consider using '#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraphₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -233,30 +233,38 @@ theorem isSubgraph_eq_le : (IsSubgraph : SimpleGraph V → SimpleGraph V → Pro
-/
/-- The supremum of two graphs `x ⊔ y` has edges where either `x` or `y` have edges. -/
-instance : HasSup (SimpleGraph V) :=
+instance : Sup (SimpleGraph V) :=
⟨fun x y =>
{ Adj := x.Adj ⊔ y.Adj
symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }⟩
-#print SimpleGraph.sup_adj /-
+/- warning: simple_graph.sup_adj -> SimpleGraph.sup_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) x y) v w) (Or (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
+but is expected to have type
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) x y) v w) (Or (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
+Case conversion may be inaccurate. Consider using '#align simple_graph.sup_adj SimpleGraph.sup_adjₓ'. -/
@[simp]
theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v w ∨ y.Adj v w :=
Iff.rfl
#align simple_graph.sup_adj SimpleGraph.sup_adj
--/
/-- The infimum of two graphs `x ⊓ y` has edges where both `x` and `y` have edges. -/
-instance : HasInf (SimpleGraph V) :=
+instance : Inf (SimpleGraph V) :=
⟨fun x y =>
{ Adj := x.Adj ⊓ y.Adj
symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }⟩
-#print SimpleGraph.inf_adj /-
+/- warning: simple_graph.inf_adj -> SimpleGraph.inf_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
+but is expected to have type
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (SimpleGraph.Adj.{u1} V y v w))
+Case conversion may be inaccurate. Consider using '#align simple_graph.inf_adj SimpleGraph.inf_adjₓ'. -/
@[simp]
theorem inf_adj (x y : SimpleGraph V) (v w : V) : (x ⊓ y).Adj v w ↔ x.Adj v w ∧ y.Adj v w :=
Iff.rfl
#align simple_graph.inf_adj SimpleGraph.inf_adj
--/
/-- We define `Gᶜ` to be the `simple_graph V` such that no two adjacent vertices in `G`
are adjacent in the complement, and every nonadjacent pair of vertices is adjacent
@@ -383,15 +391,23 @@ Case conversion may be inaccurate. Consider using '#align simple_graph.bot.adj_d
instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => Decidable.false
#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidable
-#print SimpleGraph.Sup.adjDecidable /-
+/- warning: simple_graph.sup.adj_decidable -> SimpleGraph.Sup.adjDecidable is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G H))
+but is expected to have type
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G H))
+Case conversion may be inaccurate. Consider using '#align simple_graph.sup.adj_decidable SimpleGraph.Sup.adjDecidableₓ'. -/
instance Sup.adjDecidable : DecidableRel (G ⊔ H).Adj := fun v w => Or.decidable
#align simple_graph.sup.adj_decidable SimpleGraph.Sup.adjDecidable
--/
-#print SimpleGraph.Inf.adjDecidable /-
+/- warning: simple_graph.inf.adj_decidable -> SimpleGraph.Inf.adjDecidable is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G H))
+but is expected to have type
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G H))
+Case conversion may be inaccurate. Consider using '#align simple_graph.inf.adj_decidable SimpleGraph.Inf.adjDecidableₓ'. -/
instance Inf.adjDecidable : DecidableRel (G ⊓ H).Adj := fun v w => And.decidable
#align simple_graph.inf.adj_decidable SimpleGraph.Inf.adjDecidable
--/
/- warning: simple_graph.sdiff.adj_decidable -> SimpleGraph.Sdiff.adjDecidable is a dubious translation:
lean 3 declaration is
@@ -573,9 +589,9 @@ theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSetEmbedding = ∅ :=
/- warning: simple_graph.edge_set_sup -> SimpleGraph.edgeSet_sup is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sup SimpleGraph.edgeSet_supₓ'. -/
@[simp]
theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∪ G₂.edgeSetEmbedding :=
@@ -586,9 +602,9 @@ theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding
/- warning: simple_graph.edge_set_inf -> SimpleGraph.edgeSet_inf is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_inf SimpleGraph.edgeSet_infₓ'. -/
@[simp]
theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∩ G₂.edgeSetEmbedding :=
@@ -709,9 +725,9 @@ instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding :=
/- warning: simple_graph.fintype_edge_set_sup -> SimpleGraph.fintypeEdgeSetSup is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)))
but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) G₁ G₂)))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂)))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSupₓ'. -/
instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊔ G₂).edgeSetEmbedding :=
@@ -722,9 +738,9 @@ instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
/- warning: simple_graph.fintype_edge_set_inf -> SimpleGraph.fintypeEdgeSetInf is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)))
but is expected to have type
- forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) G₁ G₂)))
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂)))
Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInfₓ'. -/
instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
[Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊓ G₂).edgeSetEmbedding :=
@@ -824,9 +840,9 @@ theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ :=
/- warning: simple_graph.from_edge_set_inf -> SimpleGraph.fromEdgeSet_inf is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) s t))
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) s t))
but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s t))
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s t))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_infₓ'. -/
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
@@ -839,9 +855,9 @@ theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
/- warning: simple_graph.from_edge_set_sup -> SimpleGraph.fromEdgeSet_sup is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) s t))
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) s t))
but is expected to have type
- forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) s t))
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) s t))
Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_supₓ'. -/
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
@@ -1288,9 +1304,9 @@ theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edge
/- warning: simple_graph.edge_finset_sup -> SimpleGraph.edgeFinset_sup is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasUnion.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasUnion.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instUnionFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Sup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSupSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instUnionFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_supₓ'. -/
@[simp]
theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeFinset ∪ G₂.edgeFinset := by
@@ -1299,9 +1315,9 @@ theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeF
/- warning: simple_graph.edge_finset_inf -> SimpleGraph.edgeFinset_inf is a dubious translation:
lean 3 declaration is
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasInter.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasInter.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
but is expected to have type
- forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instInterFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Inf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instInfSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instInterFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_infₓ'. -/
@[simp]
theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -84,6 +84,7 @@ open Finset Function
universe u v w
+#print SimpleGraph /-
/-- A simple graph is an irreflexive symmetric relation `adj` on a vertex type `V`.
The relation describes which pairs of vertices are adjacent.
There is exactly one edge for every pair of adjacent vertices;
@@ -95,10 +96,12 @@ structure SimpleGraph (V : Type u) where
symm : Symmetric adj := by obviously
loopless : Irreflexive adj := by obviously
#align simple_graph SimpleGraph
+-/
noncomputable instance {V : Type u} [Fintype V] : Fintype (SimpleGraph V) := by
classical exact Fintype.ofInjective SimpleGraph.Adj SimpleGraph.ext
+#print SimpleGraph.fromRel /-
/-- Construct the simple graph induced by the given relation. It
symmetrizes the relation and makes it irreflexive.
-/
@@ -108,22 +111,30 @@ def SimpleGraph.fromRel {V : Type u} (r : V → V → Prop) : SimpleGraph V
symm := fun a b ⟨hn, hr⟩ => ⟨hn.symm, hr.symm⟩
loopless := fun a ⟨hn, _⟩ => hn rfl
#align simple_graph.from_rel SimpleGraph.fromRel
+-/
+#print SimpleGraph.fromRel_adj /-
@[simp]
theorem SimpleGraph.fromRel_adj {V : Type u} (r : V → V → Prop) (v w : V) :
(SimpleGraph.fromRel r).Adj v w ↔ v ≠ w ∧ (r v w ∨ r w v) :=
Iff.rfl
#align simple_graph.from_rel_adj SimpleGraph.fromRel_adj
+-/
+#print completeGraph /-
/-- The complete graph on a type `V` is the simple graph with all pairs of distinct vertices
adjacent. In `mathlib`, this is usually referred to as `⊤`. -/
def completeGraph (V : Type u) : SimpleGraph V where Adj := Ne
#align complete_graph completeGraph
+-/
+#print emptyGraph /-
/-- The graph with no edges on a given vertex type `V`. `mathlib` prefers the notation `⊥`. -/
def emptyGraph (V : Type u) : SimpleGraph V where Adj i j := False
#align empty_graph emptyGraph
+-/
+#print completeBipartiteGraph /-
/-- Two vertices are adjacent in the complete bipartite graph on two vertex types
if and only if they are not from the same side.
Bipartite graphs in general may be regarded as being subgraphs of one of these.
@@ -142,63 +153,84 @@ def completeBipartiteGraph (V W : Type _) : SimpleGraph (Sum V W)
intro v
cases v <;> simp
#align complete_bipartite_graph completeBipartiteGraph
+-/
namespace SimpleGraph
variable {𝕜 : Type _} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
(G' : SimpleGraph W) {a b c u v w : V} {e : Sym2 V}
+#print SimpleGraph.irrefl /-
@[simp]
protected theorem irrefl {v : V} : ¬G.Adj v v :=
G.loopless v
#align simple_graph.irrefl SimpleGraph.irrefl
+-/
+#print SimpleGraph.adj_comm /-
theorem adj_comm (u v : V) : G.Adj u v ↔ G.Adj v u :=
⟨fun x => G.symm x, fun x => G.symm x⟩
#align simple_graph.adj_comm SimpleGraph.adj_comm
+-/
+#print SimpleGraph.adj_symm /-
@[symm]
theorem adj_symm (h : G.Adj u v) : G.Adj v u :=
G.symm h
#align simple_graph.adj_symm SimpleGraph.adj_symm
+-/
+#print SimpleGraph.Adj.symm /-
theorem Adj.symm {G : SimpleGraph V} {u v : V} (h : G.Adj u v) : G.Adj v u :=
G.symm h
#align simple_graph.adj.symm SimpleGraph.Adj.symm
+-/
+#print SimpleGraph.ne_of_adj /-
theorem ne_of_adj (h : G.Adj a b) : a ≠ b :=
by
rintro rfl
exact G.irrefl h
#align simple_graph.ne_of_adj SimpleGraph.ne_of_adj
+-/
+#print SimpleGraph.Adj.ne /-
protected theorem Adj.ne {G : SimpleGraph V} {a b : V} (h : G.Adj a b) : a ≠ b :=
G.ne_of_adj h
#align simple_graph.adj.ne SimpleGraph.Adj.ne
+-/
+#print SimpleGraph.Adj.ne' /-
protected theorem Adj.ne' {G : SimpleGraph V} {a b : V} (h : G.Adj a b) : b ≠ a :=
h.Ne.symm
#align simple_graph.adj.ne' SimpleGraph.Adj.ne'
+-/
+#print SimpleGraph.ne_of_adj_of_not_adj /-
theorem ne_of_adj_of_not_adj {v w x : V} (h : G.Adj v x) (hn : ¬G.Adj w x) : v ≠ w := fun h' =>
hn (h' ▸ h)
#align simple_graph.ne_of_adj_of_not_adj SimpleGraph.ne_of_adj_of_not_adj
+-/
section Order
+#print SimpleGraph.IsSubgraph /-
/-- The relation that one `simple_graph` is a subgraph of another.
Note that this should be spelled `≤`. -/
def IsSubgraph (x y : SimpleGraph V) : Prop :=
∀ ⦃v w : V⦄, x.Adj v w → y.Adj v w
#align simple_graph.is_subgraph SimpleGraph.IsSubgraph
+-/
instance : LE (SimpleGraph V) :=
⟨IsSubgraph⟩
+#print SimpleGraph.isSubgraph_eq_le /-
@[simp]
theorem isSubgraph_eq_le : (IsSubgraph : SimpleGraph V → SimpleGraph V → Prop) = (· ≤ ·) :=
rfl
#align simple_graph.is_subgraph_eq_le SimpleGraph.isSubgraph_eq_le
+-/
/-- The supremum of two graphs `x ⊔ y` has edges where either `x` or `y` have edges. -/
instance : HasSup (SimpleGraph V) :=
@@ -206,10 +238,12 @@ instance : HasSup (SimpleGraph V) :=
{ Adj := x.Adj ⊔ y.Adj
symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }⟩
+#print SimpleGraph.sup_adj /-
@[simp]
theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v w ∨ y.Adj v w :=
Iff.rfl
#align simple_graph.sup_adj SimpleGraph.sup_adj
+-/
/-- The infimum of two graphs `x ⊓ y` has edges where both `x` and `y` have edges. -/
instance : HasInf (SimpleGraph V) :=
@@ -217,10 +251,12 @@ instance : HasInf (SimpleGraph V) :=
{ Adj := x.Adj ⊓ y.Adj
symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }⟩
+#print SimpleGraph.inf_adj /-
@[simp]
theorem inf_adj (x y : SimpleGraph V) (v w : V) : (x ⊓ y).Adj v w ↔ x.Adj v w ∧ y.Adj v w :=
Iff.rfl
#align simple_graph.inf_adj SimpleGraph.inf_adj
+-/
/-- We define `Gᶜ` to be the `simple_graph V` such that no two adjacent vertices in `G`
are adjacent in the complement, and every nonadjacent pair of vertices is adjacent
@@ -232,10 +268,12 @@ instance : HasCompl (SimpleGraph V) :=
symm := fun v w ⟨hne, _⟩ => ⟨hne.symm, by rwa [adj_comm]⟩
loopless := fun v ⟨hne, _⟩ => (hne rfl).elim }⟩
+#print SimpleGraph.compl_adj /-
@[simp]
theorem compl_adj (G : SimpleGraph V) (v w : V) : Gᶜ.Adj v w ↔ v ≠ w ∧ ¬G.Adj v w :=
Iff.rfl
#align simple_graph.compl_adj SimpleGraph.compl_adj
+-/
/-- The difference of two graphs `x \ y` has the edges of `x` with the edges of `y` removed. -/
instance : SDiff (SimpleGraph V) :=
@@ -243,6 +281,12 @@ instance : SDiff (SimpleGraph V) :=
{ Adj := x.Adj \ y.Adj
symm := fun v w h => by change x.adj w v ∧ ¬y.adj w v <;> rwa [x.adj_comm, y.adj_comm] }⟩
+/- warning: simple_graph.sdiff_adj -> SimpleGraph.sdiff_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
+but is expected to have type
+ forall {V : Type.{u1}} (x : SimpleGraph.{u1} V) (y : SimpleGraph.{u1} V) (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) x y) v w) (And (SimpleGraph.Adj.{u1} V x v w) (Not (SimpleGraph.Adj.{u1} V y v w)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_adj SimpleGraph.sdiff_adjₓ'. -/
@[simp]
theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v w ∧ ¬y.Adj v w :=
Iff.rfl
@@ -278,21 +322,45 @@ instance : BooleanAlgebra (SimpleGraph V) :=
inf_le_left := fun x y v w h => h.1
inf_le_right := fun x y v w h => h.2 }
+/- warning: simple_graph.top_adj -> SimpleGraph.top_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w) (Ne.{succ u1} V v w)
+but is expected to have type
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) (Ne.{succ u1} V v w)
+Case conversion may be inaccurate. Consider using '#align simple_graph.top_adj SimpleGraph.top_adjₓ'. -/
@[simp]
theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
Iff.rfl
#align simple_graph.top_adj SimpleGraph.top_adj
+/- warning: simple_graph.bot_adj -> SimpleGraph.bot_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w) False
+but is expected to have type
+ forall {V : Type.{u1}} (v : V) (w : V), Iff (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) False
+Case conversion may be inaccurate. Consider using '#align simple_graph.bot_adj SimpleGraph.bot_adjₓ'. -/
@[simp]
theorem bot_adj (v w : V) : (⊥ : SimpleGraph V).Adj v w ↔ False :=
Iff.rfl
#align simple_graph.bot_adj SimpleGraph.bot_adj
+/- warning: simple_graph.complete_graph_eq_top -> SimpleGraph.completeGraph_eq_top is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+but is expected to have type
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (completeGraph.{u1} V) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_topₓ'. -/
@[simp]
theorem completeGraph_eq_top (V : Type u) : completeGraph V = ⊤ :=
rfl
#align simple_graph.complete_graph_eq_top SimpleGraph.completeGraph_eq_top
+/- warning: simple_graph.empty_graph_eq_bot -> SimpleGraph.emptyGraph_eq_bot is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+but is expected to have type
+ forall (V : Type.{u1}), Eq.{succ u1} (SimpleGraph.{u1} V) (emptyGraph.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.empty_graph_eq_bot SimpleGraph.emptyGraph_eq_botₓ'. -/
@[simp]
theorem emptyGraph_eq_bot (V : Type u) : emptyGraph V = ⊥ :=
rfl
@@ -306,101 +374,185 @@ section Decidable
variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
+/- warning: simple_graph.bot.adj_decidable -> SimpleGraph.Bot.adjDecidable is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))
+but is expected to have type
+ forall (V : Type.{u1}), DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidableₓ'. -/
instance Bot.adjDecidable : DecidableRel (⊥ : SimpleGraph V).Adj := fun v w => Decidable.false
#align simple_graph.bot.adj_decidable SimpleGraph.Bot.adjDecidable
+#print SimpleGraph.Sup.adjDecidable /-
instance Sup.adjDecidable : DecidableRel (G ⊔ H).Adj := fun v w => Or.decidable
#align simple_graph.sup.adj_decidable SimpleGraph.Sup.adjDecidable
+-/
+#print SimpleGraph.Inf.adjDecidable /-
instance Inf.adjDecidable : DecidableRel (G ⊓ H).Adj := fun v w => And.decidable
#align simple_graph.inf.adj_decidable SimpleGraph.Inf.adjDecidable
+-/
+/- warning: simple_graph.sdiff.adj_decidable -> SimpleGraph.Sdiff.adjDecidable is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G H))
+but is expected to have type
+ forall (V : Type.{u1}) (G : SimpleGraph.{u1} V) (H : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V H)], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G H))
+Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidableₓ'. -/
instance Sdiff.adjDecidable : DecidableRel (G \ H).Adj := fun v w => And.decidable
#align simple_graph.sdiff.adj_decidable SimpleGraph.Sdiff.adjDecidable
variable [DecidableEq V]
+/- warning: simple_graph.top.adj_decidable -> SimpleGraph.Top.adjDecidable is a dubious translation:
+lean 3 declaration is
+ forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))
+but is expected to have type
+ forall (V : Type.{u1}) [_inst_3 : DecidableEq.{succ u1} V], DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidableₓ'. -/
instance Top.adjDecidable : DecidableRel (⊤ : SimpleGraph V).Adj := fun v w => Not.decidable
#align simple_graph.top.adj_decidable SimpleGraph.Top.adjDecidable
+#print SimpleGraph.Compl.adjDecidable /-
instance Compl.adjDecidable : DecidableRel Gᶜ.Adj := fun v w => And.decidable
#align simple_graph.compl.adj_decidable SimpleGraph.Compl.adjDecidable
+-/
end Decidable
end Order
+#print SimpleGraph.support /-
/-- `G.support` is the set of vertices that form edges in `G`. -/
def support : Set V :=
Rel.dom G.Adj
#align simple_graph.support SimpleGraph.support
+-/
+#print SimpleGraph.mem_support /-
theorem mem_support {v : V} : v ∈ G.support ↔ ∃ w, G.Adj v w :=
Iff.rfl
#align simple_graph.mem_support SimpleGraph.mem_support
+-/
+#print SimpleGraph.support_mono /-
theorem support_mono {G G' : SimpleGraph V} (h : G ≤ G') : G.support ⊆ G'.support :=
Rel.dom_mono h
#align simple_graph.support_mono SimpleGraph.support_mono
+-/
+#print SimpleGraph.neighborSet /-
/-- `G.neighbor_set v` is the set of vertices adjacent to `v` in `G`. -/
def neighborSet (v : V) : Set V :=
setOf (G.Adj v)
#align simple_graph.neighbor_set SimpleGraph.neighborSet
+-/
+#print SimpleGraph.neighborSet.memDecidable /-
instance neighborSet.memDecidable (v : V) [DecidableRel G.Adj] :
DecidablePred (· ∈ G.neighborSet v) :=
by
unfold neighbor_set
infer_instance
#align simple_graph.neighbor_set.mem_decidable SimpleGraph.neighborSet.memDecidable
+-/
section EdgeSet
variable {G₁ G₂ : SimpleGraph V}
+#print SimpleGraph.edgeSetEmbedding /-
/-- The edges of G consist of the unordered pairs of vertices related by
`G.adj`.
The way `edge_set` is defined is such that `mem_edge_set` is proved by `refl`.
(That is, `⟦(v, w)⟧ ∈ G.edge_set` is definitionally equal to `G.adj v w`.)
-/
-def edgeSet : SimpleGraph V ↪o Set (Sym2 V) :=
+def edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V) :=
OrderEmbedding.ofMapLeIff (fun G => Sym2.fromRel G.symm) fun G G' =>
⟨fun h a b => @h ⟦(a, b)⟧, fun h e => Sym2.ind (@h) e⟩
-#align simple_graph.edge_set SimpleGraph.edgeSet
+#align simple_graph.edge_set SimpleGraph.edgeSetEmbedding
+-/
+/- warning: simple_graph.mem_edge_set -> SimpleGraph.mem_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (Membership.Mem.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V v w)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (SimpleGraph.Adj.{u1} V G v w)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (Membership.mem.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V v w)) (SimpleGraph.edgeSet.{u1} V G)) (SimpleGraph.Adj.{u1} V G v w)
+Case conversion may be inaccurate. Consider using '#align simple_graph.mem_edge_set SimpleGraph.mem_edgeSetₓ'. -/
@[simp]
-theorem mem_edgeSet : ⟦(v, w)⟧ ∈ G.edgeSet ↔ G.Adj v w :=
+theorem mem_edgeSet : ⟦(v, w)⟧ ∈ G.edgeSetEmbedding ↔ G.Adj v w :=
Iff.rfl
#align simple_graph.mem_edge_set SimpleGraph.mem_edgeSet
-theorem not_isDiag_of_mem_edgeSet : e ∈ G.edgeSet → ¬e.IsDiag :=
+/- warning: simple_graph.not_is_diag_of_mem_edge_set -> SimpleGraph.not_isDiag_of_mem_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (Not (Sym2.IsDiag.{u1} V e))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (Not (Sym2.IsDiag.{u1} V e))
+Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_diag_of_mem_edge_set SimpleGraph.not_isDiag_of_mem_edgeSetₓ'. -/
+theorem not_isDiag_of_mem_edgeSet : e ∈ G.edgeSetEmbedding → ¬e.IsDiag :=
Sym2.ind (fun v w => Adj.ne) e
#align simple_graph.not_is_diag_of_mem_edge_set SimpleGraph.not_isDiag_of_mem_edgeSet
+/- warning: simple_graph.edge_set_inj -> SimpleGraph.edgeSet_inj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_inj SimpleGraph.edgeSet_injₓ'. -/
@[simp]
-theorem edgeSet_inj : G₁.edgeSet = G₂.edgeSet ↔ G₁ = G₂ :=
- (edgeSet : SimpleGraph V ↪o Set (Sym2 V)).eq_iff_eq
+theorem edgeSet_inj : G₁.edgeSetEmbedding = G₂.edgeSetEmbedding ↔ G₁ = G₂ :=
+ (edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).eq_iff_eq
#align simple_graph.edge_set_inj SimpleGraph.edgeSet_inj
+/- warning: simple_graph.edge_set_subset_edge_set -> SimpleGraph.edgeSet_subset_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂)
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSetₓ'. -/
@[simp]
-theorem edgeSet_subset_edgeSet : G₁.edgeSet ⊆ G₂.edgeSet ↔ G₁ ≤ G₂ :=
- (edgeSet : SimpleGraph V ↪o Set (Sym2 V)).le_iff_le
+theorem edgeSet_subset_edgeSet : G₁.edgeSetEmbedding ⊆ G₂.edgeSetEmbedding ↔ G₁ ≤ G₂ :=
+ (edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).le_iff_le
#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSet
+/- warning: simple_graph.edge_set_ssubset_edge_set -> SimpleGraph.edgeSet_sSubset_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂)
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, Iff (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_sSubset_edgeSetₓ'. -/
@[simp]
-theorem edgeSet_sSubset_edgeSet : G₁.edgeSet ⊂ G₂.edgeSet ↔ G₁ < G₂ :=
- (edgeSet : SimpleGraph V ↪o Set (Sym2 V)).lt_iff_lt
+theorem edgeSet_sSubset_edgeSet : G₁.edgeSetEmbedding ⊂ G₂.edgeSetEmbedding ↔ G₁ < G₂ :=
+ (edgeSetEmbedding : SimpleGraph V ↪o Set (Sym2 V)).lt_iff_lt
#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_sSubset_edgeSet
-theorem edgeSet_injective : Injective (edgeSet : SimpleGraph V → Set (Sym2 V)) :=
- edgeSet.Injective
+/- warning: simple_graph.edge_set_injective -> SimpleGraph.edgeSet_injective is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}}, Function.Injective.{succ u1, succ u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V))
+but is expected to have type
+ forall {V : Type.{u1}}, Function.Injective.{succ u1, succ u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injectiveₓ'. -/
+theorem edgeSet_injective : Injective (edgeSetEmbedding : SimpleGraph V → Set (Sym2 V)) :=
+ edgeSetEmbedding.Injective
#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injective
+/- warning: simple_graph.edge_set_mono -> SimpleGraph.edgeSet_mono is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_mono SimpleGraph.edgeSet_monoₓ'. -/
alias edge_set_subset_edge_set ↔ _ edge_set_mono
#align simple_graph.edge_set_mono SimpleGraph.edgeSet_mono
+/- warning: simple_graph.edge_set_strict_mono -> SimpleGraph.edgeSet_strict_mono is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSsubset.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V}, (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_monoₓ'. -/
alias edge_set_ssubset_edge_set ↔ _ edge_set_strict_mono
#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_mono
@@ -408,38 +560,68 @@ attribute [mono] edge_set_mono edge_set_strict_mono
variable (G₁ G₂)
+/- warning: simple_graph.edge_set_bot -> SimpleGraph.edgeSet_bot is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))
+but is expected to have type
+ forall {V : Type.{u1}}, Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_bot SimpleGraph.edgeSet_botₓ'. -/
@[simp]
-theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSet = ∅ :=
+theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSetEmbedding = ∅ :=
Sym2.fromRel_bot
#align simple_graph.edge_set_bot SimpleGraph.edgeSet_bot
+/- warning: simple_graph.edge_set_sup -> SimpleGraph.edgeSet_sup is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+but is expected to have type
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) G₁ G₂)) (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sup SimpleGraph.edgeSet_supₓ'. -/
@[simp]
-theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSet = G₁.edgeSet ∪ G₂.edgeSet :=
+theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∪ G₂.edgeSetEmbedding :=
by
ext ⟨x, y⟩
rfl
#align simple_graph.edge_set_sup SimpleGraph.edgeSet_sup
+/- warning: simple_graph.edge_set_inf -> SimpleGraph.edgeSet_inf is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+but is expected to have type
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) G₁ G₂)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_inf SimpleGraph.edgeSet_infₓ'. -/
@[simp]
-theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSet = G₁.edgeSet ∩ G₂.edgeSet :=
+theorem edgeSet_inf : (G₁ ⊓ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding ∩ G₂.edgeSetEmbedding :=
by
ext ⟨x, y⟩
rfl
#align simple_graph.edge_set_inf SimpleGraph.edgeSet_inf
+/- warning: simple_graph.edge_set_sdiff -> SimpleGraph.edgeSet_sdiff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))
+but is expected to have type
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G₁) (SimpleGraph.edgeSet.{u1} V G₂))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiffₓ'. -/
@[simp]
-theorem edgeSet_sdiff : (G₁ \ G₂).edgeSet = G₁.edgeSet \ G₂.edgeSet :=
+theorem edgeSet_sdiff : (G₁ \ G₂).edgeSetEmbedding = G₁.edgeSetEmbedding \ G₂.edgeSetEmbedding :=
by
ext ⟨x, y⟩
rfl
#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiff
+/- warning: simple_graph.edge_set_sdiff_sdiff_is_diag -> SimpleGraph.edgeSet_sdiff_sdiff_isDiag is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) s)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) s)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_sdiff_sdiff_is_diag SimpleGraph.edgeSet_sdiff_sdiff_isDiagₓ'. -/
/-- This lemma, combined with `edge_set_sdiff` and `edge_set_from_edge_set`,
allows proving `(G \ from_edge_set s).edge_set = G.edge_set \ s` by `simp`.
-/
@[simp]
theorem edgeSet_sdiff_sdiff_isDiag (G : SimpleGraph V) (s : Set (Sym2 V)) :
- G.edgeSet \ (s \ { e | e.IsDiag }) = G.edgeSet \ s :=
+ G.edgeSetEmbedding \ (s \ { e | e.IsDiag }) = G.edgeSetEmbedding \ s :=
by
ext e
simp only [Set.mem_diff, Set.mem_setOf_eq, not_and, Classical.not_not, and_congr_right_iff]
@@ -447,13 +629,20 @@ theorem edgeSet_sdiff_sdiff_isDiag (G : SimpleGraph V) (s : Set (Sym2 V)) :
simp only [G.not_is_diag_of_mem_edge_set h, imp_false]
#align simple_graph.edge_set_sdiff_sdiff_is_diag SimpleGraph.edgeSet_sdiff_sdiff_isDiag
+/- warning: simple_graph.adj_iff_exists_edge -> SimpleGraph.adj_iff_exists_edge is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (SimpleGraph.Adj.{u1} V G v w) (And (Ne.{succ u1} V v w) (Exists.{succ u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Exists.{0} (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (fun (H : Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) => And (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v e) (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) w e)))))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {w : V}, Iff (SimpleGraph.Adj.{u1} V G v w) (And (Ne.{succ u1} V v w) (Exists.{succ u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => And (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) (And (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v e) (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) w e)))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edgeₓ'. -/
/-- Two vertices are adjacent iff there is an edge between them. The
condition `v ≠ w` ensures they are different endpoints of the edge,
which is necessary since when `v = w` the existential
`∃ (e ∈ G.edge_set), v ∈ e ∧ w ∈ e` is satisfied by every edge
incident to `v`.
-/
-theorem adj_iff_exists_edge {v w : V} : G.Adj v w ↔ v ≠ w ∧ ∃ e ∈ G.edgeSet, v ∈ e ∧ w ∈ e :=
+theorem adj_iff_exists_edge {v w : V} :
+ G.Adj v w ↔ v ≠ w ∧ ∃ e ∈ G.edgeSetEmbedding, v ∈ e ∧ w ∈ e :=
by
refine' ⟨fun _ => ⟨G.ne_of_adj ‹_›, ⟦(v, w)⟧, _⟩, _⟩
· simpa
@@ -463,44 +652,96 @@ theorem adj_iff_exists_edge {v w : V} : G.Adj v w ↔ v ≠ w ∧ ∃ e ∈ G.ed
rwa [mem_edge_set] at he
#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edge
-theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSet, ↑e = ⟦(a, b)⟧ := by
+/- warning: simple_graph.adj_iff_exists_edge_coe -> SimpleGraph.adj_iff_exists_edge_coe is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V G a b) (Exists.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (fun (e : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) => Eq.{succ u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (coeSubtype.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))))) e) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, Iff (SimpleGraph.Adj.{u1} V G a b) (Exists.{succ u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (fun (e : Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) => Eq.{succ u1} (Sym2.{u1} V) (Subtype.val.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) x (SimpleGraph.edgeSet.{u1} V G)) e) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coeₓ'. -/
+theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSetEmbedding, ↑e = ⟦(a, b)⟧ := by
simp only [mem_edge_set, exists_prop, SetCoe.exists, exists_eq_right, Subtype.coe_mk]
#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coe
-theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSet) {v : V} (h : v ∈ e) : h.other ≠ v :=
- by
+/- warning: simple_graph.edge_other_ne -> SimpleGraph.edge_other_ne is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (forall {v : V} (h : Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v e), Ne.{succ u1} V (Sym2.Mem.other.{u1} V v e h) v)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (forall {v : V} (h : Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v e), Ne.{succ u1} V (Sym2.Mem.other.{u1} V v e h) v)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_other_ne SimpleGraph.edge_other_neₓ'. -/
+theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) {v : V} (h : v ∈ e) :
+ h.other ≠ v := by
erw [← Sym2.other_spec h, Sym2.eq_swap] at he
exact G.ne_of_adj he
#align simple_graph.edge_other_ne SimpleGraph.edge_other_ne
-instance decidableMemEdgeSet [DecidableRel G.Adj] : DecidablePred (· ∈ G.edgeSet) :=
+/- warning: simple_graph.decidable_mem_edge_set -> SimpleGraph.decidableMemEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], DecidablePred.{succ u1} (Sym2.{u1} V) (fun (_x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) _x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], DecidablePred.{succ u1} (Sym2.{u1} V) (fun (_x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) _x (SimpleGraph.edgeSet.{u1} V G))
+Case conversion may be inaccurate. Consider using '#align simple_graph.decidable_mem_edge_set SimpleGraph.decidableMemEdgeSetₓ'. -/
+instance decidableMemEdgeSet [DecidableRel G.Adj] : DecidablePred (· ∈ G.edgeSetEmbedding) :=
Sym2.fromRel.decidablePred _
#align simple_graph.decidable_mem_edge_set SimpleGraph.decidableMemEdgeSet
-instance fintypeEdgeSet [DecidableEq V] [Fintype V] [DecidableRel G.Adj] : Fintype G.edgeSet :=
+/- warning: simple_graph.fintype_edge_set -> SimpleGraph.fintypeEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Sym2.{u1} V)] [_inst_2 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))
+Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set SimpleGraph.fintypeEdgeSetₓ'. -/
+instance fintypeEdgeSet [DecidableEq V] [Fintype V] [DecidableRel G.Adj] :
+ Fintype G.edgeSetEmbedding :=
Subtype.fintype _
#align simple_graph.fintype_edge_set SimpleGraph.fintypeEdgeSet
-instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSet :=
+/- warning: simple_graph.fintype_edge_set_bot -> SimpleGraph.fintypeEdgeSetBot is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}}, Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))
+but is expected to have type
+ forall {V : Type.{u1}}, Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBotₓ'. -/
+instance fintypeEdgeSetBot : Fintype (⊥ : SimpleGraph V).edgeSetEmbedding :=
by
rw [edge_set_bot]
infer_instance
#align simple_graph.fintype_edge_set_bot SimpleGraph.fintypeEdgeSetBot
-instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSet] [Fintype G₂.edgeSet] :
- Fintype (G₁ ⊔ G₂).edgeSet := by
+/- warning: simple_graph.fintype_edge_set_sup -> SimpleGraph.fintypeEdgeSetSup is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂)))
+but is expected to have type
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) G₁ G₂)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSupₓ'. -/
+instance fintypeEdgeSetSup [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
+ [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊔ G₂).edgeSetEmbedding :=
+ by
rw [edge_set_sup]
infer_instance
#align simple_graph.fintype_edge_set_sup SimpleGraph.fintypeEdgeSetSup
-instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSet] [Fintype G₂.edgeSet] :
- Fintype (G₁ ⊓ G₂).edgeSet := by
+/- warning: simple_graph.fintype_edge_set_inf -> SimpleGraph.fintypeEdgeSetInf is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂)))
+but is expected to have type
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) G₁ G₂)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInfₓ'. -/
+instance fintypeEdgeSetInf [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
+ [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ ⊓ G₂).edgeSetEmbedding :=
+ by
rw [edge_set_inf]
exact Set.fintypeInter _ _
#align simple_graph.fintype_edge_set_inf SimpleGraph.fintypeEdgeSetInf
-instance fintypeEdgeSetSdiff [DecidableEq V] [Fintype G₁.edgeSet] [Fintype G₂.edgeSet] :
- Fintype (G₁ \ G₂).edgeSet := by
+/- warning: simple_graph.fintype_edge_set_sdiff -> SimpleGraph.fintypeEdgeSetSdiff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂)))
+but is expected to have type
+ forall {V : Type.{u1}} (G₁ : SimpleGraph.{u1} V) (G₂ : SimpleGraph.{u1} V) [_inst_1 : DecidableEq.{succ u1} V] [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiffₓ'. -/
+instance fintypeEdgeSetSdiff [DecidableEq V] [Fintype G₁.edgeSetEmbedding]
+ [Fintype G₂.edgeSetEmbedding] : Fintype (G₁ \ G₂).edgeSetEmbedding :=
+ by
rw [edge_set_sdiff]
exact Set.fintypeDiff _ _
#align simple_graph.fintype_edge_set_sdiff SimpleGraph.fintypeEdgeSetSdiff
@@ -511,34 +752,56 @@ section FromEdgeSet
variable (s : Set (Sym2 V))
+#print SimpleGraph.fromEdgeSet /-
/-- `from_edge_set` constructs a `simple_graph` from a set of edges, without loops.
-/
def fromEdgeSet : SimpleGraph V where
Adj := Sym2.ToRel s ⊓ Ne
symm v w h := ⟨Sym2.toRel_symmetric s h.1, h.2.symm⟩
#align simple_graph.from_edge_set SimpleGraph.fromEdgeSet
+-/
+#print SimpleGraph.fromEdgeSet_adj /-
@[simp]
theorem fromEdgeSet_adj : (fromEdgeSet s).Adj v w ↔ ⟦(v, w)⟧ ∈ s ∧ v ≠ w :=
Iff.rfl
#align simple_graph.from_edge_set_adj SimpleGraph.fromEdgeSet_adj
+-/
+/- warning: simple_graph.edge_set_from_edge_set -> SimpleGraph.edgeSet_fromEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))
+but is expected to have type
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SimpleGraph.fromEdgeSet.{u1} V s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s (setOf.{u1} (Sym2.{u1} V) (fun (e : Sym2.{u1} V) => Sym2.IsDiag.{u1} V e)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSetₓ'. -/
-- Note: we need to make sure `from_edge_set_adj` and this lemma are confluent.
-- In particular, both yield `⟦(u, v)⟧ ∈ (from_edge_set s).edge_set` ==> `⟦(v, w)⟧ ∈ s ∧ v ≠ w`.
@[simp]
-theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSet = s \ { e | e.IsDiag } :=
+theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSetEmbedding = s \ { e | e.IsDiag } :=
by
ext e
exact Sym2.ind (by simp) e
#align simple_graph.edge_set_from_edge_set SimpleGraph.edgeSet_fromEdgeSet
+/- warning: simple_graph.from_edge_set_edge_set -> SimpleGraph.fromEdgeSet_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) G
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (SimpleGraph.edgeSet.{u1} V G)) G
+Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSetₓ'. -/
@[simp]
-theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSet = G :=
+theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSetEmbedding = G :=
by
ext (v w)
exact ⟨fun h => h.1, fun h => ⟨h, G.ne_of_adj h⟩⟩
#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSet
+/- warning: simple_graph.from_edge_set_empty -> SimpleGraph.fromEdgeSet_empty is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+but is expected to have type
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V)))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_emptyₓ'. -/
@[simp]
theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ :=
by
@@ -546,6 +809,12 @@ theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ :=
simp only [from_edge_set_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_empty
+/- warning: simple_graph.from_edge_set_univ -> SimpleGraph.fromEdgeSet_univ is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+but is expected to have type
+ forall {V : Type.{u1}}, Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V (Set.univ.{u1} (Sym2.{u1} V))) (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univₓ'. -/
@[simp]
theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ :=
by
@@ -553,6 +822,12 @@ theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ :=
simp only [from_edge_set_adj, Set.mem_univ, true_and_iff, top_adj]
#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univ
+/- warning: simple_graph.from_edge_set_inf -> SimpleGraph.fromEdgeSet_inf is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) s t))
+but is expected to have type
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s t))
+Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_infₓ'. -/
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) :=
@@ -562,6 +837,12 @@ theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
+/- warning: simple_graph.from_edge_set_sup -> SimpleGraph.fromEdgeSet_sup is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) s t))
+but is expected to have type
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) s t))
+Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_supₓ'. -/
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) :=
@@ -570,6 +851,12 @@ theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
simp [Set.mem_union, or_and_right]
#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_sup
+/- warning: simple_graph.from_edge_set_sdiff -> SimpleGraph.fromEdgeSet_sdiff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) s t))
+but is expected to have type
+ forall {V : Type.{u1}} (s : Set.{u1} (Sym2.{u1} V)) (t : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) (SimpleGraph.fromEdgeSet.{u1} V s) (SimpleGraph.fromEdgeSet.{u1} V t)) (SimpleGraph.fromEdgeSet.{u1} V (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) s t))
+Case conversion may be inaccurate. Consider using '#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiffₓ'. -/
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) :=
@@ -578,6 +865,7 @@ theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
constructor <;> simp (config := { contextual := true })
#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiff
+#print SimpleGraph.fromEdgeSet_mono /-
@[mono]
theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤ fromEdgeSet t :=
by
@@ -586,8 +874,9 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
and_true_iff, and_imp]
exact fun vws _ => h vws
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
+-/
-instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSet :=
+instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSetEmbedding :=
by
rw [edge_set_from_edge_set s]
infer_instance
@@ -597,6 +886,7 @@ end FromEdgeSet
/-! ## Darts -/
+#print SimpleGraph.Dart /-
/-- A `dart` is an oriented edge, implemented as an ordered pair of adjacent vertices.
This terminology comes from combinatorial maps, and they are also known as "half-edges"
or "bonds." -/
@@ -605,6 +895,7 @@ structure Dart extends V × V where
is_adj : G.Adj fst snd
deriving DecidableEq
#align simple_graph.dart SimpleGraph.Dart
+-/
section Darts
@@ -620,10 +911,13 @@ abbrev Dart.snd (d : G.Dart) : V :=
d.snd
#align simple_graph.dart.snd SimpleGraph.Dart.snd
+#print SimpleGraph.Dart.toProd_injective /-
theorem Dart.toProd_injective : Function.Injective (Dart.toProd : G.Dart → V × V) :=
Dart.ext
#align simple_graph.dart.to_prod_injective SimpleGraph.Dart.toProd_injective
+-/
+#print SimpleGraph.Dart.fintype /-
instance Dart.fintype [Fintype V] [DecidableRel G.Adj] : Fintype G.Dart :=
Fintype.ofEquiv (Σv, G.neighborSet v)
{ toFun := fun s => ⟨(s.fst, s.snd), s.snd.property⟩
@@ -631,70 +925,100 @@ instance Dart.fintype [Fintype V] [DecidableRel G.Adj] : Fintype G.Dart :=
left_inv := fun s => by ext <;> simp
right_inv := fun d => by ext <;> simp }
#align simple_graph.dart.fintype SimpleGraph.Dart.fintype
+-/
+#print SimpleGraph.Dart.edge /-
/-- The edge associated to the dart. -/
def Dart.edge (d : G.Dart) : Sym2 V :=
⟦d.toProd⟧
#align simple_graph.dart.edge SimpleGraph.Dart.edge
+-/
+#print SimpleGraph.Dart.edge_mk /-
@[simp]
theorem Dart.edge_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).edge = ⟦p⟧ :=
rfl
#align simple_graph.dart.edge_mk SimpleGraph.Dart.edge_mk
+-/
+/- warning: simple_graph.dart.edge_mem -> SimpleGraph.Dart.edge_mem is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} (d : SimpleGraph.Dart.{u1} V G), Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) (SimpleGraph.Dart.edge.{u1} V G d) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)
+but is expected to have type
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} (d : SimpleGraph.Dart.{u1} V G), Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) (SimpleGraph.Dart.edge.{u1} V G d) (SimpleGraph.edgeSet.{u1} V G)
+Case conversion may be inaccurate. Consider using '#align simple_graph.dart.edge_mem SimpleGraph.Dart.edge_memₓ'. -/
@[simp]
-theorem Dart.edge_mem (d : G.Dart) : d.edge ∈ G.edgeSet :=
+theorem Dart.edge_mem (d : G.Dart) : d.edge ∈ G.edgeSetEmbedding :=
d.is_adj
#align simple_graph.dart.edge_mem SimpleGraph.Dart.edge_mem
+#print SimpleGraph.Dart.symm /-
/-- The dart with reversed orientation from a given dart. -/
@[simps]
def Dart.symm (d : G.Dart) : G.Dart :=
⟨d.toProd.symm, G.symm d.is_adj⟩
#align simple_graph.dart.symm SimpleGraph.Dart.symm
+-/
+#print SimpleGraph.Dart.symm_mk /-
@[simp]
theorem Dart.symm_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).symm = Dart.mk p.symm h.symm :=
rfl
#align simple_graph.dart.symm_mk SimpleGraph.Dart.symm_mk
+-/
+#print SimpleGraph.Dart.edge_symm /-
@[simp]
theorem Dart.edge_symm (d : G.Dart) : d.symm.edge = d.edge :=
Sym2.mk''_prod_swap_eq
#align simple_graph.dart.edge_symm SimpleGraph.Dart.edge_symm
+-/
+#print SimpleGraph.Dart.edge_comp_symm /-
@[simp]
theorem Dart.edge_comp_symm : Dart.edge ∘ Dart.symm = (Dart.edge : G.Dart → Sym2 V) :=
funext Dart.edge_symm
#align simple_graph.dart.edge_comp_symm SimpleGraph.Dart.edge_comp_symm
+-/
+#print SimpleGraph.Dart.symm_symm /-
@[simp]
theorem Dart.symm_symm (d : G.Dart) : d.symm.symm = d :=
Dart.ext _ _ <| Prod.swap_swap _
#align simple_graph.dart.symm_symm SimpleGraph.Dart.symm_symm
+-/
+#print SimpleGraph.Dart.symm_involutive /-
@[simp]
theorem Dart.symm_involutive : Function.Involutive (Dart.symm : G.Dart → G.Dart) :=
Dart.symm_symm
#align simple_graph.dart.symm_involutive SimpleGraph.Dart.symm_involutive
+-/
+#print SimpleGraph.Dart.symm_ne /-
theorem Dart.symm_ne (d : G.Dart) : d.symm ≠ d :=
ne_of_apply_ne (Prod.snd ∘ Dart.toProd) d.is_adj.Ne
#align simple_graph.dart.symm_ne SimpleGraph.Dart.symm_ne
+-/
+#print SimpleGraph.dart_edge_eq_iff /-
theorem dart_edge_eq_iff : ∀ d₁ d₂ : G.Dart, d₁.edge = d₂.edge ↔ d₁ = d₂ ∨ d₁ = d₂.symm :=
by
rintro ⟨p, hp⟩ ⟨q, hq⟩
simp [Sym2.mk''_eq_mk''_iff]
#align simple_graph.dart_edge_eq_iff SimpleGraph.dart_edge_eq_iff
+-/
+#print SimpleGraph.dart_edge_eq_mk'_iff /-
theorem dart_edge_eq_mk'_iff :
∀ {d : G.Dart} {p : V × V}, d.edge = ⟦p⟧ ↔ d.toProd = p ∨ d.toProd = p.symm :=
by
rintro ⟨p, h⟩
apply Sym2.mk''_eq_mk''_iff
#align simple_graph.dart_edge_eq_mk_iff SimpleGraph.dart_edge_eq_mk'_iff
+-/
+#print SimpleGraph.dart_edge_eq_mk'_iff' /-
theorem dart_edge_eq_mk'_iff' :
∀ {d : G.Dart} {u v : V}, d.edge = ⟦(u, v)⟧ ↔ d.fst = u ∧ d.snd = v ∨ d.fst = v ∧ d.snd = u :=
by
@@ -702,30 +1026,43 @@ theorem dart_edge_eq_mk'_iff' :
rw [dart_edge_eq_mk_iff]
simp
#align simple_graph.dart_edge_eq_mk_iff' SimpleGraph.dart_edge_eq_mk'_iff'
+-/
variable (G)
+#print SimpleGraph.DartAdj /-
/-- Two darts are said to be adjacent if they could be consecutive
darts in a walk -- that is, the first dart's second vertex is equal to
the second dart's first vertex. -/
def DartAdj (d d' : G.Dart) : Prop :=
d.snd = d'.fst
#align simple_graph.dart_adj SimpleGraph.DartAdj
+-/
+#print SimpleGraph.dartOfNeighborSet /-
/-- For a given vertex `v`, this is the bijective map from the neighbor set at `v`
to the darts `d` with `d.fst = v`. -/
@[simps]
def dartOfNeighborSet (v : V) (w : G.neighborSet v) : G.Dart :=
⟨(v, w), w.property⟩
#align simple_graph.dart_of_neighbor_set SimpleGraph.dartOfNeighborSet
+-/
+#print SimpleGraph.dartOfNeighborSet_injective /-
theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighborSet v) :=
fun e₁ e₂ h =>
Subtype.ext <| by
injection h with h'
convert congr_arg Prod.snd h'
#align simple_graph.dart_of_neighbor_set_injective SimpleGraph.dartOfNeighborSet_injective
+-/
+/- warning: simple_graph.nonempty_dart_top -> SimpleGraph.nonempty_dart_top is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))
+but is expected to have type
+ forall {V : Type.{u1}} [_inst_1 : Nontrivial.{u1} V], Nonempty.{succ u1} (SimpleGraph.Dart.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_topₓ'. -/
instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart :=
by
obtain ⟨v, w, h⟩ := exists_pair_ne V
@@ -737,35 +1074,68 @@ end Darts
/-! ### Incidence set -/
+#print SimpleGraph.incidenceSet /-
/-- Set of edges incident to a given vertex, aka incidence set. -/
def incidenceSet (v : V) : Set (Sym2 V) :=
- { e ∈ G.edgeSet | v ∈ e }
+ { e ∈ G.edgeSetEmbedding | v ∈ e }
#align simple_graph.incidence_set SimpleGraph.incidenceSet
+-/
-theorem incidenceSet_subset (v : V) : G.incidenceSet v ⊆ G.edgeSet := fun _ h => h.1
+/- warning: simple_graph.incidence_set_subset -> SimpleGraph.incidenceSet_subset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (SimpleGraph.edgeSet.{u1} V G)
+Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_subset SimpleGraph.incidenceSet_subsetₓ'. -/
+theorem incidenceSet_subset (v : V) : G.incidenceSet v ⊆ G.edgeSetEmbedding := fun _ h => h.1
#align simple_graph.incidence_set_subset SimpleGraph.incidenceSet_subset
+#print SimpleGraph.mk'_mem_incidenceSet_iff /-
theorem mk'_mem_incidenceSet_iff : ⟦(b, c)⟧ ∈ G.incidenceSet a ↔ G.Adj b c ∧ (a = b ∨ a = c) :=
and_congr_right' Sym2.mem_iff
#align simple_graph.mk_mem_incidence_set_iff SimpleGraph.mk'_mem_incidenceSet_iff
+-/
+#print SimpleGraph.mk'_mem_incidenceSet_left_iff /-
theorem mk'_mem_incidenceSet_left_iff : ⟦(a, b)⟧ ∈ G.incidenceSet a ↔ G.Adj a b :=
and_iff_left <| Sym2.mem_mk''_left _ _
#align simple_graph.mk_mem_incidence_set_left_iff SimpleGraph.mk'_mem_incidenceSet_left_iff
+-/
+#print SimpleGraph.mk'_mem_incidenceSet_right_iff /-
theorem mk'_mem_incidenceSet_right_iff : ⟦(a, b)⟧ ∈ G.incidenceSet b ↔ G.Adj a b :=
and_iff_left <| Sym2.mem_mk''_right _ _
#align simple_graph.mk_mem_incidence_set_right_iff SimpleGraph.mk'_mem_incidenceSet_right_iff
+-/
-theorem edge_mem_incidenceSet_iff {e : G.edgeSet} : ↑e ∈ G.incidenceSet a ↔ a ∈ (e : Sym2 V) :=
+/- warning: simple_graph.edge_mem_incidence_set_iff -> SimpleGraph.edge_mem_incidenceSet_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {e : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)}, Iff (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeSubtype.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))))) e) (SimpleGraph.incidenceSet.{u1} V G a)) (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) a ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Sym2.{u1} V) (coeSubtype.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) x (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))))) e))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {e : Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)}, Iff (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) (Subtype.val.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) x (SimpleGraph.edgeSet.{u1} V G)) e) (SimpleGraph.incidenceSet.{u1} V G a)) (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) a (Subtype.val.{succ u1} (Sym2.{u1} V) (fun (x : Sym2.{u1} V) => Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) x (SimpleGraph.edgeSet.{u1} V G)) e))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iffₓ'. -/
+theorem edge_mem_incidenceSet_iff {e : G.edgeSetEmbedding} :
+ ↑e ∈ G.incidenceSet a ↔ a ∈ (e : Sym2 V) :=
and_iff_right e.2
#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iff
+/- warning: simple_graph.incidence_set_inter_incidence_set_subset -> SimpleGraph.incidenceSet_inter_incidenceSet_subset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Ne.{succ u1} V a b) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasSubset.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasSingleton.{u1} (Sym2.{u1} V)) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Ne.{succ u1} V a b) -> (HasSubset.Subset.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instHasSubsetSet.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.instSingletonSet.{u1} (Sym2.{u1} V)) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_inter_incidence_set_subset SimpleGraph.incidenceSet_inter_incidenceSet_subsetₓ'. -/
theorem incidenceSet_inter_incidenceSet_subset (h : a ≠ b) :
G.incidenceSet a ∩ G.incidenceSet b ⊆ {⟦(a, b)⟧} := fun e he =>
(Sym2.mem_and_mem_iff h).1 ⟨he.1.2, he.2.2⟩
#align simple_graph.incidence_set_inter_incidence_set_subset SimpleGraph.incidenceSet_inter_incidenceSet_subset
+/- warning: simple_graph.incidence_set_inter_incidence_set_of_adj -> SimpleGraph.incidenceSet_inter_incidenceSet_of_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (SimpleGraph.Adj.{u1} V G a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasSingleton.{u1} (Sym2.{u1} V)) (Quotient.mk'.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (SimpleGraph.Adj.{u1} V G a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (Singleton.singleton.{u1, u1} (Quotient.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Set.instSingletonSet.{u1} (Sym2.{u1} V)) (Quotient.mk.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (Prod.mk.{u1, u1} V V a b))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_inter_incidence_set_of_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_adjₓ'. -/
theorem incidenceSet_inter_incidenceSet_of_adj (h : G.Adj a b) :
G.incidenceSet a ∩ G.incidenceSet b = {⟦(a, b)⟧} :=
by
@@ -774,12 +1144,20 @@ theorem incidenceSet_inter_incidenceSet_of_adj (h : G.Adj a b) :
exact ⟨G.mk_mem_incidence_set_left_iff.2 h, G.mk_mem_incidence_set_right_iff.2 h⟩
#align simple_graph.incidence_set_inter_incidence_set_of_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_adj
+#print SimpleGraph.adj_of_mem_incidenceSet /-
theorem adj_of_mem_incidenceSet (h : a ≠ b) (ha : e ∈ G.incidenceSet a)
(hb : e ∈ G.incidenceSet b) : G.Adj a b := by
rwa [← mk_mem_incidence_set_left_iff, ←
Set.mem_singleton_iff.1 <| G.incidence_set_inter_incidence_set_subset h ⟨ha, hb⟩]
#align simple_graph.adj_of_mem_incidence_set SimpleGraph.adj_of_mem_incidenceSet
+-/
+/- warning: simple_graph.incidence_set_inter_incidence_set_of_not_adj -> SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Not (SimpleGraph.Adj.{u1} V G a b)) -> (Ne.{succ u1} V a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasEmptyc.{u1} (Sym2.{u1} V))))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {a : V} {b : V}, (Not (SimpleGraph.Adj.{u1} V G a b)) -> (Ne.{succ u1} V a b) -> (Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G a) (SimpleGraph.incidenceSet.{u1} V G b)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instEmptyCollectionSet.{u1} (Sym2.{u1} V))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_set_inter_incidence_set_of_not_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adjₓ'. -/
theorem incidenceSet_inter_incidenceSet_of_not_adj (h : ¬G.Adj a b) (hn : a ≠ b) :
G.incidenceSet a ∩ G.incidenceSet b = ∅ :=
by
@@ -788,104 +1166,209 @@ theorem incidenceSet_inter_incidenceSet_of_not_adj (h : ¬G.Adj a b) (hn : a ≠
exact h (G.adj_of_mem_incidence_set hn ha hb)
#align simple_graph.incidence_set_inter_incidence_set_of_not_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_not_adj
+#print SimpleGraph.decidableMemIncidenceSet /-
instance decidableMemIncidenceSet [DecidableEq V] [DecidableRel G.Adj] (v : V) :
DecidablePred (· ∈ G.incidenceSet v) := fun e => And.decidable
#align simple_graph.decidable_mem_incidence_set SimpleGraph.decidableMemIncidenceSet
+-/
section EdgeFinset
-variable {G₁ G₂ : SimpleGraph V} [Fintype G.edgeSet] [Fintype G₁.edgeSet] [Fintype G₂.edgeSet]
+variable {G₁ G₂ : SimpleGraph V} [Fintype G.edgeSetEmbedding] [Fintype G₁.edgeSetEmbedding]
+ [Fintype G₂.edgeSetEmbedding]
+/- warning: simple_graph.edge_finset -> SimpleGraph.edgeFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Finset.{u1} (Sym2.{u1} V)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Finset.{u1} (Sym2.{u1} V)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset SimpleGraph.edgeFinsetₓ'. -/
/-- The `edge_set` of the graph as a `finset`.
-/
@[reducible]
def edgeFinset : Finset (Sym2 V) :=
- Set.toFinset G.edgeSet
+ Set.toFinset G.edgeSetEmbedding
#align simple_graph.edge_finset SimpleGraph.edgeFinset
+/- warning: simple_graph.coe_edge_finset -> SimpleGraph.coe_edgeFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Finset.toSet.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (SimpleGraph.edgeSet.{u1} V G)
+Case conversion may be inaccurate. Consider using '#align simple_graph.coe_edge_finset SimpleGraph.coe_edgeFinsetₓ'. -/
@[simp, norm_cast]
-theorem coe_edgeFinset : (G.edgeFinset : Set (Sym2 V)) = G.edgeSet :=
+theorem coe_edgeFinset : (G.edgeFinset : Set (Sym2 V)) = G.edgeSetEmbedding :=
Set.coe_toFinset _
#align simple_graph.coe_edge_finset SimpleGraph.coe_edgeFinset
variable {G}
+/- warning: simple_graph.mem_edge_finset -> SimpleGraph.mem_edgeFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Iff (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.hasMem.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+but is expected to have type
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Iff (Membership.mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.instMembershipFinset.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
+Case conversion may be inaccurate. Consider using '#align simple_graph.mem_edge_finset SimpleGraph.mem_edgeFinsetₓ'. -/
@[simp]
-theorem mem_edgeFinset : e ∈ G.edgeFinset ↔ e ∈ G.edgeSet :=
+theorem mem_edgeFinset : e ∈ G.edgeFinset ↔ e ∈ G.edgeSetEmbedding :=
Set.mem_toFinset
#align simple_graph.mem_edge_finset SimpleGraph.mem_edgeFinset
+/- warning: simple_graph.not_is_diag_of_mem_edge_finset -> SimpleGraph.not_isDiag_of_mem_edgeFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.hasMem.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) -> (Not (Sym2.IsDiag.{u1} V e))
+but is expected to have type
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} {e : Sym2.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], (Membership.mem.{u1, u1} (Sym2.{u1} V) (Finset.{u1} (Sym2.{u1} V)) (Finset.instMembershipFinset.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeFinset.{u1} V G _inst_1)) -> (Not (Sym2.IsDiag.{u1} V e))
+Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_diag_of_mem_edge_finset SimpleGraph.not_isDiag_of_mem_edgeFinsetₓ'. -/
theorem not_isDiag_of_mem_edgeFinset : e ∈ G.edgeFinset → ¬e.IsDiag :=
not_isDiag_of_mem_edgeSet _ ∘ mem_edgeFinset.1
#align simple_graph.not_is_diag_of_mem_edge_finset SimpleGraph.not_isDiag_of_mem_edgeFinset
+/- warning: simple_graph.edge_finset_inj -> SimpleGraph.edgeFinset_inj is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (Eq.{succ u1} (SimpleGraph.{u1} V) G₁ G₂)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_inj SimpleGraph.edgeFinset_injₓ'. -/
@[simp]
theorem edgeFinset_inj : G₁.edgeFinset = G₂.edgeFinset ↔ G₁ = G₂ := by simp [edge_finset]
#align simple_graph.edge_finset_inj SimpleGraph.edgeFinset_inj
+/- warning: simple_graph.edge_finset_subset_edge_finset -> SimpleGraph.edgeFinset_subset_edgeFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂)
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinsetₓ'. -/
@[simp]
theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G₁ ≤ G₂ := by
simp [edge_finset]
#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinset
+/- warning: simple_graph.edge_finset_ssubset_edge_finset -> SimpleGraph.edgeFinset_sSubset_edgeFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂)
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], Iff (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3)) (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_sSubset_edgeFinsetₓ'. -/
@[simp]
theorem edgeFinset_sSubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by
simp [edge_finset]
#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_sSubset_edgeFinset
+/- warning: simple_graph.edge_finset_mono -> SimpleGraph.edgeFinset_mono is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) G₁ G₂) -> (HasSubset.Subset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_monoₓ'. -/
alias edge_finset_subset_edge_finset ↔ _ edge_finset_mono
#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
+/- warning: simple_graph.edge_finset_strict_mono -> SimpleGraph.edgeFinset_strict_mono is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSsubset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))], (LT.lt.{u1} (SimpleGraph.{u1} V) (Preorder.toLT.{u1} (SimpleGraph.{u1} V) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))))))))) G₁ G₂) -> (HasSSubset.SSubset.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instHasSSubsetFinset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_monoₓ'. -/
alias edge_finset_ssubset_edge_finset ↔ _ edge_finset_strict_mono
#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
attribute [mono] edge_finset_mono edge_finset_strict_mono
+/- warning: simple_graph.edge_finset_bot -> SimpleGraph.edgeFinset_bot is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasEmptyc.{u1} (Sym2.{u1} V)))
+but is expected to have type
+ forall {V : Type.{u1}}, Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (SimpleGraph.fintypeEdgeSetBot.{u1} V)) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instEmptyCollectionFinset.{u1} (Sym2.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_botₓ'. -/
@[simp]
theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edge_finset]
#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_bot
+/- warning: simple_graph.edge_finset_sup -> SimpleGraph.edgeFinset_sup is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSup.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasUnion.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasSup.sup.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasSupSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSup.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Union.union.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instUnionFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_supₓ'. -/
@[simp]
theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeFinset ∪ G₂.edgeFinset := by
simp [edge_finset]
#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_sup
+/- warning: simple_graph.edge_finset_inf -> SimpleGraph.edgeFinset_inf is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasInf.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasInter.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (HasInf.inf.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasInfSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetInf.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (Inter.inter.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instInterFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_infₓ'. -/
@[simp]
theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset := by
simp [edge_finset]
#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_inf
+/- warning: simple_graph.edge_finset_sdiff -> SimpleGraph.edgeFinset_sdiff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₁))] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+but is expected to have type
+ forall {V : Type.{u1}} {G₁ : SimpleGraph.{u1} V} {G₂ : SimpleGraph.{u1} V} [_inst_2 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₁))] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G₂))] [_inst_4 : DecidableEq.{succ u1} V], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G₁ G₂) (SimpleGraph.fintypeEdgeSetSdiff.{u1} V G₁ G₂ (fun (a : V) (b : V) => _inst_4 a b) _inst_2 _inst_3)) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_4 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G₁ _inst_2) (SimpleGraph.edgeFinset.{u1} V G₂ _inst_3))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiffₓ'. -/
@[simp]
theorem edgeFinset_sdiff [DecidableEq V] : (G₁ \ G₂).edgeFinset = G₁.edgeFinset \ G₂.edgeFinset :=
by simp [edge_finset]
#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiff
-theorem edgeFinset_card : G.edgeFinset.card = Fintype.card G.edgeSet :=
+/- warning: simple_graph.edge_finset_card -> SimpleGraph.edgeFinset_card is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{1} Nat (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) _inst_1)
+but is expected to have type
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{1} Nat (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1)) (Fintype.card.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) _inst_1)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_card SimpleGraph.edgeFinset_cardₓ'. -/
+theorem edgeFinset_card : G.edgeFinset.card = Fintype.card G.edgeSetEmbedding :=
Set.toFinset_card _
#align simple_graph.edge_finset_card SimpleGraph.edgeFinset_card
+/- warning: simple_graph.edge_set_univ_card -> SimpleGraph.edgeSet_univ_card is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{1} Nat (Finset.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (Finset.univ.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) _inst_1)) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1))
+but is expected to have type
+ forall {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{1} Nat (Finset.card.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Finset.univ.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) _inst_1)) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G _inst_1))
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_univ_card SimpleGraph.edgeSet_univ_cardₓ'. -/
@[simp]
-theorem edgeSet_univ_card : (univ : Finset G.edgeSet).card = G.edgeFinset.card :=
+theorem edgeSet_univ_card : (univ : Finset G.edgeSetEmbedding).card = G.edgeFinset.card :=
Fintype.card_of_subtype G.edgeFinset fun _ => mem_edgeFinset
#align simple_graph.edge_set_univ_card SimpleGraph.edgeSet_univ_card
end EdgeFinset
+#print SimpleGraph.mem_neighborSet /-
@[simp]
theorem mem_neighborSet (v w : V) : w ∈ G.neighborSet v ↔ G.Adj v w :=
Iff.rfl
#align simple_graph.mem_neighbor_set SimpleGraph.mem_neighborSet
+-/
+#print SimpleGraph.mem_incidenceSet /-
@[simp]
theorem mem_incidenceSet (v w : V) : ⟦(v, w)⟧ ∈ G.incidenceSet v ↔ G.Adj v w := by
simp [incidence_set]
#align simple_graph.mem_incidence_set SimpleGraph.mem_incidenceSet
+-/
+#print SimpleGraph.mem_incidence_iff_neighbor /-
theorem mem_incidence_iff_neighbor {v w : V} : ⟦(v, w)⟧ ∈ G.incidenceSet v ↔ w ∈ G.neighborSet v :=
by simp only [mem_incidence_set, mem_neighbor_set]
#align simple_graph.mem_incidence_iff_neighbor SimpleGraph.mem_incidence_iff_neighbor
+-/
-theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSet) (h : v ∈ e) :
+/- warning: simple_graph.adj_incidence_set_inter -> SimpleGraph.adj_incidenceSet_inter is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (forall (h : Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v e), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (SimpleGraph.incidenceSet.{u1} V G (Sym2.Mem.other.{u1} V v e h))) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasSingleton.{u1} (Sym2.{u1} V)) e))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {v : V} {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (forall (h : Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v e), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceSet.{u1} V G v) (SimpleGraph.incidenceSet.{u1} V G (Sym2.Mem.other.{u1} V v e h))) (Singleton.singleton.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instSingletonSet.{u1} (Sym2.{u1} V)) e))
+Case conversion may be inaccurate. Consider using '#align simple_graph.adj_incidence_set_inter SimpleGraph.adj_incidenceSet_interₓ'. -/
+theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSetEmbedding) (h : v ∈ e) :
G.incidenceSet v ∩ G.incidenceSet h.other = {e} :=
by
ext e'
@@ -897,6 +1380,12 @@ theorem adj_incidenceSet_inter {v : V} {e : Sym2 V} (he : e ∈ G.edgeSet) (h :
exact ⟨⟨he, h⟩, he, Sym2.other_mem _⟩
#align simple_graph.adj_incidence_set_inter SimpleGraph.adj_incidenceSet_inter
+/- warning: simple_graph.compl_neighbor_set_disjoint -> SimpleGraph.compl_neighborSet_disjoint is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.completeBooleanAlgebra.{u1} V)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Disjoint.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} V) (Preorder.toLE.{u1} (Set.{u1} V) (PartialOrder.toPreorder.{u1} (Set.{u1} V) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} V) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} V) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} V) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} V) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} V) (Set.instCompleteBooleanAlgebraSet.{u1} V)))))) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)
+Case conversion may be inaccurate. Consider using '#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjointₓ'. -/
theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
Disjoint (G.neighborSet v) (Gᶜ.neighborSet v) :=
by
@@ -906,6 +1395,12 @@ theorem compl_neighborSet_disjoint (G : SimpleGraph V) (v : V) :
exact h'.2 h
#align simple_graph.compl_neighbor_set_disjoint SimpleGraph.compl_neighborSet_disjoint
+/- warning: simple_graph.neighbor_set_union_compl_neighbor_set_eq -> SimpleGraph.neighborSet_union_compl_neighborSet_eq is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) v))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
+Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_union_compl_neighbor_set_eq SimpleGraph.neighborSet_union_compl_neighborSet_eqₓ'. -/
theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
G.neighborSet v ∪ Gᶜ.neighborSet v = {v}ᶜ :=
by
@@ -915,6 +1410,12 @@ theorem neighborSet_union_compl_neighborSet_eq (G : SimpleGraph V) (v : V) :
tauto
#align simple_graph.neighbor_set_union_compl_neighbor_set_eq SimpleGraph.neighborSet_union_compl_neighborSet_eq
+/- warning: simple_graph.card_neighbor_set_union_compl_neighbor_set -> SimpleGraph.card_neighborSet_union_compl_neighborSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.hasUnion.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+but is expected to have type
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (G : SimpleGraph.{u1} V) (v : V) [h : Fintype.{u1} (Set.Elem.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)))], Eq.{1} Nat (Finset.card.{u1} V (Set.toFinset.{u1} V (Union.union.{u1} (Set.{u1} V) (Set.instUnionSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v)) h)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSetₓ'. -/
-- TODO find out why TC inference has `h` failing a defeq check for `to_finset`
theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V) (v : V)
[h : Fintype (G.neighborSet v ∪ Gᶜ.neighborSet v : Set V)] :
@@ -923,53 +1424,87 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
Finset.card_compl, Set.toFinset_card, Set.card_singleton]
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
+/- warning: simple_graph.neighbor_set_compl -> SimpleGraph.neighborSet_compl is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) v))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.neighborSet.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (HasCompl.compl.{u1} (Set.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} V) (Set.instBooleanAlgebraSet.{u1} V)) (SimpleGraph.neighborSet.{u1} V G v)) (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) v))
+Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_complₓ'. -/
theorem neighborSet_compl (G : SimpleGraph V) (v : V) : Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} :=
by
ext w
simp [and_comm', eq_comm]
#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_compl
+#print SimpleGraph.commonNeighbors /-
/-- The set of common neighbors between two vertices `v` and `w` in a graph `G` is the
intersection of the neighbor sets of `v` and `w`.
-/
def commonNeighbors (v w : V) : Set V :=
G.neighborSet v ∩ G.neighborSet w
#align simple_graph.common_neighbors SimpleGraph.commonNeighbors
+-/
+/- warning: simple_graph.common_neighbors_eq -> SimpleGraph.commonNeighbors_eq is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) (w : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V G v w) (Inter.inter.{u1} (Set.{u1} V) (Set.hasInter.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V G w))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) (w : V), Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V G v w) (Inter.inter.{u1} (Set.{u1} V) (Set.instInterSet.{u1} V) (SimpleGraph.neighborSet.{u1} V G v) (SimpleGraph.neighborSet.{u1} V G w))
+Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_eq SimpleGraph.commonNeighbors_eqₓ'. -/
theorem commonNeighbors_eq (v w : V) : G.commonNeighbors v w = G.neighborSet v ∩ G.neighborSet w :=
rfl
#align simple_graph.common_neighbors_eq SimpleGraph.commonNeighbors_eq
+#print SimpleGraph.mem_commonNeighbors /-
theorem mem_commonNeighbors {u v w : V} : u ∈ G.commonNeighbors v w ↔ G.Adj v u ∧ G.Adj w u :=
Iff.rfl
#align simple_graph.mem_common_neighbors SimpleGraph.mem_commonNeighbors
+-/
+#print SimpleGraph.commonNeighbors_symm /-
theorem commonNeighbors_symm (v w : V) : G.commonNeighbors v w = G.commonNeighbors w v :=
Set.inter_comm _ _
#align simple_graph.common_neighbors_symm SimpleGraph.commonNeighbors_symm
+-/
+#print SimpleGraph.not_mem_commonNeighbors_left /-
theorem not_mem_commonNeighbors_left (v w : V) : v ∉ G.commonNeighbors v w := fun h =>
ne_of_adj G h.1 rfl
#align simple_graph.not_mem_common_neighbors_left SimpleGraph.not_mem_commonNeighbors_left
+-/
+#print SimpleGraph.not_mem_commonNeighbors_right /-
theorem not_mem_commonNeighbors_right (v w : V) : w ∉ G.commonNeighbors v w := fun h =>
ne_of_adj G h.2 rfl
#align simple_graph.not_mem_common_neighbors_right SimpleGraph.not_mem_commonNeighbors_right
+-/
+#print SimpleGraph.commonNeighbors_subset_neighborSet_left /-
theorem commonNeighbors_subset_neighborSet_left (v w : V) :
G.commonNeighbors v w ⊆ G.neighborSet v :=
Set.inter_subset_left _ _
#align simple_graph.common_neighbors_subset_neighbor_set_left SimpleGraph.commonNeighbors_subset_neighborSet_left
+-/
+#print SimpleGraph.commonNeighbors_subset_neighborSet_right /-
theorem commonNeighbors_subset_neighborSet_right (v w : V) :
G.commonNeighbors v w ⊆ G.neighborSet w :=
Set.inter_subset_right _ _
#align simple_graph.common_neighbors_subset_neighbor_set_right SimpleGraph.commonNeighbors_subset_neighborSet_right
+-/
+#print SimpleGraph.decidableMemCommonNeighbors /-
instance decidableMemCommonNeighbors [DecidableRel G.Adj] (v w : V) :
DecidablePred (· ∈ G.commonNeighbors v w) := fun a => And.decidable
#align simple_graph.decidable_mem_common_neighbors SimpleGraph.decidableMemCommonNeighbors
+-/
+/- warning: simple_graph.common_neighbors_top_eq -> SimpleGraph.commonNeighbors_top_eq is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} V) (Set.booleanAlgebra.{u1} V)) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.hasInsert.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.hasSingleton.{u1} V) w)))
+but is expected to have type
+ forall {V : Type.{u1}} {v : V} {w : V}, Eq.{succ u1} (Set.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w) (SDiff.sdiff.{u1} (Set.{u1} V) (Set.instSDiffSet.{u1} V) (Set.univ.{u1} V) (Insert.insert.{u1, u1} V (Set.{u1} V) (Set.instInsertSet.{u1} V) v (Singleton.singleton.{u1, u1} V (Set.{u1} V) (Set.instSingletonSet.{u1} V) w)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.common_neighbors_top_eq SimpleGraph.commonNeighbors_top_eqₓ'. -/
theorem commonNeighbors_top_eq {v w : V} :
(⊤ : SimpleGraph V).commonNeighbors v w = Set.univ \ {v, w} :=
by
@@ -981,32 +1516,41 @@ section Incidence
variable [DecidableEq V]
+#print SimpleGraph.otherVertexOfIncident /-
/-- Given an edge incident to a particular vertex, get the other vertex on the edge.
-/
def otherVertexOfIncident {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) : V :=
h.2.other'
#align simple_graph.other_vertex_of_incident SimpleGraph.otherVertexOfIncident
+-/
+#print SimpleGraph.edge_other_incident_set /-
theorem edge_other_incident_set {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) :
e ∈ G.incidenceSet (G.otherVertexOfIncident h) :=
by
use h.1
simp [other_vertex_of_incident, Sym2.other_mem']
#align simple_graph.edge_other_incident_set SimpleGraph.edge_other_incident_set
+-/
+#print SimpleGraph.incidence_other_prop /-
theorem incidence_other_prop {v : V} {e : Sym2 V} (h : e ∈ G.incidenceSet v) :
G.otherVertexOfIncident h ∈ G.neighborSet v :=
by
cases' h with he hv
rwa [← Sym2.other_spec' hv, mem_edge_set] at he
#align simple_graph.incidence_other_prop SimpleGraph.incidence_other_prop
+-/
+#print SimpleGraph.incidence_other_neighbor_edge /-
@[simp]
theorem incidence_other_neighbor_edge {v w : V} (h : w ∈ G.neighborSet v) :
G.otherVertexOfIncident (G.mem_incidence_iff_neighbor.mpr h) = w :=
Sym2.congr_right.mp (Sym2.other_spec' (G.mem_incidence_iff_neighbor.mpr h).right)
#align simple_graph.incidence_other_neighbor_edge SimpleGraph.incidence_other_neighbor_edge
+-/
+#print SimpleGraph.incidenceSetEquivNeighborSet /-
/-- There is an equivalence between the set of edges incident to a given
vertex and the set of vertices adjacent to the vertex.
-/
@@ -1018,12 +1562,14 @@ def incidenceSetEquivNeighborSet (v : V) : G.incidenceSet v ≃ G.neighborSet v
left_inv x := by simp [other_vertex_of_incident]
right_inv := fun ⟨w, hw⟩ => by simp
#align simple_graph.incidence_set_equiv_neighbor_set SimpleGraph.incidenceSetEquivNeighborSet
+-/
end Incidence
/-! ## Edge deletion -/
+#print SimpleGraph.deleteEdges /-
/-- Given a set of vertex pairs, remove all of the corresponding edges from the
graph's edge set, if present.
@@ -1033,31 +1579,58 @@ def deleteEdges (s : Set (Sym2 V)) : SimpleGraph V
Adj := G.Adj \ Sym2.ToRel s
symm a b := by simp [adj_comm, Sym2.eq_swap]
#align simple_graph.delete_edges SimpleGraph.deleteEdges
+-/
+#print SimpleGraph.deleteEdges_adj /-
@[simp]
theorem deleteEdges_adj (s : Set (Sym2 V)) (v w : V) :
(G.deleteEdges s).Adj v w ↔ G.Adj v w ∧ ¬⟦(v, w)⟧ ∈ s :=
Iff.rfl
#align simple_graph.delete_edges_adj SimpleGraph.deleteEdges_adj
+-/
-theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.edgeSet :=
+/- warning: simple_graph.sdiff_eq_delete_edges -> SimpleGraph.sdiff_eq_deleteEdges is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G'))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (G' : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G G') (SimpleGraph.deleteEdges.{u1} V G (SimpleGraph.edgeSet.{u1} V G'))
+Case conversion may be inaccurate. Consider using '#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdgesₓ'. -/
+theorem sdiff_eq_deleteEdges (G G' : SimpleGraph V) : G \ G' = G.deleteEdges G'.edgeSetEmbedding :=
by
ext
simp
#align simple_graph.sdiff_eq_delete_edges SimpleGraph.sdiff_eq_deleteEdges
+/- warning: simple_graph.delete_edges_eq_sdiff_from_edge_set -> SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasSdiff.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SDiff.sdiff.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instSDiffSimpleGraph.{u1} V) G (SimpleGraph.fromEdgeSet.{u1} V s))
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSetₓ'. -/
theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) : G.deleteEdges s = G \ fromEdgeSet s :=
by
ext
exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.Ne⟩⟩
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
-theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSet :=
+/- warning: simple_graph.compl_eq_delete_edges -> SimpleGraph.compl_eq_deleteEdges is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) (SimpleGraph.deleteEdges.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (SimpleGraph.edgeSet.{u1} V G))
+Case conversion may be inaccurate. Consider using '#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdgesₓ'. -/
+theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSetEmbedding :=
by
ext
simp
#align simple_graph.compl_eq_delete_edges SimpleGraph.compl_eq_deleteEdges
+/- warning: simple_graph.delete_edges_delete_edges -> SimpleGraph.deleteEdges_deleteEdges is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)) (s' : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V (SimpleGraph.deleteEdges.{u1} V G s) s') (SimpleGraph.deleteEdges.{u1} V G (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasUnion.{u1} (Sym2.{u1} V)) s s'))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)) (s' : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V (SimpleGraph.deleteEdges.{u1} V G s) s') (SimpleGraph.deleteEdges.{u1} V G (Union.union.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instUnionSet.{u1} (Sym2.{u1} V)) s s'))
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdgesₓ'. -/
@[simp]
theorem deleteEdges_deleteEdges (s s' : Set (Sym2 V)) :
(G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s') :=
@@ -1066,13 +1639,21 @@ theorem deleteEdges_deleteEdges (s s' : Set (Sym2 V)) :
simp [and_assoc', not_or]
#align simple_graph.delete_edges_delete_edges SimpleGraph.deleteEdges_deleteEdges
+#print SimpleGraph.deleteEdges_empty_eq /-
@[simp]
theorem deleteEdges_empty_eq : G.deleteEdges ∅ = G :=
by
ext
simp
#align simple_graph.delete_edges_empty_eq SimpleGraph.deleteEdges_empty_eq
+-/
+/- warning: simple_graph.delete_edges_univ_eq -> SimpleGraph.deleteEdges_univ_eq is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (Set.univ.{u1} (Sym2.{u1} V))) (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eqₓ'. -/
@[simp]
theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ :=
by
@@ -1080,40 +1661,69 @@ theorem deleteEdges_univ_eq : G.deleteEdges Set.univ = ⊥ :=
simp
#align simple_graph.delete_edges_univ_eq SimpleGraph.deleteEdges_univ_eq
+#print SimpleGraph.deleteEdges_le /-
theorem deleteEdges_le (s : Set (Sym2 V)) : G.deleteEdges s ≤ G :=
by
intro
simp (config := { contextual := true })
#align simple_graph.delete_edges_le SimpleGraph.deleteEdges_le
+-/
+#print SimpleGraph.deleteEdges_le_of_le /-
theorem deleteEdges_le_of_le {s s' : Set (Sym2 V)} (h : s ⊆ s') :
G.deleteEdges s' ≤ G.deleteEdges s := fun v w =>
by
simp (config := { contextual := true }) only [delete_edges_adj, and_imp, true_and_iff]
exact fun ha hn hs => hn (h hs)
#align simple_graph.delete_edges_le_of_le SimpleGraph.deleteEdges_le_of_le
+-/
+/- warning: simple_graph.delete_edges_eq_inter_edge_set -> SimpleGraph.deleteEdges_eq_inter_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SimpleGraph.deleteEdges.{u1} V G (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasInter.{u1} (Sym2.{u1} V)) s (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s) (SimpleGraph.deleteEdges.{u1} V G (Inter.inter.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instInterSet.{u1} (Sym2.{u1} V)) s (SimpleGraph.edgeSet.{u1} V G)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSetₓ'. -/
theorem deleteEdges_eq_inter_edgeSet (s : Set (Sym2 V)) :
- G.deleteEdges s = G.deleteEdges (s ∩ G.edgeSet) :=
+ G.deleteEdges s = G.deleteEdges (s ∩ G.edgeSetEmbedding) :=
by
ext
simp (config := { contextual := true }) [imp_false]
#align simple_graph.delete_edges_eq_inter_edge_set SimpleGraph.deleteEdges_eq_inter_edgeSet
+/- warning: simple_graph.delete_edges_sdiff_eq_of_le -> SimpleGraph.deleteEdges_sdiff_eq_of_le is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {H : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) H))) H)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) {H : SimpleGraph.{u1} V}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instLESimpleGraph.{u1} V) H G) -> (Eq.{succ u1} (SimpleGraph.{u1} V) (SimpleGraph.deleteEdges.{u1} V G (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) (SimpleGraph.edgeSet.{u1} V H))) H)
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_leₓ'. -/
theorem deleteEdges_sdiff_eq_of_le {H : SimpleGraph V} (h : H ≤ G) :
- G.deleteEdges (G.edgeSet \ H.edgeSet) = H :=
+ G.deleteEdges (G.edgeSetEmbedding \ H.edgeSetEmbedding) = H :=
by
ext (v w)
constructor <;> simp (config := { contextual := true }) [@h v w]
#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_le
-theorem edgeSet_deleteEdges (s : Set (Sym2 V)) : (G.deleteEdges s).edgeSet = G.edgeSet \ s :=
+/- warning: simple_graph.edge_set_delete_edges -> SimpleGraph.edgeSet_deleteEdges is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) (SimpleGraph.deleteEdges.{u1} V G s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.booleanAlgebra.{u1} (Sym2.{u1} V))) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G) s)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (s : Set.{u1} (Sym2.{u1} V)), Eq.{succ u1} (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G s)) (SDiff.sdiff.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.instSDiffSet.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeSet.{u1} V G) s)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdgesₓ'. -/
+theorem edgeSet_deleteEdges (s : Set (Sym2 V)) :
+ (G.deleteEdges s).edgeSetEmbedding = G.edgeSetEmbedding \ s :=
by
ext e
refine' Sym2.ind _ e
simp
#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdges
+/- warning: simple_graph.edge_finset_delete_edges -> SimpleGraph.edgeFinset_deleteEdges is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} (Sym2.{u1} V)) (Set.{u1} (Sym2.{u1} V)) (Finset.Set.hasCoeT.{u1} (Sym2.{u1} V)))) s)) (fun (a : V) (b : V) => _inst_2 a b) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.hasSdiff.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Quotient.decidableEq.{succ u1} (Prod.{u1, u1} V V) (Sym2.Rel.setoid.{u1} V) (fun (a : Prod.{u1, u1} V V) (b : Prod.{u1, u1} V V) => Sym2.Rel.decidableRel.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_2 a b) _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} (Sym2.{u1} V)] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (s : Finset.{u1} (Sym2.{u1} V)) [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.edgeFinset.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) (SimpleGraph.fintypeEdgeSet.{u1} V (SimpleGraph.deleteEdges.{u1} V G (Finset.toSet.{u1} (Sym2.{u1} V) s)) _inst_1 (fun (a : V) (b : V) => _inst_4 a b))) (SDiff.sdiff.{u1} (Finset.{u1} (Sym2.{u1} V)) (Finset.instSDiffFinset.{u1} (Sym2.{u1} V) (fun (a : Sym2.{u1} V) (b : Sym2.{u1} V) => Sym2.instDecidableEqSym2.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b)) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b))) s)
+Case conversion may be inaccurate. Consider using '#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdgesₓ'. -/
theorem edgeFinset_deleteEdges [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
(s : Finset (Sym2 V)) [DecidableRel (G.deleteEdges s).Adj] :
(G.deleteEdges s).edgeFinset = G.edgeFinset \ s :=
@@ -1127,6 +1737,12 @@ section DeleteFar
variable (G) [OrderedRing 𝕜] [Fintype V] [DecidableEq V] [DecidableRel G.Adj]
{p : SimpleGraph V → Prop} {r r₁ r₂ : 𝕜}
+/- warning: simple_graph.delete_far -> SimpleGraph.DeleteFar is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], ((SimpleGraph.{u1} V) -> Prop) -> 𝕜 -> Prop
+but is expected to have type
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} (Sym2.{u1} V)] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)], ((SimpleGraph.{u1} V) -> Prop) -> 𝕜 -> Prop
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far SimpleGraph.DeleteFarₓ'. -/
/-- A graph is `r`-*delete-far* from a property `p` if we must delete at least `r` edges from it to
get a graph with the property `p`. -/
def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
@@ -1137,6 +1753,12 @@ open Classical
variable {G}
+/- warning: simple_graph.delete_far_iff -> SimpleGraph.deleteFar_iff is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, Iff (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iffₓ'. -/
theorem deleteFar_iff :
G.DeleteFar p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card :=
by
@@ -1150,9 +1772,21 @@ theorem deleteFar_iff :
card_le_of_subset hs] using h (G.delete_edges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
+/- warning: simple_graph.delete_far.le_card_sub_card -> SimpleGraph.DeleteFar.le_card_sub_card is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u1} V}}, (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V) H G) -> (p H) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V G (SimpleGraph.fintypeEdgeSet.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (OrderedRing.toRing.{u2} 𝕜 _inst_1)))))))) (Finset.card.{u1} (Sym2.{u1} V) (SimpleGraph.edgeFinset.{u1} V H (SimpleGraph.fintypeEdgeSet.{u1} V H (fun (a : V) (b : V) => _inst_3 a b) _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u1} V H a b)))))))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableEq.{succ u2} V] [_inst_4 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {p : (SimpleGraph.{u2} V) -> Prop} {r : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_4 a b) p r) -> (forall {{H : SimpleGraph.{u2} V}}, (LE.le.{u2} (SimpleGraph.{u2} V) (SimpleGraph.instLESimpleGraph.{u2} V) H G) -> (p H) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) r (HSub.hSub.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHSub.{u1} 𝕜 (Ring.toSub.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V G (SimpleGraph.fintypeEdgeSet.{u2} V G _inst_2 (fun (a : V) (b : V) => _inst_4 a b))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (OrderedRing.toRing.{u1} 𝕜 _inst_1))) (Finset.card.{u2} (Sym2.{u2} V) (SimpleGraph.edgeFinset.{u2} V H (SimpleGraph.fintypeEdgeSet.{u2} V H _inst_2 (fun (a : V) (b : V) => Classical.propDecidable (SimpleGraph.Adj.{u2} V H a b)))))))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_cardₓ'. -/
alias delete_far_iff ↔ delete_far.le_card_sub_card _
#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
+/- warning: simple_graph.delete_far.mono -> SimpleGraph.DeleteFar.mono is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u2}} {V : Type.{u1}} {G : SimpleGraph.{u1} V} [_inst_1 : OrderedRing.{u2} 𝕜] [_inst_2 : Fintype.{u1} V] [_inst_3 : DecidableEq.{succ u1} V] [_inst_4 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] {p : (SimpleGraph.{u1} V) -> Prop} {r₁ : 𝕜} {r₂ : 𝕜}, (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₂) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (OrderedRing.toOrderedAddCommGroup.{u2} 𝕜 _inst_1)))) r₁ r₂) -> (SimpleGraph.DeleteFar.{u1, u2} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_4 a b) p r₁)
+but is expected to have type
+ forall {𝕜 : Type.{u1}} {V : Type.{u2}} {G : SimpleGraph.{u2} V} [_inst_1 : OrderedRing.{u1} 𝕜] [_inst_2 : Fintype.{u2} (Sym2.{u2} V)] [_inst_3 : DecidableRel.{succ u2} V (SimpleGraph.Adj.{u2} V G)] {_inst_4 : (SimpleGraph.{u2} V) -> Prop} {p : 𝕜} {r₁ : 𝕜}, (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) _inst_4 r₁) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (OrderedRing.toPartialOrder.{u1} 𝕜 _inst_1))) p r₁) -> (SimpleGraph.DeleteFar.{u2, u1} 𝕜 V G _inst_1 _inst_2 (fun (a : V) (b : V) => _inst_3 a b) _inst_4 p)
+Case conversion may be inaccurate. Consider using '#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.monoₓ'. -/
theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteFar p r₁ := fun s hs hG =>
hr.trans <| h hs hG
#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.mono
@@ -1162,6 +1796,7 @@ end DeleteFar
/-! ## Map and comap -/
+#print SimpleGraph.map /-
/-- Given an injective function, there is an covariant induced map on graphs by pushing forward
the adjacency relation.
@@ -1169,19 +1804,29 @@ This is injective (see `simple_graph.map_injective`). -/
protected def map (f : V ↪ W) (G : SimpleGraph V) : SimpleGraph W
where Adj := Relation.Map G.Adj f f
#align simple_graph.map SimpleGraph.map
+-/
+#print SimpleGraph.map_adj /-
@[simp]
theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
(G.map f).Adj u v ↔ ∃ u' v' : V, G.Adj u' v' ∧ f u' = u ∧ f v' = v :=
Iff.rfl
#align simple_graph.map_adj SimpleGraph.map_adj
+-/
+/- warning: simple_graph.map_monotone -> SimpleGraph.map_monotone is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (SemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (Lattice.toSemilatticeInf.{u2} (SimpleGraph.{u2} W) (GeneralizedCoheytingAlgebra.toLattice.{u2} (SimpleGraph.{u2} W) (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (SimpleGraph.{u2} W) (SimpleGraph.booleanAlgebra.{u2} W))))))) (SimpleGraph.map.{u1, u2} V W f)
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} (f : Function.Embedding.{succ u1, succ u2} V W), Monotone.{u1, u2} (SimpleGraph.{u1} V) (SimpleGraph.{u2} W) (PartialOrder.toPreorder.{u1} (SimpleGraph.{u1} V) (SemilatticeInf.toPartialOrder.{u1} (SimpleGraph.{u1} V) (Lattice.toSemilatticeInf.{u1} (SimpleGraph.{u1} V) (GeneralizedCoheytingAlgebra.toLattice.{u1} (SimpleGraph.{u1} V) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BiheytingAlgebra.toCoheytingAlgebra.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBiheytingAlgebra.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))))))) (PartialOrder.toPreorder.{u2} (SimpleGraph.{u2} W) (SemilatticeInf.toPartialOrder.{u2} (SimpleGraph.{u2} W) (Lattice.toSemilatticeInf.{u2} (SimpleGraph.{u2} W) (GeneralizedCoheytingAlgebra.toLattice.{u2} (SimpleGraph.{u2} W) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BiheytingAlgebra.toCoheytingAlgebra.{u2} (SimpleGraph.{u2} W) (BooleanAlgebra.toBiheytingAlgebra.{u2} (SimpleGraph.{u2} W) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} W)))))))) (SimpleGraph.map.{u1, u2} V W f)
+Case conversion may be inaccurate. Consider using '#align simple_graph.map_monotone SimpleGraph.map_monotoneₓ'. -/
theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) :=
by
rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩
exact ⟨_, _, h ha, rfl, rfl⟩
#align simple_graph.map_monotone SimpleGraph.map_monotone
+#print SimpleGraph.comap /-
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
adjacency relation.
This is one of the ways of creating induced graphs. See `simple_graph.induce` for a wrapper.
@@ -1191,33 +1836,45 @@ This is surjective when `f` is injective (see `simple_graph.comap_surjective`).-
protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V
where Adj u v := G.Adj (f u) (f v)
#align simple_graph.comap SimpleGraph.comap
+-/
+#print SimpleGraph.comap_monotone /-
theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) :=
by
intro G G' h _ _ ha
exact h ha
#align simple_graph.comap_monotone SimpleGraph.comap_monotone
+-/
+#print SimpleGraph.comap_map_eq /-
@[simp]
theorem comap_map_eq (f : V ↪ W) (G : SimpleGraph V) : (G.map f).comap f = G :=
by
ext
simp
#align simple_graph.comap_map_eq SimpleGraph.comap_map_eq
+-/
+#print SimpleGraph.leftInverse_comap_map /-
theorem leftInverse_comap_map (f : V ↪ W) :
Function.LeftInverse (SimpleGraph.comap f) (SimpleGraph.map f) :=
comap_map_eq f
#align simple_graph.left_inverse_comap_map SimpleGraph.leftInverse_comap_map
+-/
+#print SimpleGraph.map_injective /-
theorem map_injective (f : V ↪ W) : Function.Injective (SimpleGraph.map f) :=
(leftInverse_comap_map f).Injective
#align simple_graph.map_injective SimpleGraph.map_injective
+-/
+#print SimpleGraph.comap_surjective /-
theorem comap_surjective (f : V ↪ W) : Function.Surjective (SimpleGraph.comap f) :=
(leftInverse_comap_map f).Surjective
#align simple_graph.comap_surjective SimpleGraph.comap_surjective
+-/
+#print SimpleGraph.map_le_iff_le_comap /-
theorem map_le_iff_le_comap (f : V ↪ W) (G : SimpleGraph V) (G' : SimpleGraph W) :
G.map f ≤ G' ↔ G ≤ G'.comap f :=
⟨fun h u v ha => h ⟨_, _, ha, rfl, rfl⟩,
@@ -1225,16 +1882,20 @@ theorem map_le_iff_le_comap (f : V ↪ W) (G : SimpleGraph V) (G' : SimpleGraph
rintro h _ _ ⟨u, v, ha, rfl, rfl⟩
exact h ha⟩
#align simple_graph.map_le_iff_le_comap SimpleGraph.map_le_iff_le_comap
+-/
+#print SimpleGraph.map_comap_le /-
theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G :=
by
rw [map_le_iff_le_comap]
exact le_refl _
#align simple_graph.map_comap_le SimpleGraph.map_comap_le
+-/
/-! ## Induced graphs -/
+#print SimpleGraph.induce /-
/- Given a set `s` of vertices, we can restrict a graph to those vertices by restricting its
adjacency relation. This gives a map between `simple_graph V` and `simple_graph s`.
@@ -1245,7 +1906,9 @@ outside the set. This is a wrapper around `simple_graph.comap`. -/
def induce (s : Set V) (G : SimpleGraph V) : SimpleGraph s :=
G.comap (Function.Embedding.subtype _)
#align simple_graph.induce SimpleGraph.induce
+-/
+#print SimpleGraph.spanningCoe /-
/-- Given a graph on a set of vertices, we can make it be a `simple_graph V` by
adding in the remaining vertices without adding in any additional edges.
This is a wrapper around `simple_graph.map`. -/
@@ -1253,14 +1916,19 @@ This is a wrapper around `simple_graph.map`. -/
def spanningCoe {s : Set V} (G : SimpleGraph s) : SimpleGraph V :=
G.map (Function.Embedding.subtype _)
#align simple_graph.spanning_coe SimpleGraph.spanningCoe
+-/
+#print SimpleGraph.induce_spanningCoe /-
theorem induce_spanningCoe {s : Set V} {G : SimpleGraph s} : G.spanningCoe.induce s = G :=
comap_map_eq _ _
#align simple_graph.induce_spanning_coe SimpleGraph.induce_spanningCoe
+-/
+#print SimpleGraph.spanningCoe_induce_le /-
theorem spanningCoe_induce_le (s : Set V) : (G.induce s).spanningCoe ≤ G :=
map_comap_le _ _
#align simple_graph.spanning_coe_induce_le SimpleGraph.spanningCoe_induce_le
+-/
section FiniteAt
@@ -1278,67 +1946,100 @@ Use `neighbor_finset_eq_filter` to rewrite this definition as a `filter`.
variable (v) [Fintype (G.neighborSet v)]
+#print SimpleGraph.neighborFinset /-
/-- `G.neighbors v` is the `finset` version of `G.adj v` in case `G` is
locally finite at `v`.
-/
def neighborFinset : Finset V :=
(G.neighborSet v).toFinset
#align simple_graph.neighbor_finset SimpleGraph.neighborFinset
+-/
+#print SimpleGraph.neighborFinset_def /-
theorem neighborFinset_def : G.neighborFinset v = (G.neighborSet v).toFinset :=
rfl
#align simple_graph.neighbor_finset_def SimpleGraph.neighborFinset_def
+-/
+#print SimpleGraph.mem_neighborFinset /-
@[simp]
theorem mem_neighborFinset (w : V) : w ∈ G.neighborFinset v ↔ G.Adj v w :=
Set.mem_toFinset
#align simple_graph.mem_neighbor_finset SimpleGraph.mem_neighborFinset
+-/
+#print SimpleGraph.not_mem_neighborFinset_self /-
@[simp]
theorem not_mem_neighborFinset_self : v ∉ G.neighborFinset v :=
(mem_neighborFinset _ _ _).Not.mpr <| G.loopless _
#align simple_graph.not_mem_neighbor_finset_self SimpleGraph.not_mem_neighborFinset_self
+-/
+/- warning: simple_graph.neighbor_finset_disjoint_singleton -> SimpleGraph.neighborFinset_disjoint_singleton is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.orderBot.{u1} V) (SimpleGraph.neighborFinset.{u1} V G v _inst_1) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.hasSingleton.{u1} V) v)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} V) (SimpleGraph.neighborFinset.{u1} V G v _inst_1) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.instSingletonFinset.{u1} V) v)
+Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_finset_disjoint_singleton SimpleGraph.neighborFinset_disjoint_singletonₓ'. -/
theorem neighborFinset_disjoint_singleton : Disjoint (G.neighborFinset v) {v} :=
Finset.disjoint_singleton_right.mpr <| not_mem_neighborFinset_self _ _
#align simple_graph.neighbor_finset_disjoint_singleton SimpleGraph.neighborFinset_disjoint_singleton
+/- warning: simple_graph.singleton_disjoint_neighbor_finset -> SimpleGraph.singleton_disjoint_neighborFinset is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.orderBot.{u1} V) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.hasSingleton.{u1} V) v) (SimpleGraph.neighborFinset.{u1} V G v _inst_1)
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v))], Disjoint.{u1} (Finset.{u1} V) (Finset.partialOrder.{u1} V) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} V) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.instSingletonFinset.{u1} V) v) (SimpleGraph.neighborFinset.{u1} V G v _inst_1)
+Case conversion may be inaccurate. Consider using '#align simple_graph.singleton_disjoint_neighbor_finset SimpleGraph.singleton_disjoint_neighborFinsetₓ'. -/
theorem singleton_disjoint_neighborFinset : Disjoint {v} (G.neighborFinset v) :=
Finset.disjoint_singleton_left.mpr <| not_mem_neighborFinset_self _ _
#align simple_graph.singleton_disjoint_neighbor_finset SimpleGraph.singleton_disjoint_neighborFinset
+#print SimpleGraph.degree /-
/-- `G.degree v` is the number of vertices adjacent to `v`.
-/
def degree : ℕ :=
(G.neighborFinset v).card
#align simple_graph.degree SimpleGraph.degree
+-/
+#print SimpleGraph.card_neighborSet_eq_degree /-
@[simp]
theorem card_neighborSet_eq_degree : Fintype.card (G.neighborSet v) = G.degree v :=
(Set.toFinset_card _).symm
#align simple_graph.card_neighbor_set_eq_degree SimpleGraph.card_neighborSet_eq_degree
+-/
+#print SimpleGraph.degree_pos_iff_exists_adj /-
theorem degree_pos_iff_exists_adj : 0 < G.degree v ↔ ∃ w, G.Adj v w := by
simp only [degree, card_pos, Finset.Nonempty, mem_neighbor_finset]
#align simple_graph.degree_pos_iff_exists_adj SimpleGraph.degree_pos_iff_exists_adj
+-/
+#print SimpleGraph.degree_compl /-
theorem degree_compl [Fintype (Gᶜ.neighborSet v)] [Fintype V] :
Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by
classical
rw [← card_neighbor_set_union_compl_neighbor_set G v, Set.toFinset_union]
simp [card_disjoint_union (set.disjoint_to_finset.mpr (compl_neighbor_set_disjoint G v))]
#align simple_graph.degree_compl SimpleGraph.degree_compl
+-/
+#print SimpleGraph.incidenceSetFintype /-
instance incidenceSetFintype [DecidableEq V] : Fintype (G.incidenceSet v) :=
Fintype.ofEquiv (G.neighborSet v) (G.incidenceSetEquivNeighborSet v).symm
#align simple_graph.incidence_set_fintype SimpleGraph.incidenceSetFintype
+-/
+#print SimpleGraph.incidenceFinset /-
/-- This is the `finset` version of `incidence_set`.
-/
def incidenceFinset [DecidableEq V] : Finset (Sym2 V) :=
(G.incidenceSet v).toFinset
#align simple_graph.incidence_finset SimpleGraph.incidenceFinset
+-/
+#print SimpleGraph.card_incidenceSet_eq_degree /-
@[simp]
theorem card_incidenceSet_eq_degree [DecidableEq V] :
Fintype.card (G.incidenceSet v) = G.degree v :=
@@ -1346,21 +2047,32 @@ theorem card_incidenceSet_eq_degree [DecidableEq V] :
rw [Fintype.card_congr (G.incidence_set_equiv_neighbor_set v)]
simp
#align simple_graph.card_incidence_set_eq_degree SimpleGraph.card_incidenceSet_eq_degree
+-/
+#print SimpleGraph.card_incidenceFinset_eq_degree /-
@[simp]
theorem card_incidenceFinset_eq_degree [DecidableEq V] : (G.incidenceFinset v).card = G.degree v :=
by
rw [← G.card_incidence_set_eq_degree]
apply Set.toFinset_card
#align simple_graph.card_incidence_finset_eq_degree SimpleGraph.card_incidenceFinset_eq_degree
+-/
+#print SimpleGraph.mem_incidenceFinset /-
@[simp]
theorem mem_incidenceFinset [DecidableEq V] (e : Sym2 V) :
e ∈ G.incidenceFinset v ↔ e ∈ G.incidenceSet v :=
Set.mem_toFinset
#align simple_graph.mem_incidence_finset SimpleGraph.mem_incidenceFinset
+-/
-theorem incidenceFinset_eq_filter [DecidableEq V] [Fintype G.edgeSet] :
+/- warning: simple_graph.incidence_finset_eq_filter -> SimpleGraph.incidenceFinset_eq_filter is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v))] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceFinset.{u1} V G v _inst_1 (fun (a : V) (b : V) => _inst_2 a b)) (Finset.filter.{u1} (Sym2.{u1} V) (Membership.Mem.{u1, u1} V (Sym2.{u1} V) (SetLike.hasMem.{u1, u1} (Sym2.{u1} V) V (Sym2.setLike.{u1} V)) v) (fun (a : Sym2.{u1} V) => Sym2.Mem.decidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) v a) (SimpleGraph.edgeFinset.{u1} V G _inst_3))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) (v : V) [_inst_1 : Fintype.{u1} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v))] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : Fintype.{u1} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G))], Eq.{succ u1} (Finset.{u1} (Sym2.{u1} V)) (SimpleGraph.incidenceFinset.{u1} V G v _inst_1 (fun (a : V) (b : V) => _inst_2 a b)) (Finset.filter.{u1} (Sym2.{u1} V) (Membership.mem.{u1, u1} V (Sym2.{u1} V) (SetLike.instMembership.{u1, u1} (Sym2.{u1} V) V (Sym2.instSetLikeSym2.{u1} V)) v) (fun (a : Sym2.{u1} V) => Sym2.Mem.decidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) v a) (SimpleGraph.edgeFinset.{u1} V G _inst_3))
+Case conversion may be inaccurate. Consider using '#align simple_graph.incidence_finset_eq_filter SimpleGraph.incidenceFinset_eq_filterₓ'. -/
+theorem incidenceFinset_eq_filter [DecidableEq V] [Fintype G.edgeSetEmbedding] :
G.incidenceFinset v = G.edgeFinset.filterₓ (Membership.Mem v) :=
by
ext e
@@ -1372,33 +2084,41 @@ end FiniteAt
section LocallyFinite
+#print SimpleGraph.LocallyFinite /-
/-- A graph is locally finite if every vertex has a finite neighbor set.
-/
@[reducible]
def LocallyFinite :=
∀ v : V, Fintype (G.neighborSet v)
#align simple_graph.locally_finite SimpleGraph.LocallyFinite
+-/
variable [LocallyFinite G]
+#print SimpleGraph.IsRegularOfDegree /-
/-- A locally finite simple graph is regular of degree `d` if every vertex has degree `d`.
-/
def IsRegularOfDegree (d : ℕ) : Prop :=
∀ v : V, G.degree v = d
#align simple_graph.is_regular_of_degree SimpleGraph.IsRegularOfDegree
+-/
variable {G}
+#print SimpleGraph.IsRegularOfDegree.degree_eq /-
theorem IsRegularOfDegree.degree_eq {d : ℕ} (h : G.IsRegularOfDegree d) (v : V) : G.degree v = d :=
h v
#align simple_graph.is_regular_of_degree.degree_eq SimpleGraph.IsRegularOfDegree.degree_eq
+-/
+#print SimpleGraph.IsRegularOfDegree.compl /-
theorem IsRegularOfDegree.compl [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj]
{k : ℕ} (h : G.IsRegularOfDegree k) : Gᶜ.IsRegularOfDegree (Fintype.card V - 1 - k) :=
by
intro v
rw [degree_compl, h v]
#align simple_graph.is_regular_of_degree.compl SimpleGraph.IsRegularOfDegree.compl
+-/
end LocallyFinite
@@ -1406,6 +2126,7 @@ section Finite
variable [Fintype V]
+#print SimpleGraph.neighborSetFintype /-
instance neighborSetFintype [DecidableRel G.Adj] (v : V) : Fintype (G.neighborSet v) :=
@Subtype.fintype _ _
(by
@@ -1413,32 +2134,59 @@ instance neighborSetFintype [DecidableRel G.Adj] (v : V) : Fintype (G.neighborSe
infer_instance)
_
#align simple_graph.neighbor_set_fintype SimpleGraph.neighborSetFintype
+-/
+#print SimpleGraph.neighborFinset_eq_filter /-
theorem neighborFinset_eq_filter {v : V} [DecidableRel G.Adj] :
G.neighborFinset v = Finset.univ.filterₓ (G.Adj v) :=
by
ext
simp
#align simple_graph.neighbor_finset_eq_filter SimpleGraph.neighborFinset_eq_filter
+-/
+/- warning: simple_graph.neighbor_finset_compl -> SimpleGraph.neighborFinset_compl is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (v : V), Eq.{succ u1} (Finset.{u1} V) (SimpleGraph.neighborFinset.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) v (SimpleGraph.neighborSetFintype.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasCompl.{u1} V) G) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Compl.adjDecidable.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (SDiff.sdiff.{u1} (Finset.{u1} V) (Finset.hasSdiff.{u1} V (fun (a : V) (b : V) => _inst_2 a b)) (HasCompl.compl.{u1} (Finset.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} V) (Finset.booleanAlgebra.{u1} V _inst_1 (fun (a : V) (b : V) => _inst_2 a b))) (SimpleGraph.neighborFinset.{u1} V G v (SimpleGraph.neighborSetFintype.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b) v))) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.hasSingleton.{u1} V) v))
+but is expected to have type
+ forall {V : Type.{u1}} (G : SimpleGraph.{u1} V) [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] [_inst_3 : DecidableRel.{succ u1} V (SimpleGraph.Adj.{u1} V G)] (v : V), Eq.{succ u1} (Finset.{u1} V) (SimpleGraph.neighborFinset.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) v (SimpleGraph.neighborSetFintype.{u1} V (HasCompl.compl.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instHasComplSimpleGraph.{u1} V) G) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Compl.adjDecidable.{u1} V G (fun (a : V) (b : V) => _inst_3 a b) (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (SDiff.sdiff.{u1} (Finset.{u1} V) (Finset.instSDiffFinset.{u1} V (fun (a : V) (b : V) => _inst_2 a b)) (HasCompl.compl.{u1} (Finset.{u1} V) (BooleanAlgebra.toHasCompl.{u1} (Finset.{u1} V) (Finset.instBooleanAlgebraFinset.{u1} V _inst_1 (fun (a : V) (b : V) => _inst_2 a b))) (SimpleGraph.neighborFinset.{u1} V G v (SimpleGraph.neighborSetFintype.{u1} V G _inst_1 (fun (a : V) (b : V) => _inst_3 a b) v))) (Singleton.singleton.{u1, u1} V (Finset.{u1} V) (Finset.instSingletonFinset.{u1} V) v))
+Case conversion may be inaccurate. Consider using '#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_complₓ'. -/
theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
Gᶜ.neighborFinset v = G.neighborFinset vᶜ \ {v} := by
simp only [neighbor_finset, neighbor_set_compl, Set.toFinset_diff, Set.toFinset_compl,
Set.toFinset_singleton]
#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_compl
+/- warning: simple_graph.complete_graph_degree -> SimpleGraph.complete_graph_degree is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+but is expected to have type
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degreeₓ'. -/
@[simp]
theorem complete_graph_degree [DecidableEq V] (v : V) :
(⊤ : SimpleGraph V).degree v = Fintype.card V - 1 := by
erw [degree, neighbor_finset_eq_filter, filter_ne, card_erase_of_mem (mem_univ v), card_univ]
#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degree
+/- warning: simple_graph.bot_degree -> SimpleGraph.bot_degree is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
+but is expected to have type
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] (v : V), Eq.{1} Nat (SimpleGraph.degree.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v (SimpleGraph.neighborSetFintype.{u1} V (Bot.bot.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toBot.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Bot.adjDecidable.{u1} V a b) v)) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
+Case conversion may be inaccurate. Consider using '#align simple_graph.bot_degree SimpleGraph.bot_degreeₓ'. -/
theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 :=
by
erw [degree, neighbor_finset_eq_filter, filter_false]
exact Finset.card_empty
#align simple_graph.bot_degree SimpleGraph.bot_degree
+/- warning: simple_graph.is_regular_of_degree.top -> SimpleGraph.IsRegularOfDegree.top is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+but is expected to have type
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V], SimpleGraph.IsRegularOfDegree.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (fun (v : V) => SimpleGraph.neighborSetFintype.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) _inst_1 (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.topₓ'. -/
theorem IsRegularOfDegree.top [DecidableEq V] :
(⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) :=
by
@@ -1446,6 +2194,7 @@ theorem IsRegularOfDegree.top [DecidableEq V] :
simp
#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.top
+#print SimpleGraph.minDegree /-
/-- The minimum degree of all vertices (and `0` if there are no vertices).
The key properties of this are given in `exists_minimal_degree_vertex`, `min_degree_le_degree`
and `le_min_degree_of_forall_le_degree`.
@@ -1453,7 +2202,9 @@ and `le_min_degree_of_forall_le_degree`.
def minDegree [DecidableRel G.Adj] : ℕ :=
WithTop.untop' 0 (univ.image fun v => G.degree v).min
#align simple_graph.min_degree SimpleGraph.minDegree
+-/
+#print SimpleGraph.exists_minimal_degree_vertex /-
/-- There exists a vertex of minimal degree. Note the assumption of being nonempty is necessary, as
the lemma implies there exists a vertex.
-/
@@ -1464,7 +2215,9 @@ theorem exists_minimal_degree_vertex [DecidableRel G.Adj] [Nonempty V] :
obtain ⟨v, _, rfl⟩ := mem_image.mp (mem_of_min ht)
refine' ⟨v, by simp [min_degree, ht]⟩
#align simple_graph.exists_minimal_degree_vertex SimpleGraph.exists_minimal_degree_vertex
+-/
+#print SimpleGraph.minDegree_le_degree /-
/-- The minimum degree in the graph is at most the degree of any particular vertex. -/
theorem minDegree_le_degree [DecidableRel G.Adj] (v : V) : G.minDegree ≤ G.degree v :=
by
@@ -1472,7 +2225,9 @@ theorem minDegree_le_degree [DecidableRel G.Adj] (v : V) : G.minDegree ≤ G.deg
have := Finset.min_le_of_eq (mem_image_of_mem _ (mem_univ v)) ht
rwa [min_degree, ht]
#align simple_graph.min_degree_le_degree SimpleGraph.minDegree_le_degree
+-/
+#print SimpleGraph.le_minDegree_of_forall_le_degree /-
/-- In a nonempty graph, if `k` is at most the degree of every vertex, it is at most the minimum
degree. Note the assumption that the graph is nonempty is necessary as long as `G.min_degree` is
defined to be a natural.
@@ -1484,7 +2239,9 @@ theorem le_minDegree_of_forall_le_degree [DecidableRel G.Adj] [Nonempty V] (k :
rw [hv]
apply h
#align simple_graph.le_min_degree_of_forall_le_degree SimpleGraph.le_minDegree_of_forall_le_degree
+-/
+#print SimpleGraph.maxDegree /-
/-- The maximum degree of all vertices (and `0` if there are no vertices).
The key properties of this are given in `exists_maximal_degree_vertex`, `degree_le_max_degree`
and `max_degree_le_of_forall_degree_le`.
@@ -1492,7 +2249,9 @@ and `max_degree_le_of_forall_degree_le`.
def maxDegree [DecidableRel G.Adj] : ℕ :=
Option.getD (univ.image fun v => G.degree v).max 0
#align simple_graph.max_degree SimpleGraph.maxDegree
+-/
+#print SimpleGraph.exists_maximal_degree_vertex /-
/-- There exists a vertex of maximal degree. Note the assumption of being nonempty is necessary, as
the lemma implies there exists a vertex.
-/
@@ -1507,7 +2266,9 @@ theorem exists_maximal_degree_vertex [DecidableRel G.Adj] [Nonempty V] :
rw [max_degree, ht]
rfl
#align simple_graph.exists_maximal_degree_vertex SimpleGraph.exists_maximal_degree_vertex
+-/
+#print SimpleGraph.degree_le_maxDegree /-
/-- The maximum degree in the graph is at least the degree of any particular vertex. -/
theorem degree_le_maxDegree [DecidableRel G.Adj] (v : V) : G.degree v ≤ G.maxDegree :=
by
@@ -1515,7 +2276,9 @@ theorem degree_le_maxDegree [DecidableRel G.Adj] (v : V) : G.degree v ≤ G.maxD
have := Finset.le_max_of_eq (mem_image_of_mem _ (mem_univ v)) ht
rwa [max_degree, ht]
#align simple_graph.degree_le_max_degree SimpleGraph.degree_le_maxDegree
+-/
+#print SimpleGraph.maxDegree_le_of_forall_degree_le /-
/-- In a graph, if `k` is at least the degree of every vertex, then it is at least the maximum
degree.
-/
@@ -1530,14 +2293,18 @@ theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀
rw [max_degree, hV, image_empty]
exact zero_le k
#align simple_graph.max_degree_le_of_forall_degree_le SimpleGraph.maxDegree_le_of_forall_degree_le
+-/
+#print SimpleGraph.degree_lt_card_verts /-
theorem degree_lt_card_verts [DecidableRel G.Adj] (v : V) : G.degree v < Fintype.card V := by
classical
apply Finset.card_lt_card
rw [Finset.ssubset_iff]
exact ⟨v, by simp, Finset.subset_univ _⟩
#align simple_graph.degree_lt_card_verts SimpleGraph.degree_lt_card_verts
+-/
+#print SimpleGraph.maxDegree_lt_card_verts /-
/--
The maximum degree of a nonempty graph is less than the number of vertices. Note that the assumption
that `V` is nonempty is necessary, as otherwise this would assert the existence of a
@@ -1549,24 +2316,32 @@ theorem maxDegree_lt_card_verts [DecidableRel G.Adj] [Nonempty V] : G.maxDegree
rw [hv]
apply G.degree_lt_card_verts v
#align simple_graph.max_degree_lt_card_verts SimpleGraph.maxDegree_lt_card_verts
+-/
+#print SimpleGraph.card_commonNeighbors_le_degree_left /-
theorem card_commonNeighbors_le_degree_left [DecidableRel G.Adj] (v w : V) :
Fintype.card (G.commonNeighbors v w) ≤ G.degree v :=
by
rw [← card_neighbor_set_eq_degree]
exact Set.card_le_of_subset (Set.inter_subset_left _ _)
#align simple_graph.card_common_neighbors_le_degree_left SimpleGraph.card_commonNeighbors_le_degree_left
+-/
+#print SimpleGraph.card_commonNeighbors_le_degree_right /-
theorem card_commonNeighbors_le_degree_right [DecidableRel G.Adj] (v w : V) :
Fintype.card (G.commonNeighbors v w) ≤ G.degree w := by
simp_rw [common_neighbors_symm _ v w, card_common_neighbors_le_degree_left]
#align simple_graph.card_common_neighbors_le_degree_right SimpleGraph.card_commonNeighbors_le_degree_right
+-/
+#print SimpleGraph.card_commonNeighbors_lt_card_verts /-
theorem card_commonNeighbors_lt_card_verts [DecidableRel G.Adj] (v w : V) :
Fintype.card (G.commonNeighbors v w) < Fintype.card V :=
Nat.lt_of_le_of_lt (G.card_commonNeighbors_le_degree_left _ _) (G.degree_lt_card_verts v)
#align simple_graph.card_common_neighbors_lt_card_verts SimpleGraph.card_commonNeighbors_lt_card_verts
+-/
+#print SimpleGraph.Adj.card_commonNeighbors_lt_degree /-
/-- If the condition `G.adj v w` fails, then `card_common_neighbors_le_degree` is
the best we can do in general.
-/
@@ -1586,7 +2361,14 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
· rw [neighbor_finset, Set.toFinset_subset_toFinset]
exact G.common_neighbors_subset_neighbor_set_left _ _
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
+-/
+/- warning: simple_graph.card_common_neighbors_top -> SimpleGraph.card_commonNeighbors_top is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
+but is expected to have type
+ forall {V : Type.{u1}} [_inst_1 : Fintype.{u1} V] [_inst_2 : DecidableEq.{succ u1} V] {v : V} {w : V}, (Ne.{succ u1} V v w) -> (Eq.{1} Nat (Fintype.card.{u1} (Set.Elem.{u1} V (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w)) (Subtype.fintype.{u1} V (fun (x : V) => Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) x (SimpleGraph.commonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) v w)) (fun (a : V) => SimpleGraph.decidableMemCommonNeighbors.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) (fun (a : V) (b : V) => SimpleGraph.Top.adjDecidable.{u1} V (fun (a : V) (b : V) => _inst_2 a b) a b) v w a) _inst_1)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u1} V _inst_1) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.card_common_neighbors_top SimpleGraph.card_commonNeighbors_topₓ'. -/
theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
Fintype.card ((⊤ : SimpleGraph V).commonNeighbors v w) = Fintype.card V - 2 :=
by
@@ -1600,6 +2382,7 @@ end Finite
section Maps
+#print SimpleGraph.Hom /-
/-- A graph homomorphism is a map on vertex sets that respects adjacency relations.
The notation `G →g G'` represents the type of graph homomorphisms.
@@ -1607,7 +2390,9 @@ The notation `G →g G'` represents the type of graph homomorphisms.
abbrev Hom :=
RelHom G.Adj G'.Adj
#align simple_graph.hom SimpleGraph.Hom
+-/
+#print SimpleGraph.Embedding /-
/-- A graph embedding is an embedding `f` such that for vertices `v w : V`,
`G.adj f(v) f(w) ↔ G.adj v w `. Its image is an induced subgraph of G'.
@@ -1616,7 +2401,9 @@ The notation `G ↪g G'` represents the type of graph embeddings.
abbrev Embedding :=
RelEmbedding G.Adj G'.Adj
#align simple_graph.embedding SimpleGraph.Embedding
+-/
+#print SimpleGraph.Iso /-
/-- A graph isomorphism is an bijective map on vertex sets that respects adjacency relations.
The notation `G ≃g G'` represents the type of graph isomorphisms.
@@ -1624,6 +2411,7 @@ The notation `G ≃g G'` represents the type of graph isomorphisms.
abbrev Iso :=
RelIso G.Adj G'.Adj
#align simple_graph.iso SimpleGraph.Iso
+-/
-- mathport name: «expr →g »
infixl:50 " →g " => Hom
@@ -1638,46 +2426,71 @@ namespace Hom
variable {G G'} (f : G →g G')
+#print SimpleGraph.Hom.id /-
/-- The identity homomorphism from a graph to itself. -/
abbrev id : G →g G :=
RelHom.id _
#align simple_graph.hom.id SimpleGraph.Hom.id
+-/
+#print SimpleGraph.Hom.map_adj /-
theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
f.map_rel' h
#align simple_graph.hom.map_adj SimpleGraph.Hom.map_adj
+-/
-theorem map_mem_edgeSet {e : Sym2 V} (h : e ∈ G.edgeSet) : e.map f ∈ G'.edgeSet :=
+/- warning: simple_graph.hom.map_mem_edge_set -> SimpleGraph.Hom.map_mem_edgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W G G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G'))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G') {e : Sym2.{u1} V}, (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G)) -> (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f) e) (SimpleGraph.edgeSet.{u2} W G'))
+Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSetₓ'. -/
+theorem map_mem_edgeSet {e : Sym2 V} (h : e ∈ G.edgeSetEmbedding) : e.map f ∈ G'.edgeSetEmbedding :=
Quotient.ind (fun e h => Sym2.fromRel_prop.mpr (f.map_rel' h)) e h
#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSet
+#print SimpleGraph.Hom.apply_mem_neighborSet /-
theorem apply_mem_neighborSet {v w : V} (h : w ∈ G.neighborSet v) : f w ∈ G'.neighborSet (f v) :=
map_adj f h
#align simple_graph.hom.apply_mem_neighbor_set SimpleGraph.Hom.apply_mem_neighborSet
+-/
+/- warning: simple_graph.hom.map_edge_set -> SimpleGraph.Hom.mapEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Hom.{u1, u2} V W G G') -> (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) -> (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G'))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Hom.{u1, u2} V W G G') -> (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) -> (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G'))
+Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_edge_set SimpleGraph.Hom.mapEdgeSetₓ'. -/
/-- The map between edge sets induced by a homomorphism.
The underlying map on edges is given by `sym2.map`. -/
@[simps]
-def mapEdgeSet (e : G.edgeSet) : G'.edgeSet :=
+def mapEdgeSet (e : G.edgeSetEmbedding) : G'.edgeSetEmbedding :=
⟨Sym2.map f e, f.map_mem_edgeSet e.property⟩
#align simple_graph.hom.map_edge_set SimpleGraph.Hom.mapEdgeSet
+#print SimpleGraph.Hom.mapNeighborSet /-
/-- The map between neighbor sets induced by a homomorphism. -/
@[simps]
def mapNeighborSet (v : V) (w : G.neighborSet v) : G'.neighborSet (f v) :=
⟨f w, f.apply_mem_neighborSet w.property⟩
#align simple_graph.hom.map_neighbor_set SimpleGraph.Hom.mapNeighborSet
+-/
+#print SimpleGraph.Hom.mapDart /-
/-- The map between darts induced by a homomorphism. -/
def mapDart (d : G.Dart) : G'.Dart :=
⟨d.1.map f f, f.map_adj d.2⟩
#align simple_graph.hom.map_dart SimpleGraph.Hom.mapDart
+-/
+#print SimpleGraph.Hom.mapDart_apply /-
@[simp]
theorem mapDart_apply (d : G.Dart) : f.mapDart d = ⟨d.1.map f f, f.map_adj d.2⟩ :=
rfl
#align simple_graph.hom.map_dart_apply SimpleGraph.Hom.mapDart_apply
+-/
+#print SimpleGraph.Hom.mapSpanningSubgraphs /-
/-- The induced map for spanning subgraphs, which is the identity on vertices. -/
@[simps]
def mapSpanningSubgraphs {G G' : SimpleGraph V} (h : G ≤ G') : G →g G'
@@ -1685,7 +2498,14 @@ def mapSpanningSubgraphs {G G' : SimpleGraph V} (h : G ≤ G') : G →g G'
toFun x := x
map_rel' := h
#align simple_graph.hom.map_spanning_subgraphs SimpleGraph.Hom.mapSpanningSubgraphs
+-/
+/- warning: simple_graph.hom.map_edge_set.injective -> SimpleGraph.Hom.mapEdgeSet.injective is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W G G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f)) -> (Function.Injective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W G G'), (Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W G G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W G G') V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G'))) f)) -> (Function.Injective.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')) (SimpleGraph.Hom.mapEdgeSet.{u1, u2} V W G G' f))
+Case conversion may be inaccurate. Consider using '#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injectiveₓ'. -/
theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective f.mapEdgeSet :=
by
rintro ⟨e₁, h₁⟩ ⟨e₂, h₂⟩
@@ -1694,6 +2514,12 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
apply Sym2.map.injective hinj
#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injective
+/- warning: simple_graph.hom.injective_of_top_hom -> SimpleGraph.Hom.injective_of_top_hom is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) G'), Function.Injective.{succ u1, succ u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V))) G') (fun (_x : RelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelHom.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.booleanAlgebra.{u1} V)))) (SimpleGraph.Adj.{u2} W G')) f)
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G'), Function.Injective.{succ u1, succ u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G') V (fun (_x : V) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : V) => W) _x) (RelHomClass.toFunLike.{max u1 u2, u1, u2} (SimpleGraph.Hom.{u1, u2} V W (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V))) G') V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (SimpleGraph.Adj.{u2} W G') (RelHom.instRelHomClassRelHom.{u1, u2} V W (SimpleGraph.Adj.{u1} V (Top.top.{u1} (SimpleGraph.{u1} V) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} V) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} V)))) (SimpleGraph.Adj.{u2} W G'))) f)
+Case conversion may be inaccurate. Consider using '#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_homₓ'. -/
/-- Every graph homomomorphism from a complete graph is injective. -/
theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f :=
by
@@ -1702,6 +2528,7 @@ theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Inje
exact G'.ne_of_adj (map_adj _ ((top_adj _ _).mpr h))
#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_hom
+#print SimpleGraph.Hom.comap /-
/-- There is a homomorphism to a graph from a comapped graph.
When the function is injective, this is an embedding (see `simple_graph.embedding.comap`). -/
@[simps]
@@ -1710,18 +2537,23 @@ protected def comap (f : V → W) (G : SimpleGraph W) : G.comap f →g G
toFun := f
map_rel' := by simp
#align simple_graph.hom.comap SimpleGraph.Hom.comap
+-/
variable {G'' : SimpleGraph X}
+#print SimpleGraph.Hom.comp /-
/-- Composition of graph homomorphisms. -/
abbrev comp (f' : G' →g G'') (f : G →g G') : G →g G'' :=
f'.comp f
#align simple_graph.hom.comp SimpleGraph.Hom.comp
+-/
+#print SimpleGraph.Hom.coe_comp /-
@[simp]
theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
#align simple_graph.hom.coe_comp SimpleGraph.Hom.coe_comp
+-/
end Hom
@@ -1729,36 +2561,70 @@ namespace Embedding
variable {G G'} (f : G ↪g G')
+#print SimpleGraph.Embedding.refl /-
/-- The identity embedding from a graph to itself. -/
abbrev refl : G ↪g G :=
RelEmbedding.refl _
#align simple_graph.embedding.refl SimpleGraph.Embedding.refl
+-/
+#print SimpleGraph.Embedding.toHom /-
/-- An embedding of graphs gives rise to a homomorphism of graphs. -/
abbrev toHom : G →g G' :=
f.toRelHom
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
+-/
+/- warning: simple_graph.embedding.map_adj_iff -> SimpleGraph.Embedding.map_adj_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) w)) (SimpleGraph.Adj.{u1} V G v w)
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iff
-theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSet ↔ e ∈ G.edgeSet :=
+/- warning: simple_graph.embedding.map_mem_edge_set_iff -> SimpleGraph.Embedding.map_mem_edgeSet_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iffₓ'. -/
+theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iff
+/- warning: simple_graph.embedding.apply_mem_neighbor_set_iff -> SimpleGraph.Embedding.apply_mem_neighborSet_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iff
+/- warning: simple_graph.embedding.map_edge_set -> SimpleGraph.Embedding.mapEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Embedding.{u1, u2} V W G G') -> (Function.Embedding.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Embedding.{u1, u2} V W G G') -> (Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')))
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_edge_set SimpleGraph.Embedding.mapEdgeSetₓ'. -/
/-- A graph embedding induces an embedding of edge sets. -/
@[simps]
-def mapEdgeSet : G.edgeSet ↪ G'.edgeSet
+def mapEdgeSet : G.edgeSetEmbedding ↪ G'.edgeSetEmbedding
where
toFun := Hom.mapEdgeSet f
inj' := Hom.mapEdgeSet.injective f f.inj'
#align simple_graph.embedding.map_edge_set SimpleGraph.Embedding.mapEdgeSet
+/- warning: simple_graph.embedding.map_neighbor_set -> SimpleGraph.Embedding.mapNeighborSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Embedding.{u1, u2} V W G G') (v : V), Function.Embedding.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f) v)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSetₓ'. -/
/-- A graph embedding induces an embedding of neighbor sets. -/
@[simps]
def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
@@ -1770,19 +2636,24 @@ def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
exact f.inj' h
#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSet
+#print SimpleGraph.Embedding.comap /-
/-- Given an injective function, there is an embedding from the comapped graph into the original
graph. -/
@[simps]
protected def comap (f : V ↪ W) (G : SimpleGraph W) : G.comap f ↪g G :=
{ f with map_rel_iff' := by simp }
#align simple_graph.embedding.comap SimpleGraph.Embedding.comap
+-/
+#print SimpleGraph.Embedding.map /-
/-- Given an injective function, there is an embedding from a graph into the mapped graph. -/
@[simps]
protected def map (f : V ↪ W) (G : SimpleGraph V) : G ↪g G.map f :=
{ f with map_rel_iff' := by simp }
#align simple_graph.embedding.map SimpleGraph.Embedding.map
+-/
+#print SimpleGraph.Embedding.induce /-
/-- Induced graphs embed in the original graph.
Note that if `G.induce s = ⊤` (i.e., if `s` is a clique) then this gives the embedding of a
@@ -1791,13 +2662,22 @@ complete graph. -/
protected def induce (s : Set V) : G.induce s ↪g G :=
SimpleGraph.Embedding.comap (Function.Embedding.subtype _) G
#align simple_graph.embedding.induce SimpleGraph.Embedding.induce
+-/
+#print SimpleGraph.Embedding.spanningCoe /-
/-- Graphs on a set of vertices embed in their `spanning_coe`. -/
@[reducible]
protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe :=
SimpleGraph.Embedding.map (Function.Embedding.subtype _) G
#align simple_graph.embedding.spanning_coe SimpleGraph.Embedding.spanningCoe
+-/
+/- warning: simple_graph.embedding.complete_graph -> SimpleGraph.Embedding.completeGraph is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Function.Embedding.{succ u1, succ u2} α β) -> (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} β))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraphₓ'. -/
/-- Embeddings of types induce embeddings of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ↪ β) :
(⊤ : SimpleGraph α) ↪g (⊤ : SimpleGraph β) :=
@@ -1806,11 +2686,19 @@ protected def completeGraph {α β : Type _} (f : α ↪ β) :
variable {G'' : SimpleGraph X}
+#print SimpleGraph.Embedding.comp /-
/-- Composition of graph embeddings. -/
abbrev comp (f' : G' ↪g G'') (f : G ↪g G') : G ↪g G'' :=
f.trans f'
#align simple_graph.embedding.comp SimpleGraph.Embedding.comp
+-/
+/- warning: simple_graph.embedding.coe_comp -> SimpleGraph.Embedding.coe_comp is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Embedding.{u1, u3} V X G G'') (fun (_x : RelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelEmbedding.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Embedding.{u2, u3} W X G' G'') (fun (_x : RelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelEmbedding.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} V W G G') (fun (_x : RelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelEmbedding.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Embedding.{u2, u3} W X G' G'') (f : SimpleGraph.Embedding.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V X (Function.instEmbeddingLikeEmbedding.{succ u1, succ u3} V X)) (RelEmbedding.toEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (SimpleGraph.Embedding.comp.{u1, u2, u3} V W X G G' G'' f' f))) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W (fun (_x : W) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : W) => X) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W X (Function.instEmbeddingLikeEmbedding.{succ u2, succ u3} W X)) (RelEmbedding.toEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') f')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.embedding.coe_comp SimpleGraph.Embedding.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
@@ -1823,33 +2711,41 @@ section InduceHom
variable {G G'} {G'' : SimpleGraph X} {s : Set V} {t : Set W} {r : Set X} (φ : G →g G')
(φst : Set.MapsTo φ s t) (ψ : G' →g G'') (ψtr : Set.MapsTo ψ t r)
+#print SimpleGraph.InduceHom /-
/-- The restriction of a morphism of graphs to induced subgraphs. -/
-def induceHom : G.induce s →g G'.induce t
+def InduceHom : G.induce s →g G'.induce t
where
toFun := Set.MapsTo.restrict φ s t φst
map_rel' _ _ := φ.map_rel'
-#align simple_graph.induce_hom SimpleGraph.induceHom
+#align simple_graph.induce_hom SimpleGraph.InduceHom
+-/
+#print SimpleGraph.coe_induceHom /-
@[simp, norm_cast]
-theorem coe_induceHom : ⇑(induceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
+theorem coe_induceHom : ⇑(InduceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
rfl
#align simple_graph.coe_induce_hom SimpleGraph.coe_induceHom
+-/
+#print SimpleGraph.induceHom_id /-
@[simp]
theorem induceHom_id (G : SimpleGraph V) (s) :
- induceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id :=
+ InduceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id :=
by
ext x
rfl
#align simple_graph.induce_hom_id SimpleGraph.induceHom_id
+-/
+#print SimpleGraph.induceHom_comp /-
@[simp]
theorem induceHom_comp :
- (induceHom ψ ψtr).comp (induceHom φ φst) = induceHom (ψ.comp φ) (ψtr.comp φst) :=
+ (InduceHom ψ ψtr).comp (InduceHom φ φst) = InduceHom (ψ.comp φ) (ψtr.comp φst) :=
by
ext x
rfl
#align simple_graph.induce_hom_comp SimpleGraph.induceHom_comp
+-/
end InduceHom
@@ -1857,41 +2753,73 @@ namespace Iso
variable {G G'} (f : G ≃g G')
+#print SimpleGraph.Iso.refl /-
/-- The identity isomorphism of a graph with itself. -/
abbrev refl : G ≃g G :=
RelIso.refl _
#align simple_graph.iso.refl SimpleGraph.Iso.refl
+-/
+#print SimpleGraph.Iso.toEmbedding /-
/-- An isomorphism of graphs gives rise to an embedding of graphs. -/
abbrev toEmbedding : G ↪g G' :=
f.toRelEmbedding
#align simple_graph.iso.to_embedding SimpleGraph.Iso.toEmbedding
+-/
+#print SimpleGraph.Iso.toHom /-
/-- An isomorphism of graphs gives rise to a homomorphism of graphs. -/
abbrev toHom : G →g G' :=
f.toEmbedding.toHom
#align simple_graph.iso.to_hom SimpleGraph.Iso.toHom
+-/
+#print SimpleGraph.Iso.symm /-
/-- The inverse of a graph isomorphism. -/
abbrev symm : G' ≃g G :=
f.symm
#align simple_graph.iso.symm SimpleGraph.Iso.symm
+-/
+/- warning: simple_graph.iso.map_adj_iff -> SimpleGraph.Iso.map_adj_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w)) (SimpleGraph.Adj.{u1} V G v w)
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (SimpleGraph.Adj.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) v) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) w)) (SimpleGraph.Adj.{u1} V G v w)
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iffₓ'. -/
theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iff
-theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSet ↔ e ∈ G.edgeSet :=
+/- warning: simple_graph.iso.map_mem_edge_set_iff -> SimpleGraph.Iso.map_mem_edgeSet_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.Mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.hasMem.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f) e) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')) (Membership.Mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.hasMem.{u1} (Sym2.{u1} V)) e (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {e : Sym2.{u1} V}, Iff (Membership.mem.{u2, u2} (Sym2.{u2} W) (Set.{u2} (Sym2.{u2} W)) (Set.instMembershipSet.{u2} (Sym2.{u2} W)) (Sym2.map.{u1, u2} V W (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f))) e) (SimpleGraph.edgeSet.{u2} W G')) (Membership.mem.{u1, u1} (Sym2.{u1} V) (Set.{u1} (Sym2.{u1} V)) (Set.instMembershipSet.{u1} (Sym2.{u1} V)) e (SimpleGraph.edgeSet.{u1} V G))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iffₓ'. -/
+theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSetEmbedding ↔ e ∈ G.edgeSetEmbedding :=
Quotient.ind (fun ⟨v, w⟩ => f.map_adj_iff) e
#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iff
+/- warning: simple_graph.iso.apply_mem_neighbor_set_iff -> SimpleGraph.Iso.apply_mem_neighborSet_iff is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.Mem.{u2, u2} W (Set.{u2} W) (Set.hasMem.{u2} W) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f w) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v))) (Membership.Mem.{u1, u1} V (Set.{u1} V) (Set.hasMem.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') {v : V} {w : V}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) w) (Set.{u2} W) (Set.instMembershipSet.{u2} W) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) w) (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) v))) (Membership.mem.{u1, u1} V (Set.{u1} V) (Set.instMembershipSet.{u1} V) w (SimpleGraph.neighborSet.{u1} V G v))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iffₓ'. -/
theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
map_adj_iff f
#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iff
+/- warning: simple_graph.iso.map_edge_set -> SimpleGraph.Iso.mapEdgeSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Iso.{u1, u2} V W G G') -> (Equiv.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Sym2.{u1} V)) Type.{u1} (Set.hasCoeToSort.{u1} (Sym2.{u1} V)) (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (SimpleGraph.hasLe.{u1} V) (Set.hasLe.{u1} (Sym2.{u1} V))) (fun (_x : RelEmbedding.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) => (SimpleGraph.{u1} V) -> (Set.{u1} (Sym2.{u1} V))) (RelEmbedding.hasCoeToFun.{u1, u1} (SimpleGraph.{u1} V) (Set.{u1} (Sym2.{u1} V)) (LE.le.{u1} (SimpleGraph.{u1} V) (SimpleGraph.hasLe.{u1} V)) (LE.le.{u1} (Set.{u1} (Sym2.{u1} V)) (Set.hasLe.{u1} (Sym2.{u1} V)))) (SimpleGraph.edgeSetEmbedding.{u1} V) G)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} (Sym2.{u2} W)) Type.{u2} (Set.hasCoeToSort.{u2} (Sym2.{u2} W)) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (SimpleGraph.hasLe.{u2} W) (Set.hasLe.{u2} (Sym2.{u2} W))) (fun (_x : RelEmbedding.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) => (SimpleGraph.{u2} W) -> (Set.{u2} (Sym2.{u2} W))) (RelEmbedding.hasCoeToFun.{u2, u2} (SimpleGraph.{u2} W) (Set.{u2} (Sym2.{u2} W)) (LE.le.{u2} (SimpleGraph.{u2} W) (SimpleGraph.hasLe.{u2} W)) (LE.le.{u2} (Set.{u2} (Sym2.{u2} W)) (Set.hasLe.{u2} (Sym2.{u2} W)))) (SimpleGraph.edgeSetEmbedding.{u2} W) G')))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W}, (SimpleGraph.Iso.{u1, u2} V W G G') -> (Equiv.{succ u1, succ u2} (Set.Elem.{u1} (Sym2.{u1} V) (SimpleGraph.edgeSet.{u1} V G)) (Set.Elem.{u2} (Sym2.{u2} W) (SimpleGraph.edgeSet.{u2} W G')))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSetₓ'. -/
/-- An isomorphism of graphs induces an equivalence of edge sets. -/
@[simps]
-def mapEdgeSet : G.edgeSet ≃ G'.edgeSet
+def mapEdgeSet : G.edgeSetEmbedding ≃ G'.edgeSetEmbedding
where
toFun := Hom.mapEdgeSet f
invFun := Hom.mapEdgeSet f.symm
@@ -1911,6 +2839,12 @@ def mapEdgeSet : G.edgeSet ≃ G'.edgeSet
exact funext fun _ => RelIso.apply_symm_apply _ _
#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSet
+/- warning: simple_graph.iso.map_neighbor_set -> SimpleGraph.Iso.mapNeighborSet is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} V) Type.{u1} (Set.hasCoeToSort.{u1} V) (SimpleGraph.neighborSet.{u1} V G v)) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} W) Type.{u2} (Set.hasCoeToSort.{u2} W) (SimpleGraph.neighborSet.{u2} W G' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f v)))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} (f : SimpleGraph.Iso.{u1, u2} V W G G') (v : V), Equiv.{succ u1, succ u2} (Set.Elem.{u1} V (SimpleGraph.neighborSet.{u1} V G v)) (Set.Elem.{u2} W (SimpleGraph.neighborSet.{u2} W G' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f)) v)))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSetₓ'. -/
/-- A graph isomorphism induces an equivalence of neighbor sets. -/
@[simps]
def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
@@ -1924,29 +2858,47 @@ def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
right_inv w := by simp
#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSet
+#print SimpleGraph.Iso.card_eq_of_iso /-
theorem card_eq_of_iso [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
convert (Fintype.ofEquiv_card f.to_equiv).symm
#align simple_graph.iso.card_eq_of_iso SimpleGraph.Iso.card_eq_of_iso
+-/
+#print SimpleGraph.Iso.comap /-
/-- Given a bijection, there is an embedding from the comapped graph into the original
graph. -/
@[simps]
protected def comap (f : V ≃ W) (G : SimpleGraph W) : G.comap f.toEmbedding ≃g G :=
{ f with map_rel_iff' := by simp }
#align simple_graph.iso.comap SimpleGraph.Iso.comap
+-/
+#print SimpleGraph.Iso.map /-
/-- Given an injective function, there is an embedding from a graph into the mapped graph. -/
@[simps]
protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding :=
{ f with map_rel_iff' := by simp }
#align simple_graph.iso.map SimpleGraph.Iso.map
+-/
+/- warning: simple_graph.iso.complete_graph -> SimpleGraph.Iso.completeGraph is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}}, (Equiv.{succ u1, succ u2} α β) -> (SimpleGraph.Iso.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} β))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraphₓ'. -/
/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
protected def completeGraph {α β : Type _} (f : α ≃ β) :
(⊤ : SimpleGraph α) ≃g (⊤ : SimpleGraph β) :=
{ f with map_rel_iff' := by simp }
#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraph
+/- warning: simple_graph.iso.to_embedding_complete_graph -> SimpleGraph.Iso.toEmbedding_completeGraph is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} (f : Equiv.{succ u1, succ u2} α β), Eq.{max (succ u1) (succ u2)} (SimpleGraph.Embedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β)))) (SimpleGraph.Iso.toEmbedding.{u1, u2} α β (Top.top.{u1} (SimpleGraph.{u1} α) (BooleanAlgebra.toHasTop.{u1} (SimpleGraph.{u1} α) (SimpleGraph.booleanAlgebra.{u1} α))) (Top.top.{u2} (SimpleGraph.{u2} β) (BooleanAlgebra.toHasTop.{u2} (SimpleGraph.{u2} β) (SimpleGraph.booleanAlgebra.{u2} β))) (SimpleGraph.Iso.completeGraph.{u1, u2} α β f)) (SimpleGraph.Embedding.completeGraph.{u1, u2} α β (Equiv.toEmbedding.{succ u1, succ u2} α β f))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} (f : Equiv.{succ u2, succ u1} α β), Eq.{max (succ u2) (succ u1)} (SimpleGraph.Embedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} α))) (Top.top.{u1} (SimpleGraph.{u1} β) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} β)))) (SimpleGraph.Iso.toEmbedding.{u2, u1} α β (Top.top.{u2} (SimpleGraph.{u2} α) (BooleanAlgebra.toTop.{u2} (SimpleGraph.{u2} α) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u2} α))) (Top.top.{u1} (SimpleGraph.{u1} β) (BooleanAlgebra.toTop.{u1} (SimpleGraph.{u1} β) (SimpleGraph.instBooleanAlgebraSimpleGraph.{u1} β))) (SimpleGraph.Iso.completeGraph.{u2, u1} α β f)) (SimpleGraph.Embedding.completeGraph.{u2, u1} α β (Equiv.toEmbedding.{succ u2, succ u1} α β f))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraphₓ'. -/
theorem toEmbedding_completeGraph {α β : Type _} (f : α ≃ β) :
(Iso.completeGraph f).toEmbedding = Embedding.completeGraph f.toEmbedding :=
rfl
@@ -1954,11 +2906,19 @@ theorem toEmbedding_completeGraph {α β : Type _} (f : α ≃ β) :
variable {G'' : SimpleGraph X}
+#print SimpleGraph.Iso.comp /-
/-- Composition of graph isomorphisms. -/
abbrev comp (f' : G' ≃g G'') (f : G ≃g G') : G ≃g G'' :=
f.trans f'
#align simple_graph.iso.comp SimpleGraph.Iso.comp
+-/
+/- warning: simple_graph.iso.coe_comp -> SimpleGraph.Iso.coe_comp is a dubious translation:
+lean 3 declaration is
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (V -> X) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (SimpleGraph.Iso.{u1, u3} V X G G'') (fun (_x : RelIso.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) => V -> X) (RelIso.hasCoeToFun.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'')) (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)) (Function.comp.{succ u1, succ u2, succ u3} V W X (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (SimpleGraph.Iso.{u2, u3} W X G' G'') (fun (_x : RelIso.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) => W -> X) (RelIso.hasCoeToFun.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'')) f') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (SimpleGraph.Iso.{u1, u2} V W G G') (fun (_x : RelIso.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) => V -> W) (RelIso.hasCoeToFun.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G')) f))
+but is expected to have type
+ forall {V : Type.{u1}} {W : Type.{u2}} {X : Type.{u3}} {G : SimpleGraph.{u1} V} {G' : SimpleGraph.{u2} W} {G'' : SimpleGraph.{u3} X} (f' : SimpleGraph.Iso.{u2, u3} W X G' G'') (f : SimpleGraph.Iso.{u1, u2} V W G G'), Eq.{max (succ u1) (succ u3)} (forall (ᾰ : V), (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) ᾰ) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => X) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u3), succ u1, succ u3} (Function.Embedding.{succ u1, succ u3} V X) V X (Function.instEmbeddingLikeEmbedding.{succ u1, succ u3} V X)) (RelEmbedding.toEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (RelIso.toRelEmbedding.{u1, u3} V X (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u3} X G'') (SimpleGraph.Iso.comp.{u1, u2, u3} V W X G G' G'' f' f)))) (Function.comp.{succ u1, succ u2, succ u3} V W X (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W (fun (_x : W) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : W) => X) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u3), succ u2, succ u3} (Function.Embedding.{succ u2, succ u3} W X) W X (Function.instEmbeddingLikeEmbedding.{succ u2, succ u3} W X)) (RelEmbedding.toEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') (RelIso.toRelEmbedding.{u2, u3} W X (SimpleGraph.Adj.{u2} W G') (SimpleGraph.Adj.{u3} X G'') f'))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V (fun (_x : V) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : V) => W) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (Function.Embedding.{succ u1, succ u2} V W) V W (Function.instEmbeddingLikeEmbedding.{succ u1, succ u2} V W)) (RelEmbedding.toEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') (RelIso.toRelEmbedding.{u1, u2} V W (SimpleGraph.Adj.{u1} V G) (SimpleGraph.Adj.{u2} W G') f))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.iso.coe_comp SimpleGraph.Iso.coe_compₓ'. -/
@[simp]
theorem coe_comp (f' : G' ≃g G'') (f : G ≃g G') : ⇑(f'.comp f) = f' ∘ f :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -453,7 +453,7 @@ variable {G₁ G₂ : SimpleGraph V}
`G.Adj`. This is the order embedding; for the edge set of a particular graph, see
`SimpleGraph.edgeSet`.
-The way `edgeSet` is defined is such that `mem_edgeSet` is proved by `refl`.
+The way `edgeSet` is defined is such that `mem_edgeSet` is proved by `Iff.rfl`.
(That is, `s(v, w) ∈ G.edgeSet` is definitionally equal to `G.Adj v w`.)
-/
-- Porting note: We need a separate definition so that dot notation works.
@@ -662,7 +662,7 @@ theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by
ext v w
- simp only [fromEdgeSet_adj, Set.mem_inter_iff, Ne.def, inf_adj]
+ simp only [fromEdgeSet_adj, Set.mem_inter_iff, Ne, inf_adj]
tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
@@ -683,7 +683,7 @@ theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
@[mono]
theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤ fromEdgeSet t := by
rintro v w
- simp (config := { contextual := true }) only [fromEdgeSet_adj, Ne.def, not_false_iff,
+ simp (config := { contextual := true }) only [fromEdgeSet_adj, Ne, not_false_iff,
and_true_iff, and_imp]
exact fun vws _ => h vws
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
ball
and bex
from lemma names (#10816)
ball
for "bounded forall" and bex
for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem
and exists_mem
in the few Set
lemma names that mention them.
Also deprecate ball_image_of_ball
, mem_image_elim
, mem_image_elim_on
since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image
semi-implicit), have obscure names and are completely unused.
@@ -317,7 +317,7 @@ theorem sInf_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
theorem iInf_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
(⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
- rw [iInf, sInf_adj_of_nonempty (Set.range_nonempty _), Set.forall_range_iff]
+ rw [iInf, sInf_adj_of_nonempty (Set.range_nonempty _), Set.forall_mem_range]
#align simple_graph.infi_adj_of_nonempty SimpleGraph.iInf_adj_of_nonempty
/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.Adj a b → H.Adj a b`. -/
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -38,13 +38,13 @@ This module defines simple graphs on a vertex type `V` as an irreflexive symmetr
look like.
-/
--- porting note: using `aesop` for automation
+-- Porting note: using `aesop` for automation
--- porting note: These attributes are needed to use `aesop` as a replacement for `obviously`
+-- Porting note: These attributes are needed to use `aesop` as a replacement for `obviously`
attribute [aesop norm unfold (rule_sets := [SimpleGraph])] Symmetric
attribute [aesop norm unfold (rule_sets := [SimpleGraph])] Irreflexive
--- porting note: a thin wrapper around `aesop` for graph lemmas, modelled on `aesop_cat`
+-- Porting note: a thin wrapper around `aesop` for graph lemmas, modelled on `aesop_cat`
/--
A variant of the `aesop` tactic for use in the graph library. Changes relative
to standard `aesop`:
@@ -96,7 +96,7 @@ structure SimpleGraph (V : Type u) where
symm : Symmetric Adj := by aesop_graph
loopless : Irreflexive Adj := by aesop_graph
#align simple_graph SimpleGraph
--- porting note: changed `obviously` to `aesop` in the `structure`
+-- Porting note: changed `obviously` to `aesop` in the `structure`
initialize_simps_projections SimpleGraph (Adj → adj)
@@ -140,7 +140,7 @@ theorem SimpleGraph.fromRel_adj {V : Type u} (r : V → V → Prop) (v w : V) :
Iff.rfl
#align simple_graph.from_rel_adj SimpleGraph.fromRel_adj
--- porting note: attributes needed for `completeGraph`
+-- Porting note: attributes needed for `completeGraph`
attribute [aesop safe (rule_sets := [SimpleGraph])] Ne.symm
attribute [aesop safe (rule_sets := [SimpleGraph])] Ne.irrefl
@@ -456,7 +456,7 @@ variable {G₁ G₂ : SimpleGraph V}
The way `edgeSet` is defined is such that `mem_edgeSet` is proved by `refl`.
(That is, `s(v, w) ∈ G.edgeSet` is definitionally equal to `G.Adj v w`.)
-/
--- porting note: We need a separate definition so that dot notation works.
+-- Porting note: We need a separate definition so that dot notation works.
def edgeSetEmbedding (V : Type*) : SimpleGraph V ↪o Set (Sym2 V) :=
OrderEmbedding.ofMapLEIff (fun G => Sym2.fromRel G.symm) fun _ _ =>
⟨fun h a b => @h s(a, b), fun h e => Sym2.ind @h e⟩
@@ -916,7 +916,7 @@ See also: `SimpleGraph.Subgraph.deleteEdges`. -/
def deleteEdges (s : Set (Sym2 V)) : SimpleGraph V where
Adj := G.Adj \ Sym2.ToRel s
symm a b := by simp [adj_comm, Sym2.eq_swap]
- loopless a := by simp [SDiff.sdiff] -- porting note: used to be handled by `obviously`
+ loopless a := by simp [SDiff.sdiff] -- Porting note: used to be handled by `obviously`
#align simple_graph.delete_edges SimpleGraph.deleteEdges
@[simp]
@@ -41,8 +41,8 @@ This module defines simple graphs on a vertex type `V` as an irreflexive symmetr
-- porting note: using `aesop` for automation
-- porting note: These attributes are needed to use `aesop` as a replacement for `obviously`
-attribute [aesop norm unfold (rule_sets [SimpleGraph])] Symmetric
-attribute [aesop norm unfold (rule_sets [SimpleGraph])] Irreflexive
+attribute [aesop norm unfold (rule_sets := [SimpleGraph])] Symmetric
+attribute [aesop norm unfold (rule_sets := [SimpleGraph])] Irreflexive
-- porting note: a thin wrapper around `aesop` for graph lemmas, modelled on `aesop_cat`
/--
@@ -58,7 +58,7 @@ macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
(config := { introsTransparency? := some .default, terminal := true })
- (rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
+ (rule_sets := [$(Lean.mkIdent `SimpleGraph):ident]))
/--
Use `aesop_graph?` to pass along a `Try this` suggestion when using `aesop_graph`
@@ -67,7 +67,7 @@ macro (name := aesop_graph?) "aesop_graph?" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
(config := { introsTransparency? := some .default, terminal := true })
- (rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
+ (rule_sets := [$(Lean.mkIdent `SimpleGraph):ident]))
/--
A variant of `aesop_graph` which does not fail if it is unable to solve the
@@ -78,7 +78,7 @@ macro (name := aesop_graph_nonterminal) "aesop_graph_nonterminal" c:Aesop.tactic
`(tactic|
aesop $c*
(config := { introsTransparency? := some .default, warnOnNonterminal := false })
- (rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
+ (rule_sets := [$(Lean.mkIdent `SimpleGraph):ident]))
open Finset Function
@@ -89,7 +89,7 @@ The relation describes which pairs of vertices are adjacent.
There is exactly one edge for every pair of adjacent vertices;
see `SimpleGraph.edgeSet` for the corresponding edge set.
-/
-@[ext, aesop safe constructors (rule_sets [SimpleGraph])]
+@[ext, aesop safe constructors (rule_sets := [SimpleGraph])]
structure SimpleGraph (V : Type u) where
/-- The adjacency relation of a simple graph. -/
Adj : V → V → Prop
@@ -141,8 +141,8 @@ theorem SimpleGraph.fromRel_adj {V : Type u} (r : V → V → Prop) (v w : V) :
#align simple_graph.from_rel_adj SimpleGraph.fromRel_adj
-- porting note: attributes needed for `completeGraph`
-attribute [aesop safe (rule_sets [SimpleGraph])] Ne.symm
-attribute [aesop safe (rule_sets [SimpleGraph])] Ne.irrefl
+attribute [aesop safe (rule_sets := [SimpleGraph])] Ne.symm
+attribute [aesop safe (rule_sets := [SimpleGraph])] Ne.irrefl
/-- The complete graph on a type `V` is the simple graph with all pairs of distinct vertices
adjacent. In `Mathlib`, this is usually referred to as `⊤`. -/
@@ -25,9 +25,6 @@ This module defines simple graphs on a vertex type `V` as an irreflexive symmetr
* `SimpleGraph.incidenceSet` is the `Set` of edges containing a given vertex
-* `SimpleGraph.Dart` is an ordered pair of adjacent vertices, thought of as being an
- orientated edge. These are also known as "half-edges" or "bonds."
-
* `CompleteAtomicBooleanAlgebra` instance: Under the subgraph relation, `SimpleGraph` forms a
`CompleteAtomicBooleanAlgebra`. In other words, this is the complete lattice of spanning subgraphs
of the complete graph.
@@ -131,8 +128,7 @@ instance {V : Type u} [Fintype V] [DecidableEq V] : Fintype (SimpleGraph V) wher
/-- Construct the simple graph induced by the given relation. It
symmetrizes the relation and makes it irreflexive. -/
-def SimpleGraph.fromRel {V : Type u} (r : V → V → Prop) : SimpleGraph V
- where
+def SimpleGraph.fromRel {V : Type u} (r : V → V → Prop) : SimpleGraph V where
Adj a b := a ≠ b ∧ (r a b ∨ r b a)
symm := fun _ _ ⟨hn, hr⟩ => ⟨hn.symm, hr.symm⟩
loopless := fun _ ⟨hn, _⟩ => hn rfl
@@ -708,145 +704,6 @@ instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSet := by
end FromEdgeSet
-/-! ## Darts -/
-
-/-- A `Dart` is an oriented edge, implemented as an ordered pair of adjacent vertices.
-This terminology comes from combinatorial maps, and they are also known as "half-edges"
-or "bonds." -/
-structure Dart extends V × V where
- is_adj : G.Adj fst snd
- deriving DecidableEq
-#align simple_graph.dart SimpleGraph.Dart
-
-initialize_simps_projections Dart (+toProd, -fst, -snd)
-
-section Darts
-
-variable {G}
-
-theorem Dart.ext_iff (d₁ d₂ : G.Dart) : d₁ = d₂ ↔ d₁.toProd = d₂.toProd := by
- cases d₁; cases d₂; simp
-#align simple_graph.dart.ext_iff SimpleGraph.Dart.ext_iff
-
-@[ext]
-theorem Dart.ext (d₁ d₂ : G.Dart) (h : d₁.toProd = d₂.toProd) : d₁ = d₂ :=
- (Dart.ext_iff d₁ d₂).mpr h
-#align simple_graph.dart.ext SimpleGraph.Dart.ext
-
--- Porting note: deleted `Dart.fst` and `Dart.snd` since they are now invalid declaration names,
--- even though there is not actually a `SimpleGraph.Dart.fst` or `SimpleGraph.Dart.snd`.
-
-theorem Dart.toProd_injective : Function.Injective (Dart.toProd : G.Dart → V × V) :=
- Dart.ext
-#align simple_graph.dart.to_prod_injective SimpleGraph.Dart.toProd_injective
-
-instance Dart.fintype [Fintype V] [DecidableRel G.Adj] : Fintype G.Dart :=
- Fintype.ofEquiv (Σ v, G.neighborSet v)
- { toFun := fun s => ⟨(s.fst, s.snd), s.snd.property⟩
- invFun := fun d => ⟨d.fst, d.snd, d.is_adj⟩
- left_inv := fun s => by ext <;> simp
- right_inv := fun d => by ext <;> simp }
-#align simple_graph.dart.fintype SimpleGraph.Dart.fintype
-
-/-- The edge associated to the dart. -/
-def Dart.edge (d : G.Dart) : Sym2 V :=
- Sym2.mk d.toProd
-#align simple_graph.dart.edge SimpleGraph.Dart.edge
-
-@[simp]
-theorem Dart.edge_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).edge = Sym2.mk p :=
- rfl
-#align simple_graph.dart.edge_mk SimpleGraph.Dart.edge_mk
-
-@[simp]
-theorem Dart.edge_mem (d : G.Dart) : d.edge ∈ G.edgeSet :=
- d.is_adj
-#align simple_graph.dart.edge_mem SimpleGraph.Dart.edge_mem
-
-/-- The dart with reversed orientation from a given dart. -/
-@[simps]
-def Dart.symm (d : G.Dart) : G.Dart :=
- ⟨d.toProd.swap, G.symm d.is_adj⟩
-#align simple_graph.dart.symm SimpleGraph.Dart.symm
-
-@[simp]
-theorem Dart.symm_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).symm = Dart.mk p.swap h.symm :=
- rfl
-#align simple_graph.dart.symm_mk SimpleGraph.Dart.symm_mk
-
-@[simp]
-theorem Dart.edge_symm (d : G.Dart) : d.symm.edge = d.edge :=
- Sym2.mk_prod_swap_eq
-#align simple_graph.dart.edge_symm SimpleGraph.Dart.edge_symm
-
-@[simp]
-theorem Dart.edge_comp_symm : Dart.edge ∘ Dart.symm = (Dart.edge : G.Dart → Sym2 V) :=
- funext Dart.edge_symm
-#align simple_graph.dart.edge_comp_symm SimpleGraph.Dart.edge_comp_symm
-
-@[simp]
-theorem Dart.symm_symm (d : G.Dart) : d.symm.symm = d :=
- Dart.ext _ _ <| Prod.swap_swap _
-#align simple_graph.dart.symm_symm SimpleGraph.Dart.symm_symm
-
-@[simp]
-theorem Dart.symm_involutive : Function.Involutive (Dart.symm : G.Dart → G.Dart) :=
- Dart.symm_symm
-#align simple_graph.dart.symm_involutive SimpleGraph.Dart.symm_involutive
-
-theorem Dart.symm_ne (d : G.Dart) : d.symm ≠ d :=
- ne_of_apply_ne (Prod.snd ∘ Dart.toProd) d.is_adj.ne
-#align simple_graph.dart.symm_ne SimpleGraph.Dart.symm_ne
-
-theorem dart_edge_eq_iff : ∀ d₁ d₂ : G.Dart, d₁.edge = d₂.edge ↔ d₁ = d₂ ∨ d₁ = d₂.symm := by
- rintro ⟨p, hp⟩ ⟨q, hq⟩
- simp
-#align simple_graph.dart_edge_eq_iff SimpleGraph.dart_edge_eq_iff
-
-theorem dart_edge_eq_mk'_iff :
- ∀ {d : G.Dart} {p : V × V}, d.edge = Sym2.mk p ↔ d.toProd = p ∨ d.toProd = p.swap := by
- rintro ⟨p, h⟩
- apply Sym2.mk_eq_mk_iff
-#align simple_graph.dart_edge_eq_mk_iff SimpleGraph.dart_edge_eq_mk'_iff
-
-theorem dart_edge_eq_mk'_iff' :
- ∀ {d : G.Dart} {u v : V},
- d.edge = s(u, v) ↔ d.fst = u ∧ d.snd = v ∨ d.fst = v ∧ d.snd = u := by
- rintro ⟨⟨a, b⟩, h⟩ u v
- rw [dart_edge_eq_mk'_iff]
- simp
-#align simple_graph.dart_edge_eq_mk_iff' SimpleGraph.dart_edge_eq_mk'_iff'
-
-variable (G)
-
-/-- Two darts are said to be adjacent if they could be consecutive
-darts in a walk -- that is, the first dart's second vertex is equal to
-the second dart's first vertex. -/
-def DartAdj (d d' : G.Dart) : Prop :=
- d.snd = d'.fst
-#align simple_graph.dart_adj SimpleGraph.DartAdj
-
-/-- For a given vertex `v`, this is the bijective map from the neighbor set at `v`
-to the darts `d` with `d.fst = v`. -/
-@[simps]
-def dartOfNeighborSet (v : V) (w : G.neighborSet v) : G.Dart :=
- ⟨(v, w), w.property⟩
-#align simple_graph.dart_of_neighbor_set SimpleGraph.dartOfNeighborSet
-
-theorem dartOfNeighborSet_injective (v : V) : Function.Injective (G.dartOfNeighborSet v) :=
- fun e₁ e₂ h =>
- Subtype.ext <| by
- injection h with h'
- convert congr_arg Prod.snd h'
-#align simple_graph.dart_of_neighbor_set_injective SimpleGraph.dartOfNeighborSet_injective
-
-instance nonempty_dart_top [Nontrivial V] : Nonempty (⊤ : SimpleGraph V).Dart := by
- obtain ⟨v, w, h⟩ := exists_pair_ne V
- exact ⟨⟨(v, w), h⟩⟩
-#align simple_graph.nonempty_dart_top SimpleGraph.nonempty_dart_top
-
-end Darts
-
/-! ### Incidence set -/
@@ -1038,8 +895,7 @@ theorem incidence_other_neighbor_edge {v w : V} (h : w ∈ G.neighborSet v) :
/-- There is an equivalence between the set of edges incident to a given
vertex and the set of vertices adjacent to the vertex. -/
@[simps]
-def incidenceSetEquivNeighborSet (v : V) : G.incidenceSet v ≃ G.neighborSet v
- where
+def incidenceSetEquivNeighborSet (v : V) : G.incidenceSet v ≃ G.neighborSet v where
toFun e := ⟨G.otherVertexOfIncident e.2, G.incidence_other_prop e.2⟩
invFun w := ⟨s(v, w.1), G.mem_incidence_iff_neighbor.mpr w.2⟩
left_inv x := by simp [otherVertexOfIncident]
@@ -1057,8 +913,7 @@ end Incidence
graph's edge set, if present.
See also: `SimpleGraph.Subgraph.deleteEdges`. -/
-def deleteEdges (s : Set (Sym2 V)) : SimpleGraph V
- where
+def deleteEdges (s : Set (Sym2 V)) : SimpleGraph V where
Adj := G.Adj \ Sym2.ToRel s
symm a b := by simp [adj_comm, Sym2.eq_swap]
loopless a := by simp [SDiff.sdiff] -- porting note: used to be handled by `obviously`
@@ -6,18 +6,14 @@ Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
import Mathlib.Combinatorics.SimpleGraph.Init
import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
-import Mathlib.Data.Sym.Card
+import Mathlib.Data.Sym.Sym2
#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe"
/-!
# Simple graphs
-This module defines simple graphs on a vertex type `V` as an
-irreflexive symmetric relation.
-
-There is a basic API for locally finite graphs and for graphs with
-finitely many vertices.
+This module defines simple graphs on a vertex type `V` as an irreflexive symmetric relation.
## Main definitions
@@ -27,46 +23,15 @@ finitely many vertices.
* `SimpleGraph.commonNeighbors` is the intersection of the neighbor sets of two given vertices
-* `SimpleGraph.neighborFinset` is the `Finset` of vertices adjacent to a given vertex,
- if `neighborSet` is finite
-
* `SimpleGraph.incidenceSet` is the `Set` of edges containing a given vertex
-* `SimpleGraph.incidenceFinset` is the `Finset` of edges containing a given vertex,
- if `incidenceSet` is finite
-
* `SimpleGraph.Dart` is an ordered pair of adjacent vertices, thought of as being an
orientated edge. These are also known as "half-edges" or "bonds."
-* `SimpleGraph.Hom`, `SimpleGraph.Embedding`, and `SimpleGraph.Iso` for graph
- homomorphisms, graph embeddings, and
- graph isomorphisms. Note that a graph embedding is a stronger notion than an
- injective graph homomorphism, since its image is an induced subgraph.
-
* `CompleteAtomicBooleanAlgebra` instance: Under the subgraph relation, `SimpleGraph` forms a
`CompleteAtomicBooleanAlgebra`. In other words, this is the complete lattice of spanning subgraphs
of the complete graph.
-## Notations
-
-* `→g`, `↪g`, and `≃g` for graph homomorphisms, graph embeddings, and graph isomorphisms,
- respectively.
-
-## Implementation notes
-
-* A locally finite graph is one with instances `Π v, Fintype (G.neighborSet v)`.
-
-* Given instances `DecidableRel G.Adj` and `Fintype V`, then the graph
- is locally finite, too.
-
-* Morphisms of graphs are abbreviations for `RelHom`, `RelEmbedding`, and `RelIso`.
- To make use of pre-existing simp lemmas, definitions involving morphisms are
- abbreviations as well.
-
-## Naming Conventions
-
-* If the vertex type of a graph is finite, we refer to its cardinality as `CardVerts`.
-
## Todo
* This is the simplest notion of an unoriented graph. This should
@@ -204,8 +169,7 @@ def completeBipartiteGraph (V W : Type*) : SimpleGraph (Sum V W) where
namespace SimpleGraph
-variable {ι : Sort*} {𝕜 : Type*} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
- (G' : SimpleGraph W) {a b c u v w : V} {e : Sym2 V}
+variable {ι : Sort*} {V : Type u} (G : SimpleGraph V) {a b c u v w : V} {e : Sym2 V}
@[simp]
protected theorem irrefl {v : V} : ¬G.Adj v v :=
@@ -940,94 +904,6 @@ instance decidableMemIncidenceSet [DecidableEq V] [DecidableRel G.Adj] (v : V) :
inferInstanceAs <| DecidablePred fun e => e ∈ G.edgeSet ∧ v ∈ e
#align simple_graph.decidable_mem_incidence_set SimpleGraph.decidableMemIncidenceSet
-section EdgeFinset
-
-variable {G₁ G₂ : SimpleGraph V} [Fintype G.edgeSet] [Fintype G₁.edgeSet] [Fintype G₂.edgeSet]
-
-/-- The `edgeSet` of the graph as a `Finset`. -/
-@[reducible]
-def edgeFinset : Finset (Sym2 V) :=
- Set.toFinset G.edgeSet
-#align simple_graph.edge_finset SimpleGraph.edgeFinset
-
-@[norm_cast]
-theorem coe_edgeFinset : (G.edgeFinset : Set (Sym2 V)) = G.edgeSet :=
- Set.coe_toFinset _
-#align simple_graph.coe_edge_finset SimpleGraph.coe_edgeFinset
-
-variable {G}
-
-theorem mem_edgeFinset : e ∈ G.edgeFinset ↔ e ∈ G.edgeSet :=
- Set.mem_toFinset
-#align simple_graph.mem_edge_finset SimpleGraph.mem_edgeFinset
-
-theorem not_isDiag_of_mem_edgeFinset : e ∈ G.edgeFinset → ¬e.IsDiag :=
- not_isDiag_of_mem_edgeSet _ ∘ mem_edgeFinset.1
-#align simple_graph.not_is_diag_of_mem_edge_finset SimpleGraph.not_isDiag_of_mem_edgeFinset
-
-theorem edgeFinset_inj : G₁.edgeFinset = G₂.edgeFinset ↔ G₁ = G₂ := by simp
-#align simple_graph.edge_finset_inj SimpleGraph.edgeFinset_inj
-
-theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G₁ ≤ G₂ := by simp
-#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinset
-
-theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by simp
-#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
-
-alias ⟨_, edgeFinset_mono⟩ := edgeFinset_subset_edgeFinset
-#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
-
-alias ⟨_, edgeFinset_strict_mono⟩ := edgeFinset_ssubset_edgeFinset
-#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
-
-attribute [mono] edgeFinset_mono edgeFinset_strict_mono
-
-@[simp]
-theorem edgeFinset_bot : (⊥ : SimpleGraph V).edgeFinset = ∅ := by simp [edgeFinset]
-#align simple_graph.edge_finset_bot SimpleGraph.edgeFinset_bot
-
-@[simp]
-theorem edgeFinset_sup [DecidableEq V] : (G₁ ⊔ G₂).edgeFinset = G₁.edgeFinset ∪ G₂.edgeFinset := by
- simp [edgeFinset]
-#align simple_graph.edge_finset_sup SimpleGraph.edgeFinset_sup
-
-@[simp]
-theorem edgeFinset_inf [DecidableEq V] : (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset := by
- simp [edgeFinset]
-#align simple_graph.edge_finset_inf SimpleGraph.edgeFinset_inf
-
-@[simp]
-theorem edgeFinset_sdiff [DecidableEq V] : (G₁ \ G₂).edgeFinset = G₁.edgeFinset \ G₂.edgeFinset :=
- by simp [edgeFinset]
-#align simple_graph.edge_finset_sdiff SimpleGraph.edgeFinset_sdiff
-
-theorem edgeFinset_card : G.edgeFinset.card = Fintype.card G.edgeSet :=
- Set.toFinset_card _
-#align simple_graph.edge_finset_card SimpleGraph.edgeFinset_card
-
-@[simp]
-theorem edgeSet_univ_card : (univ : Finset G.edgeSet).card = G.edgeFinset.card :=
- Fintype.card_of_subtype G.edgeFinset fun _ => mem_edgeFinset
-#align simple_graph.edge_set_univ_card SimpleGraph.edgeSet_univ_card
-
-variable [Fintype V] [DecidableEq V]
-
-@[simp]
-theorem edgeFinset_top : (⊤ : SimpleGraph V).edgeFinset = univ.filter fun e => ¬e.IsDiag := by
- rw [← coe_inj]; simp
-
-/-- The complete graph on `n` vertices has `n.choose 2` edges. -/
-theorem card_edgeFinset_top_eq_card_choose_two :
- (⊤ : SimpleGraph V).edgeFinset.card = (Fintype.card V).choose 2 := by
- simp_rw [Set.toFinset_card, edgeSet_top, Set.coe_setOf, ← Sym2.card_subtype_not_diag]
-
-/-- Any graph on `n` vertices has at most `n.choose 2` edges. -/
-theorem card_edgeFinset_le_card_choose_two : G.edgeFinset.card ≤ (Fintype.card V).choose 2 := by
- rw [← card_edgeFinset_top_eq_card_choose_two]
- exact card_le_card (edgeFinset_mono le_top)
-
-end EdgeFinset
-
@[simp]
theorem mem_neighborSet (v w : V) : w ∈ G.neighborSet v ↔ G.Adj v w :=
Iff.rfl
@@ -1263,363 +1139,4 @@ theorem edgeSet_deleteEdges (s : Set (Sym2 V)) : (G.deleteEdges s).edgeSet = G.e
simp
#align simple_graph.edge_set_delete_edges SimpleGraph.edgeSet_deleteEdges
--- porting note: added `Fintype (Sym2 V)` argument rather than have it be inferred.
--- As a consequence, deleted the `Fintype V` argument.
-theorem edgeFinset_deleteEdges [Fintype (Sym2 V)] [DecidableEq V] [DecidableRel G.Adj]
- (s : Finset (Sym2 V)) [DecidableRel (G.deleteEdges s).Adj] :
- (G.deleteEdges s).edgeFinset = G.edgeFinset \ s := by
- ext e
- simp [edgeSet_deleteEdges]
-#align simple_graph.edge_finset_delete_edges SimpleGraph.edgeFinset_deleteEdges
-
-section DeleteFar
-
--- porting note: added `Fintype (Sym2 V)` argument.
-variable [OrderedRing 𝕜] [Fintype V] [Fintype (Sym2 V)] [DecidableEq V] [DecidableRel G.Adj]
- {p : SimpleGraph V → Prop} {r r₁ r₂ : 𝕜}
-
-/-- A graph is `r`-*delete-far* from a property `p` if we must delete at least `r` edges from it to
-get a graph with the property `p`. -/
-def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
- ∀ ⦃s⦄, s ⊆ G.edgeFinset → p (G.deleteEdges s) → r ≤ s.card
-#align simple_graph.delete_far SimpleGraph.DeleteFar
-
-variable {G}
-
-theorem deleteFar_iff :
- G.DeleteFar p r ↔ ∀ ⦃H : SimpleGraph _⦄ [DecidableRel H.Adj],
- H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card := by
- refine ⟨fun h H _ hHG hH ↦ ?_, fun h s hs hG ↦ ?_⟩
- · have := h (sdiff_subset G.edgeFinset H.edgeFinset)
- simp only [deleteEdges_sdiff_eq_of_le _ hHG, edgeFinset_mono hHG, card_sdiff,
- card_le_card, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
- exact this hH
- · classical
- simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
- card_le_card hs] using h (G.deleteEdges_le s) hG
-#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
-
-alias ⟨DeleteFar.le_card_sub_card, _⟩ := deleteFar_iff
-#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
-
-theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteFar p r₁ := fun _ hs hG =>
- hr.trans <| h hs hG
-#align simple_graph.delete_far.mono SimpleGraph.DeleteFar.mono
-
-end DeleteFar
-
-section FiniteAt
-
-/-!
-## Finiteness at a vertex
-
-This section contains definitions and lemmas concerning vertices that
-have finitely many adjacent vertices. We denote this condition by
-`Fintype (G.neighborSet v)`.
-
-We define `G.neighborFinset v` to be the `Finset` version of `G.neighborSet v`.
-Use `neighborFinset_eq_filter` to rewrite this definition as a `Finset.filter` expression.
--/
-
-variable (v) [Fintype (G.neighborSet v)]
-
-/-- `G.neighbors v` is the `Finset` version of `G.Adj v` in case `G` is
-locally finite at `v`. -/
-def neighborFinset : Finset V :=
- (G.neighborSet v).toFinset
-#align simple_graph.neighbor_finset SimpleGraph.neighborFinset
-
-theorem neighborFinset_def : G.neighborFinset v = (G.neighborSet v).toFinset :=
- rfl
-#align simple_graph.neighbor_finset_def SimpleGraph.neighborFinset_def
-
-@[simp]
-theorem mem_neighborFinset (w : V) : w ∈ G.neighborFinset v ↔ G.Adj v w :=
- Set.mem_toFinset
-#align simple_graph.mem_neighbor_finset SimpleGraph.mem_neighborFinset
-
-theorem not_mem_neighborFinset_self : v ∉ G.neighborFinset v := by simp
-#align simple_graph.not_mem_neighbor_finset_self SimpleGraph.not_mem_neighborFinset_self
-
-theorem neighborFinset_disjoint_singleton : Disjoint (G.neighborFinset v) {v} :=
- Finset.disjoint_singleton_right.mpr <| not_mem_neighborFinset_self _ _
-#align simple_graph.neighbor_finset_disjoint_singleton SimpleGraph.neighborFinset_disjoint_singleton
-
-theorem singleton_disjoint_neighborFinset : Disjoint {v} (G.neighborFinset v) :=
- Finset.disjoint_singleton_left.mpr <| not_mem_neighborFinset_self _ _
-#align simple_graph.singleton_disjoint_neighbor_finset SimpleGraph.singleton_disjoint_neighborFinset
-
-/-- `G.degree v` is the number of vertices adjacent to `v`. -/
-def degree : ℕ :=
- (G.neighborFinset v).card
-#align simple_graph.degree SimpleGraph.degree
-
--- Porting note: in Lean 3 we could do `simp [← degree]`, but that gives
--- "invalid '←' modifier, 'SimpleGraph.degree' is a declaration name to be unfolded".
--- In any case, having this lemma is good since there's no guarantee we won't still change
--- the definition of `degree`.
-@[simp]
-theorem card_neighborFinset_eq_degree : (G.neighborFinset v).card = G.degree v := rfl
-
-@[simp]
-theorem card_neighborSet_eq_degree : Fintype.card (G.neighborSet v) = G.degree v :=
- (Set.toFinset_card _).symm
-#align simple_graph.card_neighbor_set_eq_degree SimpleGraph.card_neighborSet_eq_degree
-
-theorem degree_pos_iff_exists_adj : 0 < G.degree v ↔ ∃ w, G.Adj v w := by
- simp only [degree, card_pos, Finset.Nonempty, mem_neighborFinset]
-#align simple_graph.degree_pos_iff_exists_adj SimpleGraph.degree_pos_iff_exists_adj
-
-theorem degree_compl [Fintype (Gᶜ.neighborSet v)] [Fintype V] :
- Gᶜ.degree v = Fintype.card V - 1 - G.degree v := by
- classical
- rw [← card_neighborSet_union_compl_neighborSet G v, Set.toFinset_union]
- simp [card_disjoint_union (Set.disjoint_toFinset.mpr (compl_neighborSet_disjoint G v))]
-#align simple_graph.degree_compl SimpleGraph.degree_compl
-
-instance incidenceSetFintype [DecidableEq V] : Fintype (G.incidenceSet v) :=
- Fintype.ofEquiv (G.neighborSet v) (G.incidenceSetEquivNeighborSet v).symm
-#align simple_graph.incidence_set_fintype SimpleGraph.incidenceSetFintype
-
-/-- This is the `Finset` version of `incidenceSet`. -/
-def incidenceFinset [DecidableEq V] : Finset (Sym2 V) :=
- (G.incidenceSet v).toFinset
-#align simple_graph.incidence_finset SimpleGraph.incidenceFinset
-
-@[simp]
-theorem card_incidenceSet_eq_degree [DecidableEq V] :
- Fintype.card (G.incidenceSet v) = G.degree v := by
- rw [Fintype.card_congr (G.incidenceSetEquivNeighborSet v)]
- simp
-#align simple_graph.card_incidence_set_eq_degree SimpleGraph.card_incidenceSet_eq_degree
-
-@[simp]
-theorem card_incidenceFinset_eq_degree [DecidableEq V] :
- (G.incidenceFinset v).card = G.degree v := by
- rw [← G.card_incidenceSet_eq_degree]
- apply Set.toFinset_card
-#align simple_graph.card_incidence_finset_eq_degree SimpleGraph.card_incidenceFinset_eq_degree
-
-@[simp]
-theorem mem_incidenceFinset [DecidableEq V] (e : Sym2 V) :
- e ∈ G.incidenceFinset v ↔ e ∈ G.incidenceSet v :=
- Set.mem_toFinset
-#align simple_graph.mem_incidence_finset SimpleGraph.mem_incidenceFinset
-
-theorem incidenceFinset_eq_filter [DecidableEq V] [Fintype G.edgeSet] :
- G.incidenceFinset v = G.edgeFinset.filter (Membership.mem v) := by
- ext e
- refine' Sym2.ind (fun x y => _) e
- simp [mk'_mem_incidenceSet_iff]
-#align simple_graph.incidence_finset_eq_filter SimpleGraph.incidenceFinset_eq_filter
-
-end FiniteAt
-
-section LocallyFinite
-
-/-- A graph is locally finite if every vertex has a finite neighbor set. -/
-@[reducible]
-def LocallyFinite :=
- ∀ v : V, Fintype (G.neighborSet v)
-#align simple_graph.locally_finite SimpleGraph.LocallyFinite
-
-variable [LocallyFinite G]
-
-/-- A locally finite simple graph is regular of degree `d` if every vertex has degree `d`. -/
-def IsRegularOfDegree (d : ℕ) : Prop :=
- ∀ v : V, G.degree v = d
-#align simple_graph.is_regular_of_degree SimpleGraph.IsRegularOfDegree
-
-variable {G}
-
-theorem IsRegularOfDegree.degree_eq {d : ℕ} (h : G.IsRegularOfDegree d) (v : V) : G.degree v = d :=
- h v
-#align simple_graph.is_regular_of_degree.degree_eq SimpleGraph.IsRegularOfDegree.degree_eq
-
-theorem IsRegularOfDegree.compl [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj]
- {k : ℕ} (h : G.IsRegularOfDegree k) : Gᶜ.IsRegularOfDegree (Fintype.card V - 1 - k) := by
- intro v
- rw [degree_compl, h v]
-#align simple_graph.is_regular_of_degree.compl SimpleGraph.IsRegularOfDegree.compl
-
-end LocallyFinite
-
-section Finite
-
-variable [Fintype V]
-
-instance neighborSetFintype [DecidableRel G.Adj] (v : V) : Fintype (G.neighborSet v) :=
- @Subtype.fintype _ _
- (by
- simp_rw [mem_neighborSet]
- infer_instance)
- _
-#align simple_graph.neighbor_set_fintype SimpleGraph.neighborSetFintype
-
-theorem neighborFinset_eq_filter {v : V} [DecidableRel G.Adj] :
- G.neighborFinset v = Finset.univ.filter (G.Adj v) := by
- ext
- simp
-#align simple_graph.neighbor_finset_eq_filter SimpleGraph.neighborFinset_eq_filter
-
-theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
- Gᶜ.neighborFinset v = (G.neighborFinset v)ᶜ \ {v} := by
- simp only [neighborFinset, neighborSet_compl, Set.toFinset_diff, Set.toFinset_compl,
- Set.toFinset_singleton]
-#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_compl
-
-@[simp]
-theorem complete_graph_degree [DecidableEq V] (v : V) :
- (⊤ : SimpleGraph V).degree v = Fintype.card V - 1 := by
- erw [degree, neighborFinset_eq_filter, filter_ne, card_erase_of_mem (mem_univ v), card_univ]
-#align simple_graph.complete_graph_degree SimpleGraph.complete_graph_degree
-
-theorem bot_degree (v : V) : (⊥ : SimpleGraph V).degree v = 0 := by
- erw [degree, neighborFinset_eq_filter, filter_False]
- exact Finset.card_empty
-#align simple_graph.bot_degree SimpleGraph.bot_degree
-
-theorem IsRegularOfDegree.top [DecidableEq V] :
- (⊤ : SimpleGraph V).IsRegularOfDegree (Fintype.card V - 1) := by
- intro v
- simp
-#align simple_graph.is_regular_of_degree.top SimpleGraph.IsRegularOfDegree.top
-
-/-- The minimum degree of all vertices (and `0` if there are no vertices).
-The key properties of this are given in `exists_minimal_degree_vertex`, `minDegree_le_degree`
-and `le_minDegree_of_forall_le_degree`. -/
-def minDegree [DecidableRel G.Adj] : ℕ :=
- WithTop.untop' 0 (univ.image fun v => G.degree v).min
-#align simple_graph.min_degree SimpleGraph.minDegree
-
-/-- There exists a vertex of minimal degree. Note the assumption of being nonempty is necessary, as
-the lemma implies there exists a vertex. -/
-theorem exists_minimal_degree_vertex [DecidableRel G.Adj] [Nonempty V] :
- ∃ v, G.minDegree = G.degree v := by
- obtain ⟨t, ht : _ = _⟩ := min_of_nonempty (univ_nonempty.image fun v => G.degree v)
- obtain ⟨v, _, rfl⟩ := mem_image.mp (mem_of_min ht)
- refine' ⟨v, by simp [minDegree, ht]⟩
-#align simple_graph.exists_minimal_degree_vertex SimpleGraph.exists_minimal_degree_vertex
-
-/-- The minimum degree in the graph is at most the degree of any particular vertex. -/
-theorem minDegree_le_degree [DecidableRel G.Adj] (v : V) : G.minDegree ≤ G.degree v := by
- obtain ⟨t, ht⟩ := Finset.min_of_mem (mem_image_of_mem (fun v => G.degree v) (mem_univ v))
- have := Finset.min_le_of_eq (mem_image_of_mem _ (mem_univ v)) ht
- rwa [minDegree, ht]
-#align simple_graph.min_degree_le_degree SimpleGraph.minDegree_le_degree
-
-/-- In a nonempty graph, if `k` is at most the degree of every vertex, it is at most the minimum
-degree. Note the assumption that the graph is nonempty is necessary as long as `G.minDegree` is
-defined to be a natural. -/
-theorem le_minDegree_of_forall_le_degree [DecidableRel G.Adj] [Nonempty V] (k : ℕ)
- (h : ∀ v, k ≤ G.degree v) : k ≤ G.minDegree := by
- rcases G.exists_minimal_degree_vertex with ⟨v, hv⟩
- rw [hv]
- apply h
-#align simple_graph.le_min_degree_of_forall_le_degree SimpleGraph.le_minDegree_of_forall_le_degree
-
-/-- The maximum degree of all vertices (and `0` if there are no vertices).
-The key properties of this are given in `exists_maximal_degree_vertex`, `degree_le_maxDegree`
-and `maxDegree_le_of_forall_degree_le`. -/
-def maxDegree [DecidableRel G.Adj] : ℕ :=
- Option.getD (univ.image fun v => G.degree v).max 0
-#align simple_graph.max_degree SimpleGraph.maxDegree
-
-/-- There exists a vertex of maximal degree. Note the assumption of being nonempty is necessary, as
-the lemma implies there exists a vertex. -/
-theorem exists_maximal_degree_vertex [DecidableRel G.Adj] [Nonempty V] :
- ∃ v, G.maxDegree = G.degree v := by
- obtain ⟨t, ht⟩ := max_of_nonempty (univ_nonempty.image fun v => G.degree v)
- have ht₂ := mem_of_max ht
- simp only [mem_image, mem_univ, exists_prop_of_true] at ht₂
- rcases ht₂ with ⟨v, _, rfl⟩
- refine' ⟨v, _⟩
- rw [maxDegree, ht]
- rfl
-#align simple_graph.exists_maximal_degree_vertex SimpleGraph.exists_maximal_degree_vertex
-
-/-- The maximum degree in the graph is at least the degree of any particular vertex. -/
-theorem degree_le_maxDegree [DecidableRel G.Adj] (v : V) : G.degree v ≤ G.maxDegree := by
- obtain ⟨t, ht : _ = _⟩ := Finset.max_of_mem (mem_image_of_mem (fun v => G.degree v) (mem_univ v))
- have := Finset.le_max_of_eq (mem_image_of_mem _ (mem_univ v)) ht
- rwa [maxDegree, ht]
-#align simple_graph.degree_le_max_degree SimpleGraph.degree_le_maxDegree
-
-/-- In a graph, if `k` is at least the degree of every vertex, then it is at least the maximum
-degree. -/
-theorem maxDegree_le_of_forall_degree_le [DecidableRel G.Adj] (k : ℕ) (h : ∀ v, G.degree v ≤ k) :
- G.maxDegree ≤ k := by
- by_cases hV : (univ : Finset V).Nonempty
- · haveI : Nonempty V := univ_nonempty_iff.mp hV
- obtain ⟨v, hv⟩ := G.exists_maximal_degree_vertex
- rw [hv]
- apply h
- · rw [not_nonempty_iff_eq_empty] at hV
- rw [maxDegree, hV, image_empty]
- exact zero_le k
-#align simple_graph.max_degree_le_of_forall_degree_le SimpleGraph.maxDegree_le_of_forall_degree_le
-
-theorem degree_lt_card_verts [DecidableRel G.Adj] (v : V) : G.degree v < Fintype.card V := by
- classical
- apply Finset.card_lt_card
- rw [Finset.ssubset_iff]
- exact ⟨v, by simp, Finset.subset_univ _⟩
-#align simple_graph.degree_lt_card_verts SimpleGraph.degree_lt_card_verts
-
-/--
-The maximum degree of a nonempty graph is less than the number of vertices. Note that the assumption
-that `V` is nonempty is necessary, as otherwise this would assert the existence of a
-natural number less than zero. -/
-theorem maxDegree_lt_card_verts [DecidableRel G.Adj] [Nonempty V] :
- G.maxDegree < Fintype.card V := by
- cases' G.exists_maximal_degree_vertex with v hv
- rw [hv]
- apply G.degree_lt_card_verts v
-#align simple_graph.max_degree_lt_card_verts SimpleGraph.maxDegree_lt_card_verts
-
-theorem card_commonNeighbors_le_degree_left [DecidableRel G.Adj] (v w : V) :
- Fintype.card (G.commonNeighbors v w) ≤ G.degree v := by
- rw [← card_neighborSet_eq_degree]
- exact Set.card_le_card (Set.inter_subset_left _ _)
-#align simple_graph.card_common_neighbors_le_degree_left SimpleGraph.card_commonNeighbors_le_degree_left
-
-theorem card_commonNeighbors_le_degree_right [DecidableRel G.Adj] (v w : V) :
- Fintype.card (G.commonNeighbors v w) ≤ G.degree w := by
- simp_rw [commonNeighbors_symm _ v w, card_commonNeighbors_le_degree_left]
-#align simple_graph.card_common_neighbors_le_degree_right SimpleGraph.card_commonNeighbors_le_degree_right
-
-theorem card_commonNeighbors_lt_card_verts [DecidableRel G.Adj] (v w : V) :
- Fintype.card (G.commonNeighbors v w) < Fintype.card V :=
- Nat.lt_of_le_of_lt (G.card_commonNeighbors_le_degree_left _ _) (G.degree_lt_card_verts v)
-#align simple_graph.card_common_neighbors_lt_card_verts SimpleGraph.card_commonNeighbors_lt_card_verts
-
-/-- If the condition `G.Adj v w` fails, then `card_commonNeighbors_le_degree` is
-the best we can do in general. -/
-theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.Adj] {v w : V}
- (h : G.Adj v w) : Fintype.card (G.commonNeighbors v w) < G.degree v := by
- classical
- erw [← Set.toFinset_card]
- apply Finset.card_lt_card
- rw [Finset.ssubset_iff]
- use w
- constructor
- · rw [Set.mem_toFinset]
- apply not_mem_commonNeighbors_right
- · rw [Finset.insert_subset_iff]
- constructor
- · simpa
- · rw [neighborFinset, Set.toFinset_subset_toFinset]
- exact G.commonNeighbors_subset_neighborSet_left _ _
-#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
-
-theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
- Fintype.card ((⊤ : SimpleGraph V).commonNeighbors v w) = Fintype.card V - 2 := by
- simp only [commonNeighbors_top_eq, ← Set.toFinset_card, Set.toFinset_diff]
- rw [Finset.card_sdiff]
- · simp [Finset.card_univ, h]
- · simp only [Set.toFinset_subset_toFinset, Set.subset_univ]
-#align simple_graph.card_common_neighbors_top SimpleGraph.card_commonNeighbors_top
-
-end Finite
-
end SimpleGraph
@[inherit_doc]
on notations (#9942)
Make all the notations that unambiguously should inherit the docstring of their definition actually inherit it.
Also write a few docstrings by hand. I only wrote the ones I was competent to write and which I was sure of. Some docstrings come from mathlib3 as they were lost during the early port.
This PR is only intended as a first pass There are many more docstrings to add.
@@ -129,6 +129,7 @@ see `SimpleGraph.edgeSet` for the corresponding edge set.
-/
@[ext, aesop safe constructors (rule_sets [SimpleGraph])]
structure SimpleGraph (V : Type u) where
+ /-- The adjacency relation of a simple graph. -/
Adj : V → V → Prop
symm : Symmetric Adj := by aesop_graph
loopless : Irreflexive Adj := by aesop_graph
@@ -95,7 +95,7 @@ to standard `aesop`:
macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
- (options := { introsTransparency? := some .default, terminal := true })
+ (config := { introsTransparency? := some .default, terminal := true })
(rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
/--
@@ -104,7 +104,7 @@ Use `aesop_graph?` to pass along a `Try this` suggestion when using `aesop_graph
macro (name := aesop_graph?) "aesop_graph?" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
- (options := { introsTransparency? := some .default, terminal := true })
+ (config := { introsTransparency? := some .default, terminal := true })
(rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
/--
@@ -115,7 +115,7 @@ nonterminal `simp`.
macro (name := aesop_graph_nonterminal) "aesop_graph_nonterminal" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
- (options := { introsTransparency? := some .default, warnOnNonterminal := false })
+ (config := { introsTransparency? := some .default, warnOnNonterminal := false })
(rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
open Finset Function
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-/
import Mathlib.Combinatorics.SimpleGraph.Init
-import Mathlib.Data.FunLike.Fintype
import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
import Mathlib.Data.Sym.Card
A continuation from https://github.com/leanprover-community/mathlib4/pull/9267#discussion_r1437052000.
@@ -1308,183 +1308,6 @@ theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteF
end DeleteFar
-/-! ## Map and comap -/
-
-
-/-- Given an injective function, there is a covariant induced map on graphs by pushing forward
-the adjacency relation.
-
-This is injective (see `SimpleGraph.map_injective`). -/
-protected def map (f : V ↪ W) (G : SimpleGraph V) : SimpleGraph W where
- Adj := Relation.Map G.Adj f f
- symm a b := by -- porting note: `obviously` used to handle this
- rintro ⟨v, w, h, rfl, rfl⟩
- use w, v, h.symm, rfl
- loopless a := by -- porting note: `obviously` used to handle this
- rintro ⟨v, w, h, rfl, h'⟩
- exact h.ne (f.injective h'.symm)
-#align simple_graph.map SimpleGraph.map
-
-instance instDecidableMapAdj {f : V ↪ W} {a b} [Decidable (Relation.Map G.Adj f f a b)] :
- Decidable ((G.map f).Adj a b) := ‹Decidable (Relation.Map G.Adj f f a b)›
-#align simple_graph.decidable_map SimpleGraph.instDecidableMapAdj
-
-@[simp]
-theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
- (G.map f).Adj u v ↔ ∃ u' v' : V, G.Adj u' v' ∧ f u' = u ∧ f v' = v :=
- Iff.rfl
-#align simple_graph.map_adj SimpleGraph.map_adj
-
-lemma map_adj_apply {G : SimpleGraph V} {f : V ↪ W} {a b : V} :
- (G.map f).Adj (f a) (f b) ↔ G.Adj a b := by simp
-#align simple_graph.map_adj_apply SimpleGraph.map_adj_apply
-
-theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
- rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩
- exact ⟨_, _, h ha, rfl, rfl⟩
-#align simple_graph.map_monotone SimpleGraph.map_monotone
-
-@[simp] lemma map_id : G.map (Function.Embedding.refl _) = G :=
- SimpleGraph.ext _ _ <| Relation.map_id_id _
-#align simple_graph.map_id SimpleGraph.map_id
-
-@[simp] lemma map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
- SimpleGraph.ext _ _ <| Relation.map_map _ _ _ _ _
-#align simple_graph.map_map SimpleGraph.map_map
-
-/-- Given a function, there is a contravariant induced map on graphs by pulling back the
-adjacency relation.
-This is one of the ways of creating induced graphs. See `SimpleGraph.induce` for a wrapper.
-
-This is surjective when `f` is injective (see `SimpleGraph.comap_surjective`).-/
-protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V where
- Adj u v := G.Adj (f u) (f v)
- symm _ _ h := h.symm
- loopless _ := G.loopless _
-#align simple_graph.comap SimpleGraph.comap
-
-@[simp] lemma comap_adj {G : SimpleGraph W} {f : V → W} :
- (G.comap f).Adj u v ↔ G.Adj (f u) (f v) := Iff.rfl
-
-@[simp] lemma comap_id {G : SimpleGraph V} : G.comap id = G := SimpleGraph.ext _ _ rfl
-#align simple_graph.comap_id SimpleGraph.comap_id
-
-@[simp] lemma comap_comap {G : SimpleGraph X} (f : V → W) (g : W → X) :
- (G.comap g).comap f = G.comap (g ∘ f) := rfl
-#align simple_graph.comap_comap SimpleGraph.comap_comap
-
-instance instDecidableComapAdj (f : V → W) (G : SimpleGraph W) [DecidableRel G.Adj] :
- DecidableRel (G.comap f).Adj := fun _ _ ↦ ‹DecidableRel G.Adj› _ _
-
-lemma comap_symm (G : SimpleGraph V) (e : V ≃ W) :
- G.comap e.symm.toEmbedding = G.map e.toEmbedding := by
- ext; simp only [Equiv.apply_eq_iff_eq_symm_apply, comap_adj, map_adj, Equiv.toEmbedding_apply,
- exists_eq_right_right, exists_eq_right]
-#align simple_graph.comap_symm SimpleGraph.comap_symm
-
-lemma map_symm (G : SimpleGraph W) (e : V ≃ W) :
- G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [← comap_symm, e.symm_symm]
-#align simple_graph.map_symm SimpleGraph.map_symm
-
-theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by
- intro G G' h _ _ ha
- exact h ha
-#align simple_graph.comap_monotone SimpleGraph.comap_monotone
-
-@[simp]
-theorem comap_map_eq (f : V ↪ W) (G : SimpleGraph V) : (G.map f).comap f = G := by
- ext
- simp
-#align simple_graph.comap_map_eq SimpleGraph.comap_map_eq
-
-theorem leftInverse_comap_map (f : V ↪ W) :
- Function.LeftInverse (SimpleGraph.comap f) (SimpleGraph.map f) :=
- comap_map_eq f
-#align simple_graph.left_inverse_comap_map SimpleGraph.leftInverse_comap_map
-
-theorem map_injective (f : V ↪ W) : Function.Injective (SimpleGraph.map f) :=
- (leftInverse_comap_map f).injective
-#align simple_graph.map_injective SimpleGraph.map_injective
-
-theorem comap_surjective (f : V ↪ W) : Function.Surjective (SimpleGraph.comap f) :=
- (leftInverse_comap_map f).surjective
-#align simple_graph.comap_surjective SimpleGraph.comap_surjective
-
-theorem map_le_iff_le_comap (f : V ↪ W) (G : SimpleGraph V) (G' : SimpleGraph W) :
- G.map f ≤ G' ↔ G ≤ G'.comap f :=
- ⟨fun h u v ha => h ⟨_, _, ha, rfl, rfl⟩, by
- rintro h _ _ ⟨u, v, ha, rfl, rfl⟩
- exact h ha⟩
-#align simple_graph.map_le_iff_le_comap SimpleGraph.map_le_iff_le_comap
-
-theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G := by
- rw [map_le_iff_le_comap]
-#align simple_graph.map_comap_le SimpleGraph.map_comap_le
-
-lemma le_comap_of_subsingleton (f : V → W) [Subsingleton V] : G ≤ G'.comap f := by
- intros v w; simp [Subsingleton.elim v w]
-
-lemma map_le_of_subsingleton (f : V ↪ W) [Subsingleton V] : G.map f ≤ G' := by
- rw [map_le_iff_le_comap]; apply le_comap_of_subsingleton
-
-/-- Given a family of vertex types indexed by `ι`, pulling back from `⊤ : SimpleGraph ι`
-yields the complete multipartite graph on the family.
-Two vertices are adjacent if and only if their indices are not equal. -/
-abbrev completeMultipartiteGraph {ι : Type*} (V : ι → Type*) : SimpleGraph (Σ i, V i) :=
- SimpleGraph.comap Sigma.fst ⊤
-
-/-- Equivalent types have equivalent simple graphs. -/
-@[simps apply]
-protected def _root_.Equiv.simpleGraph (e : V ≃ W) : SimpleGraph V ≃ SimpleGraph W where
- toFun := SimpleGraph.comap e.symm
- invFun := SimpleGraph.comap e
- left_inv _ := by simp
- right_inv _ := by simp
-#align equiv.simple_graph Equiv.simpleGraph
-
-@[simp] lemma _root_.Equiv.simpleGraph_refl : (Equiv.refl V).simpleGraph = Equiv.refl _ := by
- ext; rfl
-
-@[simp] lemma _root_.Equiv.simpleGraph_trans (e₁ : V ≃ W) (e₂ : W ≃ X) :
- (e₁.trans e₂).simpleGraph = e₁.simpleGraph.trans e₂.simpleGraph := rfl
-#align equiv.simple_graph_trans Equiv.simpleGraph_trans
-
-@[simp]
-lemma _root_.Equiv.symm_simpleGraph (e : V ≃ W) : e.simpleGraph.symm = e.symm.simpleGraph := rfl
-#align equiv.symm_simple_graph Equiv.symm_simpleGraph
-
-/-! ## Induced graphs -/
-
-/- Given a set `s` of vertices, we can restrict a graph to those vertices by restricting its
-adjacency relation. This gives a map between `SimpleGraph V` and `SimpleGraph s`.
-
-There is also a notion of induced subgraphs (see `SimpleGraph.subgraph.induce`). -/
-/-- Restrict a graph to the vertices in the set `s`, deleting all edges incident to vertices
-outside the set. This is a wrapper around `SimpleGraph.comap`. -/
-@[reducible]
-def induce (s : Set V) (G : SimpleGraph V) : SimpleGraph s :=
- G.comap (Function.Embedding.subtype _)
-#align simple_graph.induce SimpleGraph.induce
-
-@[simp] lemma induce_singleton_eq_top (v : V) : G.induce {v} = ⊤ := by
- rw [eq_top_iff]; apply le_comap_of_subsingleton
-
-/-- Given a graph on a set of vertices, we can make it be a `SimpleGraph V` by
-adding in the remaining vertices without adding in any additional edges.
-This is a wrapper around `SimpleGraph.map`. -/
-@[reducible]
-def spanningCoe {s : Set V} (G : SimpleGraph s) : SimpleGraph V :=
- G.map (Function.Embedding.subtype _)
-#align simple_graph.spanning_coe SimpleGraph.spanningCoe
-
-theorem induce_spanningCoe {s : Set V} {G : SimpleGraph s} : G.spanningCoe.induce s = G :=
- comap_map_eq _ _
-#align simple_graph.induce_spanning_coe SimpleGraph.induce_spanningCoe
-
-theorem spanningCoe_induce_le (s : Set V) : (G.induce s).spanningCoe ≤ G :=
- map_comap_le _ _
-#align simple_graph.spanning_coe_induce_le SimpleGraph.spanningCoe_induce_le
-
section FiniteAt
/-!
@@ -1799,451 +1622,4 @@ theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
end Finite
-section Maps
-
-/-- A graph homomorphism is a map on vertex sets that respects adjacency relations.
-
-The notation `G →g G'` represents the type of graph homomorphisms. -/
-abbrev Hom :=
- RelHom G.Adj G'.Adj
-#align simple_graph.hom SimpleGraph.Hom
-
-/-- A graph embedding is an embedding `f` such that for vertices `v w : V`,
-`G.Adj (f v) (f w) ↔ G.Adj v w`. Its image is an induced subgraph of G'.
-
-The notation `G ↪g G'` represents the type of graph embeddings. -/
-abbrev Embedding :=
- RelEmbedding G.Adj G'.Adj
-#align simple_graph.embedding SimpleGraph.Embedding
-
-/-- A graph isomorphism is a bijective map on vertex sets that respects adjacency relations.
-
-The notation `G ≃g G'` represents the type of graph isomorphisms.
--/
-abbrev Iso :=
- RelIso G.Adj G'.Adj
-#align simple_graph.iso SimpleGraph.Iso
-
--- mathport name: «expr →g »
-infixl:50 " →g " => Hom
-
--- mathport name: «expr ↪g »
-infixl:50 " ↪g " => Embedding
-
--- mathport name: «expr ≃g »
-infixl:50 " ≃g " => Iso
-
-namespace Hom
-
-variable {G G'} {G₁ G₂ : SimpleGraph V} {H : SimpleGraph W} (f : G →g G')
-
-/-- The identity homomorphism from a graph to itself. -/
-protected abbrev id : G →g G :=
- RelHom.id _
-#align simple_graph.hom.id SimpleGraph.Hom.id
-
-@[simp, norm_cast] lemma coe_id : ⇑(Hom.id : G →g G) = id := rfl
-#align simple_graph.hom.coe_id SimpleGraph.Hom.coe_id
-
-instance [Subsingleton (V → W)] : Subsingleton (G →g H) := FunLike.coe_injective.subsingleton
-
-instance [IsEmpty V] : Unique (G →g H) where
- default := ⟨isEmptyElim, fun {a} ↦ isEmptyElim a⟩
- uniq _ := Subsingleton.elim _ _
-
-instance instFintype [DecidableEq V] [Fintype V] [Fintype W] [DecidableRel G.Adj]
- [DecidableRel H.Adj] : Fintype (G →g H) :=
- Fintype.ofEquiv {f : V → W // ∀ {a b}, G.Adj a b → H.Adj (f a) (f b)}
- { toFun := fun f ↦ ⟨f.1, f.2⟩, invFun := fun f ↦ ⟨f.1, f.2⟩,
- left_inv := fun _ ↦ rfl, right_inv := fun _ ↦ rfl }
-
-instance [Finite V] [Finite W] : Finite (G →g H) := FunLike.finite _
-
-theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
- f.map_rel' h
-#align simple_graph.hom.map_adj SimpleGraph.Hom.map_adj
-
-theorem map_mem_edgeSet {e : Sym2 V} (h : e ∈ G.edgeSet) : e.map f ∈ G'.edgeSet :=
- Sym2.ind (fun _ _ => f.map_rel') e h
-#align simple_graph.hom.map_mem_edge_set SimpleGraph.Hom.map_mem_edgeSet
-
-theorem apply_mem_neighborSet {v w : V} (h : w ∈ G.neighborSet v) : f w ∈ G'.neighborSet (f v) :=
- map_adj f h
-#align simple_graph.hom.apply_mem_neighbor_set SimpleGraph.Hom.apply_mem_neighborSet
-
-/-- The map between edge sets induced by a homomorphism.
-The underlying map on edges is given by `Sym2.map`. -/
-@[simps]
-def mapEdgeSet (e : G.edgeSet) : G'.edgeSet :=
- ⟨Sym2.map f e, f.map_mem_edgeSet e.property⟩
-#align simple_graph.hom.map_edge_set SimpleGraph.Hom.mapEdgeSet
-
-/-- The map between neighbor sets induced by a homomorphism. -/
-@[simps]
-def mapNeighborSet (v : V) (w : G.neighborSet v) : G'.neighborSet (f v) :=
- ⟨f w, f.apply_mem_neighborSet w.property⟩
-#align simple_graph.hom.map_neighbor_set SimpleGraph.Hom.mapNeighborSet
-
-/-- The map between darts induced by a homomorphism. -/
-def mapDart (d : G.Dart) : G'.Dart :=
- ⟨d.1.map f f, f.map_adj d.2⟩
-#align simple_graph.hom.map_dart SimpleGraph.Hom.mapDart
-
-@[simp]
-theorem mapDart_apply (d : G.Dart) : f.mapDart d = ⟨d.1.map f f, f.map_adj d.2⟩ :=
- rfl
-#align simple_graph.hom.map_dart_apply SimpleGraph.Hom.mapDart_apply
-
-/-- The induced map for spanning subgraphs, which is the identity on vertices. -/
-@[simps]
-def mapSpanningSubgraphs {G G' : SimpleGraph V} (h : G ≤ G') : G →g G' where
- toFun x := x
- map_rel' ha := h ha
-#align simple_graph.hom.map_spanning_subgraphs SimpleGraph.Hom.mapSpanningSubgraphs
-
-theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective f.mapEdgeSet := by
- rintro ⟨e₁, h₁⟩ ⟨e₂, h₂⟩
- dsimp [Hom.mapEdgeSet]
- repeat' rw [Subtype.mk_eq_mk]
- apply Sym2.map.injective hinj
-#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injective
-
-/-- Every graph homomorphism from a complete graph is injective. -/
-theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f := by
- intro v w h
- contrapose! h
- exact G'.ne_of_adj (map_adj _ ((top_adj _ _).mpr h))
-#align simple_graph.hom.injective_of_top_hom SimpleGraph.Hom.injective_of_top_hom
-
-/-- There is a homomorphism to a graph from a comapped graph.
-When the function is injective, this is an embedding (see `SimpleGraph.Embedding.comap`). -/
-@[simps]
-protected def comap (f : V → W) (G : SimpleGraph W) : G.comap f →g G where
- toFun := f
- map_rel' := by simp
-#align simple_graph.hom.comap SimpleGraph.Hom.comap
-
-variable {G'' : SimpleGraph X}
-
-/-- Composition of graph homomorphisms. -/
-abbrev comp (f' : G' →g G'') (f : G →g G') : G →g G'' :=
- RelHom.comp f' f
-#align simple_graph.hom.comp SimpleGraph.Hom.comp
-
-@[simp]
-theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f :=
- rfl
-#align simple_graph.hom.coe_comp SimpleGraph.Hom.coe_comp
-
-/-- The graph homomorphism from a smaller graph to a bigger one. -/
-def ofLe (h : G₁ ≤ G₂) : G₁ →g G₂ := ⟨id, @h⟩
-#align simple_graph.hom.of_le SimpleGraph.Hom.ofLe
-
-@[simp, norm_cast] lemma coe_ofLe (h : G₁ ≤ G₂) : ⇑(ofLe h) = id := rfl
-#align simple_graph.hom.coe_of_le SimpleGraph.Hom.coe_ofLe
-
-end Hom
-
-namespace Embedding
-
-variable {G G'} {H : SimpleGraph W} (f : G ↪g G')
-
-/-- The identity embedding from a graph to itself. -/
-abbrev refl : G ↪g G :=
- RelEmbedding.refl _
-#align simple_graph.embedding.refl SimpleGraph.Embedding.refl
-
-/-- An embedding of graphs gives rise to a homomorphism of graphs. -/
-abbrev toHom : G →g G' :=
- f.toRelHom
-#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
-
-@[simp] lemma coe_toHom (f : G ↪g H) : ⇑f.toHom = f := rfl
-#align simple_graph.embedding.coe_to_hom SimpleGraph.Embedding.coe_toHom
-
-@[simp] theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
- f.map_rel_iff
-#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iff
-
-theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSet ↔ e ∈ G.edgeSet :=
- Sym2.ind (fun _ _ => f.map_adj_iff) e
-#align simple_graph.embedding.map_mem_edge_set_iff SimpleGraph.Embedding.map_mem_edgeSet_iff
-
-theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
- map_adj_iff f
-#align simple_graph.embedding.apply_mem_neighbor_set_iff SimpleGraph.Embedding.apply_mem_neighborSet_iff
-
-/-- A graph embedding induces an embedding of edge sets. -/
-@[simps]
-def mapEdgeSet : G.edgeSet ↪ G'.edgeSet where
- toFun := Hom.mapEdgeSet f
- inj' := Hom.mapEdgeSet.injective f f.injective
-#align simple_graph.embedding.map_edge_set SimpleGraph.Embedding.mapEdgeSet
-
-/-- A graph embedding induces an embedding of neighbor sets. -/
-@[simps]
-def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
- where
- toFun w := ⟨f w, f.apply_mem_neighborSet_iff.mpr w.2⟩
- inj' := by
- rintro ⟨w₁, h₁⟩ ⟨w₂, h₂⟩ h
- rw [Subtype.mk_eq_mk] at h ⊢
- exact f.inj' h
-#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSet
-
-/-- Given an injective function, there is an embedding from the comapped graph into the original
-graph. -/
--- porting note: @[simps] does not work here since `f` is not a constructor application.
--- `@[simps toEmbedding]` could work, but Floris suggested writing `comap_apply` for now.
-protected def comap (f : V ↪ W) (G : SimpleGraph W) : G.comap f ↪g G :=
- { f with map_rel_iff' := by simp }
-#align simple_graph.embedding.comap SimpleGraph.Embedding.comap
-
-@[simp]
-theorem comap_apply (f : V ↪ W) (G : SimpleGraph W) (v : V) :
- SimpleGraph.Embedding.comap f G v = f v := rfl
-#align simple_graph.embedding.comap_apply SimpleGraph.Embedding.comap_apply
-
-/-- Given an injective function, there is an embedding from a graph into the mapped graph. -/
--- porting note: @[simps] does not work here since `f` is not a constructor application.
--- `@[simps toEmbedding]` could work, but Floris suggested writing `map_apply` for now.
-protected def map (f : V ↪ W) (G : SimpleGraph V) : G ↪g G.map f :=
- { f with map_rel_iff' := by simp }
-#align simple_graph.embedding.map SimpleGraph.Embedding.map
-
-@[simp]
-theorem map_apply (f : V ↪ W) (G : SimpleGraph V) (v : V) :
- SimpleGraph.Embedding.map f G v = f v := rfl
-#align simple_graph.embedding.map_apply SimpleGraph.Embedding.map_apply
-
-/-- Induced graphs embed in the original graph.
-
-Note that if `G.induce s = ⊤` (i.e., if `s` is a clique) then this gives the embedding of a
-complete graph. -/
-@[reducible]
-protected def induce (s : Set V) : G.induce s ↪g G :=
- SimpleGraph.Embedding.comap (Function.Embedding.subtype _) G
-#align simple_graph.embedding.induce SimpleGraph.Embedding.induce
-
-/-- Graphs on a set of vertices embed in their `spanningCoe`. -/
-@[reducible]
-protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe :=
- SimpleGraph.Embedding.map (Function.Embedding.subtype _) G
-#align simple_graph.embedding.spanning_coe SimpleGraph.Embedding.spanningCoe
-
-/-- Embeddings of types induce embeddings of complete graphs on those types. -/
-protected def completeGraph {α β : Type*} (f : α ↪ β) :
- (⊤ : SimpleGraph α) ↪g (⊤ : SimpleGraph β) :=
- { f with map_rel_iff' := by simp }
-#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraph
-
-variable {G'' : SimpleGraph X}
-
-/-- Composition of graph embeddings. -/
-abbrev comp (f' : G' ↪g G'') (f : G ↪g G') : G ↪g G'' :=
- f.trans f'
-#align simple_graph.embedding.comp SimpleGraph.Embedding.comp
-
-@[simp]
-theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f :=
- rfl
-#align simple_graph.embedding.coe_comp SimpleGraph.Embedding.coe_comp
-
-end Embedding
-
-section induceHom
-
-variable {G G'} {G'' : SimpleGraph X} {s : Set V} {t : Set W} {r : Set X}
- (φ : G →g G') (φst : Set.MapsTo φ s t) (ψ : G' →g G'') (ψtr : Set.MapsTo ψ t r)
-
-/-- The restriction of a morphism of graphs to induced subgraphs. -/
-def induceHom : G.induce s →g G'.induce t where
- toFun := Set.MapsTo.restrict φ s t φst
- map_rel' := φ.map_rel'
-#align simple_graph.induce_hom SimpleGraph.induceHom
-
-@[simp, norm_cast] lemma coe_induceHom : ⇑(induceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
- rfl
-#align simple_graph.coe_induce_hom SimpleGraph.coe_induceHom
-
-@[simp] lemma induceHom_id (G : SimpleGraph V) (s) :
- induceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id := by
- ext x
- rfl
-#align simple_graph.induce_hom_id SimpleGraph.induceHom_id
-
-@[simp] lemma induceHom_comp :
- (induceHom ψ ψtr).comp (induceHom φ φst) = induceHom (ψ.comp φ) (ψtr.comp φst) := by
- ext x
- rfl
-#align simple_graph.induce_hom_comp SimpleGraph.induceHom_comp
-
-lemma induceHom_injective (hi : Set.InjOn φ s) :
- Function.Injective (induceHom φ φst) := by
- erw [Set.MapsTo.restrict_inj] <;> assumption
-
-end induceHom
-
-section induceHomLE
-variable {s s' : Set V} (h : s ≤ s')
-
-/-- Given an inclusion of vertex subsets, the induced embedding on induced graphs.
-This is not an abbreviation for `induceHom` since we get an embedding in this case. -/
-def induceHomOfLE (h : s ≤ s') : G.induce s ↪g G.induce s' where
- toEmbedding := Set.embeddingOfSubset s s' h
- map_rel_iff' := by simp
-
-@[simp] lemma induceHomOfLE_apply (v : s) : (G.induceHomOfLE h) v = Set.inclusion h v := rfl
-
-@[simp] lemma induceHomOfLE_toHom :
- (G.induceHomOfLE h).toHom = induceHom (.id : G →g G) ((Set.mapsTo_id s).mono_right h) := by
- ext; simp
-
-end induceHomLE
-
-namespace Iso
-
-variable {G G'} (f : G ≃g G')
-
-/-- The identity isomorphism of a graph with itself. -/
-abbrev refl : G ≃g G :=
- RelIso.refl _
-#align simple_graph.iso.refl SimpleGraph.Iso.refl
-
-/-- An isomorphism of graphs gives rise to an embedding of graphs. -/
-abbrev toEmbedding : G ↪g G' :=
- f.toRelEmbedding
-#align simple_graph.iso.to_embedding SimpleGraph.Iso.toEmbedding
-
-/-- An isomorphism of graphs gives rise to a homomorphism of graphs. -/
-abbrev toHom : G →g G' :=
- f.toEmbedding.toHom
-#align simple_graph.iso.to_hom SimpleGraph.Iso.toHom
-
-/-- The inverse of a graph isomorphism. -/
-abbrev symm : G' ≃g G :=
- RelIso.symm f
-#align simple_graph.iso.symm SimpleGraph.Iso.symm
-
-theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
- f.map_rel_iff
-#align simple_graph.iso.map_adj_iff SimpleGraph.Iso.map_adj_iff
-
-theorem map_mem_edgeSet_iff {e : Sym2 V} : e.map f ∈ G'.edgeSet ↔ e ∈ G.edgeSet :=
- Sym2.ind (fun _ _ => f.map_adj_iff) e
-#align simple_graph.iso.map_mem_edge_set_iff SimpleGraph.Iso.map_mem_edgeSet_iff
-
-theorem apply_mem_neighborSet_iff {v w : V} : f w ∈ G'.neighborSet (f v) ↔ w ∈ G.neighborSet v :=
- map_adj_iff f
-#align simple_graph.iso.apply_mem_neighbor_set_iff SimpleGraph.Iso.apply_mem_neighborSet_iff
-
-/-- An isomorphism of graphs induces an equivalence of edge sets. -/
-@[simps]
-def mapEdgeSet : G.edgeSet ≃ G'.edgeSet
- where
- toFun := Hom.mapEdgeSet f
- invFun := Hom.mapEdgeSet f.symm
- left_inv := by
- rintro ⟨e, h⟩
- simp only [Hom.mapEdgeSet, RelEmbedding.toRelHom, Embedding.toFun_eq_coe,
- RelEmbedding.coe_toEmbedding, RelIso.coe_toRelEmbedding, Sym2.map_map, comp_apply,
- Subtype.mk.injEq]
- convert congr_fun Sym2.map_id e
- exact RelIso.symm_apply_apply _ _
- right_inv := by
- rintro ⟨e, h⟩
- simp only [Hom.mapEdgeSet, RelEmbedding.toRelHom, Embedding.toFun_eq_coe,
- RelEmbedding.coe_toEmbedding, RelIso.coe_toRelEmbedding, Sym2.map_map, comp_apply,
- Subtype.mk.injEq]
- convert congr_fun Sym2.map_id e
- exact RelIso.apply_symm_apply _ _
-#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSet
-
-/-- A graph isomorphism induces an equivalence of neighbor sets. -/
-@[simps]
-def mapNeighborSet (v : V) : G.neighborSet v ≃ G'.neighborSet (f v)
- where
- toFun w := ⟨f w, f.apply_mem_neighborSet_iff.mpr w.2⟩
- invFun w :=
- ⟨f.symm w, by
- simpa [RelIso.symm_apply_apply] using f.symm.apply_mem_neighborSet_iff.mpr w.2⟩
- left_inv w := by simp
- right_inv w := by simp
-#align simple_graph.iso.map_neighbor_set SimpleGraph.Iso.mapNeighborSet
-
-theorem card_eq_of_iso [Fintype V] [Fintype W] (f : G ≃g G') : Fintype.card V = Fintype.card W := by
- rw [← Fintype.ofEquiv_card f.toEquiv]
- -- porting note: need to help it to find the typeclass instances from the target expression
- apply @Fintype.card_congr' _ _ (_) (_) rfl
-#align simple_graph.iso.card_eq_of_iso SimpleGraph.Iso.card_eq_of_iso
-
-/-- Given a bijection, there is an embedding from the comapped graph into the original
-graph. -/
--- porting note: `@[simps]` does not work here anymore since `f` is not a constructor application.
--- `@[simps toEmbedding]` could work, but Floris suggested writing `comap_apply` for now.
-protected def comap (f : V ≃ W) (G : SimpleGraph W) : G.comap f.toEmbedding ≃g G :=
- { f with map_rel_iff' := by simp }
-#align simple_graph.iso.comap SimpleGraph.Iso.comap
-
-@[simp]
-lemma comap_apply (f : V ≃ W) (G : SimpleGraph W) (v : V) :
- SimpleGraph.Iso.comap f G v = f v := rfl
-#align simple_graph.iso.comap_apply SimpleGraph.Iso.comap_apply
-
-@[simp]
-lemma comap_symm_apply (f : V ≃ W) (G : SimpleGraph W) (w : W) :
- (SimpleGraph.Iso.comap f G).symm w = f.symm w := rfl
-#align simple_graph.iso.comap_symm_apply SimpleGraph.Iso.comap_symm_apply
-
-/-- Given an injective function, there is an embedding from a graph into the mapped graph. -/
--- porting note: `@[simps]` does not work here anymore since `f` is not a constructor application.
--- `@[simps toEmbedding]` could work, but Floris suggested writing `map_apply` for now.
-protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding :=
- { f with map_rel_iff' := by simp }
-#align simple_graph.iso.map SimpleGraph.Iso.map
-
-@[simp]
-lemma map_apply (f : V ≃ W) (G : SimpleGraph V) (v : V) :
- SimpleGraph.Iso.map f G v = f v := rfl
-#align simple_graph.iso.map_apply SimpleGraph.Iso.map_apply
-
-@[simp]
-lemma map_symm_apply (f : V ≃ W) (G : SimpleGraph V) (w : W) :
- (SimpleGraph.Iso.map f G).symm w = f.symm w := rfl
-#align simple_graph.iso.map_symm_apply SimpleGraph.Iso.map_symm_apply
-
-/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
-protected def completeGraph {α β : Type*} (f : α ≃ β) :
- (⊤ : SimpleGraph α) ≃g (⊤ : SimpleGraph β) :=
- { f with map_rel_iff' := by simp }
-#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraph
-
-theorem toEmbedding_completeGraph {α β : Type*} (f : α ≃ β) :
- (Iso.completeGraph f).toEmbedding = Embedding.completeGraph f.toEmbedding :=
- rfl
-#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraph
-
-variable {G'' : SimpleGraph X}
-
-/-- Composition of graph isomorphisms. -/
-abbrev comp (f' : G' ≃g G'') (f : G ≃g G') : G ≃g G'' :=
- f.trans f'
-#align simple_graph.iso.comp SimpleGraph.Iso.comp
-
-@[simp]
-theorem coe_comp (f' : G' ≃g G'') (f : G ≃g G') : ⇑(f'.comp f) = f' ∘ f :=
- rfl
-#align simple_graph.iso.coe_comp SimpleGraph.Iso.coe_comp
-
-end Iso
-
-end Maps
-
-/-- The graph induced on `Set.univ` is isomorphic to the original graph. -/
-@[simps!]
-def induceUnivIso (G : SimpleGraph V) : G.induce Set.univ ≃g G where
- toEquiv := Equiv.Set.univ V
- map_rel_iff' := by simp only [Equiv.Set.univ, Equiv.coe_fn_mk, comap_adj, Embedding.coe_subtype,
- Subtype.forall, Set.mem_univ, forall_true_left, implies_true]
-
end SimpleGraph
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -1345,11 +1345,11 @@ theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
#align simple_graph.map_monotone SimpleGraph.map_monotone
@[simp] lemma map_id : G.map (Function.Embedding.refl _) = G :=
- SimpleGraph.ext _ _ $ Relation.map_id_id _
+ SimpleGraph.ext _ _ <| Relation.map_id_id _
#align simple_graph.map_id SimpleGraph.map_id
@[simp] lemma map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
- SimpleGraph.ext _ _ $ Relation.map_map _ _ _ _ _
+ SimpleGraph.ext _ _ <| Relation.map_map _ _ _ _ _
#align simple_graph.map_map SimpleGraph.map_map
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
@@ -1308,43 +1308,6 @@ theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteF
end DeleteFar
-/-! ## Vertex replacement -/
-
-
-section ReplaceVertex
-
-variable [DecidableEq V] (s t : V)
-
-/-- The graph formed by forgetting `t`'s neighbours and instead giving it those of `s`. The `s-t`
-edge is removed if present. -/
-abbrev replaceVertex : SimpleGraph V where
- Adj v w := if v = t then if w = t then False else G.Adj s w
- else if w = t then G.Adj v s else G.Adj v w
- symm v w := by dsimp only; split_ifs <;> simp [adj_comm]
-
-/-- There is never an `s-t` edge in `G.replaceVertex s t`. -/
-theorem not_adj_replaceVertex_same : ¬(G.replaceVertex s t).Adj s t := by simp
-
-@[simp]
-theorem replaceVertex_self : G.replaceVertex s s = G := by
- ext; dsimp only; split_ifs <;> simp_all [adj_comm]
-
-/-- Except possibly for `t`, the neighbours of `s` in `G.replaceVertex s t` are its neighbours in
-`G`. -/
-lemma adj_replaceVertex_iff_of_ne_left {w : V} (hw : w ≠ t) :
- (G.replaceVertex s t).Adj s w ↔ G.Adj s w := by simp [hw]
-
-/-- Except possibly for itself, the neighbours of `t` in `G.replaceVertex s t` are the neighbours of
-`s` in `G`. -/
-lemma adj_replaceVertex_iff_of_ne_right {w : V} (hw : w ≠ t) :
- (G.replaceVertex s t).Adj t w ↔ G.Adj s w := by simp [hw]
-
-/-- Adjacency in `G.replaceVertex s t` which does not involve `t` is the same as that of `G`. -/
-lemma adj_replaceVertex_iff_of_ne {v w : V} (hv : v ≠ t) (hw : w ≠ t) :
- (G.replaceVertex s t).Adj v w ↔ G.Adj v w := by simp [hv, hw]
-
-end ReplaceVertex
-
/-! ## Map and comap -/
@@ -317,7 +317,7 @@ theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v
instance supSet : SupSet (SimpleGraph V) where
sSup s :=
{ Adj := fun a b => ∃ G ∈ s, Adj G a b
- symm := fun a b => Exists.imp $ fun _ => And.imp_right Adj.symm
+ symm := fun a b => Exists.imp fun _ => And.imp_right Adj.symm
loopless := by
rintro a ⟨G, _, ha⟩
exact ha.ne rfl }
Finset
lemma names (#8894)
Change a few lemma names that have historically bothered me.
Finset.card_le_of_subset
→ Finset.card_le_card
Multiset.card_le_of_le
→ Multiset.card_le_card
Multiset.card_lt_of_lt
→ Multiset.card_lt_card
Set.ncard_le_of_subset
→ Set.ncard_le_ncard
Finset.image_filter
→ Finset.filter_image
CompleteLattice.finset_sup_compact_of_compact
→ CompleteLattice.isCompactElement_finset_sup
@@ -1024,7 +1024,7 @@ theorem card_edgeFinset_top_eq_card_choose_two :
/-- Any graph on `n` vertices has at most `n.choose 2` edges. -/
theorem card_edgeFinset_le_card_choose_two : G.edgeFinset.card ≤ (Fintype.card V).choose 2 := by
rw [← card_edgeFinset_top_eq_card_choose_two]
- exact card_le_of_subset (edgeFinset_mono le_top)
+ exact card_le_card (edgeFinset_mono le_top)
end EdgeFinset
@@ -1292,11 +1292,11 @@ theorem deleteFar_iff :
refine ⟨fun h H _ hHG hH ↦ ?_, fun h s hs hG ↦ ?_⟩
· have := h (sdiff_subset G.edgeFinset H.edgeFinset)
simp only [deleteEdges_sdiff_eq_of_le _ hHG, edgeFinset_mono hHG, card_sdiff,
- card_le_of_subset, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
+ card_le_card, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
exact this hH
· classical
simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
- card_le_of_subset hs] using h (G.deleteEdges_le s) hG
+ card_le_card hs] using h (G.deleteEdges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
alias ⟨DeleteFar.le_card_sub_card, _⟩ := deleteFar_iff
@@ -1794,7 +1794,7 @@ theorem maxDegree_lt_card_verts [DecidableRel G.Adj] [Nonempty V] :
theorem card_commonNeighbors_le_degree_left [DecidableRel G.Adj] (v w : V) :
Fintype.card (G.commonNeighbors v w) ≤ G.degree v := by
rw [← card_neighborSet_eq_degree]
- exact Set.card_le_of_subset (Set.inter_subset_left _ _)
+ exact Set.card_le_card (Set.inter_subset_left _ _)
#align simple_graph.card_common_neighbors_le_degree_left SimpleGraph.card_commonNeighbors_le_degree_left
theorem card_commonNeighbors_le_degree_right [DecidableRel G.Adj] (v w : V) :
Sym2
's global Prod
setoid instance, use s(x, y)
notation for unordered pairs (#8729)
The Sym2
type used a global setoid instance on α × α
so that ⟦(x, y)⟧
could stand for an unordered pair using standard Quotient
syntax. This commit refactors Sym2
to not use Quotient
and instead use its own s(x, y)
notation. One benefit to this is that this notation produces a term with type Sym2
rather than Quotient
.
The Fintype
instance for Sym2
is in Mathlib.Data.Finset.Sym
. We switch from using the one for Quotient
because it does not require DecidableEq
.
@@ -494,12 +494,12 @@ variable {G₁ G₂ : SimpleGraph V}
`SimpleGraph.edgeSet`.
The way `edgeSet` is defined is such that `mem_edgeSet` is proved by `refl`.
-(That is, `⟦(v, w)⟧ ∈ G.edgeSet` is definitionally equal to `G.Adj v w`.)
+(That is, `s(v, w) ∈ G.edgeSet` is definitionally equal to `G.Adj v w`.)
-/
-- porting note: We need a separate definition so that dot notation works.
def edgeSetEmbedding (V : Type*) : SimpleGraph V ↪o Set (Sym2 V) :=
OrderEmbedding.ofMapLEIff (fun G => Sym2.fromRel G.symm) fun _ _ =>
- ⟨fun h a b => @h ⟦(a, b)⟧, fun h e => Sym2.ind @h e⟩
+ ⟨fun h a b => @h s(a, b), fun h e => Sym2.ind @h e⟩
/-- `G.edgeSet` is the edge set for `G`.
This is an abbreviation for `edgeSetEmbedding G` that permits dot notation. -/
@@ -508,7 +508,7 @@ abbrev edgeSet (G : SimpleGraph V) : Set (Sym2 V) := edgeSetEmbedding V G
#align simple_graph.edge_set SimpleGraph.edgeSetEmbedding
@[simp]
-theorem mem_edgeSet : ⟦(v, w)⟧ ∈ G.edgeSet ↔ G.Adj v w :=
+theorem mem_edgeSet : s(v, w) ∈ G.edgeSet ↔ G.Adj v w :=
Iff.rfl
#align simple_graph.mem_edge_set SimpleGraph.mem_edgeSet
@@ -605,14 +605,14 @@ which is necessary since when `v = w` the existential
`∃ (e ∈ G.edgeSet), v ∈ e ∧ w ∈ e` is satisfied by every edge
incident to `v`. -/
theorem adj_iff_exists_edge {v w : V} : G.Adj v w ↔ v ≠ w ∧ ∃ e ∈ G.edgeSet, v ∈ e ∧ w ∈ e := by
- refine' ⟨fun _ => ⟨G.ne_of_adj ‹_›, ⟦(v, w)⟧, by simpa⟩, _⟩
+ refine' ⟨fun _ => ⟨G.ne_of_adj ‹_›, s(v, w), by simpa⟩, _⟩
rintro ⟨hne, e, he, hv⟩
rw [Sym2.mem_and_mem_iff hne] at hv
subst e
rwa [mem_edgeSet] at he
#align simple_graph.adj_iff_exists_edge SimpleGraph.adj_iff_exists_edge
-theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSet, e.val = ⟦(a, b)⟧ := by
+theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSet, e.val = s(a, b) := by
simp only [mem_edgeSet, exists_prop, SetCoe.exists, exists_eq_right, Subtype.coe_mk]
#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coe
@@ -668,12 +668,12 @@ def fromEdgeSet : SimpleGraph V where
#align simple_graph.from_edge_set SimpleGraph.fromEdgeSet
@[simp]
-theorem fromEdgeSet_adj : (fromEdgeSet s).Adj v w ↔ ⟦(v, w)⟧ ∈ s ∧ v ≠ w :=
+theorem fromEdgeSet_adj : (fromEdgeSet s).Adj v w ↔ s(v, w) ∈ s ∧ v ≠ w :=
Iff.rfl
#align simple_graph.from_edge_set_adj SimpleGraph.fromEdgeSet_adj
-- Note: we need to make sure `fromEdgeSet_adj` and this lemma are confluent.
--- In particular, both yield `⟦(u, v)⟧ ∈ (fromEdgeSet s).edgeSet` ==> `⟦(v, w)⟧ ∈ s ∧ v ≠ w`.
+-- In particular, both yield `s(u, v) ∈ (fromEdgeSet s).edgeSet` ==> `s(v, w) ∈ s ∧ v ≠ w`.
@[simp]
theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSet = s \ { e | e.IsDiag } := by
ext e
@@ -786,11 +786,11 @@ instance Dart.fintype [Fintype V] [DecidableRel G.Adj] : Fintype G.Dart :=
/-- The edge associated to the dart. -/
def Dart.edge (d : G.Dart) : Sym2 V :=
- ⟦d.toProd⟧
+ Sym2.mk d.toProd
#align simple_graph.dart.edge SimpleGraph.Dart.edge
@[simp]
-theorem Dart.edge_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).edge = ⟦p⟧ :=
+theorem Dart.edge_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).edge = Sym2.mk p :=
rfl
#align simple_graph.dart.edge_mk SimpleGraph.Dart.edge_mk
@@ -812,7 +812,7 @@ theorem Dart.symm_mk {p : V × V} (h : G.Adj p.1 p.2) : (Dart.mk p h).symm = Dar
@[simp]
theorem Dart.edge_symm (d : G.Dart) : d.symm.edge = d.edge :=
- Sym2.mk''_prod_swap_eq
+ Sym2.mk_prod_swap_eq
#align simple_graph.dart.edge_symm SimpleGraph.Dart.edge_symm
@[simp]
@@ -836,18 +836,18 @@ theorem Dart.symm_ne (d : G.Dart) : d.symm ≠ d :=
theorem dart_edge_eq_iff : ∀ d₁ d₂ : G.Dart, d₁.edge = d₂.edge ↔ d₁ = d₂ ∨ d₁ = d₂.symm := by
rintro ⟨p, hp⟩ ⟨q, hq⟩
- simp [Sym2.mk''_eq_mk''_iff, -Quotient.eq]
+ simp
#align simple_graph.dart_edge_eq_iff SimpleGraph.dart_edge_eq_iff
theorem dart_edge_eq_mk'_iff :
- ∀ {d : G.Dart} {p : V × V}, d.edge = ⟦p⟧ ↔ d.toProd = p ∨ d.toProd = p.swap := by
+ ∀ {d : G.Dart} {p : V × V}, d.edge = Sym2.mk p ↔ d.toProd = p ∨ d.toProd = p.swap := by
rintro ⟨p, h⟩
- apply Sym2.mk''_eq_mk''_iff
+ apply Sym2.mk_eq_mk_iff
#align simple_graph.dart_edge_eq_mk_iff SimpleGraph.dart_edge_eq_mk'_iff
theorem dart_edge_eq_mk'_iff' :
∀ {d : G.Dart} {u v : V},
- d.edge = ⟦(u, v)⟧ ↔ d.fst = u ∧ d.snd = v ∨ d.fst = v ∧ d.snd = u := by
+ d.edge = s(u, v) ↔ d.fst = u ∧ d.snd = v ∨ d.fst = v ∧ d.snd = u := by
rintro ⟨⟨a, b⟩, h⟩ u v
rw [dart_edge_eq_mk'_iff]
simp
@@ -894,16 +894,16 @@ def incidenceSet (v : V) : Set (Sym2 V) :=
theorem incidenceSet_subset (v : V) : G.incidenceSet v ⊆ G.edgeSet := fun _ h => h.1
#align simple_graph.incidence_set_subset SimpleGraph.incidenceSet_subset
-theorem mk'_mem_incidenceSet_iff : ⟦(b, c)⟧ ∈ G.incidenceSet a ↔ G.Adj b c ∧ (a = b ∨ a = c) :=
+theorem mk'_mem_incidenceSet_iff : s(b, c) ∈ G.incidenceSet a ↔ G.Adj b c ∧ (a = b ∨ a = c) :=
and_congr_right' Sym2.mem_iff
#align simple_graph.mk_mem_incidence_set_iff SimpleGraph.mk'_mem_incidenceSet_iff
-theorem mk'_mem_incidenceSet_left_iff : ⟦(a, b)⟧ ∈ G.incidenceSet a ↔ G.Adj a b :=
- and_iff_left <| Sym2.mem_mk''_left _ _
+theorem mk'_mem_incidenceSet_left_iff : s(a, b) ∈ G.incidenceSet a ↔ G.Adj a b :=
+ and_iff_left <| Sym2.mem_mk_left _ _
#align simple_graph.mk_mem_incidence_set_left_iff SimpleGraph.mk'_mem_incidenceSet_left_iff
-theorem mk'_mem_incidenceSet_right_iff : ⟦(a, b)⟧ ∈ G.incidenceSet b ↔ G.Adj a b :=
- and_iff_left <| Sym2.mem_mk''_right _ _
+theorem mk'_mem_incidenceSet_right_iff : s(a, b) ∈ G.incidenceSet b ↔ G.Adj a b :=
+ and_iff_left <| Sym2.mem_mk_right _ _
#align simple_graph.mk_mem_incidence_set_right_iff SimpleGraph.mk'_mem_incidenceSet_right_iff
theorem edge_mem_incidenceSet_iff {e : G.edgeSet} : ↑e ∈ G.incidenceSet a ↔ a ∈ (e : Sym2 V) :=
@@ -911,14 +911,14 @@ theorem edge_mem_incidenceSet_iff {e : G.edgeSet} : ↑e ∈ G.incidenceSet a
#align simple_graph.edge_mem_incidence_set_iff SimpleGraph.edge_mem_incidenceSet_iff
theorem incidenceSet_inter_incidenceSet_subset (h : a ≠ b) :
- G.incidenceSet a ∩ G.incidenceSet b ⊆ {⟦(a, b)⟧} := fun _e he =>
+ G.incidenceSet a ∩ G.incidenceSet b ⊆ {s(a, b)} := fun _e he =>
(Sym2.mem_and_mem_iff h).1 ⟨he.1.2, he.2.2⟩
#align simple_graph.incidence_set_inter_incidence_set_subset SimpleGraph.incidenceSet_inter_incidenceSet_subset
theorem incidenceSet_inter_incidenceSet_of_adj (h : G.Adj a b) :
- G.incidenceSet a ∩ G.incidenceSet b = {⟦(a, b)⟧} := by
+ G.incidenceSet a ∩ G.incidenceSet b = {s(a, b)} := by
refine' (G.incidenceSet_inter_incidenceSet_subset <| h.ne).antisymm _
- rintro _ (rfl : _ = ⟦(a, b)⟧)
+ rintro _ (rfl : _ = s(a, b))
exact ⟨G.mk'_mem_incidenceSet_left_iff.2 h, G.mk'_mem_incidenceSet_right_iff.2 h⟩
#align simple_graph.incidence_set_inter_incidence_set_of_adj SimpleGraph.incidenceSet_inter_incidenceSet_of_adj
@@ -1037,11 +1037,11 @@ lemma not_mem_neighborSet_self : a ∉ G.neighborSet a := by simp
#align simple_graph.not_mem_neighbor_set_self SimpleGraph.not_mem_neighborSet_self
@[simp]
-theorem mem_incidenceSet (v w : V) : ⟦(v, w)⟧ ∈ G.incidenceSet v ↔ G.Adj v w := by
+theorem mem_incidenceSet (v w : V) : s(v, w) ∈ G.incidenceSet v ↔ G.Adj v w := by
simp [incidenceSet]
#align simple_graph.mem_incidence_set SimpleGraph.mem_incidenceSet
-theorem mem_incidence_iff_neighbor {v w : V} : ⟦(v, w)⟧ ∈ G.incidenceSet v ↔ w ∈ G.neighborSet v :=
+theorem mem_incidence_iff_neighbor {v w : V} : s(v, w) ∈ G.incidenceSet v ↔ w ∈ G.neighborSet v :=
by simp only [mem_incidenceSet, mem_neighborSet]
#align simple_graph.mem_incidence_iff_neighbor SimpleGraph.mem_incidence_iff_neighbor
@@ -1165,7 +1165,7 @@ vertex and the set of vertices adjacent to the vertex. -/
def incidenceSetEquivNeighborSet (v : V) : G.incidenceSet v ≃ G.neighborSet v
where
toFun e := ⟨G.otherVertexOfIncident e.2, G.incidence_other_prop e.2⟩
- invFun w := ⟨⟦(v, w.1)⟧, G.mem_incidence_iff_neighbor.mpr w.2⟩
+ invFun w := ⟨s(v, w.1), G.mem_incidence_iff_neighbor.mpr w.2⟩
left_inv x := by simp [otherVertexOfIncident]
right_inv := fun ⟨w, hw⟩ => by
simp only [mem_neighborSet, Subtype.mk.injEq]
@@ -1190,7 +1190,7 @@ def deleteEdges (s : Set (Sym2 V)) : SimpleGraph V
@[simp]
theorem deleteEdges_adj (s : Set (Sym2 V)) (v w : V) :
- (G.deleteEdges s).Adj v w ↔ G.Adj v w ∧ ¬⟦(v, w)⟧ ∈ s :=
+ (G.deleteEdges s).Adj v w ↔ G.Adj v w ∧ ¬s(v, w) ∈ s :=
Iff.rfl
#align simple_graph.delete_edges_adj SimpleGraph.deleteEdges_adj
Forward port https://github.com/leanprover-community/mathlib/pull/19203
@@ -9,7 +9,7 @@ import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
import Mathlib.Data.Sym.Card
-#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"c6ef6387ede9983aee397d442974e61f89dfd87b"
+#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe"
/-!
# Simple graphs
@@ -578,12 +578,15 @@ variable {G G₁ G₂}
@[simp] lemma disjoint_edgeSet : Disjoint G₁.edgeSet G₂.edgeSet ↔ Disjoint G₁ G₂ := by
rw [Set.disjoint_iff, disjoint_iff_inf_le, ← edgeSet_inf, ← edgeSet_bot, ← Set.le_iff_subset,
- OrderEmbedding.le_iff_le]
+ OrderEmbedding.le_iff_le]
+#align simple_graph.disjoint_edge_set SimpleGraph.disjoint_edgeSet
@[simp] lemma edgeSet_eq_empty : G.edgeSet = ∅ ↔ G = ⊥ := by rw [← edgeSet_bot, edgeSet_inj]
+#align simple_graph.edge_set_eq_empty SimpleGraph.edgeSet_eq_empty
@[simp] lemma edgeSet_nonempty : G.edgeSet.Nonempty ↔ G ≠ ⊥ := by
rw [Set.nonempty_iff_ne_empty, edgeSet_eq_empty.ne]
+#align simple_graph.edge_set_nonempty SimpleGraph.edgeSet_nonempty
/-- This lemma, combined with `edgeSet_sdiff` and `edgeSet_from_edgeSet`,
allows proving `(G \ from_edgeSet s).edge_set = G.edgeSet \ s` by `simp`. -/
@@ -729,9 +732,11 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
conv_rhs => rw [← Set.diff_union_inter s {e : Sym2 V | e.IsDiag}]
rw [← disjoint_edgeSet, edgeSet_fromEdgeSet, Set.disjoint_union_right, and_iff_left]
exact Set.disjoint_left.2 fun e he he' ↦ not_isDiag_of_mem_edgeSet _ he he'.2
+#align simple_graph.disjoint_from_edge_set SimpleGraph.disjoint_fromEdgeSet
@[simp] lemma fromEdgeSet_disjoint : Disjoint (fromEdgeSet s) G ↔ Disjoint s G.edgeSet := by
rw [disjoint_comm, disjoint_fromEdgeSet, disjoint_comm]
+#align simple_graph.from_edge_set_disjoint SimpleGraph.fromEdgeSet_disjoint
instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSet := by
rw [edgeSet_fromEdgeSet s]
@@ -1028,6 +1033,9 @@ theorem mem_neighborSet (v w : V) : w ∈ G.neighborSet v ↔ G.Adj v w :=
Iff.rfl
#align simple_graph.mem_neighbor_set SimpleGraph.mem_neighborSet
+lemma not_mem_neighborSet_self : a ∉ G.neighborSet a := by simp
+#align simple_graph.not_mem_neighbor_set_self SimpleGraph.not_mem_neighborSet_self
+
@[simp]
theorem mem_incidenceSet (v w : V) : ⟦(v, w)⟧ ∈ G.incidenceSet v ↔ G.Adj v w := by
simp [incidenceSet]
@@ -1197,8 +1205,10 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) :
exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.ne⟩⟩
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
-@[simp] lemma deleteEdges_eq {s : Set (Sym2 V)} : G.deleteEdges s = G ↔ Disjoint G.edgeSet s := by
+@[simp]
+lemma deleteEdges_eq_self {s : Set (Sym2 V)} : G.deleteEdges s = G ↔ Disjoint G.edgeSet s := by
rw [deleteEdges_eq_sdiff_fromEdgeSet, sdiff_eq_left, disjoint_fromEdgeSet]
+#align simple_graph.delete_edges_eq SimpleGraph.deleteEdges_eq_self
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSet := by
ext
@@ -1279,11 +1289,11 @@ variable {G}
theorem deleteFar_iff :
G.DeleteFar p r ↔ ∀ ⦃H : SimpleGraph _⦄ [DecidableRel H.Adj],
H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card := by
- refine' ⟨fun h H _ hHG hH => _, fun h s hs hG => _⟩
+ refine ⟨fun h H _ hHG hH ↦ ?_, fun h s hs hG ↦ ?_⟩
· have := h (sdiff_subset G.edgeFinset H.edgeFinset)
simp only [deleteEdges_sdiff_eq_of_le _ hHG, edgeFinset_mono hHG, card_sdiff,
card_le_of_subset, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
- convert this hH
+ exact this hH
· classical
simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
card_le_of_subset hs] using h (G.deleteEdges_le s) hG
@@ -1352,6 +1362,10 @@ protected def map (f : V ↪ W) (G : SimpleGraph V) : SimpleGraph W where
exact h.ne (f.injective h'.symm)
#align simple_graph.map SimpleGraph.map
+instance instDecidableMapAdj {f : V ↪ W} {a b} [Decidable (Relation.Map G.Adj f f a b)] :
+ Decidable ((G.map f).Adj a b) := ‹Decidable (Relation.Map G.Adj f f a b)›
+#align simple_graph.decidable_map SimpleGraph.instDecidableMapAdj
+
@[simp]
theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
(G.map f).Adj u v ↔ ∃ u' v' : V, G.Adj u' v' ∧ f u' = u ∧ f v' = v :=
@@ -1360,6 +1374,7 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
lemma map_adj_apply {G : SimpleGraph V} {f : V ↪ W} {a b : V} :
(G.map f).Adj (f a) (f b) ↔ G.Adj a b := by simp
+#align simple_graph.map_adj_apply SimpleGraph.map_adj_apply
theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩
@@ -1368,12 +1383,11 @@ theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
@[simp] lemma map_id : G.map (Function.Embedding.refl _) = G :=
SimpleGraph.ext _ _ $ Relation.map_id_id _
+#align simple_graph.map_id SimpleGraph.map_id
@[simp] lemma map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
SimpleGraph.ext _ _ $ Relation.map_map _ _ _ _ _
-
-instance instDecidableMapAdj (f : V ↪ W) (G : SimpleGraph V)
- [DecidableRel (Relation.Map G.Adj f f)] : DecidableRel (G.map f).Adj := ‹DecidableRel _›
+#align simple_graph.map_map SimpleGraph.map_map
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
adjacency relation.
@@ -1390,9 +1404,11 @@ protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V where
(G.comap f).Adj u v ↔ G.Adj (f u) (f v) := Iff.rfl
@[simp] lemma comap_id {G : SimpleGraph V} : G.comap id = G := SimpleGraph.ext _ _ rfl
+#align simple_graph.comap_id SimpleGraph.comap_id
@[simp] lemma comap_comap {G : SimpleGraph X} (f : V → W) (g : W → X) :
(G.comap g).comap f = G.comap (g ∘ f) := rfl
+#align simple_graph.comap_comap SimpleGraph.comap_comap
instance instDecidableComapAdj (f : V → W) (G : SimpleGraph W) [DecidableRel G.Adj] :
DecidableRel (G.comap f).Adj := fun _ _ ↦ ‹DecidableRel G.Adj› _ _
@@ -1401,9 +1417,11 @@ lemma comap_symm (G : SimpleGraph V) (e : V ≃ W) :
G.comap e.symm.toEmbedding = G.map e.toEmbedding := by
ext; simp only [Equiv.apply_eq_iff_eq_symm_apply, comap_adj, map_adj, Equiv.toEmbedding_apply,
exists_eq_right_right, exists_eq_right]
+#align simple_graph.comap_symm SimpleGraph.comap_symm
lemma map_symm (G : SimpleGraph W) (e : V ≃ W) :
G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [← comap_symm, e.symm_symm]
+#align simple_graph.map_symm SimpleGraph.map_symm
theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by
intro G G' h _ _ ha
@@ -1459,15 +1477,18 @@ protected def _root_.Equiv.simpleGraph (e : V ≃ W) : SimpleGraph V ≃ SimpleG
invFun := SimpleGraph.comap e
left_inv _ := by simp
right_inv _ := by simp
+#align equiv.simple_graph Equiv.simpleGraph
@[simp] lemma _root_.Equiv.simpleGraph_refl : (Equiv.refl V).simpleGraph = Equiv.refl _ := by
ext; rfl
@[simp] lemma _root_.Equiv.simpleGraph_trans (e₁ : V ≃ W) (e₂ : W ≃ X) :
(e₁.trans e₂).simpleGraph = e₁.simpleGraph.trans e₂.simpleGraph := rfl
+#align equiv.simple_graph_trans Equiv.simpleGraph_trans
@[simp]
lemma _root_.Equiv.symm_simpleGraph (e : V ≃ W) : e.simpleGraph.symm = e.symm.simpleGraph := rfl
+#align equiv.symm_simple_graph Equiv.symm_simpleGraph
/-! ## Induced graphs -/
@@ -1858,10 +1879,10 @@ protected abbrev id : G →g G :=
RelHom.id _
#align simple_graph.hom.id SimpleGraph.Hom.id
-@[simp, norm_cast] lemma coe_id : ⇑(Hom.id : G →g G) = _root_.id := rfl
+@[simp, norm_cast] lemma coe_id : ⇑(Hom.id : G →g G) = id := rfl
+#align simple_graph.hom.coe_id SimpleGraph.Hom.coe_id
-instance [Subsingleton (V → W)] : Subsingleton (G →g H) :=
- FunLike.coe_injective.subsingleton
+instance [Subsingleton (V → W)] : Subsingleton (G →g H) := FunLike.coe_injective.subsingleton
instance [IsEmpty V] : Unique (G →g H) where
default := ⟨isEmptyElim, fun {a} ↦ isEmptyElim a⟩
@@ -1953,8 +1974,10 @@ theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f
/-- The graph homomorphism from a smaller graph to a bigger one. -/
def ofLe (h : G₁ ≤ G₂) : G₁ →g G₂ := ⟨id, @h⟩
+#align simple_graph.hom.of_le SimpleGraph.Hom.ofLe
@[simp, norm_cast] lemma coe_ofLe (h : G₁ ≤ G₂) : ⇑(ofLe h) = id := rfl
+#align simple_graph.hom.coe_of_le SimpleGraph.Hom.coe_ofLe
end Hom
@@ -1973,6 +1996,7 @@ abbrev toHom : G →g G' :=
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
@[simp] lemma coe_toHom (f : G ↪g H) : ⇑f.toHom = f := rfl
+#align simple_graph.embedding.coe_to_hom SimpleGraph.Embedding.coe_toHom
@[simp] theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
Characterise IsAtom
, IsCoatom
, Covby
in Set α
, Multiset α
, Finset α
and deduce that Multiset α
, Finset α
are graded orders.
Note I am moving some existing characterisations to here because it makes sense thematically, but I could be convinced otherwise.
@@ -1796,13 +1796,13 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
rw [Finset.ssubset_iff]
use w
constructor
+ · rw [Set.mem_toFinset]
+ apply not_mem_commonNeighbors_right
· rw [Finset.insert_subset_iff]
constructor
· simpa
· rw [neighborFinset, Set.toFinset_subset_toFinset]
exact G.commonNeighbors_subset_neighborSet_left _ _
- · rw [Set.mem_toFinset]
- apply not_mem_commonNeighbors_right
#align simple_graph.adj.card_common_neighbors_lt_degree SimpleGraph.Adj.card_commonNeighbors_lt_degree
theorem card_commonNeighbors_top [DecidableEq V] {v w : V} (h : v ≠ w) :
@@ -426,7 +426,7 @@ instance [Subsingleton V] : Unique (SimpleGraph V) where
uniq G := by ext a b; have := Subsingleton.elim a b; simp [this]
instance [Nontrivial V] : Nontrivial (SimpleGraph V) :=
- ⟨⟨⊥, ⊤, fun h ↦ not_subsingleton V ⟨by simpa only [←adj_inj, Function.funext_iff, bot_adj,
+ ⟨⟨⊥, ⊤, fun h ↦ not_subsingleton V ⟨by simpa only [← adj_inj, Function.funext_iff, bot_adj,
top_adj, ne_eq, eq_iff_iff, false_iff, not_not] using h⟩⟩⟩
section Decidable
@@ -577,10 +577,10 @@ theorem edgeSet_sdiff : (G₁ \ G₂).edgeSet = G₁.edgeSet \ G₂.edgeSet := b
variable {G G₁ G₂}
@[simp] lemma disjoint_edgeSet : Disjoint G₁.edgeSet G₂.edgeSet ↔ Disjoint G₁ G₂ := by
- rw [Set.disjoint_iff, disjoint_iff_inf_le, ←edgeSet_inf, ←edgeSet_bot, ←Set.le_iff_subset,
+ rw [Set.disjoint_iff, disjoint_iff_inf_le, ← edgeSet_inf, ← edgeSet_bot, ← Set.le_iff_subset,
OrderEmbedding.le_iff_le]
-@[simp] lemma edgeSet_eq_empty : G.edgeSet = ∅ ↔ G = ⊥ := by rw [←edgeSet_bot, edgeSet_inj]
+@[simp] lemma edgeSet_eq_empty : G.edgeSet = ∅ ↔ G = ⊥ := by rw [← edgeSet_bot, edgeSet_inj]
@[simp] lemma edgeSet_nonempty : G.edgeSet.Nonempty ↔ G ≠ ⊥ := by
rw [Set.nonempty_iff_ne_empty, edgeSet_eq_empty.ne]
@@ -726,8 +726,8 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
@[simp] lemma disjoint_fromEdgeSet : Disjoint G (fromEdgeSet s) ↔ Disjoint G.edgeSet s := by
- conv_rhs => rw [←Set.diff_union_inter s {e : Sym2 V | e.IsDiag}]
- rw [←disjoint_edgeSet, edgeSet_fromEdgeSet, Set.disjoint_union_right, and_iff_left]
+ conv_rhs => rw [← Set.diff_union_inter s {e : Sym2 V | e.IsDiag}]
+ rw [← disjoint_edgeSet, edgeSet_fromEdgeSet, Set.disjoint_union_right, and_iff_left]
exact Set.disjoint_left.2 fun e he he' ↦ not_isDiag_of_mem_edgeSet _ he he'.2
@[simp] lemma fromEdgeSet_disjoint : Disjoint (fromEdgeSet s) G ↔ Disjoint s G.edgeSet := by
@@ -1403,7 +1403,7 @@ lemma comap_symm (G : SimpleGraph V) (e : V ≃ W) :
exists_eq_right_right, exists_eq_right]
lemma map_symm (G : SimpleGraph W) (e : V ≃ W) :
- G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [←comap_symm, e.symm_symm]
+ G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [← comap_symm, e.symm_symm]
theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by
intro G G' h _ _ ha
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-/
import Mathlib.Combinatorics.SimpleGraph.Init
+import Mathlib.Data.FunLike.Fintype
import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
import Mathlib.Data.Sym.Card
@@ -420,6 +421,14 @@ theorem emptyGraph_eq_bot (V : Type u) : emptyGraph V = ⊥ :=
instance (V : Type u) : Inhabited (SimpleGraph V) :=
⟨⊥⟩
+instance [Subsingleton V] : Unique (SimpleGraph V) where
+ default := ⊥
+ uniq G := by ext a b; have := Subsingleton.elim a b; simp [this]
+
+instance [Nontrivial V] : Nontrivial (SimpleGraph V) :=
+ ⟨⟨⊥, ⊤, fun h ↦ not_subsingleton V ⟨by simpa only [←adj_inj, Function.funext_iff, bot_adj,
+ top_adj, ne_eq, eq_iff_iff, false_iff, not_not] using h⟩⟩⟩
+
section Decidable
variable (V) (H : SimpleGraph V) [DecidableRel G.Adj] [DecidableRel H.Adj]
@@ -565,6 +574,17 @@ theorem edgeSet_sdiff : (G₁ \ G₂).edgeSet = G₁.edgeSet \ G₂.edgeSet := b
rfl
#align simple_graph.edge_set_sdiff SimpleGraph.edgeSet_sdiff
+variable {G G₁ G₂}
+
+@[simp] lemma disjoint_edgeSet : Disjoint G₁.edgeSet G₂.edgeSet ↔ Disjoint G₁ G₂ := by
+ rw [Set.disjoint_iff, disjoint_iff_inf_le, ←edgeSet_inf, ←edgeSet_bot, ←Set.le_iff_subset,
+ OrderEmbedding.le_iff_le]
+
+@[simp] lemma edgeSet_eq_empty : G.edgeSet = ∅ ↔ G = ⊥ := by rw [←edgeSet_bot, edgeSet_inj]
+
+@[simp] lemma edgeSet_nonempty : G.edgeSet.Nonempty ↔ G ≠ ⊥ := by
+ rw [Set.nonempty_iff_ne_empty, edgeSet_eq_empty.ne]
+
/-- This lemma, combined with `edgeSet_sdiff` and `edgeSet_from_edgeSet`,
allows proving `(G \ from_edgeSet s).edge_set = G.edgeSet \ s` by `simp`. -/
@[simp]
@@ -593,6 +613,8 @@ theorem adj_iff_exists_edge_coe : G.Adj a b ↔ ∃ e : G.edgeSet, e.val = ⟦(a
simp only [mem_edgeSet, exists_prop, SetCoe.exists, exists_eq_right, Subtype.coe_mk]
#align simple_graph.adj_iff_exists_edge_coe SimpleGraph.adj_iff_exists_edge_coe
+variable (G G₁ G₂)
+
theorem edge_other_ne {e : Sym2 V} (he : e ∈ G.edgeSet) {v : V} (h : v ∈ e) :
Sym2.Mem.other h ≠ v := by
erw [← Sym2.other_spec h, Sym2.eq_swap] at he
@@ -703,6 +725,14 @@ theorem fromEdgeSet_mono {s t : Set (Sym2 V)} (h : s ⊆ t) : fromEdgeSet s ≤
exact fun vws _ => h vws
#align simple_graph.from_edge_set_mono SimpleGraph.fromEdgeSet_mono
+@[simp] lemma disjoint_fromEdgeSet : Disjoint G (fromEdgeSet s) ↔ Disjoint G.edgeSet s := by
+ conv_rhs => rw [←Set.diff_union_inter s {e : Sym2 V | e.IsDiag}]
+ rw [←disjoint_edgeSet, edgeSet_fromEdgeSet, Set.disjoint_union_right, and_iff_left]
+ exact Set.disjoint_left.2 fun e he he' ↦ not_isDiag_of_mem_edgeSet _ he he'.2
+
+@[simp] lemma fromEdgeSet_disjoint : Disjoint (fromEdgeSet s) G ↔ Disjoint s G.edgeSet := by
+ rw [disjoint_comm, disjoint_fromEdgeSet, disjoint_comm]
+
instance [DecidableEq V] [Fintype s] : Fintype (fromEdgeSet s).edgeSet := by
rw [edgeSet_fromEdgeSet s]
infer_instance
@@ -1167,6 +1197,9 @@ theorem deleteEdges_eq_sdiff_fromEdgeSet (s : Set (Sym2 V)) :
exact ⟨fun h => ⟨h.1, not_and_of_not_left _ h.2⟩, fun h => ⟨h.1, not_and'.mp h.2 h.ne⟩⟩
#align simple_graph.delete_edges_eq_sdiff_from_edge_set SimpleGraph.deleteEdges_eq_sdiff_fromEdgeSet
+@[simp] lemma deleteEdges_eq {s : Set (Sym2 V)} : G.deleteEdges s = G ↔ Disjoint G.edgeSet s := by
+ rw [deleteEdges_eq_sdiff_fromEdgeSet, sdiff_eq_left, disjoint_fromEdgeSet]
+
theorem compl_eq_deleteEdges : Gᶜ = (⊤ : SimpleGraph V).deleteEdges G.edgeSet := by
ext
simp
@@ -1241,18 +1274,18 @@ def DeleteFar (p : SimpleGraph V → Prop) (r : 𝕜) : Prop :=
∀ ⦃s⦄, s ⊆ G.edgeFinset → p (G.deleteEdges s) → r ≤ s.card
#align simple_graph.delete_far SimpleGraph.DeleteFar
-open Classical
-
variable {G}
theorem deleteFar_iff :
- G.DeleteFar p r ↔ ∀ ⦃H⦄, H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card := by
- refine' ⟨fun h H hHG hH => _, fun h s hs hG => _⟩
+ G.DeleteFar p r ↔ ∀ ⦃H : SimpleGraph _⦄ [DecidableRel H.Adj],
+ H ≤ G → p H → r ≤ G.edgeFinset.card - H.edgeFinset.card := by
+ refine' ⟨fun h H _ hHG hH => _, fun h s hs hG => _⟩
· have := h (sdiff_subset G.edgeFinset H.edgeFinset)
simp only [deleteEdges_sdiff_eq_of_le _ hHG, edgeFinset_mono hHG, card_sdiff,
card_le_of_subset, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
- exact this hH
- · simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
+ convert this hH
+ · classical
+ simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
card_le_of_subset hs] using h (G.deleteEdges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
@@ -1325,23 +1358,53 @@ theorem map_adj (f : V ↪ W) (G : SimpleGraph V) (u v : W) :
Iff.rfl
#align simple_graph.map_adj SimpleGraph.map_adj
+lemma map_adj_apply {G : SimpleGraph V} {f : V ↪ W} {a b : V} :
+ (G.map f).Adj (f a) (f b) ↔ G.Adj a b := by simp
+
theorem map_monotone (f : V ↪ W) : Monotone (SimpleGraph.map f) := by
rintro G G' h _ _ ⟨u, v, ha, rfl, rfl⟩
exact ⟨_, _, h ha, rfl, rfl⟩
#align simple_graph.map_monotone SimpleGraph.map_monotone
+@[simp] lemma map_id : G.map (Function.Embedding.refl _) = G :=
+ SimpleGraph.ext _ _ $ Relation.map_id_id _
+
+@[simp] lemma map_map (f : V ↪ W) (g : W ↪ X) : (G.map f).map g = G.map (f.trans g) :=
+ SimpleGraph.ext _ _ $ Relation.map_map _ _ _ _ _
+
+instance instDecidableMapAdj (f : V ↪ W) (G : SimpleGraph V)
+ [DecidableRel (Relation.Map G.Adj f f)] : DecidableRel (G.map f).Adj := ‹DecidableRel _›
+
/-- Given a function, there is a contravariant induced map on graphs by pulling back the
adjacency relation.
This is one of the ways of creating induced graphs. See `SimpleGraph.induce` for a wrapper.
This is surjective when `f` is injective (see `SimpleGraph.comap_surjective`).-/
-@[simps]
protected def comap (f : V → W) (G : SimpleGraph W) : SimpleGraph V where
Adj u v := G.Adj (f u) (f v)
symm _ _ h := h.symm
loopless _ := G.loopless _
#align simple_graph.comap SimpleGraph.comap
+@[simp] lemma comap_adj {G : SimpleGraph W} {f : V → W} :
+ (G.comap f).Adj u v ↔ G.Adj (f u) (f v) := Iff.rfl
+
+@[simp] lemma comap_id {G : SimpleGraph V} : G.comap id = G := SimpleGraph.ext _ _ rfl
+
+@[simp] lemma comap_comap {G : SimpleGraph X} (f : V → W) (g : W → X) :
+ (G.comap g).comap f = G.comap (g ∘ f) := rfl
+
+instance instDecidableComapAdj (f : V → W) (G : SimpleGraph W) [DecidableRel G.Adj] :
+ DecidableRel (G.comap f).Adj := fun _ _ ↦ ‹DecidableRel G.Adj› _ _
+
+lemma comap_symm (G : SimpleGraph V) (e : V ≃ W) :
+ G.comap e.symm.toEmbedding = G.map e.toEmbedding := by
+ ext; simp only [Equiv.apply_eq_iff_eq_symm_apply, comap_adj, map_adj, Equiv.toEmbedding_apply,
+ exists_eq_right_right, exists_eq_right]
+
+lemma map_symm (G : SimpleGraph W) (e : V ≃ W) :
+ G.map e.symm.toEmbedding = G.comap e.toEmbedding := by rw [←comap_symm, e.symm_symm]
+
theorem comap_monotone (f : V ↪ W) : Monotone (SimpleGraph.comap f) := by
intro G G' h _ _ ha
exact h ha
@@ -1389,6 +1452,23 @@ Two vertices are adjacent if and only if their indices are not equal. -/
abbrev completeMultipartiteGraph {ι : Type*} (V : ι → Type*) : SimpleGraph (Σ i, V i) :=
SimpleGraph.comap Sigma.fst ⊤
+/-- Equivalent types have equivalent simple graphs. -/
+@[simps apply]
+protected def _root_.Equiv.simpleGraph (e : V ≃ W) : SimpleGraph V ≃ SimpleGraph W where
+ toFun := SimpleGraph.comap e.symm
+ invFun := SimpleGraph.comap e
+ left_inv _ := by simp
+ right_inv _ := by simp
+
+@[simp] lemma _root_.Equiv.simpleGraph_refl : (Equiv.refl V).simpleGraph = Equiv.refl _ := by
+ ext; rfl
+
+@[simp] lemma _root_.Equiv.simpleGraph_trans (e₁ : V ≃ W) (e₂ : W ≃ X) :
+ (e₁.trans e₂).simpleGraph = e₁.simpleGraph.trans e₂.simpleGraph := rfl
+
+@[simp]
+lemma _root_.Equiv.symm_simpleGraph (e : V ≃ W) : e.simpleGraph.symm = e.symm.simpleGraph := rfl
+
/-! ## Induced graphs -/
/- Given a set `s` of vertices, we can restrict a graph to those vertices by restricting its
@@ -1771,13 +1851,30 @@ infixl:50 " ≃g " => Iso
namespace Hom
-variable {G G'} (f : G →g G')
+variable {G G'} {G₁ G₂ : SimpleGraph V} {H : SimpleGraph W} (f : G →g G')
/-- The identity homomorphism from a graph to itself. -/
-abbrev id : G →g G :=
+protected abbrev id : G →g G :=
RelHom.id _
#align simple_graph.hom.id SimpleGraph.Hom.id
+@[simp, norm_cast] lemma coe_id : ⇑(Hom.id : G →g G) = _root_.id := rfl
+
+instance [Subsingleton (V → W)] : Subsingleton (G →g H) :=
+ FunLike.coe_injective.subsingleton
+
+instance [IsEmpty V] : Unique (G →g H) where
+ default := ⟨isEmptyElim, fun {a} ↦ isEmptyElim a⟩
+ uniq _ := Subsingleton.elim _ _
+
+instance instFintype [DecidableEq V] [Fintype V] [Fintype W] [DecidableRel G.Adj]
+ [DecidableRel H.Adj] : Fintype (G →g H) :=
+ Fintype.ofEquiv {f : V → W // ∀ {a b}, G.Adj a b → H.Adj (f a) (f b)}
+ { toFun := fun f ↦ ⟨f.1, f.2⟩, invFun := fun f ↦ ⟨f.1, f.2⟩,
+ left_inv := fun _ ↦ rfl, right_inv := fun _ ↦ rfl }
+
+instance [Finite V] [Finite W] : Finite (G →g H) := FunLike.finite _
+
theorem map_adj {v w : V} (h : G.Adj v w) : G'.Adj (f v) (f w) :=
f.map_rel' h
#align simple_graph.hom.map_adj SimpleGraph.Hom.map_adj
@@ -1854,11 +1951,16 @@ theorem coe_comp (f' : G' →g G'') (f : G →g G') : ⇑(f'.comp f) = f' ∘ f
rfl
#align simple_graph.hom.coe_comp SimpleGraph.Hom.coe_comp
+/-- The graph homomorphism from a smaller graph to a bigger one. -/
+def ofLe (h : G₁ ≤ G₂) : G₁ →g G₂ := ⟨id, @h⟩
+
+@[simp, norm_cast] lemma coe_ofLe (h : G₁ ≤ G₂) : ⇑(ofLe h) = id := rfl
+
end Hom
namespace Embedding
-variable {G G'} (f : G ↪g G')
+variable {G G'} {H : SimpleGraph W} (f : G ↪g G')
/-- The identity embedding from a graph to itself. -/
abbrev refl : G ↪g G :=
@@ -1870,7 +1972,9 @@ abbrev toHom : G →g G' :=
f.toRelHom
#align simple_graph.embedding.to_hom SimpleGraph.Embedding.toHom
-theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
+@[simp] lemma coe_toHom (f : G ↪g H) : ⇑f.toHom = f := rfl
+
+@[simp] theorem map_adj_iff {v w : V} : G'.Adj (f v) (f w) ↔ G.Adj v w :=
f.map_rel_iff
#align simple_graph.embedding.map_adj_iff SimpleGraph.Embedding.map_adj_iff
@@ -6,7 +6,7 @@ Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
import Mathlib.Combinatorics.SimpleGraph.Init
import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
-import Mathlib.Data.Sym.Sym2
+import Mathlib.Data.Sym.Card
#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"c6ef6387ede9983aee397d442974e61f89dfd87b"
@@ -539,6 +539,14 @@ theorem edgeSet_bot : (⊥ : SimpleGraph V).edgeSet = ∅ :=
Sym2.fromRel_bot
#align simple_graph.edge_set_bot SimpleGraph.edgeSet_bot
+@[simp]
+theorem edgeSet_top : (⊤ : SimpleGraph V).edgeSet = {e | ¬e.IsDiag} :=
+ Sym2.fromRel_ne
+
+@[simp]
+theorem edgeSet_subset_setOf_not_isDiag : G.edgeSet ⊆ {e | ¬e.IsDiag} :=
+ fun _ h => (Sym2.fromRel_irreflexive (sym := G.symm)).mp G.loopless h
+
@[simp]
theorem edgeSet_sup : (G₁ ⊔ G₂).edgeSet = G₁.edgeSet ∪ G₂.edgeSet := by
ext ⟨x, y⟩
@@ -967,6 +975,22 @@ theorem edgeSet_univ_card : (univ : Finset G.edgeSet).card = G.edgeFinset.card :
Fintype.card_of_subtype G.edgeFinset fun _ => mem_edgeFinset
#align simple_graph.edge_set_univ_card SimpleGraph.edgeSet_univ_card
+variable [Fintype V] [DecidableEq V]
+
+@[simp]
+theorem edgeFinset_top : (⊤ : SimpleGraph V).edgeFinset = univ.filter fun e => ¬e.IsDiag := by
+ rw [← coe_inj]; simp
+
+/-- The complete graph on `n` vertices has `n.choose 2` edges. -/
+theorem card_edgeFinset_top_eq_card_choose_two :
+ (⊤ : SimpleGraph V).edgeFinset.card = (Fintype.card V).choose 2 := by
+ simp_rw [Set.toFinset_card, edgeSet_top, Set.coe_setOf, ← Sym2.card_subtype_not_diag]
+
+/-- Any graph on `n` vertices has at most `n.choose 2` edges. -/
+theorem card_edgeFinset_le_card_choose_two : G.edgeFinset.card ≤ (Fintype.card V).choose 2 := by
+ rw [← card_edgeFinset_top_eq_card_choose_two]
+ exact card_le_of_subset (edgeFinset_mono le_top)
+
end EdgeFinset
@[simp]
I've also got a change to make this required, but I'd like to land this first.
@@ -383,7 +383,7 @@ instance completeAtomicBooleanAlgebra : CompleteAtomicBooleanAlgebra (SimpleGrap
exact x.irrefl h.1
inf_compl_le_bot := fun G v w h => False.elim <| h.2.2 h.1
top_le_sup_compl := fun G v w hvw => by
- by_cases G.Adj v w
+ by_cases h : G.Adj v w
· exact Or.inl h
· exact Or.inr ⟨hvw, h⟩
sSup := sSup
SimpleGraph.Adj
projection (#8179)
simps
was generating lemmas named _Adj
. This PR makes it generate _adj
instead, to follow the naming convention.
@@ -135,6 +135,8 @@ structure SimpleGraph (V : Type u) where
#align simple_graph SimpleGraph
-- porting note: changed `obviously` to `aesop` in the `structure`
+initialize_simps_projections SimpleGraph (Adj → adj)
+
/-- Constructor for simple graphs using a symmetric irreflexive boolean function. -/
@[simps]
def SimpleGraph.mk' {V : Type u} :
@@ -2126,7 +2128,7 @@ end Maps
@[simps!]
def induceUnivIso (G : SimpleGraph V) : G.induce Set.univ ≃g G where
toEquiv := Equiv.Set.univ V
- map_rel_iff' := by simp only [Equiv.Set.univ, Equiv.coe_fn_mk, comap_Adj, Embedding.coe_subtype,
+ map_rel_iff' := by simp only [Equiv.Set.univ, Equiv.coe_fn_mk, comap_adj, Embedding.coe_subtype,
Subtype.forall, Set.mem_univ, forall_true_left, implies_true]
end SimpleGraph
@@ -145,7 +145,7 @@ def SimpleGraph.mk' {V : Type u} :
simp only [mk.injEq, Subtype.mk.injEq]
intro h
funext v w
- simpa [Bool.coe_bool_iff] using congr_fun₂ h v w
+ simpa [Bool.coe_iff_coe] using congr_fun₂ h v w
/-- We can enumerate simple graphs by enumerating all functions `V → V → Bool`
and filtering on whether they are symmetric and irreflexive. -/
Removes nonterminal simps on lines looking like simp [...]
@@ -2028,12 +2028,16 @@ def mapEdgeSet : G.edgeSet ≃ G'.edgeSet
invFun := Hom.mapEdgeSet f.symm
left_inv := by
rintro ⟨e, h⟩
- simp [Hom.mapEdgeSet, Sym2.map_map, RelEmbedding.toRelHom]
+ simp only [Hom.mapEdgeSet, RelEmbedding.toRelHom, Embedding.toFun_eq_coe,
+ RelEmbedding.coe_toEmbedding, RelIso.coe_toRelEmbedding, Sym2.map_map, comp_apply,
+ Subtype.mk.injEq]
convert congr_fun Sym2.map_id e
exact RelIso.symm_apply_apply _ _
right_inv := by
rintro ⟨e, h⟩
- simp [Hom.mapEdgeSet, Sym2.map_map, RelEmbedding.toRelHom]
+ simp only [Hom.mapEdgeSet, RelEmbedding.toRelHom, Embedding.toFun_eq_coe,
+ RelEmbedding.coe_toEmbedding, RelIso.coe_toRelEmbedding, Sym2.map_map, comp_apply,
+ Subtype.mk.injEq]
convert congr_fun Sym2.map_id e
exact RelIso.apply_symm_apply _ _
#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSet
cliqueFree_of_replaceVertex_cliqueFree
is still quite long.
@@ -1239,6 +1239,43 @@ theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteF
end DeleteFar
+/-! ## Vertex replacement -/
+
+
+section ReplaceVertex
+
+variable [DecidableEq V] (s t : V)
+
+/-- The graph formed by forgetting `t`'s neighbours and instead giving it those of `s`. The `s-t`
+edge is removed if present. -/
+abbrev replaceVertex : SimpleGraph V where
+ Adj v w := if v = t then if w = t then False else G.Adj s w
+ else if w = t then G.Adj v s else G.Adj v w
+ symm v w := by dsimp only; split_ifs <;> simp [adj_comm]
+
+/-- There is never an `s-t` edge in `G.replaceVertex s t`. -/
+theorem not_adj_replaceVertex_same : ¬(G.replaceVertex s t).Adj s t := by simp
+
+@[simp]
+theorem replaceVertex_self : G.replaceVertex s s = G := by
+ ext; dsimp only; split_ifs <;> simp_all [adj_comm]
+
+/-- Except possibly for `t`, the neighbours of `s` in `G.replaceVertex s t` are its neighbours in
+`G`. -/
+lemma adj_replaceVertex_iff_of_ne_left {w : V} (hw : w ≠ t) :
+ (G.replaceVertex s t).Adj s w ↔ G.Adj s w := by simp [hw]
+
+/-- Except possibly for itself, the neighbours of `t` in `G.replaceVertex s t` are the neighbours of
+`s` in `G`. -/
+lemma adj_replaceVertex_iff_of_ne_right {w : V} (hw : w ≠ t) :
+ (G.replaceVertex s t).Adj t w ↔ G.Adj s w := by simp [hw]
+
+/-- Adjacency in `G.replaceVertex s t` which does not involve `t` is the same as that of `G`. -/
+lemma adj_replaceVertex_iff_of_ne {v w : V} (hv : v ≠ t) (hw : w ≠ t) :
+ (G.replaceVertex s t).Adj v w ↔ G.Adj v w := by simp [hv, hw]
+
+end ReplaceVertex
+
/-! ## Map and comap -/
This will improve spaces in the mathlib4 docs.
@@ -1682,7 +1682,7 @@ abbrev Hom :=
#align simple_graph.hom SimpleGraph.Hom
/-- A graph embedding is an embedding `f` such that for vertices `v w : V`,
-`G.Adj (f v) (f w) ↔ G.Adj v w `. Its image is an induced subgraph of G'.
+`G.Adj (f v) (f w) ↔ G.Adj v w`. Its image is an induced subgraph of G'.
The notation `G ↪g G'` represents the type of graph embeddings. -/
abbrev Embedding :=
@@ -1847,7 +1847,7 @@ protected def comap (f : V ↪ W) (G : SimpleGraph W) : G.comap f ↪g G :=
@[simp]
theorem comap_apply (f : V ↪ W) (G : SimpleGraph W) (v : V) :
- SimpleGraph.Embedding.comap f G v = f v := rfl
+ SimpleGraph.Embedding.comap f G v = f v := rfl
#align simple_graph.embedding.comap_apply SimpleGraph.Embedding.comap_apply
/-- Given an injective function, there is an embedding from a graph into the mapped graph. -/
@@ -1859,7 +1859,7 @@ protected def map (f : V ↪ W) (G : SimpleGraph V) : G ↪g G.map f :=
@[simp]
theorem map_apply (f : V ↪ W) (G : SimpleGraph V) (v : V) :
- SimpleGraph.Embedding.map f G v = f v := rfl
+ SimpleGraph.Embedding.map f G v = f v := rfl
#align simple_graph.embedding.map_apply SimpleGraph.Embedding.map_apply
/-- Induced graphs embed in the original graph.
@@ -2029,12 +2029,12 @@ protected def comap (f : V ≃ W) (G : SimpleGraph W) : G.comap f.toEmbedding
@[simp]
lemma comap_apply (f : V ≃ W) (G : SimpleGraph W) (v : V) :
- SimpleGraph.Iso.comap f G v = f v := rfl
+ SimpleGraph.Iso.comap f G v = f v := rfl
#align simple_graph.iso.comap_apply SimpleGraph.Iso.comap_apply
@[simp]
lemma comap_symm_apply (f : V ≃ W) (G : SimpleGraph W) (w : W) :
- (SimpleGraph.Iso.comap f G).symm w = f.symm w := rfl
+ (SimpleGraph.Iso.comap f G).symm w = f.symm w := rfl
#align simple_graph.iso.comap_symm_apply SimpleGraph.Iso.comap_symm_apply
/-- Given an injective function, there is an embedding from a graph into the mapped graph. -/
@@ -2046,12 +2046,12 @@ protected def map (f : V ≃ W) (G : SimpleGraph V) : G ≃g G.map f.toEmbedding
@[simp]
lemma map_apply (f : V ≃ W) (G : SimpleGraph V) (v : V) :
- SimpleGraph.Iso.map f G v = f v := rfl
+ SimpleGraph.Iso.map f G v = f v := rfl
#align simple_graph.iso.map_apply SimpleGraph.Iso.map_apply
@[simp]
lemma map_symm_apply (f : V ≃ W) (G : SimpleGraph V) (w : W) :
- (SimpleGraph.Iso.map f G).symm w = f.symm w := rfl
+ (SimpleGraph.Iso.map f G).symm w = f.symm w := rfl
#align simple_graph.iso.map_symm_apply SimpleGraph.Iso.map_symm_apply
/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
Fintype (SimpleGraph V)
computable (#4112)
Adds DecidableEq V
to the Fintype (SimpleGraph V)
instance's type signature, which can be easily satisfied in a noncomputable setting.
@@ -135,8 +135,31 @@ structure SimpleGraph (V : Type u) where
#align simple_graph SimpleGraph
-- porting note: changed `obviously` to `aesop` in the `structure`
-noncomputable instance {V : Type u} [Fintype V] : Fintype (SimpleGraph V) := by
- classical exact Fintype.ofInjective SimpleGraph.Adj SimpleGraph.ext
+/-- Constructor for simple graphs using a symmetric irreflexive boolean function. -/
+@[simps]
+def SimpleGraph.mk' {V : Type u} :
+ {adj : V → V → Bool // (∀ x y, adj x y = adj y x) ∧ (∀ x, ¬ adj x x)} ↪ SimpleGraph V where
+ toFun x := ⟨fun v w ↦ x.1 v w, fun v w ↦ by simp [x.2.1], fun v ↦ by simp [x.2.2]⟩
+ inj' := by
+ rintro ⟨adj, _⟩ ⟨adj', _⟩
+ simp only [mk.injEq, Subtype.mk.injEq]
+ intro h
+ funext v w
+ simpa [Bool.coe_bool_iff] using congr_fun₂ h v w
+
+/-- We can enumerate simple graphs by enumerating all functions `V → V → Bool`
+and filtering on whether they are symmetric and irreflexive. -/
+instance {V : Type u} [Fintype V] [DecidableEq V] : Fintype (SimpleGraph V) where
+ elems := Finset.univ.map SimpleGraph.mk'
+ complete := by
+ classical
+ rintro ⟨Adj, hs, hi⟩
+ simp only [mem_map, mem_univ, true_and, Subtype.exists, Bool.not_eq_true]
+ refine ⟨fun v w ↦ Adj v w, ⟨?_, ?_⟩, ?_⟩
+ · simp [hs.iff]
+ · intro v; simp [hi v]
+ · ext
+ simp
/-- Construct the simple graph induced by the given relation. It
symmetrizes the relation and makes it irreflexive. -/
@@ -168,21 +168,12 @@ def emptyGraph (V : Type u) : SimpleGraph V where Adj _ _ := False
/-- Two vertices are adjacent in the complete bipartite graph on two vertex types
if and only if they are not from the same side.
-Bipartite graphs in general may be regarded as being subgraphs of one of these.
-
-TODO also introduce complete multi-partite graphs, where the vertex type is a sigma type of an
-indexed family of vertex types
--/
+Any bipartite graph may be regarded as a subgraph of one of these. -/
@[simps]
-def completeBipartiteGraph (V W : Type*) : SimpleGraph (Sum V W)
- where
+def completeBipartiteGraph (V W : Type*) : SimpleGraph (Sum V W) where
Adj v w := v.isLeft ∧ w.isRight ∨ v.isRight ∧ w.isLeft
- symm := by
- intro v w
- cases v <;> cases w <;> simp
- loopless := by
- intro v
- cases v <;> simp
+ symm v w := by cases v <;> cases w <;> simp
+ loopless v := by cases v <;> simp
#align complete_bipartite_graph completeBipartiteGraph
namespace SimpleGraph
@@ -1306,6 +1297,12 @@ lemma le_comap_of_subsingleton (f : V → W) [Subsingleton V] : G ≤ G'.comap f
lemma map_le_of_subsingleton (f : V ↪ W) [Subsingleton V] : G.map f ≤ G' := by
rw [map_le_iff_le_comap]; apply le_comap_of_subsingleton
+/-- Given a family of vertex types indexed by `ι`, pulling back from `⊤ : SimpleGraph ι`
+yields the complete multipartite graph on the family.
+Two vertices are adjacent if and only if their indices are not equal. -/
+abbrev completeMultipartiteGraph {ι : Type*} (V : ι → Type*) : SimpleGraph (Σ i, V i) :=
+ SimpleGraph.comap Sigma.fst ⊤
+
/-! ## Induced graphs -/
/- Given a set `s` of vertices, we can restrict a graph to those vertices by restricting its
@@ -508,10 +508,10 @@ theorem edgeSet_injective : Injective (edgeSet : SimpleGraph V → Set (Sym2 V))
(edgeSetEmbedding V).injective
#align simple_graph.edge_set_injective SimpleGraph.edgeSet_injective
-alias edgeSet_subset_edgeSet ↔ _ edgeSet_mono
+alias ⟨_, edgeSet_mono⟩ := edgeSet_subset_edgeSet
#align simple_graph.edge_set_mono SimpleGraph.edgeSet_mono
-alias edgeSet_ssubset_edgeSet ↔ _ edgeSet_strict_mono
+alias ⟨_, edgeSet_strict_mono⟩ := edgeSet_ssubset_edgeSet
#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_mono
attribute [mono] edgeSet_mono edgeSet_strict_mono
@@ -915,10 +915,10 @@ theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G
theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by simp
#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
-alias edgeFinset_subset_edgeFinset ↔ _ edgeFinset_mono
+alias ⟨_, edgeFinset_mono⟩ := edgeFinset_subset_edgeFinset
#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
-alias edgeFinset_ssubset_edgeFinset ↔ _ edgeFinset_strict_mono
+alias ⟨_, edgeFinset_strict_mono⟩ := edgeFinset_ssubset_edgeFinset
#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
attribute [mono] edgeFinset_mono edgeFinset_strict_mono
@@ -1216,7 +1216,7 @@ theorem deleteFar_iff :
card_le_of_subset hs] using h (G.deleteEdges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
-alias deleteFar_iff ↔ DeleteFar.le_card_sub_card _
+alias ⟨DeleteFar.le_card_sub_card, _⟩ := deleteFar_iff
#align simple_graph.delete_far.le_card_sub_card SimpleGraph.DeleteFar.le_card_sub_card
theorem DeleteFar.mono (h : G.DeleteFar p r₂) (hr : r₁ ≤ r₂) : G.DeleteFar p r₁ := fun _ hs hG =>
(Replaces [mathlib#18454](https://github.com/leanprover-community/mathlib/pull/18454).)
Co-authored-by: Rémi Bottinelli <remi.bottinelli@bluewin.ch>
@@ -1300,6 +1300,12 @@ theorem map_comap_le (f : V ↪ W) (G : SimpleGraph W) : (G.comap f).map f ≤ G
rw [map_le_iff_le_comap]
#align simple_graph.map_comap_le SimpleGraph.map_comap_le
+lemma le_comap_of_subsingleton (f : V → W) [Subsingleton V] : G ≤ G'.comap f := by
+ intros v w; simp [Subsingleton.elim v w]
+
+lemma map_le_of_subsingleton (f : V ↪ W) [Subsingleton V] : G.map f ≤ G' := by
+ rw [map_le_iff_le_comap]; apply le_comap_of_subsingleton
+
/-! ## Induced graphs -/
/- Given a set `s` of vertices, we can restrict a graph to those vertices by restricting its
@@ -1313,6 +1319,9 @@ def induce (s : Set V) (G : SimpleGraph V) : SimpleGraph s :=
G.comap (Function.Embedding.subtype _)
#align simple_graph.induce SimpleGraph.induce
+@[simp] lemma induce_singleton_eq_top (v : V) : G.induce {v} = ⊤ := by
+ rw [eq_top_iff]; apply le_comap_of_subsingleton
+
/-- Given a graph on a set of vertices, we can make it be a `SimpleGraph V` by
adding in the remaining vertices without adding in any additional edges.
This is a wrapper around `SimpleGraph.map`. -/
@@ -1868,34 +1877,55 @@ theorem coe_comp (f' : G' ↪g G'') (f : G ↪g G') : ⇑(f'.comp f) = f' ∘ f
end Embedding
-section InduceHom
+section induceHom
variable {G G'} {G'' : SimpleGraph X} {s : Set V} {t : Set W} {r : Set X}
(φ : G →g G') (φst : Set.MapsTo φ s t) (ψ : G' →g G'') (ψtr : Set.MapsTo ψ t r)
/-- The restriction of a morphism of graphs to induced subgraphs. -/
-def InduceHom : G.induce s →g G'.induce t where
+def induceHom : G.induce s →g G'.induce t where
toFun := Set.MapsTo.restrict φ s t φst
map_rel' := φ.map_rel'
-#align simple_graph.induce_hom SimpleGraph.InduceHom
+#align simple_graph.induce_hom SimpleGraph.induceHom
-@[simp, norm_cast] lemma coe_induceHom : ⇑(InduceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
+@[simp, norm_cast] lemma coe_induceHom : ⇑(induceHom φ φst) = Set.MapsTo.restrict φ s t φst :=
rfl
#align simple_graph.coe_induce_hom SimpleGraph.coe_induceHom
@[simp] lemma induceHom_id (G : SimpleGraph V) (s) :
- InduceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id := by
+ induceHom (Hom.id : G →g G) (Set.mapsTo_id s) = Hom.id := by
ext x
rfl
#align simple_graph.induce_hom_id SimpleGraph.induceHom_id
@[simp] lemma induceHom_comp :
- (InduceHom ψ ψtr).comp (InduceHom φ φst) = InduceHom (ψ.comp φ) (ψtr.comp φst) := by
+ (induceHom ψ ψtr).comp (induceHom φ φst) = induceHom (ψ.comp φ) (ψtr.comp φst) := by
ext x
rfl
#align simple_graph.induce_hom_comp SimpleGraph.induceHom_comp
-end InduceHom
+lemma induceHom_injective (hi : Set.InjOn φ s) :
+ Function.Injective (induceHom φ φst) := by
+ erw [Set.MapsTo.restrict_inj] <;> assumption
+
+end induceHom
+
+section induceHomLE
+variable {s s' : Set V} (h : s ≤ s')
+
+/-- Given an inclusion of vertex subsets, the induced embedding on induced graphs.
+This is not an abbreviation for `induceHom` since we get an embedding in this case. -/
+def induceHomOfLE (h : s ≤ s') : G.induce s ↪g G.induce s' where
+ toEmbedding := Set.embeddingOfSubset s s' h
+ map_rel_iff' := by simp
+
+@[simp] lemma induceHomOfLE_apply (v : s) : (G.induceHomOfLE h) v = Set.inclusion h v := rfl
+
+@[simp] lemma induceHomOfLE_toHom :
+ (G.induceHomOfLE h).toHom = induceHom (.id : G →g G) ((Set.mapsTo_id s).mono_right h) := by
+ ext; simp
+
+end induceHomLE
namespace Iso
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -174,7 +174,7 @@ TODO also introduce complete multi-partite graphs, where the vertex type is a si
indexed family of vertex types
-/
@[simps]
-def completeBipartiteGraph (V W : Type _) : SimpleGraph (Sum V W)
+def completeBipartiteGraph (V W : Type*) : SimpleGraph (Sum V W)
where
Adj v w := v.isLeft ∧ w.isRight ∨ v.isRight ∧ w.isLeft
symm := by
@@ -187,7 +187,7 @@ def completeBipartiteGraph (V W : Type _) : SimpleGraph (Sum V W)
namespace SimpleGraph
-variable {ι : Sort _} {𝕜 : Type _} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
+variable {ι : Sort*} {𝕜 : Type*} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
(G' : SimpleGraph W) {a b c u v w : V} {e : Sym2 V}
@[simp]
@@ -472,7 +472,7 @@ The way `edgeSet` is defined is such that `mem_edgeSet` is proved by `refl`.
(That is, `⟦(v, w)⟧ ∈ G.edgeSet` is definitionally equal to `G.Adj v w`.)
-/
-- porting note: We need a separate definition so that dot notation works.
-def edgeSetEmbedding (V : Type _) : SimpleGraph V ↪o Set (Sym2 V) :=
+def edgeSetEmbedding (V : Type*) : SimpleGraph V ↪o Set (Sym2 V) :=
OrderEmbedding.ofMapLEIff (fun G => Sym2.fromRel G.symm) fun _ _ =>
⟨fun h a b => @h ⟦(a, b)⟧, fun h e => Sym2.ind @h e⟩
@@ -1849,7 +1849,7 @@ protected def spanningCoe {s : Set V} (G : SimpleGraph s) : G ↪g G.spanningCoe
#align simple_graph.embedding.spanning_coe SimpleGraph.Embedding.spanningCoe
/-- Embeddings of types induce embeddings of complete graphs on those types. -/
-protected def completeGraph {α β : Type _} (f : α ↪ β) :
+protected def completeGraph {α β : Type*} (f : α ↪ β) :
(⊤ : SimpleGraph α) ↪g (⊤ : SimpleGraph β) :=
{ f with map_rel_iff' := by simp }
#align simple_graph.embedding.complete_graph SimpleGraph.Embedding.completeGraph
@@ -2005,12 +2005,12 @@ lemma map_symm_apply (f : V ≃ W) (G : SimpleGraph V) (w : W) :
#align simple_graph.iso.map_symm_apply SimpleGraph.Iso.map_symm_apply
/-- Equivalences of types induce isomorphisms of complete graphs on those types. -/
-protected def completeGraph {α β : Type _} (f : α ≃ β) :
+protected def completeGraph {α β : Type*} (f : α ≃ β) :
(⊤ : SimpleGraph α) ≃g (⊤ : SimpleGraph β) :=
{ f with map_rel_iff' := by simp }
#align simple_graph.iso.complete_graph SimpleGraph.Iso.completeGraph
-theorem toEmbedding_completeGraph {α β : Type _} (f : α ≃ β) :
+theorem toEmbedding_completeGraph {α β : Type*} (f : α ≃ β) :
(Iso.completeGraph f).toEmbedding = Embedding.completeGraph f.toEmbedding :=
rfl
#align simple_graph.iso.to_embedding_complete_graph SimpleGraph.Iso.toEmbedding_completeGraph
Adds aesop_cat?
aesop_graph?
and restrict_tac?
@@ -98,6 +98,15 @@ macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause* : tactic =>
(options := { introsTransparency? := some .default, terminal := true })
(rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
+/--
+Use `aesop_graph?` to pass along a `Try this` suggestion when using `aesop_graph`
+-/
+macro (name := aesop_graph?) "aesop_graph?" c:Aesop.tactic_clause* : tactic =>
+ `(tactic|
+ aesop $c*
+ (options := { introsTransparency? := some .default, terminal := true })
+ (rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
+
/--
A variant of `aesop_graph` which does not fail if it is unable to solve the
goal. Use this only for exploration! Nonterminal Aesop is even worse than
Port/review of [mathlib#18410](https://github.com/leanprover-community/mathlib/pull/18410) directly to Mathlib4.
Co-authored-by: Rémi Bottinelli <remi.bottinelli@bluewin.ch> Co-authored-by: Anand Rao <anand.rao.art@gmail.com>
Co-authored-by: Oliver Nash <github@olivernash.org>
@@ -2022,4 +2022,11 @@ end Iso
end Maps
+/-- The graph induced on `Set.univ` is isomorphic to the original graph. -/
+@[simps!]
+def induceUnivIso (G : SimpleGraph V) : G.induce Set.univ ≃g G where
+ toEquiv := Equiv.Set.univ V
+ map_rel_iff' := by simp only [Equiv.Set.univ, Equiv.coe_fn_mk, comap_Adj, Embedding.coe_subtype,
+ Subtype.forall, Set.mem_univ, forall_true_left, implies_true]
+
end SimpleGraph
@@ -2,17 +2,14 @@
Copyright (c) 2020 Aaron Anderson, Jalex Stark, Kyle Miller. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
-
-! This file was ported from Lean 3 source module combinatorics.simple_graph.basic
-! leanprover-community/mathlib commit c6ef6387ede9983aee397d442974e61f89dfd87b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Combinatorics.SimpleGraph.Init
import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
import Mathlib.Data.Sym.Sym2
+#align_import combinatorics.simple_graph.basic from "leanprover-community/mathlib"@"c6ef6387ede9983aee397d442974e61f89dfd87b"
+
/-!
# Simple graphs
Adds new CompletelyDistribLattice
/CompleteAtomicBooleanAlgebra
classes for complete lattices / complete atomic Boolean algebras that are also completely distributive, and removes the misleading claim that CompleteDistribLattice
/CompleteBooleanAlgebra
are completely distributive.
CompleteDistribLattice
instances are upgraded to CompletelyDistribLattice
.CompleteBooleanAlgebra
instances are upgraded to CompleteAtomicBooleanAlgebra
.@@ -46,9 +46,9 @@ finitely many vertices.
graph isomorphisms. Note that a graph embedding is a stronger notion than an
injective graph homomorphism, since its image is an induced subgraph.
-* `CompleteBooleanAlgebra` instance: Under the subgraph relation, `SimpleGraph` forms a
- `CompleteBooleanAlgebra`. In other words, this is the complete lattice of spanning subgraphs of
- the complete graph.
+* `CompleteAtomicBooleanAlgebra` instance: Under the subgraph relation, `SimpleGraph` forms a
+ `CompleteAtomicBooleanAlgebra`. In other words, this is the complete lattice of spanning subgraphs
+ of the complete graph.
## Notations
@@ -343,7 +343,7 @@ instance distribLattice : DistribLattice (SimpleGraph V) :=
adj_injective.distribLattice _ (fun _ _ => rfl) fun _ _ => rfl with
le := fun G H => ∀ ⦃a b⦄, G.Adj a b → H.Adj a b }
-instance completeBooleanAlgebra : CompleteBooleanAlgebra (SimpleGraph V) :=
+instance completeAtomicBooleanAlgebra : CompleteAtomicBooleanAlgebra (SimpleGraph V) :=
{ SimpleGraph.distribLattice with
le := (· ≤ ·)
sup := (· ⊔ ·)
@@ -372,9 +372,7 @@ instance completeBooleanAlgebra : CompleteBooleanAlgebra (SimpleGraph V) :=
sInf := sInf
sInf_le := fun s G hG a b hab => hab.1 hG
le_sInf := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.ne⟩
- inf_sSup_le_iSup_inf := fun G s a b hab => by simpa using hab
- iInf_sup_le_sup_sInf := fun G s a b hab => by
- simpa [forall_and, forall_or_left, or_and_right, and_iff_left_of_imp Adj.ne] using hab }
+ iInf_iSup_eq := fun f => by ext; simp [Classical.skolem] }
@[simp]
theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
@@ -998,7 +998,7 @@ theorem card_neighborSet_union_compl_neighborSet [Fintype V] (G : SimpleGraph V)
#align simple_graph.card_neighbor_set_union_compl_neighbor_set SimpleGraph.card_neighborSet_union_compl_neighborSet
theorem neighborSet_compl (G : SimpleGraph V) (v : V) :
- Gᶜ.neighborSet v = G.neighborSet vᶜ \ {v} := by
+ Gᶜ.neighborSet v = (G.neighborSet v)ᶜ \ {v} := by
ext w
simp [and_comm, eq_comm]
#align simple_graph.neighbor_set_compl SimpleGraph.neighborSet_compl
@@ -1480,7 +1480,7 @@ theorem neighborFinset_eq_filter {v : V} [DecidableRel G.Adj] :
#align simple_graph.neighbor_finset_eq_filter SimpleGraph.neighborFinset_eq_filter
theorem neighborFinset_compl [DecidableEq V] [DecidableRel G.Adj] (v : V) :
- Gᶜ.neighborFinset v = G.neighborFinset vᶜ \ {v} := by
+ Gᶜ.neighborFinset v = (G.neighborFinset v)ᶜ \ {v} := by
simp only [neighborFinset, neighborSet_compl, Set.toFinset_diff, Set.toFinset_compl,
Set.toFinset_singleton]
#align simple_graph.neighbor_finset_compl SimpleGraph.neighborFinset_compl
Currently, (for both Set
and Finset
) insert_subset
is an iff
lemma stating that insert a s ⊆ t
if and only if a ∈ t
and s ⊆ t
. For both types, this PR renames this lemma to insert_subset_iff
, and adds an insert_subset
lemma that gives the implication just in the reverse direction : namely theorem insert_subset (ha : a ∈ t) (hs : s ⊆ t) : insert a s ⊆ t
.
This both aligns the naming with union_subset
and union_subset_iff
, and removes the need for the awkward insert_subset.mpr ⟨_,_⟩
idiom. It touches a lot of files (too many to list), but in a trivial way.
@@ -1620,7 +1620,7 @@ theorem Adj.card_commonNeighbors_lt_degree {G : SimpleGraph V} [DecidableRel G.A
rw [Finset.ssubset_iff]
use w
constructor
- · rw [Finset.insert_subset]
+ · rw [Finset.insert_subset_iff]
constructor
· simpa
· rw [neighborFinset, Set.toFinset_subset_toFinset]
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -1800,7 +1800,7 @@ def mapNeighborSet (v : V) : G.neighborSet v ↪ G'.neighborSet (f v)
toFun w := ⟨f w, f.apply_mem_neighborSet_iff.mpr w.2⟩
inj' := by
rintro ⟨w₁, h₁⟩ ⟨w₂, h₂⟩ h
- rw [Subtype.mk_eq_mk] at h⊢
+ rw [Subtype.mk_eq_mk] at h ⊢
exact f.inj' h
#align simple_graph.embedding.map_neighbor_set SimpleGraph.Embedding.mapNeighborSet
ext
(#5258)
Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -355,7 +355,7 @@ instance completeBooleanAlgebra : CompleteBooleanAlgebra (SimpleGraph V) :=
le_top := fun x v w h => x.ne_of_adj h
bot_le := fun x v w h => h.elim
sdiff_eq := fun x y => by
- ext (v w)
+ ext v w
refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
rintro rfl
exact x.irrefl h.1
@@ -629,26 +629,26 @@ theorem edgeSet_fromEdgeSet : (fromEdgeSet s).edgeSet = s \ { e | e.IsDiag } :=
@[simp]
theorem fromEdgeSet_edgeSet : fromEdgeSet G.edgeSet = G := by
- ext (v w)
+ ext v w
exact ⟨fun h => h.1, fun h => ⟨h, G.ne_of_adj h⟩⟩
#align simple_graph.from_edge_set_edge_set SimpleGraph.fromEdgeSet_edgeSet
@[simp]
theorem fromEdgeSet_empty : fromEdgeSet (∅ : Set (Sym2 V)) = ⊥ := by
- ext (v w)
+ ext v w
simp only [fromEdgeSet_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
#align simple_graph.from_edge_set_empty SimpleGraph.fromEdgeSet_empty
@[simp]
theorem fromEdgeSet_univ : fromEdgeSet (Set.univ : Set (Sym2 V)) = ⊤ := by
- ext (v w)
+ ext v w
simp only [fromEdgeSet_adj, Set.mem_univ, true_and_iff, top_adj]
#align simple_graph.from_edge_set_univ SimpleGraph.fromEdgeSet_univ
@[simp]
theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
fromEdgeSet s ⊓ fromEdgeSet t = fromEdgeSet (s ∩ t) := by
- ext (v w)
+ ext v w
simp only [fromEdgeSet_adj, Set.mem_inter_iff, Ne.def, inf_adj]
tauto
#align simple_graph.from_edge_set_inf SimpleGraph.fromEdgeSet_inf
@@ -656,14 +656,14 @@ theorem fromEdgeSet_inf (s t : Set (Sym2 V)) :
@[simp]
theorem fromEdgeSet_sup (s t : Set (Sym2 V)) :
fromEdgeSet s ⊔ fromEdgeSet t = fromEdgeSet (s ∪ t) := by
- ext (v w)
+ ext v w
simp [Set.mem_union, or_and_right]
#align simple_graph.from_edge_set_sup SimpleGraph.fromEdgeSet_sup
@[simp]
theorem fromEdgeSet_sdiff (s t : Set (Sym2 V)) :
fromEdgeSet s \ fromEdgeSet t = fromEdgeSet (s \ t) := by
- ext (v w)
+ ext v w
constructor <;> simp (config := { contextual := true })
#align simple_graph.from_edge_set_sdiff SimpleGraph.fromEdgeSet_sdiff
@@ -1166,7 +1166,7 @@ theorem deleteEdges_eq_inter_edgeSet (s : Set (Sym2 V)) :
theorem deleteEdges_sdiff_eq_of_le {H : SimpleGraph V} (h : H ≤ G) :
G.deleteEdges (G.edgeSet \ H.edgeSet) = H := by
- ext (v w)
+ ext v w
constructor <;> simp (config := { contextual := true }) [@h v w]
#align simple_graph.delete_edges_sdiff_eq_of_le SimpleGraph.deleteEdges_sdiff_eq_of_le
@@ -1224,7 +1224,7 @@ end DeleteFar
/-! ## Map and comap -/
-/-- Given an injective function, there is an covariant induced map on graphs by pushing forward
+/-- Given an injective function, there is a covariant induced map on graphs by pushing forward
the adjacency relation.
This is injective (see `SimpleGraph.map_injective`). -/
@@ -1656,7 +1656,7 @@ abbrev Embedding :=
RelEmbedding G.Adj G'.Adj
#align simple_graph.embedding SimpleGraph.Embedding
-/-- A graph isomorphism is an bijective map on vertex sets that respects adjacency relations.
+/-- A graph isomorphism is a bijective map on vertex sets that respects adjacency relations.
The notation `G ≃g G'` represents the type of graph isomorphisms.
-/
@@ -95,7 +95,7 @@ to standard `aesop`:
- We instruct Aesop to fail if it can't fully solve the goal. This allows us to
use `aesop_graph` for auto-params.
-/
-macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause*: tactic =>
+macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
(options := { introsTransparency? := some .default, terminal := true })
@@ -106,7 +106,7 @@ A variant of `aesop_graph` which does not fail if it is unable to solve the
goal. Use this only for exploration! Nonterminal Aesop is even worse than
nonterminal `simp`.
-/
-macro (name := aesop_graph_nonterminal) "aesop_graph_nonterminal" c:Aesop.tactic_clause*: tactic =>
+macro (name := aesop_graph_nonterminal) "aesop_graph_nonterminal" c:Aesop.tactic_clause* : tactic =>
`(tactic|
aesop $c*
(options := { introsTransparency? := some .default, warnOnNonterminal := false })
@@ -1731,7 +1731,7 @@ theorem mapEdgeSet.injective (hinj : Function.Injective f) : Function.Injective
apply Sym2.map.injective hinj
#align simple_graph.hom.map_edge_set.injective SimpleGraph.Hom.mapEdgeSet.injective
-/-- Every graph homomomorphism from a complete graph is injective. -/
+/-- Every graph homomorphism from a complete graph is injective. -/
theorem injective_of_top_hom (f : (⊤ : SimpleGraph V) →g G') : Function.Injective f := by
intro v w h
contrapose! h
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -292,7 +292,7 @@ theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v
#align simple_graph.sdiff_adj SimpleGraph.sdiff_adj
instance supSet : SupSet (SimpleGraph V) where
- supₛ s :=
+ sSup s :=
{ Adj := fun a b => ∃ G ∈ s, Adj G a b
symm := fun a b => Exists.imp $ fun _ => And.imp_right Adj.symm
loopless := by
@@ -300,42 +300,42 @@ instance supSet : SupSet (SimpleGraph V) where
exact ha.ne rfl }
instance infSet : InfSet (SimpleGraph V) where
- infₛ s :=
+ sInf s :=
{ Adj := fun a b => (∀ ⦃G⦄, G ∈ s → Adj G a b) ∧ a ≠ b
symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
loopless := fun _ h => h.2 rfl }
@[simp]
-theorem supₛ_adj {s : Set (SimpleGraph V)} {a b : V} : (supₛ s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
+theorem sSup_adj {s : Set (SimpleGraph V)} {a b : V} : (sSup s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
Iff.rfl
-#align simple_graph.Sup_adj SimpleGraph.supₛ_adj
+#align simple_graph.Sup_adj SimpleGraph.sSup_adj
@[simp]
-theorem infₛ_adj {s : Set (SimpleGraph V)} : (infₛ s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
+theorem sInf_adj {s : Set (SimpleGraph V)} : (sInf s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
Iff.rfl
-#align simple_graph.Inf_adj SimpleGraph.infₛ_adj
+#align simple_graph.Inf_adj SimpleGraph.sInf_adj
@[simp]
-theorem supᵢ_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [supᵢ]
-#align simple_graph.supr_adj SimpleGraph.supᵢ_adj
+theorem iSup_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [iSup]
+#align simple_graph.supr_adj SimpleGraph.iSup_adj
@[simp]
-theorem infᵢ_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
- simp [infᵢ]
-#align simple_graph.infi_adj SimpleGraph.infᵢ_adj
+theorem iInf_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
+ simp [iInf]
+#align simple_graph.infi_adj SimpleGraph.iInf_adj
-theorem infₛ_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
- (infₛ s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
- infₛ_adj.trans <|
+theorem sInf_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
+ (sInf s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
+ sInf_adj.trans <|
and_iff_left_of_imp <| by
obtain ⟨G, hG⟩ := hs
exact fun h => (h _ hG).ne
-#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonempty
+#align simple_graph.Inf_adj_of_nonempty SimpleGraph.sInf_adj_of_nonempty
-theorem infᵢ_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
+theorem iInf_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
(⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
- rw [infᵢ, infₛ_adj_of_nonempty (Set.range_nonempty _), Set.forall_range_iff]
-#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonempty
+ rw [iInf, sInf_adj_of_nonempty (Set.range_nonempty _), Set.forall_range_iff]
+#align simple_graph.infi_adj_of_nonempty SimpleGraph.iInf_adj_of_nonempty
/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.Adj a b → H.Adj a b`. -/
instance distribLattice : DistribLattice (SimpleGraph V) :=
@@ -364,16 +364,16 @@ instance completeBooleanAlgebra : CompleteBooleanAlgebra (SimpleGraph V) :=
by_cases G.Adj v w
· exact Or.inl h
· exact Or.inr ⟨hvw, h⟩
- supₛ := supₛ
- le_supₛ := fun s G hG a b hab => ⟨G, hG, hab⟩
- supₛ_le := fun s G hG a b => by
+ sSup := sSup
+ le_sSup := fun s G hG a b hab => ⟨G, hG, hab⟩
+ sSup_le := fun s G hG a b => by
rintro ⟨H, hH, hab⟩
exact hG _ hH hab
- infₛ := infₛ
- infₛ_le := fun s G hG a b hab => hab.1 hG
- le_infₛ := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.ne⟩
- inf_supₛ_le_supᵢ_inf := fun G s a b hab => by simpa using hab
- infᵢ_sup_le_sup_infₛ := fun G s a b hab => by
+ sInf := sInf
+ sInf_le := fun s G hG a b hab => hab.1 hG
+ le_sInf := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.ne⟩
+ inf_sSup_le_iSup_inf := fun G s a b hab => by simpa using hab
+ iInf_sup_le_sup_sInf := fun G s a b hab => by
simpa [forall_and, forall_or_left, or_and_right, and_iff_left_of_imp Adj.ne] using hab }
@[simp]
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -1287,8 +1287,7 @@ theorem comap_surjective (f : V ↪ W) : Function.Surjective (SimpleGraph.comap
theorem map_le_iff_le_comap (f : V ↪ W) (G : SimpleGraph V) (G' : SimpleGraph W) :
G.map f ≤ G' ↔ G ≤ G'.comap f :=
- ⟨fun h u v ha => h ⟨_, _, ha, rfl, rfl⟩,
- by
+ ⟨fun h u v ha => h ⟨_, _, ha, rfl, rfl⟩, by
rintro h _ _ ⟨u, v, ha, rfl, rfl⟩
exact h ha⟩
#align simple_graph.map_le_iff_le_comap SimpleGraph.map_le_iff_le_comap
@@ -337,7 +337,7 @@ theorem infᵢ_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
rw [infᵢ, infₛ_adj_of_nonempty (Set.range_nonempty _), Set.forall_range_iff]
#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonempty
-/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.adj a b → H.adj a b`. -/
+/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.Adj a b → H.Adj a b`. -/
instance distribLattice : DistribLattice (SimpleGraph V) :=
{ show DistribLattice (SimpleGraph V) from
adj_injective.distribLattice _ (fun _ _ => rfl) fun _ _ => rfl with
Match https://github.com/leanprover-community/mathlib/pull/18285
combinatorics.simple_graph.basic
@db53863fb135228820ee0b08e8dce9349a3d911b
..c6ef6387ede9983aee397d442974e61f89dfd87b
combinatorics.simple_graph.subgraph
@d6e84a0d3db8910c99b3aa0c56be88fa8bab6f80
..c6ef6387ede9983aee397d442974e61f89dfd87b
Co-authored-by: Kyle Miller <kmill31415@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
! This file was ported from Lean 3 source module combinatorics.simple_graph.basic
-! leanprover-community/mathlib commit db53863fb135228820ee0b08e8dce9349a3d911b
+! leanprover-community/mathlib commit c6ef6387ede9983aee397d442974e61f89dfd87b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -46,8 +46,9 @@ finitely many vertices.
graph isomorphisms. Note that a graph embedding is a stronger notion than an
injective graph homomorphism, since its image is an induced subgraph.
-* `BooleanAlgebra` instance: Under the subgraph relation, `SimpleGraph` forms a `BooleanAlgebra`.
- In other words, this is the lattice of spanning subgraphs of the complete graph.
+* `CompleteBooleanAlgebra` instance: Under the subgraph relation, `SimpleGraph` forms a
+ `CompleteBooleanAlgebra`. In other words, this is the complete lattice of spanning subgraphs of
+ the complete graph.
## Notations
@@ -71,8 +72,6 @@ finitely many vertices.
## Todo
-* Upgrade boolean algebra instance to a `CompleteBooleanAlgebra`.
-
* This is the simplest notion of an unoriented graph. This should
eventually fit into a more complete combinatorics hierarchy which
includes multigraphs and directed graphs. We begin with simple graphs
@@ -182,7 +181,7 @@ def completeBipartiteGraph (V W : Type _) : SimpleGraph (Sum V W)
namespace SimpleGraph
-variable {𝕜 : Type _} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
+variable {ι : Sort _} {𝕜 : Type _} {V : Type u} {W : Type v} {X : Type w} (G : SimpleGraph V)
(G' : SimpleGraph W) {a b c u v w : V} {e : Sym2 V}
@[simp]
@@ -220,6 +219,15 @@ theorem ne_of_adj_of_not_adj {v w x : V} (h : G.Adj v x) (hn : ¬G.Adj w x) : v
hn (h' ▸ h)
#align simple_graph.ne_of_adj_of_not_adj SimpleGraph.ne_of_adj_of_not_adj
+theorem adj_injective : Injective (Adj : SimpleGraph V → V → V → Prop) :=
+ SimpleGraph.ext
+#align simple_graph.adj_injective SimpleGraph.adj_injective
+
+@[simp]
+theorem adj_inj {G H : SimpleGraph V} : G.Adj = H.Adj ↔ G = H :=
+ adj_injective.eq_iff
+#align simple_graph.adj_inj SimpleGraph.adj_inj
+
section Order
/-- The relation that one `SimpleGraph` is a subgraph of another.
@@ -237,10 +245,10 @@ theorem isSubgraph_eq_le : (IsSubgraph : SimpleGraph V → SimpleGraph V → Pro
#align simple_graph.is_subgraph_eq_le SimpleGraph.isSubgraph_eq_le
/-- The supremum of two graphs `x ⊔ y` has edges where either `x` or `y` have edges. -/
-instance : Sup (SimpleGraph V) :=
- ⟨fun x y =>
+instance : Sup (SimpleGraph V) where
+ sup x y :=
{ Adj := x.Adj ⊔ y.Adj
- symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }⟩
+ symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }
@[simp]
theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v w ∨ y.Adj v w :=
@@ -248,10 +256,10 @@ theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v
#align simple_graph.sup_adj SimpleGraph.sup_adj
/-- The infimum of two graphs `x ⊓ y` has edges where both `x` and `y` have edges. -/
-instance : Inf (SimpleGraph V) :=
- ⟨fun x y =>
+instance : Inf (SimpleGraph V) where
+ inf x y :=
{ Adj := x.Adj ⊓ y.Adj
- symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }⟩
+ symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }
@[simp]
theorem inf_adj (x y : SimpleGraph V) (v w : V) : (x ⊓ y).Adj v w ↔ x.Adj v w ∧ y.Adj v w :=
@@ -261,11 +269,11 @@ theorem inf_adj (x y : SimpleGraph V) (v w : V) : (x ⊓ y).Adj v w ↔ x.Adj v
/-- We define `Gᶜ` to be the `SimpleGraph V` such that no two adjacent vertices in `G`
are adjacent in the complement, and every nonadjacent pair of vertices is adjacent
(still ensuring that vertices are not adjacent to themselves). -/
-instance : HasCompl (SimpleGraph V) :=
- ⟨fun G =>
+instance hasCompl : HasCompl (SimpleGraph V) where
+ compl G :=
{ Adj := fun v w => v ≠ w ∧ ¬G.Adj v w
symm := fun v w ⟨hne, _⟩ => ⟨hne.symm, by rwa [adj_comm]⟩
- loopless := fun v ⟨hne, _⟩ => (hne rfl).elim }⟩
+ loopless := fun v ⟨hne, _⟩ => (hne rfl).elim }
@[simp]
theorem compl_adj (G : SimpleGraph V) (v w : V) : Gᶜ.Adj v w ↔ v ≠ w ∧ ¬G.Adj v w :=
@@ -273,19 +281,70 @@ theorem compl_adj (G : SimpleGraph V) (v w : V) : Gᶜ.Adj v w ↔ v ≠ w ∧
#align simple_graph.compl_adj SimpleGraph.compl_adj
/-- The difference of two graphs `x \ y` has the edges of `x` with the edges of `y` removed. -/
-instance : SDiff (SimpleGraph V) :=
- ⟨fun x y =>
+instance sdiff : SDiff (SimpleGraph V) where
+ sdiff x y :=
{ Adj := x.Adj \ y.Adj
- symm := fun v w h => by change x.Adj w v ∧ ¬y.Adj w v; rwa [x.adj_comm, y.adj_comm] }⟩
+ symm := fun v w h => by change x.Adj w v ∧ ¬y.Adj w v; rwa [x.adj_comm, y.adj_comm] }
@[simp]
theorem sdiff_adj (x y : SimpleGraph V) (v w : V) : (x \ y).Adj v w ↔ x.Adj v w ∧ ¬y.Adj v w :=
Iff.rfl
#align simple_graph.sdiff_adj SimpleGraph.sdiff_adj
-instance : BooleanAlgebra (SimpleGraph V) :=
- { PartialOrder.lift Adj
- (by intro _ _ h; ext; simp only [h]) with
+instance supSet : SupSet (SimpleGraph V) where
+ supₛ s :=
+ { Adj := fun a b => ∃ G ∈ s, Adj G a b
+ symm := fun a b => Exists.imp $ fun _ => And.imp_right Adj.symm
+ loopless := by
+ rintro a ⟨G, _, ha⟩
+ exact ha.ne rfl }
+
+instance infSet : InfSet (SimpleGraph V) where
+ infₛ s :=
+ { Adj := fun a b => (∀ ⦃G⦄, G ∈ s → Adj G a b) ∧ a ≠ b
+ symm := fun _ _ => And.imp (forall₂_imp fun _ _ => Adj.symm) Ne.symm
+ loopless := fun _ h => h.2 rfl }
+
+@[simp]
+theorem supₛ_adj {s : Set (SimpleGraph V)} {a b : V} : (supₛ s).Adj a b ↔ ∃ G ∈ s, Adj G a b :=
+ Iff.rfl
+#align simple_graph.Sup_adj SimpleGraph.supₛ_adj
+
+@[simp]
+theorem infₛ_adj {s : Set (SimpleGraph V)} : (infₛ s).Adj a b ↔ (∀ G ∈ s, Adj G a b) ∧ a ≠ b :=
+ Iff.rfl
+#align simple_graph.Inf_adj SimpleGraph.infₛ_adj
+
+@[simp]
+theorem supᵢ_adj {f : ι → SimpleGraph V} : (⨆ i, f i).Adj a b ↔ ∃ i, (f i).Adj a b := by simp [supᵢ]
+#align simple_graph.supr_adj SimpleGraph.supᵢ_adj
+
+@[simp]
+theorem infᵢ_adj {f : ι → SimpleGraph V} : (⨅ i, f i).Adj a b ↔ (∀ i, (f i).Adj a b) ∧ a ≠ b := by
+ simp [infᵢ]
+#align simple_graph.infi_adj SimpleGraph.infᵢ_adj
+
+theorem infₛ_adj_of_nonempty {s : Set (SimpleGraph V)} (hs : s.Nonempty) :
+ (infₛ s).Adj a b ↔ ∀ G ∈ s, Adj G a b :=
+ infₛ_adj.trans <|
+ and_iff_left_of_imp <| by
+ obtain ⟨G, hG⟩ := hs
+ exact fun h => (h _ hG).ne
+#align simple_graph.Inf_adj_of_nonempty SimpleGraph.infₛ_adj_of_nonempty
+
+theorem infᵢ_adj_of_nonempty [Nonempty ι] {f : ι → SimpleGraph V} :
+ (⨅ i, f i).Adj a b ↔ ∀ i, (f i).Adj a b := by
+ rw [infᵢ, infₛ_adj_of_nonempty (Set.range_nonempty _), Set.forall_range_iff]
+#align simple_graph.infi_adj_of_nonempty SimpleGraph.infᵢ_adj_of_nonempty
+
+/-- For graphs `G`, `H`, `G ≤ H` iff `∀ a b, G.adj a b → H.adj a b`. -/
+instance distribLattice : DistribLattice (SimpleGraph V) :=
+ { show DistribLattice (SimpleGraph V) from
+ adj_injective.distribLattice _ (fun _ _ => rfl) fun _ _ => rfl with
+ le := fun G H => ∀ ⦃a b⦄, G.Adj a b → H.Adj a b }
+
+instance completeBooleanAlgebra : CompleteBooleanAlgebra (SimpleGraph V) :=
+ { SimpleGraph.distribLattice with
le := (· ≤ ·)
sup := (· ⊔ ·)
inf := (· ⊓ ·)
@@ -295,23 +354,27 @@ instance : BooleanAlgebra (SimpleGraph V) :=
bot := emptyGraph V
le_top := fun x v w h => x.ne_of_adj h
bot_le := fun x v w h => h.elim
- sup_le := fun x y z hxy hyz v w h => h.casesOn (fun h => hxy h) fun h => hyz h
sdiff_eq := fun x y => by
ext (v w)
refine' ⟨fun h => ⟨h.1, ⟨_, h.2⟩⟩, fun h => ⟨h.1, h.2.2⟩⟩
rintro rfl
exact x.irrefl h.1
- le_sup_left := fun x y v w h => Or.inl h
- le_sup_right := fun x y v w h => Or.inr h
- le_inf := fun x y z hxy hyz v w h => ⟨hxy h, hyz h⟩
- le_sup_inf := by aesop_graph
- inf_compl_le_bot := fun a v w h => False.elim <| h.2.2 h.1
- top_le_sup_compl := fun a v w ne => by
- by_cases h : a.Adj v w
+ inf_compl_le_bot := fun G v w h => False.elim <| h.2.2 h.1
+ top_le_sup_compl := fun G v w hvw => by
+ by_cases G.Adj v w
· exact Or.inl h
- · exact Or.inr ⟨ne, h⟩
- inf_le_left := fun x y v w h => h.1
- inf_le_right := fun x y v w h => h.2 }
+ · exact Or.inr ⟨hvw, h⟩
+ supₛ := supₛ
+ le_supₛ := fun s G hG a b hab => ⟨G, hG, hab⟩
+ supₛ_le := fun s G hG a b => by
+ rintro ⟨H, hH, hab⟩
+ exact hG _ hH hab
+ infₛ := infₛ
+ infₛ_le := fun s G hG a b hab => hab.1 hG
+ le_infₛ := fun s G hG a b hab => ⟨fun H hH => hG _ hH hab, hab.ne⟩
+ inf_supₛ_le_supᵢ_inf := fun G s a b hab => by simpa using hab
+ infᵢ_sup_le_sup_infₛ := fun G s a b hab => by
+ simpa [forall_and, forall_or_left, or_and_right, and_iff_left_of_imp Adj.ne] using hab }
@[simp]
theorem top_adj (v w : V) : (⊤ : SimpleGraph V).Adj v w ↔ v ≠ w :=
@@ -1040,7 +1103,7 @@ def deleteEdges (s : Set (Sym2 V)) : SimpleGraph V
where
Adj := G.Adj \ Sym2.ToRel s
symm a b := by simp [adj_comm, Sym2.eq_swap]
- loopless a := by simp [sdiff] -- porting note: used to be handled by `obviously`
+ loopless a := by simp [SDiff.sdiff] -- porting note: used to be handled by `obviously`
#align simple_graph.delete_edges SimpleGraph.deleteEdges
@[simp]
This commit makes aesop_cat
and aesop_graph
terminal (i.e. they either solve the goal or fail). This appears to solve issues where non-terminal tactics, when used as auto-params, introduce unknown universe variables. See
Since there are some intended nonterminal uses of aesop_cat
, we introduce aesop_cat_nonterminal
as the nonterminal equivalent of aesop_cat
.
@@ -87,10 +87,30 @@ attribute [aesop norm unfold (rule_sets [SimpleGraph])] Symmetric
attribute [aesop norm unfold (rule_sets [SimpleGraph])] Irreflexive
-- porting note: a thin wrapper around `aesop` for graph lemmas, modelled on `aesop_cat`
+/--
+A variant of the `aesop` tactic for use in the graph library. Changes relative
+to standard `aesop`:
+
+- We use the `SimpleGraph` rule set in addition to the default rule sets.
+- We instruct Aesop's `intro` rule to unfold with `default` transparency.
+- We instruct Aesop to fail if it can't fully solve the goal. This allows us to
+ use `aesop_graph` for auto-params.
+-/
macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause*: tactic =>
`(tactic|
aesop $c*
- (options := { introsTransparency? := some .default })
+ (options := { introsTransparency? := some .default, terminal := true })
+ (rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
+
+/--
+A variant of `aesop_graph` which does not fail if it is unable to solve the
+goal. Use this only for exploration! Nonterminal Aesop is even worse than
+nonterminal `simp`.
+-/
+macro (name := aesop_graph_nonterminal) "aesop_graph_nonterminal" c:Aesop.tactic_clause*: tactic =>
+ `(tactic|
+ aesop $c*
+ (options := { introsTransparency? := some .default, warnOnNonterminal := false })
(rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
open Finset Function
@@ -386,11 +386,11 @@ The way `edgeSet` is defined is such that `mem_edgeSet` is proved by `refl`.
-/
-- porting note: We need a separate definition so that dot notation works.
def edgeSetEmbedding (V : Type _) : SimpleGraph V ↪o Set (Sym2 V) :=
- OrderEmbedding.ofMapLeIff (fun G => Sym2.fromRel G.symm) fun _ _ =>
+ OrderEmbedding.ofMapLEIff (fun G => Sym2.fromRel G.symm) fun _ _ =>
⟨fun h a b => @h ⟦(a, b)⟧, fun h e => Sym2.ind @h e⟩
/-- `G.edgeSet` is the edge set for `G`.
-This is an abbreviation for `edgeSet' G` that permits dot notation. -/
+This is an abbreviation for `edgeSetEmbedding G` that permits dot notation. -/
abbrev edgeSet (G : SimpleGraph V) : Set (Sym2 V) := edgeSetEmbedding V G
#align simple_graph.edge_set SimpleGraph.edgeSetEmbedding
@@ -413,9 +413,9 @@ theorem edgeSet_subset_edgeSet : edgeSet G₁ ⊆ edgeSet G₂ ↔ G₁ ≤ G₂
#align simple_graph.edge_set_subset_edge_set SimpleGraph.edgeSet_subset_edgeSet
@[simp]
-theorem edgeSet_sSubset_edgeSet : edgeSet G₁ ⊂ edgeSet G₂ ↔ G₁ < G₂ :=
+theorem edgeSet_ssubset_edgeSet : edgeSet G₁ ⊂ edgeSet G₂ ↔ G₁ < G₂ :=
(edgeSetEmbedding V).lt_iff_lt
-#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_sSubset_edgeSet
+#align simple_graph.edge_set_ssubset_edge_set SimpleGraph.edgeSet_ssubset_edgeSet
theorem edgeSet_injective : Injective (edgeSet : SimpleGraph V → Set (Sym2 V)) :=
(edgeSetEmbedding V).injective
@@ -424,7 +424,7 @@ theorem edgeSet_injective : Injective (edgeSet : SimpleGraph V → Set (Sym2 V))
alias edgeSet_subset_edgeSet ↔ _ edgeSet_mono
#align simple_graph.edge_set_mono SimpleGraph.edgeSet_mono
-alias edgeSet_sSubset_edgeSet ↔ _ edgeSet_strict_mono
+alias edgeSet_ssubset_edgeSet ↔ _ edgeSet_strict_mono
#align simple_graph.edge_set_strict_mono SimpleGraph.edgeSet_strict_mono
attribute [mono] edgeSet_mono edgeSet_strict_mono
@@ -825,13 +825,13 @@ theorem edgeFinset_inj : G₁.edgeFinset = G₂.edgeFinset ↔ G₁ = G₂ := by
theorem edgeFinset_subset_edgeFinset : G₁.edgeFinset ⊆ G₂.edgeFinset ↔ G₁ ≤ G₂ := by simp
#align simple_graph.edge_finset_subset_edge_finset SimpleGraph.edgeFinset_subset_edgeFinset
-theorem edgeFinset_sSubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by simp
-#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_sSubset_edgeFinset
+theorem edgeFinset_ssubset_edgeFinset : G₁.edgeFinset ⊂ G₂.edgeFinset ↔ G₁ < G₂ := by simp
+#align simple_graph.edge_finset_ssubset_edge_finset SimpleGraph.edgeFinset_ssubset_edgeFinset
alias edgeFinset_subset_edgeFinset ↔ _ edgeFinset_mono
#align simple_graph.edge_finset_mono SimpleGraph.edgeFinset_mono
-alias edgeFinset_sSubset_edgeFinset ↔ _ edgeFinset_strict_mono
+alias edgeFinset_ssubset_edgeFinset ↔ _ edgeFinset_strict_mono
#align simple_graph.edge_finset_strict_mono SimpleGraph.edgeFinset_strict_mono
attribute [mono] edgeFinset_mono edgeFinset_strict_mono
@@ -1125,8 +1125,7 @@ theorem deleteFar_iff :
simp only [deleteEdges_sdiff_eq_of_le _ hHG, edgeFinset_mono hHG, card_sdiff,
card_le_of_subset, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
exact this hH
- ·
- simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
+ · simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
card_le_of_subset hs] using h (G.deleteEdges_le s) hG
#align simple_graph.delete_far_iff SimpleGraph.deleteFar_iff
@@ -287,9 +287,9 @@ instance : BooleanAlgebra (SimpleGraph V) :=
le_sup_inf := by aesop_graph
inf_compl_le_bot := fun a v w h => False.elim <| h.2.2 h.1
top_le_sup_compl := fun a v w ne => by
- by_cases a.Adj v w
- exact Or.inl h
- exact Or.inr ⟨ne, h⟩
+ by_cases h : a.Adj v w
+ · exact Or.inl h
+ · exact Or.inr ⟨ne, h⟩
inf_le_left := fun x y v w h => h.1
inf_le_right := fun x y v w h => h.2 }
congr!
and improvement to convert
(#2566)
This introduces a tactic congr!
that is an analogue to mathlib 3's congr'
. It is a more insistent version of congr
that makes use of more congruence lemmas (including user congruence lemmas), propext
, funext
, and Subsingleton
instances. It also has a feature to lift reflexive relations to equalities. Along with funext
, the tactic does intros
, allowing congr!
to get access to function bodies; the introduced variables can be named using rename_i
if needed.
This also modifies convert
to use congr!
rather than congr
, which makes it work more like the mathlib3 version of the tactic.
@@ -1857,17 +1857,13 @@ def mapEdgeSet : G.edgeSet ≃ G'.edgeSet
left_inv := by
rintro ⟨e, h⟩
simp [Hom.mapEdgeSet, Sym2.map_map, RelEmbedding.toRelHom]
- apply congr_fun
- convert Sym2.map_id (α := V)
- apply congr_arg -- porting note: `convert` tactic did not do enough `congr`
- exact funext fun _ => RelIso.symm_apply_apply _ _
+ convert congr_fun Sym2.map_id e
+ exact RelIso.symm_apply_apply _ _
right_inv := by
rintro ⟨e, h⟩
simp [Hom.mapEdgeSet, Sym2.map_map, RelEmbedding.toRelHom]
- apply congr_fun
- convert Sym2.map_id (α := W)
- apply congr_arg -- porting note: `convert` tactic did not do enough `congr`
- exact funext fun _ => RelIso.apply_symm_apply _ _
+ convert congr_fun Sym2.map_id e
+ exact RelIso.apply_symm_apply _ _
#align simple_graph.iso.map_edge_set SimpleGraph.Iso.mapEdgeSet
/-- A graph isomorphism induces an equivalence of neighbor sets. -/
This version of Aesop supports local and scoped rules.
@@ -8,6 +8,7 @@ Authors: Aaron Anderson, Jalex Stark, Kyle Miller, Alena Gusakov, Hunter Monroe
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
+import Mathlib.Combinatorics.SimpleGraph.Init
import Mathlib.Data.Rel
import Mathlib.Data.Set.Finite
import Mathlib.Data.Sym.Sym2
@@ -80,7 +81,6 @@ finitely many vertices.
-/
-- porting note: using `aesop` for automation
-declare_aesop_rule_sets [SimpleGraph]
-- porting note: These attributes are needed to use `aesop` as a replacement for `obviously`
attribute [aesop norm unfold (rule_sets [SimpleGraph])] Symmetric
@@ -89,7 +89,9 @@ attribute [aesop norm unfold (rule_sets [SimpleGraph])] Irreflexive
-- porting note: a thin wrapper around `aesop` for graph lemmas, modelled on `aesop_cat`
macro (name := aesop_graph) "aesop_graph" c:Aesop.tactic_clause*: tactic =>
`(tactic|
- aesop $c* (options := { introsTransparency? := some .default }) (rule_sets [SimpleGraph]))
+ aesop $c*
+ (options := { introsTransparency? := some .default })
+ (rule_sets [$(Lean.mkIdent `SimpleGraph):ident]))
open Finset Function
initialize_simps_projections
now by default generates all projections of all parent structures, and doesn't generate the projections to those parent structures.TwoPointed
)Internal changes:
ParsedProjectionData
to avoid the bug reported here (and to another bug where it seemed that the wrong data was inserted in ParsedProjectionData
, but it was hard to minimize because of all the crashes). If we manage to fix the bug in that Zulip thread, I'll see if I can track down the other bug in commit 97454284Co-authored-by: Johan Commelin <johan@commelin.net>
@@ -606,6 +606,8 @@ structure Dart extends V × V where
deriving DecidableEq
#align simple_graph.dart SimpleGraph.Dart
+initialize_simps_projections Dart (+toProd, -fst, -snd)
+
section Darts
variable {G}
@@ -215,7 +215,7 @@ theorem isSubgraph_eq_le : (IsSubgraph : SimpleGraph V → SimpleGraph V → Pro
#align simple_graph.is_subgraph_eq_le SimpleGraph.isSubgraph_eq_le
/-- The supremum of two graphs `x ⊔ y` has edges where either `x` or `y` have edges. -/
-instance : HasSup (SimpleGraph V) :=
+instance : Sup (SimpleGraph V) :=
⟨fun x y =>
{ Adj := x.Adj ⊔ y.Adj
symm := fun v w h => by rwa [Pi.sup_apply, Pi.sup_apply, x.adj_comm, y.adj_comm] }⟩
@@ -226,7 +226,7 @@ theorem sup_adj (x y : SimpleGraph V) (v w : V) : (x ⊔ y).Adj v w ↔ x.Adj v
#align simple_graph.sup_adj SimpleGraph.sup_adj
/-- The infimum of two graphs `x ⊓ y` has edges where both `x` and `y` have edges. -/
-instance : HasInf (SimpleGraph V) :=
+instance : Inf (SimpleGraph V) :=
⟨fun x y =>
{ Adj := x.Adj ⊓ y.Adj
symm := fun v w h => by rwa [Pi.inf_apply, Pi.inf_apply, x.adj_comm, y.adj_comm] }⟩
@@ -1286,6 +1286,13 @@ def degree : ℕ :=
(G.neighborFinset v).card
#align simple_graph.degree SimpleGraph.degree
+-- Porting note: in Lean 3 we could do `simp [← degree]`, but that gives
+-- "invalid '←' modifier, 'SimpleGraph.degree' is a declaration name to be unfolded".
+-- In any case, having this lemma is good since there's no guarantee we won't still change
+-- the definition of `degree`.
+@[simp]
+theorem card_neighborFinset_eq_degree : (G.neighborFinset v).card = G.degree v := rfl
+
@[simp]
theorem card_neighborSet_eq_degree : Fintype.card (G.neighborSet v) = G.degree v :=
(Set.toFinset_card _).symm
The unported dependencies are