[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
⊢ Finset.card (SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id) ≤
    2 ^ (Finset.card P.parts - 1) * (Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
have hX : G.nonuniformWitness ε U V ∈ P.nonuniformWitnesses G ε U := nonuniformWitness_mem_nonuniformWitnesses h₂ hV hUV
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
⊢ Finset.card (SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id) ≤
    2 ^ (Finset.card P.parts - 1) * (Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
have q :
  G.nonuniformWitness ε U V \ (star hP G ε hU V).biUnion id ⊆
    ((atomise U <| P.nonuniformWitnesses G ε U).parts.filter fun B =>
          B ⊆ G.nonuniformWitness ε U V ∧ B.Nonempty).biUnion
      fun B => B \ ((chunk hP G ε hU).parts.filter (· ⊆ B)).biUnion id :=
  by
  intro x hx
  rw [← biUnion_filter_atomise hX (G.nonuniformWitness_subset h₂), star, mem_sdiff, mem_biUnion] at hx 
  simp only [not_exists, mem_biUnion, and_imp, exists_prop, mem_filter, not_and, mem_sdiff, id.def, mem_sdiff] at hx ⊢
  obtain ⟨⟨B, hB₁, hB₂⟩, hx⟩ := hx
  exact ⟨B, hB₁, hB₂, fun A hA AB => hx A hA <| AB.trans hB₁.2.1⟩
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
⊢ SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
x : α
hx : x ∈ SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id
⊢ x ∈
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
[PROOFSTEP]
rw [← biUnion_filter_atomise hX (G.nonuniformWitness_subset h₂), star, mem_sdiff, mem_biUnion] at hx 
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
x : α
hx :
  (∃ a,
      a ∈
          filter (fun u => u ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty u)
            (atomise U (nonuniformWitnesses P G ε U)).parts ∧
        x ∈ id a) ∧
    ¬x ∈ Finset.biUnion (filter (fun x => x ⊆ SimpleGraph.nonuniformWitness G ε U V) (chunk hP G ε hU).parts) id
⊢ x ∈
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
[PROOFSTEP]
simp only [not_exists, mem_biUnion, and_imp, exists_prop, mem_filter, not_and, mem_sdiff, id.def, mem_sdiff] at hx ⊢
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
x : α
hx :
  (∃ a,
      (a ∈ (atomise U (nonuniformWitnesses P G ε U)).parts ∧
          a ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty a) ∧
        x ∈ a) ∧
    ∀ (x_1 : Finset α), x_1 ∈ (chunk hP G ε hU).parts → x_1 ⊆ SimpleGraph.nonuniformWitness G ε U V → ¬x ∈ x_1
⊢ ∃ a,
    (a ∈ (atomise U (nonuniformWitnesses P G ε U)).parts ∧
        a ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty a) ∧
      x ∈ a ∧ ∀ (x_1 : Finset α), x_1 ∈ (chunk hP G ε hU).parts → x_1 ⊆ a → ¬x ∈ x_1
[PROOFSTEP]
obtain ⟨⟨B, hB₁, hB₂⟩, hx⟩ := hx
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
x : α
hx : ∀ (x_1 : Finset α), x_1 ∈ (chunk hP G ε hU).parts → x_1 ⊆ SimpleGraph.nonuniformWitness G ε U V → ¬x ∈ x_1
B : Finset α
hB₁ :
  B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts ∧ B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B
hB₂ : x ∈ B
⊢ ∃ a,
    (a ∈ (atomise U (nonuniformWitnesses P G ε U)).parts ∧
        a ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty a) ∧
      x ∈ a ∧ ∀ (x_1 : Finset α), x_1 ∈ (chunk hP G ε hU).parts → x_1 ⊆ a → ¬x ∈ x_1
[PROOFSTEP]
exact ⟨B, hB₁, hB₂, fun A hA AB => hx A hA <| AB.trans hB₁.2.1⟩
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ Finset.card (SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id) ≤
    2 ^ (Finset.card P.parts - 1) * (Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
apply (card_le_of_subset q).trans (card_biUnion_le.trans _)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ ∑ a in
      filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts,
      Finset.card (a \ Finset.biUnion (filter (fun x => x ⊆ a) (chunk hP G ε hU).parts) id) ≤
    2 ^ (Finset.card P.parts - 1) * (Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
trans
  ∑ _i in (atomise U <| P.nonuniformWitnesses G ε U).parts.filter fun B => B ⊆ G.nonuniformWitness ε U V ∧ B.Nonempty, m
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ ∑ a in
      filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts,
      Finset.card (a \ Finset.biUnion (filter (fun x => x ⊆ a) (chunk hP G ε hU).parts) id) ≤
    ∑ _i in
      filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts,
      Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
suffices
  ∀ B ∈ (atomise U <| P.nonuniformWitnesses G ε U).parts,
    (B \ ((chunk hP G ε hU).parts.filter (· ⊆ B)).biUnion id).card ≤ m
  by exact sum_le_sum fun B hB => this B <| filter_subset _ _ hB
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
this :
  ∀ (B : Finset α),
    B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts →
      Finset.card (B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id) ≤
        Fintype.card α / stepBound (Finset.card P.parts)
⊢ ∑ a in
      filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts,
      Finset.card (a \ Finset.biUnion (filter (fun x => x ⊆ a) (chunk hP G ε hU).parts) id) ≤
    ∑ _i in
      filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts,
      Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
exact sum_le_sum fun B hB => this B <| filter_subset _ _ hB
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ ∀ (B : Finset α),
    B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts →
      Finset.card (B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id) ≤
        Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
intro B hB
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
B : Finset α
hB : B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts
⊢ Finset.card (B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id) ≤
    Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
unfold chunk
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
B : Finset α
hB : B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts
⊢ Finset.card
      (B \
        Finset.biUnion
          (filter (fun x => x ⊆ B)
            (if hUcard :
                  Finset.card U =
                    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                      (Fintype.card α / Finset.card P.parts -
                        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) then
                equitabilise
                  (_ :
                    (4 ^ Finset.card P.parts -
                            (Fintype.card α / Finset.card P.parts -
                              Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)) *
                          (Fintype.card α / stepBound (Finset.card P.parts)) +
                        (Fintype.card α / Finset.card P.parts -
                            Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) *
                          (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
                      Finset.card U)
              else
                equitabilise
                  (_ :
                    (4 ^ Finset.card P.parts -
                            (Fintype.card α / Finset.card P.parts -
                                Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                              1)) *
                          (Fintype.card α / stepBound (Finset.card P.parts)) +
                        (Fintype.card α / Finset.card P.parts -
                              Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                            1) *
                          (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
                      Finset.card U)).parts)
          id) ≤
    Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
split_ifs with h₁
[GOAL]
case pos
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
B : Finset α
hB : B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts
h₁ :
  Finset.card U =
    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
      (Fintype.card α / Finset.card P.parts -
        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
⊢ Finset.card
      (B \
        Finset.biUnion
          (filter (fun x => x ⊆ B)
            (equitabilise
                (_ :
                  (4 ^ Finset.card P.parts -
                          (Fintype.card α / Finset.card P.parts -
                            Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)) *
                        (Fintype.card α / stepBound (Finset.card P.parts)) +
                      (Fintype.card α / Finset.card P.parts -
                          Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) *
                        (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
                    Finset.card U)).parts)
          id) ≤
    Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
convert card_parts_equitabilise_subset_le _ (card_aux₁ h₁) hB
[GOAL]
case neg
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
B : Finset α
hB : B ∈ (atomise U (nonuniformWitnesses P G ε U)).parts
h₁ :
  ¬Finset.card U =
      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
        (Fintype.card α / Finset.card P.parts -
          Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
⊢ Finset.card
      (B \
        Finset.biUnion
          (filter (fun x => x ⊆ B)
            (equitabilise
                (_ :
                  (4 ^ Finset.card P.parts -
                          (Fintype.card α / Finset.card P.parts -
                              Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                            1)) *
                        (Fintype.card α / stepBound (Finset.card P.parts)) +
                      (Fintype.card α / Finset.card P.parts -
                            Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                          1) *
                        (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
                    Finset.card U)).parts)
          id) ≤
    Fintype.card α / stepBound (Finset.card P.parts)
[PROOFSTEP]
convert card_parts_equitabilise_subset_le _ (card_aux₂ hP hU h₁) hB
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ ∑ _i in
      filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts,
      Fintype.card α / stepBound (Finset.card P.parts) ≤
    2 ^ (Finset.card P.parts - 1) * (Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
rw [sum_const]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ Finset.card
        (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
          (atomise U (nonuniformWitnesses P G ε U)).parts) •
      (Fintype.card α / stepBound (Finset.card P.parts)) ≤
    2 ^ (Finset.card P.parts - 1) * (Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
refine' mul_le_mul_right' _ _
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
⊢ Finset.card
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts) ≤
    2 ^ (Finset.card P.parts - 1)
[PROOFSTEP]
have t := card_filter_atomise_le_two_pow (s := U) hX
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
t :
  Finset.card
      (filter (fun u => u ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty u)
        (atomise U (nonuniformWitnesses P G ε U)).parts) ≤
    2 ^ (Finset.card (nonuniformWitnesses P G ε U) - 1)
⊢ Finset.card
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts) ≤
    2 ^ (Finset.card P.parts - 1)
[PROOFSTEP]
refine' t.trans (pow_le_pow (by norm_num) <| tsub_le_tsub_right _ _)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
t :
  Finset.card
      (filter (fun u => u ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty u)
        (atomise U (nonuniformWitnesses P G ε U)).parts) ≤
    2 ^ (Finset.card (nonuniformWitnesses P G ε U) - 1)
⊢ 1 ≤ 2
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
h₂ : ¬SimpleGraph.IsUniform G ε U V
hX : SimpleGraph.nonuniformWitness G ε U V ∈ nonuniformWitnesses P G ε U
q :
  SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id ⊆
    Finset.biUnion
      (filter (fun B => B ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty B)
        (atomise U (nonuniformWitnesses P G ε U)).parts)
      fun B => B \ Finset.biUnion (filter (fun x => x ⊆ B) (chunk hP G ε hU).parts) id
t :
  Finset.card
      (filter (fun u => u ⊆ SimpleGraph.nonuniformWitness G ε U V ∧ Finset.Nonempty u)
        (atomise U (nonuniformWitnesses P G ε U)).parts) ≤
    2 ^ (Finset.card (nonuniformWitnesses P G ε U) - 1)
⊢ Finset.card (nonuniformWitnesses P G ε U) ≤ Finset.card P.parts
[PROOFSTEP]
exact card_image_le.trans (card_le_of_subset <| filter_subset _ _)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ (1 - ε / 10) * ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) ≤
    ↑(Finset.card (Finset.biUnion (star hP G ε hU V) id))
[PROOFSTEP]
have hP₁ : 0 < P.parts.card := Finset.card_pos.2 ⟨_, hU⟩
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ (1 - ε / 10) * ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) ≤
    ↑(Finset.card (Finset.biUnion (star hP G ε hU V) id))
[PROOFSTEP]
have : (↑2 ^ P.parts.card : ℝ) * m / (U.card * ε) ≤ ε / 10 :=
  by
  rw [← div_div, div_le_iff']
  swap
  sz_positivity
  refine' le_of_mul_le_mul_left _ (pow_pos zero_lt_two P.parts.card)
  calc
    ↑2 ^ P.parts.card * ((↑2 ^ P.parts.card * m : ℝ) / U.card) = ((2 : ℝ) * 2) ^ P.parts.card * m / U.card := by
      rw [mul_pow, ← mul_div_assoc, mul_assoc]
    _ = ↑4 ^ P.parts.card * m / U.card := by norm_num
    _ ≤ 1 := (div_le_one_of_le (pow_mul_m_le_card_part hP hU) (cast_nonneg _))
    _ ≤ ↑2 ^ P.parts.card * ε ^ 2 / 10 :=
      by
      refine' (one_le_sq_iff <| by positivity).1 _
      rw [div_pow, mul_pow, pow_right_comm, ← pow_mul ε, one_le_div (sq_pos_of_ne_zero (10 : ℝ) <| by norm_num)]
      calc
        (↑10 ^ 2) = 100 := by norm_num
        _ ≤ ↑4 ^ P.parts.card * ε ^ 5 := hPε
        _ ≤ ↑4 ^ P.parts.card * ε ^ 4 :=
          (mul_le_mul_of_nonneg_left (pow_le_pow_of_le_one (by sz_positivity) hε₁ <| le_succ _) (by positivity))
        _ = (↑2 ^ 2) ^ P.parts.card * ε ^ (2 * 2) := by norm_num
    _ = ↑2 ^ P.parts.card * (ε * (ε / 10)) := by rw [mul_div_assoc, sq, mul_div_assoc]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
[PROOFSTEP]
rw [← div_div, div_le_iff']
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U) ≤ ε * (ε / 10)
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 0 < ε
[PROOFSTEP]
swap
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 0 < ε
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U) ≤ ε * (ε / 10)
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U) ≤ ε * (ε / 10)
[PROOFSTEP]
refine' le_of_mul_le_mul_left _ (pow_pos zero_lt_two P.parts.card)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts *
      (2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U)) ≤
    2 ^ Finset.card P.parts * (ε * (ε / 10))
[PROOFSTEP]
calc
  ↑2 ^ P.parts.card * ((↑2 ^ P.parts.card * m : ℝ) / U.card) = ((2 : ℝ) * 2) ^ P.parts.card * m / U.card := by
    rw [mul_pow, ← mul_div_assoc, mul_assoc]
  _ = ↑4 ^ P.parts.card * m / U.card := by norm_num
  _ ≤ 1 := (div_le_one_of_le (pow_mul_m_le_card_part hP hU) (cast_nonneg _))
  _ ≤ ↑2 ^ P.parts.card * ε ^ 2 / 10 :=
    by
    refine' (one_le_sq_iff <| by positivity).1 _
    rw [div_pow, mul_pow, pow_right_comm, ← pow_mul ε, one_le_div (sq_pos_of_ne_zero (10 : ℝ) <| by norm_num)]
    calc
      (↑10 ^ 2) = 100 := by norm_num
      _ ≤ ↑4 ^ P.parts.card * ε ^ 5 := hPε
      _ ≤ ↑4 ^ P.parts.card * ε ^ 4 :=
        (mul_le_mul_of_nonneg_left (pow_le_pow_of_le_one (by sz_positivity) hε₁ <| le_succ _) (by positivity))
      _ = (↑2 ^ 2) ^ P.parts.card * ε ^ (2 * 2) := by norm_num
  _ = ↑2 ^ P.parts.card * (ε * (ε / 10)) := by rw [mul_div_assoc, sq, mul_div_assoc]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts *
      (2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U)) =
    (2 * 2) ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U)
[PROOFSTEP]
rw [mul_pow, ← mul_div_assoc, mul_assoc]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ (2 * 2) ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U) =
    4 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / ↑(Finset.card U)
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 1 ≤ 2 ^ Finset.card P.parts * ε ^ 2 / 10
[PROOFSTEP]
refine' (one_le_sq_iff <| by positivity).1 _
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 0 ≤ 2 ^ Finset.card P.parts * ε ^ 2 / 10
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 1 ≤ (2 ^ Finset.card P.parts * ε ^ 2 / 10) ^ 2
[PROOFSTEP]
rw [div_pow, mul_pow, pow_right_comm, ← pow_mul ε, one_le_div (sq_pos_of_ne_zero (10 : ℝ) <| by norm_num)]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 10 ≠ 0
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 10 ^ 2 ≤ (2 ^ 2) ^ Finset.card P.parts * ε ^ (2 * 2)
[PROOFSTEP]
calc
  (↑10 ^ 2) = 100 := by norm_num
  _ ≤ ↑4 ^ P.parts.card * ε ^ 5 := hPε
  _ ≤ ↑4 ^ P.parts.card * ε ^ 4 :=
    (mul_le_mul_of_nonneg_left (pow_le_pow_of_le_one (by sz_positivity) hε₁ <| le_succ _) (by positivity))
  _ = (↑2 ^ 2) ^ P.parts.card * ε ^ (2 * 2) := by norm_num
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 10 ^ 2 = 100
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 0 ≤ ε
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 0 ≤ 4 ^ Finset.card P.parts
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 4 ^ Finset.card P.parts * ε ^ 4 = (2 ^ 2) ^ Finset.card P.parts * ε ^ (2 * 2)
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
⊢ 2 ^ Finset.card P.parts * ε ^ 2 / 10 = 2 ^ Finset.card P.parts * (ε * (ε / 10))
[PROOFSTEP]
rw [mul_div_assoc, sq, mul_div_assoc]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ (1 - ε / 10) * ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) ≤
    ↑(Finset.card (Finset.biUnion (star hP G ε hU V) id))
[PROOFSTEP]
calc
  (↑1 - ε / 10) * (G.nonuniformWitness ε U V).card ≤
      (↑1 - ↑2 ^ P.parts.card * m / (U.card * ε)) * (G.nonuniformWitness ε U V).card :=
    mul_le_mul_of_nonneg_right (sub_le_sub_left this _) (cast_nonneg _)
  _ = (G.nonuniformWitness ε U V).card - ↑2 ^ P.parts.card * m / (U.card * ε) * (G.nonuniformWitness ε U V).card := by
    rw [sub_mul, one_mul]
  _ ≤ (G.nonuniformWitness ε U V).card - ↑2 ^ (P.parts.card - 1) * m :=
    by
    refine' sub_le_sub_left _ _
    have : (2 : ℝ) ^ P.parts.card = ↑2 ^ (P.parts.card - 1) * 2 := by
      rw [← _root_.pow_succ', tsub_add_cancel_of_le (succ_le_iff.2 hP₁)]
    rw [← mul_div_right_comm, this, mul_right_comm _ (2 : ℝ), mul_assoc, le_div_iff]
    refine' mul_le_mul_of_nonneg_left _ (by positivity)
    exact (G.le_card_nonuniformWitness hunif).trans (le_mul_of_one_le_left (cast_nonneg _) one_le_two)
    have := Finset.card_pos.mpr (P.nonempty_of_mem_parts hU)
    sz_positivity
  _ ≤ ((star hP G ε hU V).biUnion id).card :=
    by
    rw [sub_le_comm, ← cast_sub (card_le_of_subset <| biUnion_star_subset_nonuniformWitness hP G ε hU V), ←
      card_sdiff (biUnion_star_subset_nonuniformWitness hP G ε hU V)]
    exact_mod_cast card_nonuniformWitness_sdiff_biUnion_star hV hUV hunif
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ (1 - 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε)) *
      ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) =
    ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) -
      2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) *
        ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V))
