theorem equalWeights_maximize_K (_hJ : 2 ≤ J) {ρ : ℝ} (_hρ : ρ < 1)
{a : Fin J → ℝ} (_ha_pos : ∀ j, 0 < a j) (_ha_sum : ∑ j : Fin J, a j = 1) :
generalCurvatureK J ρ a ≤ curvatureK J ρ := by
-- K(ρ,a) = (1-ρ)(1-H) ≤ (1-ρ)(1-1/J) = K because H ≥ 1/J
-- By Cauchy-Schwarz: (Σ aⱼ)² ≤ J · Σ aⱼ², so 1 ≤ J·H, i.e. H ≥ 1/J.
simp only [generalCurvatureK, curvatureK]
have hJne : (↑J : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr (by omega)
have hJpos : (0 : ℝ) < ↑J := by exact_mod_cast (by omega : 0 < J)
have h1ρ : 0 < 1 - ρ := by linarith
-- Cauchy-Schwarz: (Σ aⱼ)² ≤ card · Σ aⱼ²
have cs := sq_sum_le_card_mul_sum_sq (s := Finset.univ) (f := a)
rw [Finset.card_univ, Fintype.card_fin, _ha_sum] at cs
-- cs : 1 ^ 2 ≤ ↑J * Σ aⱼ², i.e. 1 ≤ J * Σ aⱼ²
simp only [one_pow] at cs
-- Need: (1-ρ)(1 - Σaⱼ²) ≤ (1-ρ)(J-1)/J
-- Suffices: 1 - Σaⱼ² ≤ (J-1)/J = 1 - 1/J
-- i.e., 1/J ≤ Σaⱼ²
-- From cs: 1 ≤ J * Σaⱼ², so 1/J ≤ Σaⱼ²
-- Goal: (1-ρ)*(1 - Σaⱼ²) ≤ (1-ρ)*(J-1)/J
-- Rewrite RHS as (1-ρ)*((J-1)/J)
have goal_rw : (1 - ρ) * (↑J - 1) / ↑J = (1 - ρ) * ((↑J - 1) / ↑J) := by ring
rw [goal_rw]
apply mul_le_mul_of_nonneg_left _ (le_of_lt h1ρ)
-- Need: 1 - Σaⱼ² ≤ (J-1)/J = 1 - 1/J, i.e. 1/J ≤ Σaⱼ²
-- From cs: 1 ≤ J * Σaⱼ², so Σaⱼ² ≥ 1/J
-- Need: 1 - Σaⱼ² ≤ (J-1)/J
rw [sub_div, div_self hJne]
-- Goal: 1 - Σaⱼ² ≤ 1 - 1/J, i.e. 1/J ≤ Σaⱼ²
-- 1/J ≤ Σaⱼ² follows from cs: 1 ≤ J*Σaⱼ²
have h1J : 1 / (↑J : ℝ) ≤ ∑ j : Fin J, a j ^ 2 := by
rw [div_le_iff₀ hJpos]
linarith [mul_comm (↑J : ℝ) (∑ i : Fin J, a i ^ 2)]
linarithGeneral-weight CES results (Paper 1, Section 10):