[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
by_cases ha_zero : a = 0
[GOAL]
case pos
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : a = 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
simp_rw [ha_zero, zero_mul, ← ENNReal.bot_eq_zero]
[GOAL]
case pos
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : a = 0
⊢ limsup (fun x => ⊥) f = ⊥
[PROOFSTEP]
exact limsup_const_bot
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
let g := fun x : ℝ≥0∞ => a * x
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hg_bij : Function.Bijective g :=
  Function.bijective_iff_has_inverse.mpr
    ⟨fun x => a⁻¹ * x,
      ⟨fun x => by simp [← mul_assoc, ENNReal.inv_mul_cancel ha_zero ha_top], fun x => by
        simp [← mul_assoc, ENNReal.mul_inv_cancel ha_zero ha_top]⟩⟩
[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
x : ℝ≥0∞
⊢ (fun x => a⁻¹ * x) (g x) = x
[PROOFSTEP]
simp [← mul_assoc, ENNReal.inv_mul_cancel ha_zero ha_top]
[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
x : ℝ≥0∞
⊢ g ((fun x => a⁻¹ * x) x) = x
[PROOFSTEP]
simp [← mul_assoc, ENNReal.mul_inv_cancel ha_zero ha_top]
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hg_mono : StrictMono g :=
  Monotone.strictMono_of_injective (fun _ _ _ => by rwa [mul_le_mul_left ha_zero ha_top]) hg_bij.1
[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
x✝² x✝¹ : ℝ≥0∞
x✝ : x✝² ≤ x✝¹
⊢ g x✝² ≤ g x✝¹
[PROOFSTEP]
rwa [mul_le_mul_left ha_zero ha_top]
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
hg_mono : StrictMono g
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
let g_iso := StrictMono.orderIsoOfSurjective g hg_mono hg_bij.2
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
hg_mono : StrictMono g
g_iso : ℝ≥0∞ ≃o ℝ≥0∞ := StrictMono.orderIsoOfSurjective g hg_mono (_ : Function.Surjective g)
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
exact (OrderIso.limsup_apply g_iso).symm
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
by_cases ha_top : a ≠ ⊤
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
exact limsup_const_mul_of_ne_top ha_top
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : ¬a ≠ ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
push_neg at ha_top 
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
by_cases hu : u =ᶠ[f] 0
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hau : (a * u ·) =ᶠ[f] 0 := hu.mono fun x hx => by simp [hx]
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
x : α
hx : u x = OfNat.ofNat 0 x
⊢ (fun x => a * u x) x = OfNat.ofNat 0 x
[PROOFSTEP]
simp [hx]
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
hau : (fun x => a * u x) =ᶠ[f] 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
simp only [limsup_congr hu, limsup_congr hau, Pi.zero_apply, ← ENNReal.bot_eq_zero, limsup_const_bot]
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
hau : (fun x => a * u x) =ᶠ[f] 0
⊢ ⊥ = a * ⊥
[PROOFSTEP]
simp
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hu_mul : ∃ᶠ x : α in f, ⊤ ≤ ite (u x = 0) (0 : ℝ≥0∞) ⊤ :=
  by
  rw [EventuallyEq, not_eventually] at hu 
  refine' hu.mono fun x hx => _
  rw [Pi.zero_apply] at hx 
  simp [hx]
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
⊢ ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
rw [EventuallyEq, not_eventually] at hu 
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ∃ᶠ (x : α) in f, ¬u x = OfNat.ofNat 0 x
⊢ ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
refine' hu.mono fun x hx => _
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ∃ᶠ (x : α) in f, ¬u x = OfNat.ofNat 0 x
x : α
hx : ¬u x = OfNat.ofNat 0 x
⊢ ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
rw [Pi.zero_apply] at hx 
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ∃ᶠ (x : α) in f, ¬u x = OfNat.ofNat 0 x
x : α
hx : ¬u x = 0
⊢ ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
simp [hx]
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
hu_mul : ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have h_top_le : (f.limsup fun x : α => ite (u x = 0) (0 : ℝ≥0∞) ⊤) = ⊤ :=
  eq_top_iff.mpr (le_limsup_of_frequently_le hu_mul)
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
hu_mul : ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
h_top_le : limsup (fun x => if u x = 0 then 0 else ⊤) f = ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hfu : f.limsup u ≠ 0 := mt limsup_eq_zero_iff.1 hu
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
hu_mul : ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
h_top_le : limsup (fun x => if u x = 0 then 0 else ⊤) f = ⊤
hfu : limsup u f ≠ 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
simp only [ha_top, top_mul', hfu, h_top_le]
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u v : α → ℝ≥0∞
⊢ limsup (u * v) f ≤ limsup (fun x => limsup u f * v x) f
[PROOFSTEP]
refine limsup_le_limsup ?_
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u v : α → ℝ≥0∞
⊢ u * v ≤ᶠ[f] fun x => limsup u f * v x
[PROOFSTEP]
filter_upwards [@eventually_le_limsup _ f _ u] with x hx using mul_le_mul' hx le_rfl
[GOAL]
α : Type u_1
f✝ : Filter α
β : Type u_2
inst✝¹ : Countable β
f : Filter α
inst✝ : CountableInterFilter f
g : Filter β
u : α → β → ℝ≥0∞
⊢ ∀ᶠ (a : α) in f, ∀ (b : β), u a b ≤ limsup (fun a' => u a' b) f
[PROOFSTEP]
rw [eventually_countable_forall]
[GOAL]
α : Type u_1
f✝ : Filter α
β : Type u_2
inst✝¹ : Countable β
f : Filter α
inst✝ : CountableInterFilter f
g : Filter β
u : α → β → ℝ≥0∞
⊢ ∀ (i : β), ∀ᶠ (x : α) in f, u x i ≤ limsup (fun a' => u a' i) f
[PROOFSTEP]
exact fun b => ENNReal.eventually_le_limsup fun a => u a b
