Documentation

Mathlib.Combinatorics.SimpleGraph.Density

Edge density #

This file defines the number and density of edges of a relation/graph.

Main declarations #

Between two finsets of vertices,

Density of a relation #

def Rel.interedges {α : Type u_4} {β : Type u_5} (r : αβProp) [(a : α) → DecidablePred (r a)] (s : Finset α) (t : Finset β) :
Finset (α × β)

Finset of edges of a relation between two finsets of vertices.

Equations
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
    Instances For
      theorem Rel.mem_interedges_iff {α : Type u_4} {β : Type u_5} {r : αβProp} [(a : α) → DecidablePred (r a)] {s : Finset α} {t : Finset β} {x : α × β} :
      x Rel.interedges r s t x.1 s x.2 t r x.1 x.2
      theorem Rel.mk_mem_interedges_iff {α : Type u_4} {β : Type u_5} {r : αβProp} [(a : α) → DecidablePred (r a)] {s : Finset α} {t : Finset β} {a : α} {b : β} :
      (a, b) Rel.interedges r s t a s b t r a b
      @[simp]
      theorem Rel.interedges_empty_left {α : Type u_4} {β : Type u_5} {r : αβProp} [(a : α) → DecidablePred (r a)] (t : Finset β) :
      theorem Rel.interedges_mono {α : Type u_4} {β : Type u_5} {r : αβProp} [(a : α) → DecidablePred (r a)] {s₁ : Finset α} {s₂ : Finset α} {t₁ : Finset β} {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 : Finset α} {s' : Finset α} (hs : Disjoint s s') (t : Finset β) :
      theorem Rel.interedges_disjoint_right {α : Type u_4} {β : Type u_5} (r : αβProp) [(a : α) → DecidablePred (r a)] (s : Finset α) {t : Finset β} {t' : Finset β} (ht : Disjoint t 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 (Finset.biUnion s f) t = Finset.biUnion s 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 (Finset.biUnion t f) = Finset.biUnion t 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 (Finset.biUnion s f) (Finset.biUnion t g) = Finset.biUnion (s ×ˢ t) 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 β) :
      theorem Rel.edgeDensity_le_one {α : Type u_4} {β : Type u_5} (r : αβProp) [(a : α) → DecidablePred (r a)] (s : Finset α) (t : Finset β) :
      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 β) :
      @[simp]
      theorem Rel.edgeDensity_empty_right {α : Type u_4} {β : Type u_5} (r : αβProp) [(a : α) → DecidablePred (r a)] (s : Finset α) :
      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 = Finset.sum P.parts fun (a : Finset α) => (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 = Finset.sum P.parts fun (b : Finset β) => (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 = Finset.sum (P.parts ×ˢ Q.parts) fun (ab : Finset α × Finset β) => (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₁ : Finset α} {s₂ : Finset α} {t₁ : Finset β} {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₁ : Finset α} {s₂ : Finset α} {t₁ : Finset β} {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₁ : Finset α} {s₂ : Finset α} {t₁ : Finset β} {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₁ : Finset α} {s₂ : Finset α} {t₁ : Finset β} {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₁ : Finset α} {s₂ : Finset α} {t₁ : Finset β} {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 : Finset α} {t : Finset α} (hr : Symmetric r) {x : α × α} :
      theorem Rel.mk_mem_interedges_comm {α : Type u_4} {r : ααProp} [DecidableRel r] {s : Finset α} {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 : Finset α) (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 : Finset α) (t : Finset α) :

      Density of a graph #

      def SimpleGraph.interedges {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] (s : Finset α) (t : Finset α) :
      Finset (α × α)

      Finset of edges of a relation between two finsets of vertices.

      Equations
      Instances For
        def SimpleGraph.edgeDensity {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] :
        Finset αFinset α

        Density of edges of a graph between two finsets of vertices.

        Equations
        Instances For
          theorem SimpleGraph.interedges_def {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] (s : Finset α) (t : Finset α) :
          SimpleGraph.interedges G 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 : Finset α) (t : Finset α) :
          SimpleGraph.edgeDensity G s t = (SimpleGraph.interedges G s t).card / (s.card * t.card)
          @[simp]
          theorem SimpleGraph.card_interedges_div_card {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] (s : Finset α) (t : Finset α) :
          (SimpleGraph.interedges G s t).card / (s.card * t.card) = SimpleGraph.edgeDensity G s t
          theorem SimpleGraph.mem_interedges_iff {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s : Finset α} {t : Finset α} {x : α × α} :
          x SimpleGraph.interedges G s t x.1 s x.2 t G.Adj x.1 x.2
          theorem SimpleGraph.mk_mem_interedges_iff {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s : Finset α} {t : Finset α} {a : α} {b : α} :
          (a, b) SimpleGraph.interedges G s t a s b t G.Adj a b
          theorem SimpleGraph.interedges_mono {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s₁ : Finset α} {s₂ : Finset α} {t₁ : Finset α} {t₂ : Finset α} :
          s₂ s₁t₂ t₁SimpleGraph.interedges G s₂ t₂ SimpleGraph.interedges G s₁ t₁
          theorem SimpleGraph.interedges_disjoint_left {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s₁ : Finset α} {s₂ : Finset α} (hs : Disjoint s₁ s₂) (t : Finset α) :
          theorem SimpleGraph.interedges_disjoint_right {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {t₁ : Finset α} {t₂ : Finset α} (s : Finset α) (ht : Disjoint t₁ t₂) :
          theorem SimpleGraph.interedges_biUnion_left {ι : Type u_2} {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] [DecidableEq α] (s : Finset ι) (t : Finset α) (f : ιFinset α) :
          theorem SimpleGraph.interedges_biUnion_right {ι : Type u_2} {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] [DecidableEq α] (s : Finset α) (t : Finset ι) (f : ιFinset α) :
          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 α) :
          SimpleGraph.interedges G (Finset.biUnion s f) (Finset.biUnion t g) = Finset.biUnion (s ×ˢ t) fun (ab : ι × κ) => SimpleGraph.interedges G (f ab.1) (g ab.2)
          theorem SimpleGraph.card_interedges_add_card_interedges_compl {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s : Finset α} {t : Finset α} [DecidableEq α] (h : Disjoint s t) :
          (SimpleGraph.interedges G s t).card + (SimpleGraph.interedges G s t).card = s.card * t.card
          theorem SimpleGraph.edgeDensity_add_edgeDensity_compl {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s : Finset α} {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 : Finset α) (t : Finset α) :
          (SimpleGraph.interedges G s t).card s.card * t.card
          theorem SimpleGraph.edgeDensity_nonneg {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] (s : Finset α) (t : Finset α) :
          theorem SimpleGraph.edgeDensity_le_one {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] (s : Finset α) (t : Finset α) :
          @[simp]
          @[simp]
          theorem SimpleGraph.swap_mem_interedges_iff {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s : Finset α} {t : Finset α} {x : α × α} :
          theorem SimpleGraph.mk_mem_interedges_comm {α : Type u_4} (G : SimpleGraph α) [DecidableRel G.Adj] {s : Finset α} {t : Finset α} {a : α} {b : α} :