Edge density #
This file defines the number and density of edges of a relation/graph.
Main declarations #
Between two finsets of vertices,
Rel.interedges
: Finset of edges of a relation.Rel.edgeDensity
: Edge density of a relation.SimpleGraph.interedges
: Finset of edges of a graph.SimpleGraph.edgeDensity
: Edge density of a graph.
Density of a relation #
def
Rel.interedges
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
(t : Finset β)
:
Finset of edges of a relation between two finsets of vertices.
Equations
- Rel.interedges r s t = Finset.filter (fun (e : α × β) => r e.1 e.2) (s ×ˢ t)
Instances For
def
Rel.edgeDensity
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
(t : Finset β)
:
Edge density of a relation between two finsets of vertices.
Equations
- Rel.edgeDensity r s t = ↑(Rel.interedges r s t).card / (↑s.card * ↑t.card)
Instances For
theorem
Rel.mk_mem_interedges_iff
{α : Type u_4}
{β : Type u_5}
{r : α → β → Prop}
[(a : α) → DecidablePred (r a)]
{s : Finset α}
{t : Finset β}
{a : α}
{b : β}
:
@[simp]
theorem
Rel.interedges_empty_left
{α : Type u_4}
{β : Type u_5}
{r : α → β → Prop}
[(a : α) → DecidablePred (r a)]
(t : Finset β)
:
Rel.interedges r ∅ t = ∅
theorem
Rel.interedges_mono
{α : Type u_4}
{β : Type u_5}
{r : α → β → Prop}
[(a : α) → DecidablePred (r a)]
{s₁ s₂ : Finset α}
{t₁ t₂ : Finset β}
(hs : s₂ ⊆ s₁)
(ht : t₂ ⊆ t₁)
:
Rel.interedges r s₂ t₂ ⊆ Rel.interedges r s₁ t₁
theorem
Rel.card_interedges_add_card_interedges_compl
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
(t : Finset β)
:
(Rel.interedges r s t).card + (Rel.interedges (fun (x : α) (y : β) => ¬r x y) s t).card = s.card * t.card
theorem
Rel.interedges_disjoint_left
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s s' : Finset α}
(hs : Disjoint s s')
(t : Finset β)
:
Disjoint (Rel.interedges r s t) (Rel.interedges r s' t)
theorem
Rel.interedges_disjoint_right
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
{t t' : Finset β}
(ht : Disjoint t t')
:
Disjoint (Rel.interedges r s t) (Rel.interedges r s t')
theorem
Rel.interedges_eq_biUnion
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s : Finset α}
{t : Finset β}
[DecidableEq α]
[DecidableEq β]
:
Rel.interedges r s t = s.biUnion fun (x : α) =>
Finset.map { toFun := fun (x_1 : β) => (x, x_1), inj' := ⋯ } (Finset.filter (fun (y : β) => r x y) t)
theorem
Rel.interedges_biUnion_left
{ι : Type u_2}
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
[DecidableEq α]
[DecidableEq β]
(s : Finset ι)
(t : Finset β)
(f : ι → Finset α)
:
Rel.interedges r (s.biUnion f) t = s.biUnion fun (a : ι) => Rel.interedges r (f a) t
theorem
Rel.interedges_biUnion_right
{ι : Type u_2}
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
[DecidableEq α]
[DecidableEq β]
(s : Finset α)
(t : Finset ι)
(f : ι → Finset β)
:
Rel.interedges r s (t.biUnion f) = t.biUnion fun (b : ι) => Rel.interedges r s (f b)
theorem
Rel.interedges_biUnion
{ι : Type u_2}
{κ : Type u_3}
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
[DecidableEq α]
[DecidableEq β]
(s : Finset ι)
(t : Finset κ)
(f : ι → Finset α)
(g : κ → Finset β)
:
Rel.interedges r (s.biUnion f) (t.biUnion g) = (s ×ˢ t).biUnion fun (ab : ι × κ) => Rel.interedges r (f ab.1) (g ab.2)
theorem
Rel.card_interedges_le_mul
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
(t : Finset β)
:
(Rel.interedges r s t).card ≤ s.card * t.card
theorem
Rel.edgeDensity_nonneg
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
(t : Finset β)
:
0 ≤ Rel.edgeDensity r s t
theorem
Rel.edgeDensity_le_one
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
(t : Finset β)
:
Rel.edgeDensity r s t ≤ 1
theorem
Rel.edgeDensity_add_edgeDensity_compl
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s : Finset α}
{t : Finset β}
(hs : s.Nonempty)
(ht : t.Nonempty)
:
Rel.edgeDensity r s t + Rel.edgeDensity (fun (x : α) (y : β) => ¬r x y) s t = 1
@[simp]
theorem
Rel.edgeDensity_empty_left
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(t : Finset β)
:
Rel.edgeDensity r ∅ t = 0
@[simp]
theorem
Rel.edgeDensity_empty_right
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
(s : Finset α)
:
Rel.edgeDensity r s ∅ = 0
theorem
Rel.card_interedges_finpartition_left
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s : Finset α}
[DecidableEq α]
(P : Finpartition s)
(t : Finset β)
:
(Rel.interedges r s t).card = ∑ a ∈ P.parts, (Rel.interedges r a t).card
theorem
Rel.card_interedges_finpartition_right
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{t : Finset β}
[DecidableEq β]
(s : Finset α)
(P : Finpartition t)
:
(Rel.interedges r s t).card = ∑ b ∈ P.parts, (Rel.interedges r s b).card
theorem
Rel.card_interedges_finpartition
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s : Finset α}
{t : Finset β}
[DecidableEq α]
[DecidableEq β]
(P : Finpartition s)
(Q : Finpartition t)
:
(Rel.interedges r s t).card = ∑ ab ∈ P.parts ×ˢ Q.parts, (Rel.interedges r ab.1 ab.2).card
theorem
Rel.mul_edgeDensity_le_edgeDensity
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s₁ s₂ : Finset α}
{t₁ t₂ : Finset β}
(hs : s₂ ⊆ s₁)
(ht : t₂ ⊆ t₁)
(hs₂ : s₂.Nonempty)
(ht₂ : t₂.Nonempty)
:
↑s₂.card / ↑s₁.card * (↑t₂.card / ↑t₁.card) * Rel.edgeDensity r s₂ t₂ ≤ Rel.edgeDensity r s₁ t₁
theorem
Rel.edgeDensity_sub_edgeDensity_le_one_sub_mul
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s₁ s₂ : Finset α}
{t₁ t₂ : Finset β}
(hs : s₂ ⊆ s₁)
(ht : t₂ ⊆ t₁)
(hs₂ : s₂.Nonempty)
(ht₂ : t₂.Nonempty)
:
Rel.edgeDensity r s₂ t₂ - Rel.edgeDensity r s₁ t₁ ≤ 1 - ↑s₂.card / ↑s₁.card * (↑t₂.card / ↑t₁.card)
theorem
Rel.abs_edgeDensity_sub_edgeDensity_le_one_sub_mul
{α : Type u_4}
{β : Type u_5}
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s₁ s₂ : Finset α}
{t₁ t₂ : Finset β}
(hs : s₂ ⊆ s₁)
(ht : t₂ ⊆ t₁)
(hs₂ : s₂.Nonempty)
(ht₂ : t₂.Nonempty)
:
|Rel.edgeDensity r s₂ t₂ - Rel.edgeDensity r s₁ t₁| ≤ 1 - ↑s₂.card / ↑s₁.card * (↑t₂.card / ↑t₁.card)
theorem
Rel.abs_edgeDensity_sub_edgeDensity_le_two_mul_sub_sq
{𝕜 : Type u_1}
{α : Type u_4}
{β : Type u_5}
[LinearOrderedField 𝕜]
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s₁ s₂ : Finset α}
{t₁ t₂ : Finset β}
{δ : 𝕜}
(hs : s₂ ⊆ s₁)
(ht : t₂ ⊆ t₁)
(hδ₀ : 0 ≤ δ)
(hδ₁ : δ < 1)
(hs₂ : (1 - δ) * ↑s₁.card ≤ ↑s₂.card)
(ht₂ : (1 - δ) * ↑t₁.card ≤ ↑t₂.card)
:
|↑(Rel.edgeDensity r s₂ t₂) - ↑(Rel.edgeDensity r s₁ t₁)| ≤ 2 * δ - δ ^ 2
theorem
Rel.abs_edgeDensity_sub_edgeDensity_le_two_mul
{𝕜 : Type u_1}
{α : Type u_4}
{β : Type u_5}
[LinearOrderedField 𝕜]
(r : α → β → Prop)
[(a : α) → DecidablePred (r a)]
{s₁ s₂ : Finset α}
{t₁ t₂ : Finset β}
{δ : 𝕜}
(hs : s₂ ⊆ s₁)
(ht : t₂ ⊆ t₁)
(hδ : 0 ≤ δ)
(hscard : (1 - δ) * ↑s₁.card ≤ ↑s₂.card)
(htcard : (1 - δ) * ↑t₁.card ≤ ↑t₂.card)
:
|↑(Rel.edgeDensity r s₂ t₂) - ↑(Rel.edgeDensity r s₁ t₁)| ≤ 2 * δ
If s₂ ⊆ s₁
, t₂ ⊆ t₁
and they take up all but a δ
-proportion, then the difference in edge
densities is at most 2 * δ
.
@[simp]
theorem
Rel.swap_mem_interedges_iff
{α : Type u_4}
{r : α → α → Prop}
[DecidableRel r]
{s t : Finset α}
(hr : Symmetric r)
{x : α × α}
:
x.swap ∈ Rel.interedges r s t ↔ x ∈ Rel.interedges r t s
theorem
Rel.mk_mem_interedges_comm
{α : Type u_4}
{r : α → α → Prop}
[DecidableRel r]
{s t : Finset α}
{a b : α}
(hr : Symmetric r)
:
(a, b) ∈ Rel.interedges r s t ↔ (b, a) ∈ Rel.interedges r t s
theorem
Rel.card_interedges_comm
{α : Type u_4}
{r : α → α → Prop}
[DecidableRel r]
(hr : Symmetric r)
(s t : Finset α)
:
(Rel.interedges r s t).card = (Rel.interedges r t s).card
theorem
Rel.edgeDensity_comm
{α : Type u_4}
{r : α → α → Prop}
[DecidableRel r]
(hr : Symmetric r)
(s t : Finset α)
:
Rel.edgeDensity r s t = Rel.edgeDensity r t s
Density of a graph #
def
SimpleGraph.interedges
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
Finset of edges of a relation between two finsets of vertices.
Equations
- G.interedges s t = Rel.interedges G.Adj s t
Instances For
Density of edges of a graph between two finsets of vertices.
Equations
- G.edgeDensity = Rel.edgeDensity G.Adj
Instances For
theorem
SimpleGraph.interedges_def
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
G.interedges s t = Finset.filter (fun (e : α × α) => G.Adj e.1 e.2) (s ×ˢ t)
theorem
SimpleGraph.edgeDensity_def
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
theorem
SimpleGraph.card_interedges_div_card
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
theorem
SimpleGraph.mem_interedges_iff
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s t : Finset α}
{x : α × α}
:
theorem
SimpleGraph.mk_mem_interedges_iff
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s t : Finset α}
{a b : α}
:
@[simp]
theorem
SimpleGraph.interedges_empty_left
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(t : Finset α)
:
theorem
SimpleGraph.interedges_mono
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s₁ s₂ t₁ t₂ : Finset α}
:
theorem
SimpleGraph.interedges_disjoint_left
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s₁ s₂ : Finset α}
(hs : Disjoint s₁ s₂)
(t : Finset α)
:
Disjoint (G.interedges s₁ t) (G.interedges s₂ t)
theorem
SimpleGraph.interedges_disjoint_right
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{t₁ t₂ : Finset α}
(s : Finset α)
(ht : Disjoint t₁ t₂)
:
Disjoint (G.interedges s t₁) (G.interedges s t₂)
theorem
SimpleGraph.interedges_biUnion_left
{ι : Type u_2}
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
[DecidableEq α]
(s : Finset ι)
(t : Finset α)
(f : ι → Finset α)
:
G.interedges (s.biUnion f) t = s.biUnion fun (a : ι) => G.interedges (f a) t
theorem
SimpleGraph.interedges_biUnion_right
{ι : Type u_2}
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
[DecidableEq α]
(s : Finset α)
(t : Finset ι)
(f : ι → Finset α)
:
G.interedges s (t.biUnion f) = t.biUnion fun (b : ι) => G.interedges s (f b)
theorem
SimpleGraph.interedges_biUnion
{ι : Type u_2}
{κ : Type u_3}
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
[DecidableEq α]
(s : Finset ι)
(t : Finset κ)
(f : ι → Finset α)
(g : κ → Finset α)
:
theorem
SimpleGraph.card_interedges_add_card_interedges_compl
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s t : Finset α}
[DecidableEq α]
(h : Disjoint s t)
:
theorem
SimpleGraph.edgeDensity_add_edgeDensity_compl
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s t : Finset α}
[DecidableEq α]
(hs : s.Nonempty)
(ht : t.Nonempty)
(h : Disjoint s t)
:
theorem
SimpleGraph.card_interedges_le_mul
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
theorem
SimpleGraph.edgeDensity_nonneg
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
0 ≤ G.edgeDensity s t
theorem
SimpleGraph.edgeDensity_le_one
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
G.edgeDensity s t ≤ 1
@[simp]
theorem
SimpleGraph.edgeDensity_empty_left
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(t : Finset α)
:
@[simp]
theorem
SimpleGraph.edgeDensity_empty_right
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s : Finset α)
:
@[simp]
theorem
SimpleGraph.swap_mem_interedges_iff
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s t : Finset α}
{x : α × α}
:
theorem
SimpleGraph.mk_mem_interedges_comm
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
{s t : Finset α}
{a b : α}
:
theorem
SimpleGraph.edgeDensity_comm
{α : Type u_4}
(G : SimpleGraph α)
[DecidableRel G.Adj]
(s t : Finset α)
:
G.edgeDensity s t = G.edgeDensity t s