[PROOFSTEP]
rw [sub_mul, one_mul]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) -
      2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) *
        ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) ≤
    ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) -
      2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
refine' sub_le_sub_left _ _
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ 2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤
    2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) *
      ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V))
[PROOFSTEP]
have : (2 : ℝ) ^ P.parts.card = ↑2 ^ (P.parts.card - 1) * 2 := by
  rw [← _root_.pow_succ', tsub_add_cancel_of_le (succ_le_iff.2 hP₁)]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
[PROOFSTEP]
rw [← _root_.pow_succ', tsub_add_cancel_of_le (succ_le_iff.2 hP₁)]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ 2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤
    2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) *
      ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V))
[PROOFSTEP]
rw [← mul_div_right_comm, this, mul_right_comm _ (2 : ℝ), mul_assoc, le_div_iff]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ 2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) * (↑(Finset.card U) * ε) ≤
    2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) *
      (2 * ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)))
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ 0 < ↑(Finset.card U) * ε
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (by positivity)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ 0 ≤ 2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ ↑(Finset.card U) * ε ≤ 2 * ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V))
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ 0 < ↑(Finset.card U) * ε
[PROOFSTEP]
exact (G.le_card_nonuniformWitness hunif).trans (le_mul_of_one_le_left (cast_nonneg _) one_le_two)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
⊢ 0 < ↑(Finset.card U) * ε
[PROOFSTEP]
have := Finset.card_pos.mpr (P.nonempty_of_mem_parts hU)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this✝¹ : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
this✝ : 2 ^ Finset.card P.parts = 2 ^ (Finset.card P.parts - 1) * 2
this : 0 < Finset.card U
⊢ 0 < ↑(Finset.card U) * ε
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) -
      2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤
    ↑(Finset.card (Finset.biUnion (star hP G ε hU V) id))
[PROOFSTEP]
rw [sub_le_comm, ← cast_sub (card_le_of_subset <| biUnion_star_subset_nonuniformWitness hP G ε hU V), ←
  card_sdiff (biUnion_star_subset_nonuniformWitness hP G ε hU V)]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hP₁ : 0 < Finset.card P.parts
this : 2 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Finset.card U) * ε) ≤ ε / 10
⊢ ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V \ Finset.biUnion (star hP G ε hU V) id)) ≤
    2 ^ (Finset.card P.parts - 1) * ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
