Theorem: Real.harm_mean_le_geom_mean
File: Mathlib/Analysis/MeanInequalities.lean

tactic: have := harm_mean_le_geom_mean_weighted s (fun i => (w i) / ∑ i in s, w i) z hs ?_ ?_ hz
state_before: ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ (∑ i ∈ s, w i) / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ (∑ i ∈ s, w i)⁻¹
state_after: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
this : (∑ i ∈ s, (fun i => w i / ∑ i ∈ s, w i) i / z i)⁻¹ ≤ ∏ i ∈ s, z i ^ (fun i => w i / ∑ i ∈ s, w i) i
⊢ (∑ i ∈ s, w i) / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ (∑ i ∈ s, w i)⁻¹

case refine_1
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ ∀ i ∈ s, 0 < (fun i => w i / ∑ i ∈ s, w i) i

case refine_2
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ ∑ i ∈ s, (fun i => w i / ∑ i ∈ s, w i) i = 1

tactic: simp only at this
state_before: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
this : (∑ i ∈ s, (fun i => w i / ∑ i ∈ s, w i) i / z i)⁻¹ ≤ ∏ i ∈ s, z i ^ (fun i => w i / ∑ i ∈ s, w i) i
⊢ (∑ i ∈ s, w i) / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ (∑ i ∈ s, w i)⁻¹
state_after: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
this : (∑ x ∈ s, (w x / ∑ i ∈ s, w i) / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / ∑ i ∈ s, w i)
⊢ (∑ i ∈ s, w i) / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ (∑ i ∈ s, w i)⁻¹

tactic: set n := ∑ i in s, w i
state_before: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
this : (∑ x ∈ s, (w x / ∑ i ∈ s, w i) / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / ∑ i ∈ s, w i)
⊢ (∑ i ∈ s, w i) / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ (∑ i ∈ s, w i)⁻¹
state_after: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ n / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ n⁻¹

tactic: nth_rw 1 [div_eq_mul_inv, (show n = (n⁻¹)⁻¹ by norm_num), ← mul_inv, Finset.mul_sum _ _ n⁻¹]
state_before: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ n / ∑ i ∈ s, w i / z i ≤ (∏ i ∈ s, z i ^ w i) ^ n⁻¹
state_after: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ (∑ i ∈ s, n⁻¹ * (w i / z i))⁻¹ ≤ (∏ i ∈ s, z i ^ w i) ^ n⁻¹

tactic: simp_rw [inv_mul_eq_div n ((w _)/(z _)), div_right_comm _ _ n]
state_before: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ (∑ i ∈ s, n⁻¹ * (w i / z i))⁻¹ ≤ (∏ i ∈ s, z i ^ w i) ^ n⁻¹
state_after: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ (∑ x ∈ s, w x / n / z x)⁻¹ ≤ (∏ i ∈ s, z i ^ w i) ^ n⁻¹

tactic: convert this
state_before: case refine_3
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ (∑ x ∈ s, w x / n / z x)⁻¹ ≤ (∏ i ∈ s, z i ^ w i) ^ n⁻¹
state_after: case h.e'_4
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ (∏ i ∈ s, z i ^ w i) ^ n⁻¹ = ∏ x ∈ s, z x ^ (w x / n)

tactic: rw [← Real.finset_prod_rpow s _ (fun i hi ↦ Real.rpow_nonneg (le_of_lt <| hz i hi) _)]
state_before: case h.e'_4
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ (∏ i ∈ s, z i ^ w i) ^ n⁻¹ = ∏ x ∈ s, z x ^ (w x / n)
state_after: case h.e'_4
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ ∏ i ∈ s, (z i ^ w i) ^ n⁻¹ = ∏ x ∈ s, z x ^ (w x / n)

tactic: refine Finset.prod_congr rfl (fun i hi => ?_)
state_before: case h.e'_4
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ ∏ i ∈ s, (z i ^ w i) ^ n⁻¹ = ∏ x ∈ s, z x ^ (w x / n)
state_after: case h.e'_4
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
i : ι
hi : i ∈ s
⊢ (z i ^ w i) ^ n⁻¹ = z i ^ (w i / n)

tactic: rw [← Real.rpow_mul (le_of_lt <| hz i hi) (w _) n⁻¹, div_eq_mul_inv (w _) n]
state_before: case h.e'_4
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
i : ι
hi : i ∈ s
⊢ (z i ^ w i) ^ n⁻¹ = z i ^ (w i / n)
state_after: no goals

tactic: norm_num
state_before: ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hz : ∀ i ∈ s, 0 < z i
n : ℝ := ∑ i ∈ s, w i
hw' : 0 < n
this : (∑ x ∈ s, w x / n / z x)⁻¹ ≤ ∏ x ∈ s, z x ^ (w x / n)
⊢ n = n⁻¹⁻¹
state_after: no goals

tactic: exact fun i hi ↦ div_pos (hw i hi) hw'
state_before: case refine_1
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ ∀ i ∈ s, 0 < (fun i => w i / ∑ i ∈ s, w i) i
state_after: no goals

tactic: simp_rw [div_eq_mul_inv (w _) (∑ i in s, w i), ← Finset.sum_mul _ _ (∑ i in s, w i)⁻¹]
state_before: case refine_2
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ ∑ i ∈ s, (fun i => w i / ∑ i ∈ s, w i) i = 1
state_after: case refine_2
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ (∑ i ∈ s, w i) * (∑ i ∈ s, w i)⁻¹ = 1

tactic: exact mul_inv_cancel hw'.ne'
state_before: case refine_2
ι✝ : Type u
s✝ : Finset ι✝
ι : Type u_1
s : Finset ι
hs : s.Nonempty
w z : ι → ℝ
hw : ∀ i ∈ s, 0 < w i
hw' : 0 < ∑ i ∈ s, w i
hz : ∀ i ∈ s, 0 < z i
⊢ (∑ i ∈ s, w i) * (∑ i ∈ s, w i)⁻¹ = 1
state_after: no goals