Theorem: MeasureTheory.snorm_norm_rpow
File: Mathlib/MeasureTheory/Function/LpSeminorm.lean

tactic: by_cases h0 : p = 0
state_before: α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
⊢ snorm (fun x => ‖f x‖ ^ q) p μ = snorm f (p * ENNReal.ofReal q) μ ^ q

tactic: by_cases hp_top : p = ∞
state_before: case neg
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
⊢ snorm (fun x => ‖f x‖ ^ q) p μ = snorm f (p * ENNReal.ofReal q) μ ^ q

tactic: rw [snorm_eq_snorm' h0 hp_top, snorm_eq_snorm' _ _]
state_before: case neg
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ snorm (fun x => ‖f x‖ ^ q) p μ = snorm f (p * ENNReal.ofReal q) μ ^ q

tactic: swap
state_before: case neg
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ snorm' (fun x => ‖f x‖ ^ q) (ENNReal.toReal p) μ = snorm' f (ENNReal.toReal (p * ENNReal.ofReal q)) μ ^ q

α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ p * ENNReal.ofReal q ≠ 0

α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ p * ENNReal.ofReal q ≠ ⊤

tactic: swap
state_before: case neg
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ snorm' (fun x => ‖f x‖ ^ q) (ENNReal.toReal p) μ = snorm' f (ENNReal.toReal (p * ENNReal.ofReal q)) μ ^ q

α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ p * ENNReal.ofReal q ≠ ⊤

tactic: rw [ENNReal.toReal_mul, ENNReal.toReal_ofReal hq_pos.le]
state_before: case neg
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ snorm' (fun x => ‖f x‖ ^ q) (ENNReal.toReal p) μ = snorm' f (ENNReal.toReal (p * ENNReal.ofReal q)) μ ^ q

tactic: exact snorm'_norm_rpow f p.toReal q hq_pos
state_before: case neg
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ snorm' (fun x => ‖f x‖ ^ q) (ENNReal.toReal p) μ = snorm' f (ENNReal.toReal p * q) μ ^ q

tactic: simp [h0, ENNReal.zero_rpow_of_pos hq_pos]
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : p = 0
⊢ snorm (fun x => ‖f x‖ ^ q) p μ = snorm f (p * ENNReal.ofReal q) μ ^ q

tactic: simp only [hp_top, snorm_exponent_top, ENNReal.top_mul', hq_pos.not_le, ENNReal.ofReal_eq_zero,
  if_false, snorm_exponent_top, snormEssSup]
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
⊢ snorm (fun x => ‖f x‖ ^ q) p μ = snorm f (p * ENNReal.ofReal q) μ ^ q

tactic: have h_rpow :
  essSup (fun x : α => (‖‖f x‖ ^ q‖₊ : ℝ≥0∞)) μ =
    essSup (fun x : α => (‖f x‖₊ : ℝ≥0∞) ^ q) μ := by
  congr
  ext1 x
  conv_rhs => rw [← nnnorm_norm]
  rw [ENNReal.coe_rpow_of_nonneg _ hq_pos.le, ENNReal.coe_eq_coe]
  ext
  push_cast
  rw [Real.norm_rpow_of_nonneg (norm_nonneg _)]
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
⊢ essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊) μ ^ q

tactic: rw [h_rpow]
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
h_rpow : essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊ ^ q) μ
⊢ essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊) μ ^ q

tactic: have h_rpow_mono := ENNReal.strictMono_rpow_of_pos hq_pos
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
h_rpow : essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊ ^ q) μ
⊢ essSup (fun x => ↑‖f x‖₊ ^ q) μ = essSup (fun x => ↑‖f x‖₊) μ ^ q

tactic: have h_rpow_surj := (ENNReal.rpow_left_bijective hq_pos.ne.symm).2
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
h_rpow : essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊ ^ q) μ
h_rpow_mono : StrictMono fun x => x ^ q
⊢ essSup (fun x => ↑‖f x‖₊ ^ q) μ = essSup (fun x => ↑‖f x‖₊) μ ^ q

tactic: let iso := h_rpow_mono.orderIsoOfSurjective _ h_rpow_surj
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
h_rpow : essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊ ^ q) μ
h_rpow_mono : StrictMono fun x => x ^ q
h_rpow_surj : Function.Surjective fun y => y ^ q
⊢ essSup (fun x => ↑‖f x‖₊ ^ q) μ = essSup (fun x => ↑‖f x‖₊) μ ^ q

tactic: exact (iso.essSup_apply (fun x => (‖f x‖₊ : ℝ≥0∞)) μ).symm
state_before: case pos
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
h_rpow : essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊ ^ q) μ
h_rpow_mono : StrictMono fun x => x ^ q
h_rpow_surj : Function.Surjective fun y => y ^ q
iso : ℝ≥0∞ ≃o ℝ≥0∞ := StrictMono.orderIsoOfSurjective (fun x => x ^ q) h_rpow_mono h_rpow_surj
⊢ essSup (fun x => ↑‖f x‖₊ ^ q) μ = essSup (fun x => ↑‖f x‖₊) μ ^ q

tactic: congr
state_before: α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
⊢ essSup (fun x => ↑‖‖f x‖ ^ q‖₊) μ = essSup (fun x => ↑‖f x‖₊ ^ q) μ

tactic: ext1 x
state_before: case e_f
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
⊢ (fun x => ↑‖‖f x‖ ^ q‖₊) = fun x => ↑‖f x‖₊ ^ q

tactic: conv_rhs => rw [← nnnorm_norm]
state_before: case e_f.h
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
x : α
⊢ ↑‖‖f x‖ ^ q‖₊ = ↑‖f x‖₊ ^ q

tactic: rw [ENNReal.coe_rpow_of_nonneg _ hq_pos.le, ENNReal.coe_eq_coe]
state_before: case e_f.h
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
x : α
⊢ ↑‖‖f x‖ ^ q‖₊ = ↑‖‖f x‖‖₊ ^ q

tactic: ext
state_before: case e_f.h
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
x : α
⊢ ‖‖f x‖ ^ q‖₊ = ‖‖f x‖‖₊ ^ q

tactic: push_cast
state_before: case e_f.h.a
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
x : α
⊢ ↑‖‖f x‖ ^ q‖₊ = ↑(‖‖f x‖‖₊ ^ q)

tactic: rw [Real.norm_rpow_of_nonneg (norm_nonneg _)]
state_before: case e_f.h.a
α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : p = ⊤
x : α
⊢ ‖‖f x‖ ^ q‖ = ‖‖f x‖‖ ^ q

tactic: refine' mul_ne_zero h0 _
state_before: α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ p * ENNReal.ofReal q ≠ 0

tactic: rwa [Ne.def, ENNReal.ofReal_eq_zero, not_le]
state_before: α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ ENNReal.ofReal q ≠ 0

tactic: exact ENNReal.mul_ne_top hp_top ENNReal.ofReal_ne_top
state_before: α : Type u_1
E : Type ?u.1675097
F : Type u_2
G : Type ?u.1675103
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
hq_pos : 0 < q
h0 : ¬p = 0
hp_top : ¬p = ⊤
⊢ p * ENNReal.ofReal q ≠ ⊤