exact_mod_cast card_nonuniformWitness_sdiff_biUnion_star hV hUV hunif
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hm : Fintype.card α / stepBound (Finset.card P.parts) ≠ 0
⊢ Finset.card (chunk hP G ε hU).parts = 4 ^ Finset.card P.parts
[PROOFSTEP]
unfold chunk
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hm : Fintype.card α / stepBound (Finset.card P.parts) ≠ 0
⊢ Finset.card
      (if hUcard :
            Finset.card U =
              Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                (Fintype.card α / Finset.card P.parts -
                  Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) then
          equitabilise
            (_ :
              (4 ^ Finset.card P.parts -
                      (Fintype.card α / Finset.card P.parts -
                        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)) *
                    (Fintype.card α / stepBound (Finset.card P.parts)) +
                  (Fintype.card α / Finset.card P.parts -
                      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) *
                    (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
                Finset.card U)
        else
          equitabilise
            (_ :
              (4 ^ Finset.card P.parts -
                      (Fintype.card α / Finset.card P.parts -
                          Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                        1)) *
                    (Fintype.card α / stepBound (Finset.card P.parts)) +
                  (Fintype.card α / Finset.card P.parts -
                        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                      1) *
                    (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
                Finset.card U)).parts =
    4 ^ Finset.card P.parts
[PROOFSTEP]
split_ifs
[GOAL]
case pos
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hm : Fintype.card α / stepBound (Finset.card P.parts) ≠ 0
h✝ :
  Finset.card U =
    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
      (Fintype.card α / Finset.card P.parts -
        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
⊢ Finset.card
      (equitabilise
          (_ :
            (4 ^ Finset.card P.parts -
                    (Fintype.card α / Finset.card P.parts -
                      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)) *
                  (Fintype.card α / stepBound (Finset.card P.parts)) +
                (Fintype.card α / Finset.card P.parts -
                    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) *
                  (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
              Finset.card U)).parts =
    4 ^ Finset.card P.parts
[PROOFSTEP]
rw [card_parts_equitabilise _ _ hm, tsub_add_cancel_of_le]
[GOAL]
case pos
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hm : Fintype.card α / stepBound (Finset.card P.parts) ≠ 0
h✝ :
  Finset.card U =
    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
      (Fintype.card α / Finset.card P.parts -
        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
⊢ Fintype.card α / Finset.card P.parts - Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts ≤
    4 ^ Finset.card P.parts
[PROOFSTEP]
exact le_of_lt a_add_one_le_four_pow_parts_card
[GOAL]
case neg
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hm : Fintype.card α / stepBound (Finset.card P.parts) ≠ 0
h✝ :
  ¬Finset.card U =
      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
        (Fintype.card α / Finset.card P.parts -
          Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
⊢ Finset.card
      (equitabilise
          (_ :
            (4 ^ Finset.card P.parts -
                    (Fintype.card α / Finset.card P.parts -
                        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                      1)) *
                  (Fintype.card α / stepBound (Finset.card P.parts)) +
                (Fintype.card α / Finset.card P.parts -
                      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                    1) *
                  (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
              Finset.card U)).parts =
    4 ^ Finset.card P.parts
[PROOFSTEP]
rw [card_parts_equitabilise _ _ hm, tsub_add_cancel_of_le a_add_one_le_four_pow_parts_card]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hs : s ∈ (chunk hP G ε hU).parts
⊢ Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) ∨
    Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) + 1
[PROOFSTEP]
unfold chunk at hs 
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hs :
  s ∈
    (if hUcard :
          Finset.card U =
            Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
              (Fintype.card α / Finset.card P.parts -
                Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) then
        equitabilise
          (_ :
            (4 ^ Finset.card P.parts -
                    (Fintype.card α / Finset.card P.parts -
                      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)) *
                  (Fintype.card α / stepBound (Finset.card P.parts)) +
                (Fintype.card α / Finset.card P.parts -
                    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) *
                  (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
              Finset.card U)
      else
        equitabilise
          (_ :
            (4 ^ Finset.card P.parts -
                    (Fintype.card α / Finset.card P.parts -
                        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                      1)) *
                  (Fintype.card α / stepBound (Finset.card P.parts)) +
                (Fintype.card α / Finset.card P.parts -
                      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                    1) *
                  (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
              Finset.card U)).parts
⊢ Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) ∨
    Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) + 1
[PROOFSTEP]
split_ifs at hs 
[GOAL]
case pos
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h✝ :
  Finset.card U =
    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
      (Fintype.card α / Finset.card P.parts -
        Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
hs :
  s ∈
    (equitabilise
        (_ :
          (4 ^ Finset.card P.parts -
                  (Fintype.card α / Finset.card P.parts -
                    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)) *
                (Fintype.card α / stepBound (Finset.card P.parts)) +
              (Fintype.card α / Finset.card P.parts -
                  Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts) *
                (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
            Finset.card U)).parts
⊢ Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) ∨
    Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) + 1
[PROOFSTEP]
exact card_eq_of_mem_parts_equitabilise hs
[GOAL]
case neg
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h✝ :
  ¬Finset.card U =
      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
        (Fintype.card α / Finset.card P.parts -
          Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts)
hs :
  s ∈
    (equitabilise
        (_ :
          (4 ^ Finset.card P.parts -
                  (Fintype.card α / Finset.card P.parts -
                      Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                    1)) *
                (Fintype.card α / stepBound (Finset.card P.parts)) +
              (Fintype.card α / Finset.card P.parts -
                    Fintype.card α / stepBound (Finset.card P.parts) * 4 ^ Finset.card P.parts +
                  1) *
                (Fintype.card α / stepBound (Finset.card P.parts) + 1) =
            Finset.card U)).parts
⊢ Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) ∨
    Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) + 1
[PROOFSTEP]
exact card_eq_of_mem_parts_equitabilise hs
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hs : s ∈ (chunk hP G ε hU).parts
i : Finset.card s = Fintype.card α / stepBound (Finset.card P.parts) + 1
⊢ Fintype.card α / stepBound (Finset.card P.parts) ≤ Finset.card s
[PROOFSTEP]
simp [i]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hs : s ∈ (chunk hP G ε hU).parts
i : Finset.card s = Fintype.card α / stepBound (Finset.card P.parts)
⊢ Finset.card s ≤ Fintype.card α / stepBound (Finset.card P.parts) + 1
[PROOFSTEP]
simp [i]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
⊢ ↑(Finset.card (Finset.biUnion (star hP G ε hU V) id)) ≤
    ↑(Finset.card (star hP G ε hU V)) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
[PROOFSTEP]
exact_mod_cast card_biUnion_le_card_mul _ _ _ fun s hs => card_le_m_add_one_of_mem_chunk_parts <| star_subset_chunk hs
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card 𝒜) * ↑(Finset.card s) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) /
        (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ≤
    ↑(Finset.card (sup 𝒜 id))
[PROOFSTEP]
rw [mul_div_assoc', div_le_iff coe_m_add_one_pos, mul_right_comm]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card 𝒜) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) * ↑(Finset.card s) ≤
    ↑(Finset.card (sup 𝒜 id)) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
[PROOFSTEP]
refine' mul_le_mul _ _ (cast_nonneg _) (cast_nonneg _)
[GOAL]
case refine'_1
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card 𝒜) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ ↑(Finset.card (sup 𝒜 id))
[PROOFSTEP]
rw [← (ofSubset _ h𝒜 rfl).sum_card_parts, ofSubset_parts, ← cast_mul, cast_le]
[GOAL]
case refine'_1
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ Finset.card 𝒜 * (Fintype.card α / stepBound (Finset.card P.parts)) ≤ ∑ i in 𝒜, Finset.card i
[PROOFSTEP]
exact card_nsmul_le_sum _ _ _ fun x hx => m_le_card_of_mem_chunk_parts <| h𝒜 hx
[GOAL]
case refine'_2
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card s) ≤ ↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1
[PROOFSTEP]
exact_mod_cast card_le_m_add_one_of_mem_chunk_parts (h𝒜 hs)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card (sup 𝒜 id)) ≤
    ↑(Finset.card 𝒜) * ↑(Finset.card s) *
      ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) / ↑(Fintype.card α / stepBound (Finset.card P.parts)))
[PROOFSTEP]
rw [sup_eq_biUnion, mul_div_assoc', le_div_iff m_pos, mul_right_comm]
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card (Finset.biUnion 𝒜 id)) * ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤
    ↑(Finset.card 𝒜) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) * ↑(Finset.card s)
[PROOFSTEP]
refine' mul_le_mul _ _ (cast_nonneg _) (by positivity)
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ 0 ≤ ↑(Finset.card 𝒜) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
[PROOFSTEP]
positivity
[GOAL]
case refine'_1
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Finset.card (Finset.biUnion 𝒜 id)) ≤ ↑(Finset.card 𝒜) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
[PROOFSTEP]
norm_cast
[GOAL]
case refine'_1
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ Finset.card (Finset.biUnion 𝒜 id) ≤ Finset.card 𝒜 * (Fintype.card α / stepBound (Finset.card P.parts) + 1)
[PROOFSTEP]
refine' card_biUnion_le_card_mul _ _ _ fun x hx => _
[GOAL]
case refine'_1
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
x : Finset α
hx : x ∈ 𝒜
⊢ Finset.card (id x) ≤ Fintype.card α / stepBound (Finset.card P.parts) + 1
[PROOFSTEP]
apply card_le_m_add_one_of_mem_chunk_parts (h𝒜 hx)
[GOAL]
case refine'_2
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
m_pos : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
h𝒜 : 𝒜 ⊆ (chunk hP G ε hU).parts
hs : s ∈ 𝒜
⊢ ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ ↑(Finset.card s)
[PROOFSTEP]
exact_mod_cast m_le_card_of_mem_chunk_parts (h𝒜 hs)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
⊢ 1 - ε ^ 5 / 50 ≤
    (↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ^
      2
[PROOFSTEP]
have : (m : ℝ) / (m + 1) = 1 - 1 / (m + 1) := by rw [one_sub_div coe_m_add_one_pos.ne', add_sub_cancel]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
⊢ ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
[PROOFSTEP]
rw [one_sub_div coe_m_add_one_pos.ne', add_sub_cancel]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 1 - ε ^ 5 / 50 ≤
    (↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ^
      2
[PROOFSTEP]
rw [this, sub_sq, one_pow, mul_one]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 1 - ε ^ 5 / 50 ≤
    1 - 2 * (1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) +
      (1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ^ 2
[PROOFSTEP]
refine' le_trans _ (le_add_of_nonneg_right <| sq_nonneg _)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 1 - ε ^ 5 / 50 ≤ 1 - 2 * (1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1))
[PROOFSTEP]
rw [sub_le_sub_iff_left, ← le_div_iff' (show (0 : ℝ) < 2 by norm_num), div_div, one_div_le coe_m_add_one_pos,
  one_div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 0 < 2
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 50 * 2 / ε ^ 5 ≤ ↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 0 < ε ^ 5 / (50 * 2)
[PROOFSTEP]
refine' le_trans _ (le_add_of_nonneg_right zero_le_one)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 50 * 2 / ε ^ 5 ≤ ↑(Fintype.card α / stepBound (Finset.card P.parts))
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 0 < ε ^ 5 / (50 * 2)
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 100 / ε ^ 5 ≤ ↑(Fintype.card α / stepBound (Finset.card P.parts))
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 0 < ε ^ 5 / (50 * 2)
[PROOFSTEP]
apply hundred_div_ε_pow_five_le_m hPα hPε
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
this :
  ↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) =
    1 - 1 / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
⊢ 0 < ε ^ 5 / (50 * 2)
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) / ↑(Fintype.card α / stepBound (Finset.card P.parts))) ^
      2 ≤
    1 + ε ^ 5 / 49
[PROOFSTEP]
rw [same_add_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ (1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts))) ^ 2 ≤ 1 + ε ^ 5 / 49
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≠ 0
[PROOFSTEP]
swap
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≠ 0
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ (1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts))) ^ 2 ≤ 1 + ε ^ 5 / 49
[PROOFSTEP]
have : ↑1 + ↑1 / (m : ℝ) ≤ ↑1 + ε ^ 5 / 100 :=
  by
  rw [add_le_add_iff_left, ← one_div_div (100 : ℝ)]
  exact one_div_le_one_div_of_le (by sz_positivity) (hundred_div_ε_pow_five_le_m hPα hPε)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
