Theorem: MeasureTheory.snorm_le_snorm_mul_rpow_measure_univ
File: Mathlib/MeasureTheory/Function/LpSeminorm/CompareExp.lean

tactic: by_cases hp0 : p = 0
state_before: α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p = 0
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : ¬p = 0
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: rw [← Ne] at hp0
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : ¬p = 0
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: have hp0_lt : 0 < p := lt_of_le_of_ne (zero_le _) hp0.symm
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: have hq0_lt : 0 < q := lt_of_lt_of_le hp0_lt hpq
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: by_cases hq_top : q = ∞
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: have hp_lt_top : p < ∞ := hpq.trans_lt (lt_top_iff_ne_top.mpr hq_top)
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: have hp_pos : 0 < p.toReal := ENNReal.toReal_pos hp0_lt.ne' hp_lt_top.ne
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: rw [snorm_eq_snorm' hp0_lt.ne.symm hp_lt_top.ne, snorm_eq_snorm' hq0_lt.ne.symm hq_top]
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
⊢ snorm' f p.toReal μ ≤ snorm' f q.toReal μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: have hpq_real : p.toReal ≤ q.toReal := by rwa [ENNReal.toReal_le_toReal hp_lt_top.ne hq_top]
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
⊢ snorm' f p.toReal μ ≤ snorm' f q.toReal μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
hpq_real : p.toReal ≤ q.toReal
⊢ snorm' f p.toReal μ ≤ snorm' f q.toReal μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)

tactic: exact snorm'_le_snorm'_mul_rpow_measure_univ hp_pos hpq_real hf
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
hpq_real : p.toReal ≤ q.toReal
⊢ snorm' f p.toReal μ ≤ snorm' f q.toReal μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: no goals

tactic: simp [hp0, zero_le]
state_before: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p = 0
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: no goals

tactic: simp only [hq_top, _root_.div_zero, one_div, ENNReal.top_toReal, sub_zero, snorm_exponent_top,
  GroupWithZero.inv_zero]
state_before: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
⊢ snorm f p μ ≤ snorm f q μ * μ Set.univ ^ (1 / p.toReal - 1 / q.toReal)
state_after: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
⊢ snorm f p μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹

tactic: by_cases hp_top : p = ∞
state_before: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
⊢ snorm f p μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹
state_after: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : p = ⊤
⊢ snorm f p μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹

case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
⊢ snorm f p μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹

tactic: rw [snorm_eq_snorm' hp0 hp_top]
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
⊢ snorm f p μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
⊢ snorm' f p.toReal μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹

tactic: have hp_pos : 0 < p.toReal := ENNReal.toReal_pos hp0_lt.ne' hp_top
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
⊢ snorm' f p.toReal μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
hp_pos : 0 < p.toReal
⊢ snorm' f p.toReal μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹

tactic: refine (snorm'_le_snormEssSup_mul_rpow_measure_univ hp_pos).trans (le_of_eq ?_)
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
hp_pos : 0 < p.toReal
⊢ snorm' f p.toReal μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹
state_after: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
hp_pos : 0 < p.toReal
⊢ snormEssSup f μ * μ Set.univ ^ (1 / p.toReal) = snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹

tactic: congr
state_before: case neg
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
hp_pos : 0 < p.toReal
⊢ snormEssSup f μ * μ Set.univ ^ (1 / p.toReal) = snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹
state_after: case neg.e_a.e_a
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
hp_pos : 0 < p.toReal
⊢ 1 / p.toReal = p.toReal⁻¹

tactic: exact one_div _
state_before: case neg.e_a.e_a
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : ¬p = ⊤
hp_pos : 0 < p.toReal
⊢ 1 / p.toReal = p.toReal⁻¹
state_after: no goals

tactic: simp only [hp_top, ENNReal.rpow_zero, mul_one, ENNReal.top_toReal, sub_zero,
  GroupWithZero.inv_zero, snorm_exponent_top]
state_before: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : p = ⊤
⊢ snorm f p μ ≤ snormEssSup f μ * μ Set.univ ^ p.toReal⁻¹
state_after: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : p = ⊤
⊢ snormEssSup f μ ≤ snormEssSup f μ

tactic: exact le_rfl
state_before: case pos
α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : q = ⊤
hp_top : p = ⊤
⊢ snormEssSup f μ ≤ snormEssSup f μ
state_after: no goals

tactic: rwa [ENNReal.toReal_le_toReal hp_lt_top.ne hq_top]
state_before: α : Type u_1
E : Type u_2
m : MeasurableSpace α
inst✝ : NormedAddCommGroup E
μ : Measure α
f : α → E
p q : ℝ≥0∞
hpq : p ≤ q
hf : AEStronglyMeasurable f μ
hp0 : p ≠ 0
hp0_lt : 0 < p
hq0_lt : 0 < q
hq_top : ¬q = ⊤
hp_lt_top : p < ⊤
hp_pos : 0 < p.toReal
⊢ p.toReal ≤ q.toReal
state_after: no goals