Theorem: SzemerediRegularity.card_increment
File: Mathlib/Combinatorics/SimpleGraph/Regularity/Increment.lean

tactic: have hPα' : stepBound P.parts.card ≤ card α :=
  (mul_le_mul_left' (pow_le_pow_left' (by norm_num) _) _).trans hPα
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
⊢ (increment hP G ε).parts.card = stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
⊢ (increment hP G ε).parts.card = stepBound P.parts.card

tactic: have hPpos : 0 < stepBound P.parts.card := stepBound_pos (nonempty_of_not_uniform hPG).card_pos
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
⊢ (increment hP G ε).parts.card = stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (increment hP G ε).parts.card = stepBound P.parts.card

tactic: rw [increment, card_bind]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (increment hP G ε).parts.card = stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∑ A ∈ P.parts.attach, (chunk hP G ε ⋯).parts.card = stepBound P.parts.card

tactic: simp_rw [chunk, apply_dite Finpartition.parts, apply_dite card, sum_dite]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∑ A ∈ P.parts.attach, (chunk hP G ε ⋯).parts.card = stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∑
        x ∈
          (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
              P.parts.attach).attach,
        (equitabilise ⋯).parts.card +
      ∑
        x ∈
          (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
              P.parts.attach).attach,
        (equitabilise ⋯).parts.card =
    stepBound P.parts.card

tactic: rw [sum_const_nat, sum_const_nat, card_attach, card_attach]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∑
        x ∈
          (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
              P.parts.attach).attach,
        (equitabilise ⋯).parts.card +
      ∑
        x ∈
          (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
              P.parts.attach).attach,
        (equitabilise ⋯).parts.card =
    stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16183 +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16222 =
    stepBound P.parts.card

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16222

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16183

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

tactic: rotate_left
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16183 +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16222 =
    stepBound P.parts.card

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16222

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16183

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16222

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16183

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16183 +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16222 =
    stepBound P.parts.card

tactic: any_goals exact fun x hx => card_parts_equitabilise _ _ (Nat.div_pos hPα' hPpos).ne'
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16222

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16183

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ℕ

α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16183 +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        ?m.16222 =
    stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        (4 ^ P.parts.card - (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card) +
          (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card)) +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        (4 ^ P.parts.card - (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card + 1) +
          (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card + 1)) =
    stepBound P.parts.card

tactic: rw [Nat.sub_add_cancel a_add_one_le_four_pow_parts_card,
  Nat.sub_add_cancel ((Nat.le_succ _).trans a_add_one_le_four_pow_parts_card), ← add_mul]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        (4 ^ P.parts.card - (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card) +
          (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card)) +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card *
        (4 ^ P.parts.card - (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card + 1) +
          (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card + 1)) =
    stepBound P.parts.card
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ((filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card +
        (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card) *
      4 ^ P.parts.card =
    stepBound P.parts.card

tactic: congr
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ((filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card +
        (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
            P.parts.attach).card) *
      4 ^ P.parts.card =
    stepBound P.parts.card
state_after: case e_a
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).card +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).card =
    P.parts.card

tactic: rw [filter_card_add_filter_neg_card_eq_card, card_attach]
state_before: case e_a
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).card +
      (filter (fun x => ¬(↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).card =
    P.parts.card
state_after: no goals

tactic: norm_num
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
⊢ 4 ≤ 16
state_after: no goals

tactic: exact fun x hx => card_parts_equitabilise _ _ (Nat.div_pos hPα' hPpos).ne'
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
P : Finpartition univ
hP : P.IsEquipartition
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : ℝ
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPG : ¬P.IsUniform G ε
hPα' : stepBound P.parts.card ≤ Fintype.card α
hPpos : 0 < stepBound P.parts.card
⊢ ∀
    x ∈
      (filter (fun x => (↑x).card = m * 4 ^ P.parts.card + (Fintype.card α / P.parts.card - m * 4 ^ P.parts.card))
          P.parts.attach).attach,
    (equitabilise ⋯).parts.card = ?m.16183
state_after: no goals