[PROOFSTEP]
rw [add_le_add_iff_left, ← one_div_div (100 : ℝ)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 / (100 / ε ^ 5)
[PROOFSTEP]
exact one_div_le_one_div_of_le (by sz_positivity) (hundred_div_ε_pow_five_le_m hPα hPε)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
⊢ 0 < 100 / ε ^ 5
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ (1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts))) ^ 2 ≤ 1 + ε ^ 5 / 49
[PROOFSTEP]
refine' (pow_le_pow_of_le_left _ this 2).trans _
[GOAL]
case refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ 0 ≤ 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
positivity
[GOAL]
case refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ (1 + ε ^ 5 / 100) ^ 2 ≤ 1 + ε ^ 5 / 49
[PROOFSTEP]
rw [add_sq, one_pow, add_assoc, add_le_add_iff_left, mul_one, ← le_sub_iff_add_le', div_eq_mul_one_div _ (49 : ℝ),
  mul_div_left_comm (2 : ℝ), ← mul_sub_left_distrib, div_pow, div_le_iff (show (0 : ℝ) < ↑100 ^ 2 by norm_num),
  mul_assoc, sq]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ 0 < 100 ^ 2
[PROOFSTEP]
norm_num
[GOAL]
case refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ ε ^ 5 * ε ^ 5 ≤ ε ^ 5 * ((1 / 49 - 2 / 100) * 100 ^ 2)
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (by sz_positivity)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ 0 ≤ ε ^ 5
[PROOFSTEP]
sz_positivity
[GOAL]
case refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ ε ^ 5 ≤ (1 / 49 - 2 / 100) * 100 ^ 2
[PROOFSTEP]
exact (pow_le_one 5 (by sz_positivity) hε₁).trans (by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ 0 ≤ ε
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
this : 1 + 1 / ↑(Fintype.card α / stepBound (Finset.card P.parts)) ≤ 1 + ε ^ 5 / 100
⊢ 1 ≤ (1 / 49 - 2 / 100) * 100 ^ 2
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
have :
  ↑(G.edgeDensity (A.biUnion id) (B.biUnion id)) - ε ^ 5 / ↑50 ≤
    (↑1 - ε ^ 5 / 50) * G.edgeDensity (A.biUnion id) (B.biUnion id) :=
  by
  rw [sub_mul, one_mul, sub_le_sub_iff_left]
  refine' mul_le_of_le_one_right (by sz_positivity) _
  exact_mod_cast G.edgeDensity_le_one _ _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
rw [sub_mul, one_mul, sub_le_sub_iff_left]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ε ^ 5 / 50 * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤ ε ^ 5 / 50
[PROOFSTEP]
refine' mul_le_of_le_one_right (by sz_positivity) _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ 0 ≤ ε ^ 5 / 50
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤ 1
[PROOFSTEP]
exact_mod_cast G.edgeDensity_le_one _ _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
refine' this.trans _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
conv_rhs =>
  -- Porting note: LHS and RHS need separate treatment to get the desired formsimp only [SimpleGraph.edgeDensity_def,
    sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
simp only [SimpleGraph.edgeDensity_def, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
simp only [SimpleGraph.edgeDensity_def, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
simp only [SimpleGraph.edgeDensity_def, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ∑ x in Finset.product A B,
      ↑↑(Finset.card (SimpleGraph.interedges G x.fst x.snd)) /
        (↑(↑(Finset.card x.fst) * ↑(Finset.card x.snd)) * (↑(Finset.card A) * ↑(Finset.card B)))
[PROOFSTEP]
conv_lhs =>
  rw [SimpleGraph.edgeDensity_def, SimpleGraph.interedges, ← sup_eq_biUnion, ← sup_eq_biUnion,
    Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl), ofSubset_parts, ofSubset_parts]
  simp only [cast_sum, sum_div, mul_sum, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) - _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
  rw [SimpleGraph.edgeDensity_def, SimpleGraph.interedges, ← sup_eq_biUnion, ← sup_eq_biUnion,
    Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl), ofSubset_parts, ofSubset_parts]
  simp only [cast_sum, sum_div, mul_sum, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) - _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
  rw [SimpleGraph.edgeDensity_def, SimpleGraph.interedges, ← sup_eq_biUnion, ← sup_eq_biUnion,
    Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl), ofSubset_parts, ofSubset_parts]
  simp only [cast_sum, sum_div, mul_sum, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) - _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
rw [SimpleGraph.edgeDensity_def, SimpleGraph.interedges, ← sup_eq_biUnion, ← sup_eq_biUnion,
  Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl), ofSubset_parts, ofSubset_parts]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
| (1 - ε ^ 5 / 50) *
    ↑(↑(∑ ab in A ×ˢ B, Finset.card (interedges G.Adj ab.fst ab.snd)) /
        (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
simp only [cast_sum, sum_div, mul_sum, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) - _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ ∑ x in A ×ˢ B,
      ↑↑(Finset.card (interedges G.Adj x.fst x.snd)) *
        ((1 - ε ^ 5 / 50) / ↑(↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)))) ≤
    ∑ x in Finset.product A B,
      ↑↑(Finset.card (SimpleGraph.interedges G x.fst x.snd)) /
        (↑(↑(Finset.card x.fst) * ↑(Finset.card x.snd)) * (↑(Finset.card A) * ↑(Finset.card B)))
[PROOFSTEP]
push_cast
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ ∑ x in A ×ˢ B,
      ↑(Finset.card (interedges G.Adj x.fst x.snd)) *
        ((1 - ε ^ 5 / 50) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)))) ≤
    ∑ x in Finset.product A B,
      ↑(Finset.card (SimpleGraph.interedges G x.fst x.snd)) /
        (↑(Finset.card x.fst) * ↑(Finset.card x.snd) * (↑(Finset.card A) * ↑(Finset.card B)))
[PROOFSTEP]
apply sum_le_sum
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ ∀ (i : Finset α × Finset α),
    i ∈ A ×ˢ B →
      ↑(Finset.card (interedges G.Adj i.fst i.snd)) *
          ((1 - ε ^ 5 / 50) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)))) ≤
        ↑(Finset.card (SimpleGraph.interedges G i.fst i.snd)) /
          (↑(Finset.card i.fst) * ↑(Finset.card i.snd) * (↑(Finset.card A) * ↑(Finset.card B)))
[PROOFSTEP]
simp only [and_imp, Prod.forall, mem_product]
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
⊢ ∀ (a b : Finset α),
    a ∈ A →
      b ∈ B →
        ↑(Finset.card (interedges G.Adj a b)) *
            ((1 - ε ^ 5 / 50) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)))) ≤
          ↑(Finset.card (SimpleGraph.interedges G a b)) /
            (↑(Finset.card a) * ↑(Finset.card b) * (↑(Finset.card A) * ↑(Finset.card B)))
[PROOFSTEP]
rintro x y hx hy
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (interedges G.Adj x y)) * ((1 - ε ^ 5 / 50) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)))) ≤
    ↑(Finset.card (SimpleGraph.interedges G x y)) /
      (↑(Finset.card x) * ↑(Finset.card y) * (↑(Finset.card A) * ↑(Finset.card B)))
[PROOFSTEP]
rw [mul_mul_mul_comm, mul_comm (x.card : ℝ), mul_comm (y.card : ℝ), le_div_iff, mul_assoc]
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (interedges G.Adj x y)) *
      ((1 - ε ^ 5 / 50) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))) *
        (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y)))) ≤
    ↑(Finset.card (SimpleGraph.interedges G x y))
[PROOFSTEP]
refine' mul_le_of_le_one_right (cast_nonneg _) _
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ (1 - ε ^ 5 / 50) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))) *
      (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))) ≤
    1
[PROOFSTEP]
rw [div_mul_eq_mul_div, ← mul_assoc, mul_assoc]
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ (1 - ε ^ 5 / 50) * (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))) /
      (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))) ≤
    1
[PROOFSTEP]
refine' div_le_one_of_le _ (by positivity)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤ ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))
[PROOFSTEP]
positivity
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ (1 - ε ^ 5 / 50) * (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))) ≤
    ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))
[PROOFSTEP]
refine' (mul_le_mul_of_nonneg_right (one_sub_le_m_div_m_add_one_sq hPα hPε) _).trans _
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤ ↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))
[PROOFSTEP]
exact_mod_cast _root_.zero_le _
[GOAL]
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ (↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ^
        2 *
      (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))) ≤
    ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))
[PROOFSTEP]
rw [sq, mul_mul_mul_comm, mul_comm ((m : ℝ) / _), mul_comm ((m : ℝ) / _)]
[GOAL]
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card A) * ↑(Finset.card x) *
        (↑(Fintype.card α / stepBound (Finset.card P.parts)) /
          (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) *
      (↑(Finset.card B) * ↑(Finset.card y) *
        (↑(Fintype.card α / stepBound (Finset.card P.parts)) /
          (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1))) ≤
    ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))
[PROOFSTEP]
refine' mul_le_mul _ _ _ (cast_nonneg _)
[GOAL]
case h.refine'_2.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card A) * ↑(Finset.card x) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) /
        (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ≤
    ↑(Finset.card (sup A id))
case h.refine'_2.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card B) * ↑(Finset.card y) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) /
        (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ≤
    ↑(Finset.card (sup B id))
case h.refine'_2.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤
    ↑(Finset.card B) * ↑(Finset.card y) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1))
[PROOFSTEP]
apply le_sum_card_subset_chunk_parts hA hx
[GOAL]
case h.refine'_2.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card B) * ↑(Finset.card y) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) /
        (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)) ≤
    ↑(Finset.card (sup B id))
case h.refine'_2.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤
    ↑(Finset.card B) * ↑(Finset.card y) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1))
[PROOFSTEP]
apply le_sum_card_subset_chunk_parts hB hy
[GOAL]
case h.refine'_2.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤
    ↑(Finset.card B) * ↑(Finset.card y) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) / (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1))
