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

tactic: by_cases hp' : p = ∞
state_before: α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: filter_upwards [ae_bdd_liminf_atTop_rpow_of_snorm_bdd hfmeas hbdd] with x hx
state_before: case neg
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: have hppos : 0 < p.toReal := ENNReal.toReal_pos hp hp'
state_before: case h
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop < ⊤
⊢ liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: have :
  liminf (fun n => (‖f n x‖₊ : ℝ≥0∞) ^ p.toReal) atTop =
    liminf (fun n => (‖f n x‖₊ : ℝ≥0∞)) atTop ^ p.toReal := by
  change
    liminf (fun n => ENNReal.orderIsoRpow p.toReal hppos (‖f n x‖₊ : ℝ≥0∞)) atTop =
      ENNReal.orderIsoRpow p.toReal hppos (liminf (fun n => (‖f n x‖₊ : ℝ≥0∞)) atTop)
  refine' (OrderIso.liminf_apply (ENNReal.orderIsoRpow p.toReal _) _ _ _ _).symm <;>
    isBoundedDefault
state_before: case h
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop < ⊤
hppos : 0 < ENNReal.toReal p
⊢ liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: rw [this] at hx
state_before: case h
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop < ⊤
hppos : 0 < ENNReal.toReal p
this : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop = liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p
⊢ liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: rw [← ENNReal.rpow_one (liminf (fun n => ‖f n x‖₊) atTop), ← mul_inv_cancel hppos.ne.symm,
  ENNReal.rpow_mul]
state_before: case h
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p < ⊤
hppos : 0 < ENNReal.toReal p
this : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop = liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p
⊢ liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: exact ENNReal.rpow_lt_top_of_nonneg (inv_nonneg.2 hppos.le) hx.ne
state_before: case h
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p < ⊤
hppos : 0 < ENNReal.toReal p
this : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop = liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p
⊢ (liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p) ^ (ENNReal.toReal p)⁻¹ < ⊤

tactic: subst hp'
state_before: case pos
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : p = ⊤
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: simp_rw [snorm_exponent_top] at hbdd
state_before: case pos
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hp : ⊤ ≠ 0
hbdd : ∀ (n : ℕ), snorm (f n) ⊤ μ ≤ ↑R
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: have : ∀ n, ∀ᵐ x ∂μ, (‖f n x‖₊ : ℝ≥0∞) < R + 1 := fun n =>
  ae_lt_of_essSup_lt
    (lt_of_le_of_lt (hbdd n) <| ENNReal.lt_add_right ENNReal.coe_ne_top one_ne_zero)
state_before: case pos
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hp : ⊤ ≠ 0
hbdd : ∀ (n : ℕ), snormEssSup (f n) μ ≤ ↑R
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: rw [← ae_all_iff] at this
state_before: case pos
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hp : ⊤ ≠ 0
hbdd : ∀ (n : ℕ), snormEssSup (f n) μ ≤ ↑R
this : ∀ (n : ℕ), ∀ᵐ (x : α) ∂μ, ↑‖f n x‖₊ < ↑R + 1
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: filter_upwards [this]with x hx using lt_of_le_of_lt
    (liminf_le_of_frequently_le' <| frequently_of_forall fun n => (hx n).le)
    (ENNReal.add_lt_top.2 ⟨ENNReal.coe_lt_top, ENNReal.one_lt_top⟩)
state_before: case pos
α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hp : ⊤ ≠ 0
hbdd : ∀ (n : ℕ), snormEssSup (f n) μ ≤ ↑R
this : ∀ᵐ (a : α) ∂μ, ∀ (i : ℕ), ↑‖f i a‖₊ < ↑R + 1
⊢ ∀ᵐ (x : α) ∂μ, liminf (fun n => ↑‖f n x‖₊) atTop < ⊤

tactic: change
  liminf (fun n => ENNReal.orderIsoRpow p.toReal hppos (‖f n x‖₊ : ℝ≥0∞)) atTop =
    ENNReal.orderIsoRpow p.toReal hppos (liminf (fun n => (‖f n x‖₊ : ℝ≥0∞)) atTop)
state_before: α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop < ⊤
hppos : 0 < ENNReal.toReal p
⊢ liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop = liminf (fun n => ↑‖f n x‖₊) atTop ^ ENNReal.toReal p

tactic: refine' (OrderIso.liminf_apply (ENNReal.orderIsoRpow p.toReal _) _ _ _ _).symm <;>
  isBoundedDefault
state_before: α : Type u_1
E : Type u_2
F : Type ?u.6376469
G : Type ?u.6376472
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedAddCommGroup G
inst✝¹ : MeasurableSpace E
inst✝ : OpensMeasurableSpace E
R : ℝ≥0
p : ℝ≥0∞
hp : p ≠ 0
f : ℕ → α → E
hfmeas : ∀ (n : ℕ), Measurable (f n)
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
hp' : ¬p = ⊤
x : α
hx : liminf (fun n => ↑‖f n x‖₊ ^ ENNReal.toReal p) atTop < ⊤
hppos : 0 < ENNReal.toReal p
⊢ liminf (fun n => ↑(orderIsoRpow (ENNReal.toReal p) hppos) ↑‖f n x‖₊) atTop =
    ↑(orderIsoRpow (ENNReal.toReal p) hppos) (liminf (fun n => ↑‖f n x‖₊) atTop)