Theorem: Behrend.exists_large_sphere
File: Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n✝ d✝ k N : ℕ
x : Fin n✝ → ℕ
n d : ℕ
⊢ ∃ k, ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
state_after: case intro.intro
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
⊢ ∃ k, ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
tactic: obtain ⟨k, -, hk⟩ := exists_large_sphere_aux n d
state_before: case intro.intro
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
⊢ ∃ k, ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
state_after: case intro.intro
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
⊢ ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
tactic: refine ⟨k, ?_⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
⊢ ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
state_after: case intro.intro.inl
α : Type u_1
β : Type u_2
n d✝ k✝ N : ℕ
x : Fin n → ℕ
d k : ℕ
hk : ↑(d ^ 0) / (↑(0 * (d - 1) ^ 2) + 1) ≤ ↑(sphere 0 d k).card
⊢ ↑(d ^ 0) / ↑(0 * d ^ 2) ≤ ↑(sphere 0 d k).card

case intro.intro.inr
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
⊢ ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
tactic: obtain rfl | hn := n.eq_zero_or_pos
state_before: case intro.intro.inr
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
⊢ ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
state_after: case intro.intro.inr.inl
α : Type u_1
β : Type u_2
n✝ d k✝ N : ℕ
x : Fin n✝ → ℕ
n k : ℕ
hn : n > 0
hk : ↑(0 ^ n) / (↑(n * (0 - 1) ^ 2) + 1) ≤ ↑(sphere n 0 k).card
⊢ ↑(0 ^ n) / ↑(n * 0 ^ 2) ≤ ↑(sphere n 0 k).card

case intro.intro.inr.inr
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
tactic: obtain rfl | hd := d.eq_zero_or_pos
state_before: case intro.intro.inr.inr
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ ↑(d ^ n) / ↑(n * d ^ 2) ≤ ↑(sphere n d k).card
state_after: case intro.intro.inr.inr.refine_1
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 0 ≤ ↑(d ^ n)

case intro.intro.inr.inr.refine_2
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 0 < ↑(n * (d - 1) ^ 2) + 1

case intro.intro.inr.inr.refine_3
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ ↑(n * (d - 1) ^ 2) + 1 ≤ ↑(n * d ^ 2)
tactic: refine (div_le_div_of_nonneg_left ?_ ?_ ?_).trans hk
state_before: case intro.intro.inr.inr.refine_3
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ ↑(n * (d - 1) ^ 2) + 1 ≤ ↑(n * d ^ 2)
state_after: case intro.intro.inr.inr.refine_3
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ ↑n * (2 * ↑d - 1)
tactic: simp only [← le_sub_iff_add_le', cast_mul, ← mul_sub, cast_pow, cast_sub hd, sub_sq, one_pow,
    cast_one, mul_one, sub_add, sub_sub_self]
state_before: case intro.intro.inr.inr.refine_3
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ ↑n * (2 * ↑d - 1)
state_after: case intro.intro.inr.inr.refine_3.ha
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ ↑n

case intro.intro.inr.inr.refine_3.hb
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ 2 * ↑d - 1
tactic: apply one_le_mul_of_one_le_of_one_le
state_before: case intro.intro.inr.inr.refine_3.hb
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ 2 * ↑d - 1
state_after: case intro.intro.inr.inr.refine_3.hb
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 + 1 ≤ 2 * ↑d
tactic: rw [_root_.le_sub_iff_add_le]
state_before: case intro.intro.inr.inr.refine_3.hb
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 + 1 ≤ 2 * ↑d
state_after: case intro.intro.inr.inr.refine_3.hb
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ d
tactic: norm_num
state_before: case intro.intro.inr.inr.refine_3.hb
α : Type u_1
β : Type u_2
n✝ d✝ k✝ N : ℕ
x : Fin n✝ → ℕ
n d k : ℕ
hk : ↑(d ^ n) / (↑(n * (d - 1) ^ 2) + 1) ≤ ↑(sphere n d k).card
hn : n > 0
hd : d > 0
⊢ 1 ≤ d
state_after: no goals
tactic: exact one_le_cast.2 hd