[PROOFSTEP]
positivity
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))
[PROOFSTEP]
refine' mul_pos (mul_pos _ _) (mul_pos _ _)
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card A)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card x)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card B)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_4
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card y)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty A
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty x
case h.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty B
case h.refine'_4
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (1 - ε ^ 5 / 50) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty y
[PROOFSTEP]
exacts [⟨_, hx⟩, nonempty_of_mem_parts _ (hA hx), ⟨_, hy⟩, nonempty_of_mem_parts _ (hB hy)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
[PROOFSTEP]
have :
  (↑1 + ε ^ 5 / ↑49) * G.edgeDensity (A.biUnion id) (B.biUnion id) ≤
    G.edgeDensity (A.biUnion id) (B.biUnion id) + ε ^ 5 / 49 :=
  by
  rw [add_mul, one_mul, add_le_add_iff_left]
  refine' mul_le_of_le_one_right (by sz_positivity) _
  exact_mod_cast G.edgeDensity_le_one _ _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
[PROOFSTEP]
rw [add_mul, one_mul, add_le_add_iff_left]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ε ^ 5 / 49 * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤ ε ^ 5 / 49
[PROOFSTEP]
refine' mul_le_of_le_one_right (by sz_positivity) _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ 0 ≤ ε ^ 5 / 49
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤ 1
[PROOFSTEP]
exact_mod_cast G.edgeDensity_le_one _ _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
[PROOFSTEP]
refine' le_trans _ this
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
conv_lhs =>
  -- Porting note: LHS and RHS need separate treatment to get the desired formsimp only [SimpleGraph.edgeDensity,
    edgeDensity, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
simp only [SimpleGraph.edgeDensity, edgeDensity, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
simp only [SimpleGraph.edgeDensity, edgeDensity, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
simp only [SimpleGraph.edgeDensity, edgeDensity, sum_div, Rat.cast_div, div_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ ∑ x in Finset.product A B,
      ↑↑(Finset.card (interedges G.Adj x.fst x.snd)) /
        (↑(↑(Finset.card x.fst) * ↑(Finset.card x.snd)) * (↑(Finset.card A) * ↑(Finset.card B))) ≤
    (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
conv_rhs =>
  rw [SimpleGraph.edgeDensity, edgeDensity, ← sup_eq_biUnion, ← sup_eq_biUnion,
    Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl)]
  simp only [cast_sum, mul_sum, sum_div, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) + _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
  rw [SimpleGraph.edgeDensity, edgeDensity, ← sup_eq_biUnion, ← sup_eq_biUnion,
    Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl)]
  simp only [cast_sum, mul_sum, sum_div, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) + _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
  rw [SimpleGraph.edgeDensity, edgeDensity, ← sup_eq_biUnion, ← sup_eq_biUnion,
    Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl)]
  simp only [cast_sum, mul_sum, sum_div, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) + _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))
[PROOFSTEP]
rw [SimpleGraph.edgeDensity, edgeDensity, ← sup_eq_biUnion, ← sup_eq_biUnion,
  Rel.card_interedges_finpartition _ (ofSubset _ hA rfl) (ofSubset _ hB rfl)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
| (1 + ε ^ 5 / 49) *
    ↑(↑(∑ ab in
            (ofSubset (chunk hP G ε hU) hA (_ : sup A id = sup A id)).parts ×ˢ
              (ofSubset (chunk hP G ε hV) hB (_ : sup B id = sup B id)).parts,
            Finset.card (interedges G.Adj ab.fst ab.snd)) /
        (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
simp only [cast_sum, mul_sum, sum_div, Rat.cast_sum, Rat.cast_div, mul_div_left_comm ((1 : ℝ) + _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ ∑ x in Finset.product A B,
      ↑↑(Finset.card (interedges G.Adj x.fst x.snd)) /
        (↑(↑(Finset.card x.fst) * ↑(Finset.card x.snd)) * (↑(Finset.card A) * ↑(Finset.card B))) ≤
    ∑ x in
      (ofSubset (chunk hP G ε hU) hA (_ : sup A id = sup A id)).parts ×ˢ
        (ofSubset (chunk hP G ε hV) hB (_ : sup B id = sup B id)).parts,
      ↑↑(Finset.card (interedges G.Adj x.fst x.snd)) *
        ((1 + ε ^ 5 / 49) / ↑(↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
push_cast
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ ∑ x in Finset.product A B,
      ↑(Finset.card (interedges G.Adj x.fst x.snd)) /
        (↑(Finset.card x.fst) * ↑(Finset.card x.snd) * (↑(Finset.card A) * ↑(Finset.card B))) ≤
    ∑ x in
      (ofSubset (chunk hP G ε hU) hA (_ : sup A id = sup A id)).parts ×ˢ
        (ofSubset (chunk hP G ε hV) hB (_ : sup B id = sup B id)).parts,
      ↑(Finset.card (interedges G.Adj x.fst x.snd)) *
        ((1 + ε ^ 5 / 49) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
apply sum_le_sum
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ ∀ (i : Finset α × Finset α),
    i ∈ Finset.product A B →
      ↑(Finset.card (interedges G.Adj i.fst i.snd)) /
          (↑(Finset.card i.fst) * ↑(Finset.card i.snd) * (↑(Finset.card A) * ↑(Finset.card B))) ≤
        ↑(Finset.card (interedges G.Adj i.fst i.snd)) *
          ((1 + ε ^ 5 / 49) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
simp only [and_imp, Prod.forall, mem_product, show A.product B = A ×ˢ B by rfl]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ Finset.product A B = A ×ˢ B
[PROOFSTEP]
rfl
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
⊢ ∀ (a b : Finset α),
    a ∈ A →
      b ∈ B →
        ↑(Finset.card (interedges G.Adj a b)) /
            (↑(Finset.card a) * ↑(Finset.card b) * (↑(Finset.card A) * ↑(Finset.card B))) ≤
          ↑(Finset.card (interedges G.Adj a b)) *
            ((1 + ε ^ 5 / 49) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
intro x y hx hy
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (interedges G.Adj x y)) /
      (↑(Finset.card x) * ↑(Finset.card y) * (↑(Finset.card A) * ↑(Finset.card B))) ≤
    ↑(Finset.card (interedges G.Adj x y)) * ((1 + ε ^ 5 / 49) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))))
[PROOFSTEP]
rw [mul_mul_mul_comm, mul_comm (x.card : ℝ), mul_comm (y.card : ℝ), div_le_iff, mul_assoc]
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (interedges G.Adj x y)) ≤
    ↑(Finset.card (interedges G.Adj x y)) *
      ((1 + ε ^ 5 / 49) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))) *
        (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))))
[PROOFSTEP]
refine' le_mul_of_one_le_right (cast_nonneg _) _
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 1 ≤
    (1 + ε ^ 5 / 49) / (↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))) *
      (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y)))
[PROOFSTEP]
rw [div_mul_eq_mul_div, one_le_div]
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)) ≤
    (1 + ε ^ 5 / 49) * (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y)))
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))
[PROOFSTEP]
refine' le_trans _ (mul_le_mul_of_nonneg_right (m_add_one_div_m_le_one_add hPα hPε hε₁) _)
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)) ≤
    ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) / ↑(Fintype.card α / stepBound (Finset.card P.parts))) ^
        2 *
      (↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y)))
[PROOFSTEP]
rw [sq, mul_mul_mul_comm, mul_comm (_ / (m : ℝ)), mul_comm (_ / (m : ℝ))]
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id)) ≤
    ↑(Finset.card A) * ↑(Finset.card x) *
        ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) /
          ↑(Fintype.card α / stepBound (Finset.card P.parts))) *
      (↑(Finset.card B) * ↑(Finset.card y) *
        ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) /
          ↑(Fintype.card α / stepBound (Finset.card P.parts))))
[PROOFSTEP]
exact
  mul_le_mul (sum_card_subset_chunk_parts_le (by sz_positivity) hA hx)
    (sum_card_subset_chunk_parts_le (by sz_positivity) hB hy) (by positivity) (by positivity)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤ ↑(Finset.card (sup B id))
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤
    ↑(Finset.card A) * ↑(Finset.card x) *
      ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) / ↑(Fintype.card α / stepBound (Finset.card P.parts)))
[PROOFSTEP]
positivity
[GOAL]
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 ≤ ↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))
[PROOFSTEP]
exact_mod_cast _root_.zero_le _
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card (sup A id)) * ↑(Finset.card (sup B id))
[PROOFSTEP]
rw [← cast_mul, cast_pos]
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < Finset.card (sup A id) * Finset.card (sup B id)
[PROOFSTEP]
apply mul_pos
[GOAL]
case h.ha
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < Finset.card (sup A id)
[PROOFSTEP]
rw [Finset.card_pos, sup_eq_biUnion, biUnion_nonempty]
[GOAL]
case h.hb
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < Finset.card (sup B id)
[PROOFSTEP]
rw [Finset.card_pos, sup_eq_biUnion, biUnion_nonempty]
[GOAL]
case h.ha
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ∃ x, x ∈ A ∧ Finset.Nonempty (id x)
[PROOFSTEP]
exact ⟨_, hx, nonempty_of_mem_parts _ (hA hx)⟩
[GOAL]
case h.hb
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ ∃ x, x ∈ B ∧ Finset.Nonempty (id x)
[PROOFSTEP]
exact ⟨_, hy, nonempty_of_mem_parts _ (hB hy)⟩
[GOAL]
case h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card A) * ↑(Finset.card x) * (↑(Finset.card B) * ↑(Finset.card y))
[PROOFSTEP]
refine' mul_pos (mul_pos _ _) (mul_pos _ _)
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card A)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card x)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card B)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_4
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ 0 < ↑(Finset.card y)
[PROOFSTEP]
rw [cast_pos, Finset.card_pos]
[GOAL]
case h.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty A
case h.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty x
case h.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty B
case h.refine'_4
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  (1 + ε ^ 5 / 49) * ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
x y : Finset α
hx : x ∈ A
hy : y ∈ B
⊢ Finset.Nonempty y
[PROOFSTEP]
exacts [⟨_, hx⟩, nonempty_of_mem_parts _ (hA hx), ⟨_, hy⟩, nonempty_of_mem_parts _ (hB hy)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ |(∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) -
        ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id))| ≤
    ε ^ 5 / 49
[PROOFSTEP]
rw [abs_sub_le_iff]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) -
        ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
      ε ^ 5 / 49 ∧
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
        (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (↑(Finset.card A) * ↑(Finset.card B)) ≤
      ε ^ 5 / 49
[PROOFSTEP]
constructor
[GOAL]
case left
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) -
      ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) ≤
    ε ^ 5 / 49
[PROOFSTEP]
rw [sub_le_iff_le_add']
[GOAL]
case left
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) + ε ^ 5 / 49
[PROOFSTEP]
exact sum_density_div_card_le_density_add_eps hPα hPε hε₁ hA hB
[GOAL]
case right
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 49
[PROOFSTEP]
suffices
  (G.edgeDensity (A.biUnion id) (B.biUnion id) : ℝ) -
      (∑ ab in A.product B, (G.edgeDensity ab.1 ab.2 : ℝ)) / (A.card * B.card) ≤
    ε ^ 5 / 50
  by
  apply this.trans
  exact div_le_div_of_le_left (by sz_positivity) (by norm_num) (by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 50
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 49
[PROOFSTEP]
apply this.trans
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 50
⊢ ε ^ 5 / 50 ≤ ε ^ 5 / 49
[PROOFSTEP]
exact div_le_div_of_le_left (by sz_positivity) (by norm_num) (by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 50
⊢ 0 ≤ ε ^ 5
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 50
⊢ 0 < 49
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
this :
  ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 50
⊢ 49 ≤ 50
[PROOFSTEP]
norm_num
[GOAL]
case right
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) -
      (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B)) ≤
    ε ^ 5 / 50
[PROOFSTEP]
rw [sub_le_iff_le_add, ← sub_le_iff_le_add']
[GOAL]
case right
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
A B : Finset (Finset α)
hA : A ⊆ (chunk hP G ε hU).parts
hB : B ⊆ (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G (Finset.biUnion A id) (Finset.biUnion B id)) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product A B, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) / (↑(Finset.card A) * ↑(Finset.card B))
[PROOFSTEP]
apply density_sub_eps_le_sum_density_div_card hPα hPε hA hB
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2
[PROOFSTEP]
obtain hGε | hGε := le_total (G.edgeDensity U V : ℝ) (ε ^ 5 / 50)
[GOAL]
case inl
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2
[PROOFSTEP]
refine' (sub_nonpos_of_le <| (sq_le _ _).trans <| hGε.trans _).trans (sq_nonneg _)
[GOAL]
case inl.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ 0 ≤ ↑(SimpleGraph.edgeDensity G U V)
[PROOFSTEP]
exact_mod_cast G.edgeDensity_nonneg _ _
[GOAL]
case inl.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ ↑(SimpleGraph.edgeDensity G U V) ≤ 1
[PROOFSTEP]
exact_mod_cast G.edgeDensity_le_one _ _
[GOAL]
case inl.refine'_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ ε ^ 5 / 50 ≤ ε ^ 5 / 25
[PROOFSTEP]
exact div_le_div_of_le_left (by sz_positivity) (by norm_num) (by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ 0 ≤ ε ^ 5
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ 0 < 25
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 / 50
⊢ 25 ≤ 50
[PROOFSTEP]
norm_num
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2
[PROOFSTEP]
rw [← sub_nonneg] at hGε 
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2
[PROOFSTEP]
have :
  ↑(G.edgeDensity U V) - ε ^ 5 / ↑50 ≤
    (∑ ab in (chunk hP G ε hU).parts.product (chunk hP G ε hV).parts, (G.edgeDensity ab.1 ab.2 : ℝ)) /
      ↑16 ^ P.parts.card :=
  by
  have rflU := Set.Subset.refl (chunk hP G ε hU).parts.toSet
  have rflV := Set.Subset.refl (chunk hP G ε hV).parts.toSet
  refine' (le_trans _ <| density_sub_eps_le_sum_density_div_card hPα hPε rflU rflV).trans _
  · rw [biUnion_parts, biUnion_parts]
  · rw [card_chunk (m_pos hPα).ne', card_chunk (m_pos hPα).ne', ← cast_mul, ← mul_pow, cast_pow]
    norm_cast
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
⊢ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have rflU := Set.Subset.refl (chunk hP G ε hU).parts.toSet
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
rflU : ↑(chunk hP G ε hU).parts ⊆ ↑(chunk hP G ε hU).parts
⊢ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have rflV := Set.Subset.refl (chunk hP G ε hV).parts.toSet
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
rflU : ↑(chunk hP G ε hU).parts ⊆ ↑(chunk hP G ε hU).parts
rflV : ↑(chunk hP G ε hV).parts ⊆ ↑(chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
refine' (le_trans _ <| density_sub_eps_le_sum_density_div_card hPα hPε rflU rflV).trans _
[GOAL]
case refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
rflU : ↑(chunk hP G ε hU).parts ⊆ ↑(chunk hP G ε hU).parts
rflV : ↑(chunk hP G ε hV).parts ⊆ ↑(chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    ↑(SimpleGraph.edgeDensity G (Finset.biUnion (chunk hP G ε hU).parts id)
          (Finset.biUnion (chunk hP G ε hV).parts id)) -
      ε ^ 5 / 50
[PROOFSTEP]
rw [biUnion_parts, biUnion_parts]
[GOAL]
case refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
rflU : ↑(chunk hP G ε hU).parts ⊆ ↑(chunk hP G ε hU).parts
rflV : ↑(chunk hP G ε hV).parts ⊆ ↑(chunk hP G ε hV).parts
⊢ (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      (↑(Finset.card (chunk hP G ε hU).parts) * ↑(Finset.card (chunk hP G ε hV).parts)) ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
rw [card_chunk (m_pos hPα).ne', card_chunk (m_pos hPα).ne', ← cast_mul, ← mul_pow, cast_pow]
[GOAL]
case refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
rflU : ↑(chunk hP G ε hU).parts ⊆ ↑(chunk hP G ε hU).parts
rflV : ↑(chunk hP G ε hV).parts ⊆ ↑(chunk hP G ε hV).parts
⊢ (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      ↑(4 * 4) ^ Finset.card P.parts ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
norm_cast
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2
[PROOFSTEP]
refine' le_trans _ (pow_le_pow_of_le_left hGε this 2)
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤ (↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50) ^ 2
[PROOFSTEP]
rw [sub_sq, sub_add, sub_le_sub_iff_left]
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ 2 * ↑(SimpleGraph.edgeDensity G U V) * (ε ^ 5 / 50) - (ε ^ 5 / 50) ^ 2 ≤ ε ^ 5 / 25
[PROOFSTEP]
refine' (sub_le_self _ <| sq_nonneg <| ε ^ 5 / 50).trans _
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ 2 * ↑(SimpleGraph.edgeDensity G U V) * (ε ^ 5 / 50) ≤ ε ^ 5 / 25
[PROOFSTEP]
rw [mul_right_comm, mul_div_left_comm, div_eq_mul_inv (ε ^ 5), show (2 : ℝ) / 50 = 25⁻¹ by norm_num]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ 2 / 50 = 25⁻¹
[PROOFSTEP]
norm_num
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ ε ^ 5 * 25⁻¹ * ↑(SimpleGraph.edgeDensity G U V) ≤ ε ^ 5 * 25⁻¹
[PROOFSTEP]
exact mul_le_of_le_one_right (by sz_positivity) (by exact_mod_cast G.edgeDensity_le_one _ _)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ 0 ≤ ε ^ 5 * 25⁻¹
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
hGε✝ : ε ^ 5 / 50 ≤ ↑(SimpleGraph.edgeDensity G U V)
hGε : 0 ≤ ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50
this :
  ↑(SimpleGraph.edgeDensity G U V) - ε ^ 5 / 50 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
      16 ^ Finset.card P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ≤ 1
[PROOFSTEP]
exact_mod_cast G.edgeDensity_le_one _ _
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV' : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ |↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id)) -
        ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))| ≤
    ε / 5
[PROOFSTEP]
convert
  abs_edgeDensity_sub_edgeDensity_le_two_mul G.Adj (biUnion_star_subset_nonuniformWitness hP G ε hU V)
    (biUnion_star_subset_nonuniformWitness hP G ε hV U) (by sz_positivity)
    (one_sub_eps_mul_card_nonuniformWitness_le_card_star hV hUV' hUV hPε hε₁)
    (one_sub_eps_mul_card_nonuniformWitness_le_card_star hU hUV'.symm (fun hVU => hUV hVU.symm) hPε hε₁) using
  1
[GOAL]
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV' : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ 0 ≤ ε / 10
[PROOFSTEP]
sz_positivity
[GOAL]
case h.e'_4
α : Type u_1
inst✝ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV' : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ ε / 5 = 2 * (ε / 10)
[PROOFSTEP]
linarith
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
⊢ 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
have hm : (0 : ℝ) ≤ 1 - (↑m)⁻¹ := sub_nonneg_of_le (inv_le_one <| one_le_m_coe hPα)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
⊢ 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
have hε : 0 ≤ 1 - ε / 10 := sub_nonneg_of_le (div_le_one_of_le (hε₁.trans <| by norm_num) <| by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
⊢ 1 ≤ 10
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
⊢ 0 ≤ 10
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
calc
  4 / 5 * ε = (1 - 1 / 10) * (1 - 9⁻¹) * ε := by norm_num
  _ ≤ (1 - ε / 10) * (1 - (↑m)⁻¹) * ((G.nonuniformWitness ε U V).card / U.card) :=
    (mul_le_mul
      (mul_le_mul (sub_le_sub_left (div_le_div_of_le_of_nonneg hε₁ <| by norm_num) _)
        (sub_le_sub_left
          (inv_le_inv_of_le (by norm_num) <| by
            exact_mod_cast (show 9 ≤ 100 by norm_num).trans (hundred_le_m hPα hPε hε₁))
          _)
        (by norm_num) hε)
      ((le_div_iff' <| (@cast_pos ℝ _ _ _).2 (P.nonempty_of_mem_parts hU).card_pos).2 <|
        G.le_card_nonuniformWitness hunif)
      (by sz_positivity) (by positivity))
  _ = (1 - ε / 10) * (G.nonuniformWitness ε U V).card * ((1 - (↑m)⁻¹) / U.card) := by
    rw [mul_assoc, mul_assoc, mul_div_left_comm]
  _ ≤ ((star hP G ε hU V).biUnion id).card * ((1 - (↑m)⁻¹) / U.card) :=
    (mul_le_mul_of_nonneg_right (one_sub_eps_mul_card_nonuniformWitness_le_card_star hV hUV hunif hPε hε₁)
      (by positivity))
  _ ≤ (star hP G ε hU V).card * (m + 1) * ((1 - (↑m)⁻¹) / U.card) :=
    (mul_le_mul_of_nonneg_right card_biUnion_star_le_m_add_one_card_star_mul (by positivity))
  _ ≤ (star hP G ε hU V).card * (m + ↑1) * ((↑1 - (↑m)⁻¹) / (↑4 ^ P.parts.card * m)) :=
    (mul_le_mul_of_nonneg_left (div_le_div_of_le_left hm (by sz_positivity) <| pow_mul_m_le_card_part hP hU)
      (by positivity))
  _ ≤ (star hP G ε hU V).card / ↑4 ^ P.parts.card :=
    by
    rw [mul_assoc, mul_comm ((4 : ℝ) ^ P.parts.card), ← div_div, ← mul_div_assoc, ← mul_comm_div]
    refine' mul_le_of_le_one_right (by positivity) _
    have hm : (0 : ℝ) < m := by sz_positivity
    rw [mul_div_assoc', div_le_one hm, ← one_div, one_sub_div hm.ne', mul_div_assoc', div_le_iff hm]
    linarith
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 4 / 5 * ε = (1 - 1 / 10) * (1 - 9⁻¹) * ε
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ 10
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 < 9
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 9 ≤ ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
exact_mod_cast (show 9 ≤ 100 by norm_num).trans (hundred_le_m hPα hPε hε₁)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 9 ≤ 100
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ 1 - 9⁻¹
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ ε
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ (1 - ε / 10) * (1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹)
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ (1 - ε / 10) * (1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) *
      (↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) / ↑(Finset.card U)) =
    (1 - ε / 10) * ↑(Finset.card (SimpleGraph.nonuniformWitness G ε U V)) *
      ((1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) / ↑(Finset.card U))
[PROOFSTEP]
rw [mul_assoc, mul_assoc, mul_div_left_comm]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ (1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) / ↑(Finset.card U)
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ (1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) / ↑(Finset.card U)
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 < 4 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ ↑(Finset.card (star hP G ε hU V)) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1)
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ ↑(Finset.card (star hP G ε hU V)) * (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) *
      ((1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) /
        (4 ^ Finset.card P.parts * ↑(Fintype.card α / stepBound (Finset.card P.parts)))) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
rw [mul_assoc, mul_comm ((4 : ℝ) ^ P.parts.card), ← div_div, ← mul_div_assoc, ← mul_comm_div]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
      ((↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) *
        ((1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) /
          ↑(Fintype.card α / stepBound (Finset.card P.parts)))) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
refine' mul_le_of_le_one_right (by positivity) _
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) *
      ((1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) /
        ↑(Fintype.card α / stepBound (Finset.card P.parts))) ≤
    1
[PROOFSTEP]
have hm : (0 : ℝ) < m := by sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
⊢ 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm✝ : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
hm : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
⊢ (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) *
      ((1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹) /
        ↑(Fintype.card α / stepBound (Finset.card P.parts))) ≤
    1
[PROOFSTEP]
rw [mul_div_assoc', div_le_one hm, ← one_div, one_sub_div hm.ne', mul_div_assoc', div_le_iff hm]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUV : U ≠ V
hunif : ¬SimpleGraph.IsUniform G ε U V
hm✝ : 0 ≤ 1 - (↑(Fintype.card α / stepBound (Finset.card P.parts)))⁻¹
hε : 0 ≤ 1 - ε / 10
hm : 0 < ↑(Fintype.card α / stepBound (Finset.card P.parts))
⊢ (↑(Fintype.card α / stepBound (Finset.card P.parts)) + 1) *
      (↑(Fintype.card α / stepBound (Finset.card P.parts)) - 1) ≤
    ↑(Fintype.card α / stepBound (Finset.card P.parts)) * ↑(Fintype.card α / stepBound (Finset.card P.parts))
[PROOFSTEP]
linarith
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ 3 / 4 * ε ≤
    |(∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U))) -
        (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          16 ^ Finset.card P.parts|
[PROOFSTEP]
rw [show (16 : ℝ) = ↑4 ^ 2 by norm_num, pow_right_comm, sq ((4 : ℝ) ^ _)]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ 16 = 4 ^ 2
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ 3 / 4 * ε ≤
    |(∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U))) -
        (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)|
[PROOFSTEP]
set p : ℝ :=
  (∑ ab in (star hP G ε hU V).product (star hP G ε hV U), (G.edgeDensity ab.1 ab.2 : ℝ)) /
    ((star hP G ε hU V).card * (star hP G ε hV U).card)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
⊢ 3 / 4 * ε ≤
    |p -
        (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)|
[PROOFSTEP]
set q : ℝ :=
  (∑ ab in (chunk hP G ε hU).parts.product (chunk hP G ε hV).parts, (G.edgeDensity ab.1 ab.2 : ℝ)) /
    (↑4 ^ P.parts.card * ↑4 ^ P.parts.card)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
change _ ≤ |p - q|
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
set r : ℝ := ↑(G.edgeDensity ((star hP G ε hU V).biUnion id) ((star hP G ε hV U).biUnion id))
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
set s : ℝ := ↑(G.edgeDensity (G.nonuniformWitness ε U V) (G.nonuniformWitness ε V U))
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
set t : ℝ := ↑(G.edgeDensity U V)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hrs : |r - s| ≤ ε / 5 := abs_density_star_sub_density_le_eps hPε hε₁ hUVne hUV
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hst : ε ≤ |s - t| := by exact_mod_cast G.nonuniformWitness_spec hUVne hUV
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
⊢ ε ≤ |s - t|
[PROOFSTEP]
exact_mod_cast G.nonuniformWitness_spec hUVne hUV
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hpr : |p - r| ≤ ε ^ 5 / 49 := average_density_near_total_density hPα hPε hε₁ star_subset_chunk star_subset_chunk
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hqt : |q - t| ≤ ε ^ 5 / 49 :=
  by
  have :=
    average_density_near_total_density hPα hPε hε₁ (Subset.refl (chunk hP G ε hU).parts)
      (Subset.refl (chunk hP G ε hV).parts)
  simp_rw [← sup_eq_biUnion, supParts, card_chunk (m_pos hPα).ne', cast_pow] at this 
  norm_num at this 
  exact this
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
⊢ |q - t| ≤ ε ^ 5 / 49
[PROOFSTEP]
have :=
  average_density_near_total_density hPα hPε hε₁ (Subset.refl (chunk hP G ε hU).parts)
    (Subset.refl (chunk hP G ε hV).parts)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
this :
  |(∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (↑(Finset.card (chunk hP G ε hU).parts) * ↑(Finset.card (chunk hP G ε hV).parts)) -
        ↑(SimpleGraph.edgeDensity G (Finset.biUnion (chunk hP G ε hU).parts id)
            (Finset.biUnion (chunk hP G ε hV).parts id))| ≤
    ε ^ 5 / 49
⊢ |q - t| ≤ ε ^ 5 / 49
[PROOFSTEP]
simp_rw [← sup_eq_biUnion, supParts, card_chunk (m_pos hPα).ne', cast_pow] at this 
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
this :
  |(∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (↑4 ^ Finset.card P.parts * ↑4 ^ Finset.card P.parts) -
        ↑(SimpleGraph.edgeDensity G U V)| ≤
    ε ^ 5 / 49
⊢ |q - t| ≤ ε ^ 5 / 49
[PROOFSTEP]
norm_num at this 
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
this :
  |(∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
          (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts) -
        ↑(SimpleGraph.edgeDensity G U V)| ≤
    ε ^ 5 / 49
⊢ |q - t| ≤ ε ^ 5 / 49
[PROOFSTEP]
exact this
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hε' : ε ^ 5 ≤ ε := by simpa using pow_le_pow_of_le_one (by sz_positivity) hε₁ (show 1 ≤ 5 by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
⊢ ε ^ 5 ≤ ε
[PROOFSTEP]
simpa using pow_le_pow_of_le_one (by sz_positivity) hε₁ (show 1 ≤ 5 by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
⊢ 0 ≤ ε
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
⊢ 1 ≤ 5
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hpr' : |p - r| ≤ ε / 49 := hpr.trans (div_le_div_of_le_of_nonneg hε' <| by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
⊢ 0 ≤ 49
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : |p - r| ≤ ε / 49
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
have hqt' : |q - t| ≤ ε / 49 := hqt.trans (div_le_div_of_le_of_nonneg hε' <| by norm_num)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : |p - r| ≤ ε / 49
⊢ 0 ≤ 49
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : |r - s| ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : |p - r| ≤ ε / 49
hqt' : |q - t| ≤ ε / 49
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
rw [abs_sub_le_iff] at hrs hpr' hqt' 
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hst : ε ≤ |s - t|
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
⊢ 3 / 4 * ε ≤ |p - q|
[PROOFSTEP]
rw [le_abs] at hst ⊢
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hst : ε ≤ s - t ∨ ε ≤ -(s - t)
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
⊢ 3 / 4 * ε ≤ p - q ∨ 3 / 4 * ε ≤ -(p - q)
[PROOFSTEP]
cases hst
[GOAL]
case inl
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
h✝ : ε ≤ s - t
⊢ 3 / 4 * ε ≤ p - q ∨ 3 / 4 * ε ≤ -(p - q)
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
h✝ : ε ≤ -(s - t)
⊢ 3 / 4 * ε ≤ p - q ∨ 3 / 4 * ε ≤ -(p - q)
[PROOFSTEP]
left
[GOAL]
case inl.h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
h✝ : ε ≤ s - t
⊢ 3 / 4 * ε ≤ p - q
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
h✝ : ε ≤ -(s - t)
⊢ 3 / 4 * ε ≤ p - q ∨ 3 / 4 * ε ≤ -(p - q)
[PROOFSTEP]
linarith
[GOAL]
case inr
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
h✝ : ε ≤ -(s - t)
⊢ 3 / 4 * ε ≤ p - q ∨ 3 / 4 * ε ≤ -(p - q)
[PROOFSTEP]
right
[GOAL]
case inr.h
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
p : ℝ :=
  (∑ ab in Finset.product (star hP G ε hU V) (star hP G ε hV U), ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)))
q : ℝ :=
  (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
    (4 ^ Finset.card P.parts * 4 ^ Finset.card P.parts)
r : ℝ := ↑(SimpleGraph.edgeDensity G (Finset.biUnion (star hP G ε hU V) id) (Finset.biUnion (star hP G ε hV U) id))
s : ℝ := ↑(SimpleGraph.edgeDensity G (SimpleGraph.nonuniformWitness G ε U V) (SimpleGraph.nonuniformWitness G ε V U))
t : ℝ := ↑(SimpleGraph.edgeDensity G U V)
hrs : r - s ≤ ε / 5 ∧ s - r ≤ ε / 5
hpr : |p - r| ≤ ε ^ 5 / 49
hqt : |q - t| ≤ ε ^ 5 / 49
hε' : ε ^ 5 ≤ ε
hpr' : p - r ≤ ε / 49 ∧ r - p ≤ ε / 49
hqt' : q - t ≤ ε / 49 ∧ t - q ≤ ε / 49
h✝ : ε ≤ -(s - t)
⊢ 3 / 4 * ε ≤ -(p - q)
[PROOFSTEP]
linarith
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / ↑25 + ε ^ 4 / 3 ≤
    ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2
[PROOFSTEP]
apply add_le_add_left
[GOAL]
case bc
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ ε ^ 4 / 3 ≤
    ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) * ε ^ 2
[PROOFSTEP]
have Ul : 4 / 5 * ε ≤ (star hP G ε hU V).card / _ := eps_le_card_star_div hPα hPε hε₁ hU hV hUVne hUV
[GOAL]
case bc
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
⊢ ε ^ 4 / 3 ≤
    ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) * ε ^ 2
[PROOFSTEP]
have Vl : 4 / 5 * ε ≤ (star hP G ε hV U).card / _ :=
  eps_le_card_star_div hPα hPε hε₁ hV hU hUVne.symm fun h => hUV h.symm
[GOAL]
case bc
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
⊢ ε ^ 4 / 3 ≤
    ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) * ε ^ 2
[PROOFSTEP]
rw [show (16 : ℝ) = ↑4 ^ 2 by norm_num, pow_right_comm, sq ((4 : ℝ) ^ _), ← _root_.div_mul_div_comm, mul_assoc]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
⊢ 16 = 4 ^ 2
[PROOFSTEP]
norm_num
[GOAL]
case bc
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
⊢ ε ^ 4 / 3 ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
        (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts) *
      (9 / 4 ^ 2 * ε ^ 2)
[PROOFSTEP]
have : 0 < ε := by sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
⊢ 0 < ε
[PROOFSTEP]
sz_positivity
[GOAL]
case bc
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
⊢ ε ^ 4 / 3 ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
        (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts) *
      (9 / 4 ^ 2 * ε ^ 2)
[PROOFSTEP]
have UVl := mul_le_mul Ul Vl (by positivity) (by positivity)
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
⊢ 0 ≤ 4 / 5 * ε
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
⊢ 0 ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
[PROOFSTEP]
positivity
[GOAL]
case bc
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
UVl :
  4 / 5 * ε * (4 / 5 * ε) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
      (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts)
⊢ ε ^ 4 / 3 ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
        (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts) *
      (9 / 4 ^ 2 * ε ^ 2)
[PROOFSTEP]
refine' le_trans _ (mul_le_mul_of_nonneg_right UVl _)
[GOAL]
case bc.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
UVl :
  4 / 5 * ε * (4 / 5 * ε) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
      (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts)
⊢ ε ^ 4 / 3 ≤ 4 / 5 * ε * (4 / 5 * ε) * (9 / 4 ^ 2 * ε ^ 2)
[PROOFSTEP]
norm_num
[GOAL]
case bc.refine'_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
UVl :
  4 / 5 * ε * (4 / 5 * ε) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
      (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts)
⊢ ε ^ 4 / 3 ≤ 4 / 5 * ε * (4 / 5 * ε) * (9 / 16 * ε ^ 2)
[PROOFSTEP]
nlinarith
[GOAL]
case bc.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
UVl :
  4 / 5 * ε * (4 / 5 * ε) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
      (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts)
⊢ 0 ≤ 9 / 4 ^ 2 * ε ^ 2
[PROOFSTEP]
norm_num
[GOAL]
case bc.refine'_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
Ul : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts
Vl : 4 / 5 * ε ≤ ↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts
this : 0 < ε
UVl :
  4 / 5 * ε * (4 / 5 * ε) ≤
    ↑(Finset.card (star hP G ε hU V)) / 4 ^ Finset.card P.parts *
      (↑(Finset.card (star hP G ε hV U)) / 4 ^ Finset.card P.parts)
⊢ 0 ≤ ε ^ 2
[PROOFSTEP]
positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have t : (star hP G ε hU V).product (star hP G ε hV U) ⊆ (chunk hP G ε hU).parts.product (chunk hP G ε hV).parts :=
  product_subset_product star_subset_chunk star_subset_chunk
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have hε : 0 ≤ ε := by sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
⊢ 0 ≤ ε
[PROOFSTEP]
sz_positivity
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have sp : ∀ (a b : Finset (Finset α)), a.product b = a ×ˢ b := fun a b => rfl
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have :=
  add_div_le_sum_sq_div_card t (fun x => (G.edgeDensity x.1 x.2 : ℝ)) ((G.edgeDensity U V : ℝ) ^ 2 - ε ^ 5 / ↑25)
    (show 0 ≤ 3 / 4 * ε by linarith) ?_ ?_
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ 0 ≤ 3 / 4 * ε
[PROOFSTEP]
linarith
[GOAL]
case refine_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
this :
  ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (Finset.product (star hP G ε hU V) (star hP G ε hV U))) /
          ↑(Finset.card (Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts)) *
        (3 / 4 * ε) ^ 2 ≤
    (∑ i in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i ^ 2) /
      ↑(Finset.card (Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts))
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
simp_rw [sp, card_product, card_chunk (m_pos hPα).ne', ← mul_pow, cast_pow, mul_pow, div_pow, ← mul_assoc] at this 
[GOAL]
case refine_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
this :
  ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V) * Finset.card (star hP G ε hV U)) / ↑(4 * 4) ^ Finset.card P.parts *
          (3 ^ 2 / 4 ^ 2) *
        ε ^ 2 ≤
    (∑ x in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G x.fst x.snd) ^ 2) /
      ↑(4 * 4) ^ Finset.card P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
norm_num at this 
[GOAL]
case refine_3
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
this :
  ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ x in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G x.fst x.snd) ^ 2) /
      16 ^ Finset.card P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 +
      ↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U)) / 16 ^ Finset.card P.parts * (9 / 16) *
        ε ^ 2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
exact this
[GOAL]
case refine_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ 3 / 4 * ε ≤
    |(∑ i in Finset.product (star hP G ε hU V) (star hP G ε hV U),
            (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i) /
          ↑(Finset.card (Finset.product (star hP G ε hU V) (star hP G ε hV U))) -
        (∑ i in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
            (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i) /
          ↑(Finset.card (Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts))|
[PROOFSTEP]
simp_rw [sp, card_product, card_chunk (m_pos hPα).ne', ← mul_pow]
[GOAL]
case refine_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ 3 / 4 * ε ≤
    |(∑ x in star hP G ε hU V ×ˢ star hP G ε hV U, ↑(SimpleGraph.edgeDensity G x.fst x.snd)) /
          ↑(Finset.card (star hP G ε hU V) * Finset.card (star hP G ε hV U)) -
        (∑ x in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G x.fst x.snd)) /
          ↑((4 * 4) ^ Finset.card P.parts)|
[PROOFSTEP]
norm_num
[GOAL]
case refine_1
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ 3 / 4 * ε ≤
    |(∑ x in star hP G ε hU V ×ˢ star hP G ε hV U, ↑(SimpleGraph.edgeDensity G x.fst x.snd)) /
          (↑(Finset.card (star hP G ε hU V)) * ↑(Finset.card (star hP G ε hV U))) -
        (∑ x in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G x.fst x.snd)) /
          16 ^ Finset.card P.parts|
[PROOFSTEP]
exact edgeDensity_star_not_uniform hPα hPε hε₁ hUVne hUV
[GOAL]
case refine_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ i in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i) /
        ↑(Finset.card (Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts))) ^
      2
[PROOFSTEP]
rw [sp, card_product]
[GOAL]
case refine_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    ((∑ i in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts,
          (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i) /
        ↑(Finset.card (chunk hP G ε hU).parts * Finset.card (chunk hP G ε hV).parts)) ^
      2
[PROOFSTEP]
apply (edgeDensity_chunk_aux hPα hPε hU hV).trans
[GOAL]
case refine_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ ((∑ ab in Finset.product (chunk ?m.2764430 G ε hU).parts (chunk ?m.2764430 G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2 ≤
    ((∑ i in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts,
          (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i) /
        ↑(Finset.card (chunk hP G ε hU).parts * Finset.card (chunk hP G ε hV).parts)) ^
      2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
[PROOFSTEP]
rw [card_chunk (m_pos hPα).ne', card_chunk (m_pos hPα).ne', ← mul_pow]
[GOAL]
case refine_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ ((∑ ab in Finset.product (chunk ?m.2764430 G ε hU).parts (chunk ?m.2764430 G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2 ≤
    ((∑ i in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts,
          (fun x => ↑(SimpleGraph.edgeDensity G x.fst x.snd)) i) /
        ↑((4 * 4) ^ Finset.card P.parts)) ^
      2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
[PROOFSTEP]
norm_num
[GOAL]
case refine_2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ (∑ ab in Finset.product (chunk ?m.2764430 G ε hU).parts (chunk ?m.2764430 G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) ^
        2 /
      (16 ^ Finset.card P.parts) ^ 2 ≤
    (∑ ab in (chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts, ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) ^ 2 /
      (16 ^ Finset.card P.parts) ^ 2
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hε₁ : ε ≤ 1
hU : U ∈ P.parts
hV : V ∈ P.parts
hUVne : U ≠ V
hUV : ¬SimpleGraph.IsUniform G ε U V
t :
  Finset.product (star hP G ε hU V) (star hP G ε hV U) ⊆ Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts
hε : 0 ≤ ε
sp : ∀ (a b : Finset (Finset α)), Finset.product a b = a ×ˢ b
⊢ IsEquipartition P
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
⊢ ↑(SimpleGraph.edgeDensity G U V) ^ 2 - ε ^ 5 / 25 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
apply (edgeDensity_chunk_aux (hP := hP) hPα hPε hU hV).trans
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
⊢ ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
have key : ↑16 ^ P.parts.card = (((chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts).card : ℝ) := by
  rw [card_product, cast_mul, card_chunk (m_pos hPα).ne', card_chunk (m_pos hPα).ne', ← cast_mul, ← mul_pow]; norm_cast
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
⊢ 16 ^ Finset.card P.parts = ↑(Finset.card ((chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts))
[PROOFSTEP]
rw [card_product, cast_mul, card_chunk (m_pos hPα).ne', card_chunk (m_pos hPα).ne', ← cast_mul, ← mul_pow]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
⊢ 16 ^ Finset.card P.parts = ↑((4 * 4) ^ Finset.card P.parts)
[PROOFSTEP]
norm_cast
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
key : 16 ^ Finset.card P.parts = ↑(Finset.card ((chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts))
⊢ ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        16 ^ Finset.card P.parts) ^
      2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      16 ^ Finset.card P.parts
[PROOFSTEP]
simp_rw [key]
[GOAL]
α : Type u_1
inst✝¹ : Fintype α
P : Finpartition univ
hP : IsEquipartition P
G : SimpleGraph α
ε : ℝ
U : Finset α
hU✝ : U ∈ P.parts
V : Finset α
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hPα : Finset.card P.parts * 16 ^ Finset.card P.parts ≤ Fintype.card α
hPε : 100 ≤ 4 ^ Finset.card P.parts * ε ^ 5
hU : U ∈ P.parts
hV : V ∈ P.parts
key : 16 ^ Finset.card P.parts = ↑(Finset.card ((chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts))
⊢ ((∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
          ↑(SimpleGraph.edgeDensity G ab.fst ab.snd)) /
        ↑(Finset.card ((chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts))) ^
      2 ≤
    (∑ ab in Finset.product (chunk hP G ε hU).parts (chunk hP G ε hV).parts,
        ↑(SimpleGraph.edgeDensity G ab.fst ab.snd) ^ 2) /
      ↑(Finset.card ((chunk hP G ε hU).parts ×ˢ (chunk hP G ε hV).parts))
[PROOFSTEP]
convert sum_div_card_sq_le_sum_sq_div_card (α := ℝ)
