[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ OrdConnected (range some)
[PROOFSTEP]
rw [range_coe']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ OrdConnected (Iio ⊤)
[PROOFSTEP]
exact ordConnected_Iio
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ IsOpen (Ico 0 b)
[PROOFSTEP]
rw [ENNReal.Ico_eq_Iio]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ IsOpen (Iio b)
[PROOFSTEP]
exact isOpen_Iio
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ IsOpen (range some)
[PROOFSTEP]
rw [range_coe']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ IsOpen (Iio ⊤)
[PROOFSTEP]
exact isOpen_Iio
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
α : Type u_4
l : Filter α
x : ℝ≥0
f : ℝ≥0∞ → α
⊢ Tendsto f (𝓝 ↑x) l ↔ Tendsto (f ∘ some) (𝓝 x) l
[PROOFSTEP]
rw [nhds_coe, tendsto_map'_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
ha : a ≠ ⊤
⊢ Tendsto ENNReal.toNNReal (𝓝 a) (𝓝 (ENNReal.toNNReal a))
[PROOFSTEP]
lift a to ℝ≥0 using ha
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0
⊢ Tendsto ENNReal.toNNReal (𝓝 ↑a) (𝓝 (ENNReal.toNNReal ↑a))
[PROOFSTEP]
rw [nhds_coe, tendsto_map'_iff]
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0
⊢ Tendsto (ENNReal.toNNReal ∘ some) (𝓝 a) (𝓝 (ENNReal.toNNReal ↑a))
[PROOFSTEP]
exact tendsto_id
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
l : Filter α
f g : α → ℝ≥0∞
hfi : ∀ᶠ (x : α) in l, f x ≠ ⊤
hgi : ∀ᶠ (x : α) in l, g x ≠ ⊤
hfg : (fun x => ENNReal.toReal (f x)) =ᶠ[l] fun x => ENNReal.toReal (g x)
⊢ f =ᶠ[l] g
[PROOFSTEP]
filter_upwards [hfi, hgi, hfg] with _ hfx hgx _
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
l : Filter α
f g : α → ℝ≥0∞
hfi : ∀ᶠ (x : α) in l, f x ≠ ⊤
hgi : ∀ᶠ (x : α) in l, g x ≠ ⊤
hfg : (fun x => ENNReal.toReal (f x)) =ᶠ[l] fun x => ENNReal.toReal (g x)
a✝¹ : α
hfx : f a✝¹ ≠ ⊤
hgx : g a✝¹ ≠ ⊤
a✝ : ENNReal.toReal (f a✝¹) = ENNReal.toReal (g a✝¹)
⊢ f a✝¹ = g a✝¹
[PROOFSTEP]
rwa [← ENNReal.toReal_eq_toReal hfx hgx]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ↑{a | a < ⊤} ≃ₜ ℝ≥0
[PROOFSTEP]
refine' (Homeomorph.setCongr _).trans neTopHomeomorphNNReal
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ {a | a < ⊤} = {a | a ≠ ⊤}
[PROOFSTEP]
simp only [mem_setOf_eq, lt_top_iff_ne_top]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ⨅ (l : ℝ≥0∞) (_ : l < ⊤), 𝓟 (Ioi l) = ⨅ (a : ℝ≥0∞) (_ : a ≠ ⊤), 𝓟 (Ioi a)
[PROOFSTEP]
simp [lt_top_iff_ne_top, Ioi]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
m : α → ℝ≥0∞
f : Filter α
⊢ Tendsto m f (𝓝 ⊤) ↔ ∀ (x : ℝ≥0), ∀ᶠ (a : α) in f, ↑x < m a
[PROOFSTEP]
simp only [nhds_top', tendsto_iInf, tendsto_principal, mem_Ioi]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
m : α → ℝ≥0∞
f : Filter α
h : ∀ (x : ℝ≥0), ∀ᶠ (a : α) in f, ↑x < m a
n : ℕ
⊢ ∀ᶠ (a : α) in f, ↑n < m a
[PROOFSTEP]
simpa only [ENNReal.coe_nat] using h n
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
m : α → ℝ≥0∞
f : Filter α
h : ∀ (n : ℕ), ∀ᶠ (a : α) in f, ↑n < m a
x : ℝ≥0
n : ℕ
hn : x < ↑n
y : α
⊢ ↑x < ↑n
[PROOFSTEP]
rwa [← ENNReal.coe_nat, coe_lt_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0
l : Filter α
⊢ Tendsto (fun x => ↑(f x)) l (𝓝 ⊤) ↔ Tendsto f l atTop
[PROOFSTEP]
rw [tendsto_nhds_top_iff_nnreal, atTop_basis_Ioi.tendsto_right_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0
l : Filter α
⊢ (∀ (x : ℝ≥0), ∀ᶠ (a : α) in l, ↑x < ↑(f a)) ↔ ∀ (i : ℝ≥0), True → ∀ᶠ (x : α) in l, f x ∈ Ioi i
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ⨅ (l : ℝ≥0∞) (_ : ⊥ < l), 𝓟 (Iio l) = ⨅ (a : ℝ≥0∞) (_ : a ≠ 0), 𝓟 (Iio a)
[PROOFSTEP]
simp [pos_iff_ne_zero, Iio]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
⊢ HasBasis (𝓝 x) (fun x => x ≠ 0) fun ε => Icc (x - ε) (x + ε)
[PROOFSTEP]
rcases(zero_le x).eq_or_gt with rfl | x0
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : 0 ≠ ⊤
⊢ HasBasis (𝓝 0) (fun x => x ≠ 0) fun ε => Icc (0 - ε) (0 + ε)
[PROOFSTEP]
simp_rw [zero_tsub, zero_add, ← bot_eq_zero, Icc_bot, ← bot_lt_iff_ne_bot]
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : 0 ≠ ⊤
⊢ HasBasis (𝓝 ⊥) (fun x => ⊥ < x) fun ε => Iic ε
[PROOFSTEP]
exact nhds_bot_basis_Iic
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
⊢ HasBasis (𝓝 x) (fun x => x ≠ 0) fun ε => Icc (x - ε) (x + ε)
[PROOFSTEP]
refine (nhds_basis_Ioo' ⟨_, x0⟩ ⟨_, xt.lt_top⟩).to_hasBasis ?_ fun ε ε0 => ?_
[GOAL]
case inr.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
⊢ ∀ (i : ℝ≥0∞ × ℝ≥0∞), i.fst < x ∧ x < i.snd → ∃ i', i' ≠ 0 ∧ Icc (x - i') (x + i') ⊆ Ioo i.fst i.snd
[PROOFSTEP]
rintro ⟨a, b⟩ ⟨ha, hb⟩
[GOAL]
case inr.refine_1.mk.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
a b : ℝ≥0∞
ha : (a, b).fst < x
hb : x < (a, b).snd
⊢ ∃ i', i' ≠ 0 ∧ Icc (x - i') (x + i') ⊆ Ioo (a, b).fst (a, b).snd
[PROOFSTEP]
rcases exists_between (tsub_pos_of_lt ha) with ⟨ε, ε0, hε⟩
[GOAL]
case inr.refine_1.mk.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
a b : ℝ≥0∞
ha : (a, b).fst < x
hb : x < (a, b).snd
ε : ℝ≥0∞
ε0 : 0 < ε
hε : ε < x - (a, b).fst
⊢ ∃ i', i' ≠ 0 ∧ Icc (x - i') (x + i') ⊆ Ioo (a, b).fst (a, b).snd
[PROOFSTEP]
rcases lt_iff_exists_add_pos_lt.1 hb with ⟨δ, δ0, hδ⟩
[GOAL]
case inr.refine_1.mk.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
a b : ℝ≥0∞
ha : (a, b).fst < x
hb : x < (a, b).snd
ε : ℝ≥0∞
ε0 : 0 < ε
hε : ε < x - (a, b).fst
δ : ℝ≥0
δ0 : 0 < δ
hδ : x + ↑δ < (a, b).snd
⊢ ∃ i', i' ≠ 0 ∧ Icc (x - i') (x + i') ⊆ Ioo (a, b).fst (a, b).snd
[PROOFSTEP]
refine ⟨min ε δ, (lt_min ε0 (coe_pos.2 δ0)).ne', Icc_subset_Ioo ?_ ?_⟩
[GOAL]
case inr.refine_1.mk.intro.intro.intro.intro.intro.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
a b : ℝ≥0∞
ha : (a, b).fst < x
hb : x < (a, b).snd
ε : ℝ≥0∞
ε0 : 0 < ε
hε : ε < x - (a, b).fst
δ : ℝ≥0
δ0 : 0 < δ
hδ : x + ↑δ < (a, b).snd
⊢ (a, b).fst < x - min ε ↑δ
[PROOFSTEP]
exact lt_tsub_comm.2 ((min_le_left _ _).trans_lt hε)
[GOAL]
case inr.refine_1.mk.intro.intro.intro.intro.intro.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
a b : ℝ≥0∞
ha : (a, b).fst < x
hb : x < (a, b).snd
ε : ℝ≥0∞
ε0 : 0 < ε
hε : ε < x - (a, b).fst
δ : ℝ≥0
δ0 : 0 < δ
hδ : x + ↑δ < (a, b).snd
⊢ x + min ε ↑δ < (a, b).snd
[PROOFSTEP]
exact (add_le_add_left (min_le_right _ _) _).trans_lt hδ
[GOAL]
case inr.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
x0 : 0 < x
ε : ℝ≥0∞
ε0 : ε ≠ 0
⊢ ∃ i, (i.fst < x ∧ x < i.snd) ∧ Ioo i.fst i.snd ⊆ Icc (x - ε) (x + ε)
[PROOFSTEP]
exact ⟨(x - ε, x + ε), ⟨ENNReal.sub_lt_self xt x0.ne' ε0, lt_add_right xt ε0⟩, Ioo_subset_Icc_self⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
xt : x ≠ ⊤
⊢ HasBasis (𝓝 x) (fun x => 0 < x) fun ε => Icc (x - ε) (x + ε)
[PROOFSTEP]
simpa only [pos_iff_ne_zero] using hasBasis_nhds_of_ne_top' xt
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ 𝓟 (Icc (⊤ - 1) (⊤ + 1)) ≤ 𝓝 ⊤
[PROOFSTEP]
simpa only [← coe_one, top_sub_coe, top_add, Icc_self, principal_singleton] using pure_le_nhds _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
h : ∀ (ε : ℝ≥0∞), ε > 0 → ∀ᶠ (x : α) in f, u x ∈ Icc (a - ε) (a + ε)
⊢ Tendsto u f (𝓝 a)
[PROOFSTEP]
refine Tendsto.mono_right ?_ (biInf_le_nhds _)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
h : ∀ (ε : ℝ≥0∞), ε > 0 → ∀ᶠ (x : α) in f, u x ∈ Icc (a - ε) (a + ε)
⊢ Tendsto u f (⨅ (ε : ℝ≥0∞) (_ : ε > 0), 𝓟 (Icc (a - ε) (a + ε)))
[PROOFSTEP]
simpa only [tendsto_iInf, tendsto_principal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha : a ≠ ⊤
⊢ Tendsto u f (𝓝 a) ↔ ∀ (ε : ℝ≥0∞), ε > 0 → ∀ᶠ (x : α) in f, u x ∈ Icc (a - ε) (a + ε)
[PROOFSTEP]
simp only [nhds_of_ne_top ha, tendsto_iInf, tendsto_principal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
f : β → ℝ≥0∞
a : ℝ≥0∞
ha : a ≠ ⊤
⊢ (∀ (ib : ℝ≥0∞), 0 < ib → ∃ ia, True ∧ ∀ (x : β), x ∈ Ici ia → f x ∈ Icc (a - ib) (a + ib)) ↔
    ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (n : β), n ≥ N → f n ∈ Icc (a - ε) (a + ε)
[PROOFSTEP]
simp only [true_and]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
f : β → ℝ≥0∞
a : ℝ≥0∞
ha : a ≠ ⊤
⊢ (∀ (ib : ℝ≥0∞), 0 < ib → ∃ ia, ∀ (x : β), x ∈ Ici ia → f x ∈ Icc (a - ib) (a + ib)) ↔
    ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (n : β), n ≥ N → f n ∈ Icc (a - ε) (a + ε)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ContinuousAdd ℝ≥0∞
[PROOFSTEP]
refine' ⟨continuous_iff_continuousAt.2 _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ∀ (x : ℝ≥0∞ × ℝ≥0∞), ContinuousAt (fun p => p.fst + p.snd) x
[PROOFSTEP]
rintro ⟨_ | a, b⟩
[GOAL]
case mk.none
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
b : ℝ≥0∞
⊢ ContinuousAt (fun p => p.fst + p.snd) (none, b)
[PROOFSTEP]
exact tendsto_nhds_top_mono' continuousAt_fst fun p => le_add_right le_rfl
[GOAL]
case mk.some
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
b : ℝ≥0∞
a : ℝ≥0
⊢ ContinuousAt (fun p => p.fst + p.snd) (Option.some a, b)
[PROOFSTEP]
rcases b with (_ | b)
[GOAL]
case mk.some.none
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0
⊢ ContinuousAt (fun p => p.fst + p.snd) (Option.some a, none)
[PROOFSTEP]
exact tendsto_nhds_top_mono' continuousAt_snd fun p => le_add_left le_rfl
[GOAL]
case mk.some.some
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a b : ℝ≥0
⊢ ContinuousAt (fun p => p.fst + p.snd) (Option.some a, Option.some b)
[PROOFSTEP]
simp only [ContinuousAt, some_eq_coe, nhds_coe_coe, ← coe_add, tendsto_map'_iff, (· ∘ ·), tendsto_coe, tendsto_add]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
f : β → ℝ≥0∞
⊢ (∀ (ib : ℝ≥0∞), 0 < ib → ∃ ia, True ∧ ∀ (x : β), x ∈ Ici ia → f x ∈ Iic ib) ↔
    ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (n : β), n ≥ N → f n ≤ ε
[PROOFSTEP]
simp only [true_and]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
f : β → ℝ≥0∞
⊢ (∀ (ib : ℝ≥0∞), 0 < ib → ∃ ia, ∀ (x : β), x ∈ Ici ia → f x ∈ Iic ib) ↔
    ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (n : β), n ≥ N → f n ≤ ε
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
h : ⊤ ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ Tendsto (fun p => p.fst - p.snd) (𝓝 (⊤, ⊤)) (𝓝 (⊤ - ⊤))
[PROOFSTEP]
simp only at h 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
b : ℝ≥0
x✝ : ⊤ ≠ ⊤ ∨ ↑b ≠ ⊤
⊢ Tendsto (fun p => p.fst - p.snd) (𝓝 (⊤, ↑b)) (𝓝 (⊤ - ↑b))
[PROOFSTEP]
rw [top_sub_coe, tendsto_nhds_top_iff_nnreal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
b : ℝ≥0
x✝ : ⊤ ≠ ⊤ ∨ ↑b ≠ ⊤
⊢ ∀ (x : ℝ≥0), ∀ᶠ (a : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (⊤, ↑b), ↑x < a.fst - a.snd
[PROOFSTEP]
refine fun x =>
  ((lt_mem_nhds <| @coe_lt_top (b + 1 + x)).prod_nhds (ge_mem_nhds <| coe_lt_coe.2 <| lt_add_one b)).mono fun y hy => ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x✝¹ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
b : ℝ≥0
x✝ : ⊤ ≠ ⊤ ∨ ↑b ≠ ⊤
x : ℝ≥0
y : ℝ≥0∞ × ℝ≥0∞
hy : ↑(b + 1 + x) < y.fst ∧ y.snd ≤ ↑(b + 1)
⊢ ↑x < y.fst - y.snd
[PROOFSTEP]
rw [lt_tsub_iff_left]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x✝¹ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
b : ℝ≥0
x✝ : ⊤ ≠ ⊤ ∨ ↑b ≠ ⊤
x : ℝ≥0
y : ℝ≥0∞ × ℝ≥0∞
hy : ↑(b + 1 + x) < y.fst ∧ y.snd ≤ ↑(b + 1)
⊢ y.snd + ↑x < y.fst
[PROOFSTEP]
calc
  y.2 + x ≤ ↑(b + 1) + x := add_le_add_right hy.2 _
  _ < y.1 := hy.1
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0
x✝ : ↑a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ Tendsto (fun p => p.fst - p.snd) (𝓝 (↑a, ⊤)) (𝓝 (↑a - ⊤))
[PROOFSTEP]
rw [sub_top]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0
x✝ : ↑a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ Tendsto (fun p => p.fst - p.snd) (𝓝 (↑a, ⊤)) (𝓝 0)
[PROOFSTEP]
refine (tendsto_pure.2 ?_).mono_right (pure_le_nhds _)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0
x✝ : ↑a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ ∀ᶠ (x : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (↑a, ⊤), x.fst - x.snd = 0
[PROOFSTEP]
exact
  ((gt_mem_nhds <| coe_lt_coe.2 <| lt_add_one a).prod_nhds (lt_mem_nhds <| @coe_lt_top (a + 1))).mono fun x hx =>
    tsub_eq_zero_iff_le.2 (hx.1.trans hx.2).le
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a b : ℝ≥0
x✝ : ↑a ≠ ⊤ ∨ ↑b ≠ ⊤
⊢ Tendsto (fun p => p.fst - p.snd) (𝓝 (↑a, ↑b)) (𝓝 (↑a - ↑b))
[PROOFSTEP]
simp only [nhds_coe_coe, tendsto_map'_iff, ← ENNReal.coe_sub, (· ∘ ·), tendsto_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a b : ℝ≥0
x✝ : ↑a ≠ ⊤ ∨ ↑b ≠ ⊤
⊢ Tendsto (fun a => a.fst - a.snd) (𝓝 (a, b)) (𝓝 (a - b))
[PROOFSTEP]
exact continuous_sub.tendsto (a, b)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b))
[PROOFSTEP]
have ht : ∀ b : ℝ≥0∞, b ≠ 0 → Tendsto (fun p : ℝ≥0∞ × ℝ≥0∞ => p.1 * p.2) (𝓝 ((⊤ : ℝ≥0∞), b)) (𝓝 ⊤) := fun b hb =>
  by
  refine' tendsto_nhds_top_iff_nnreal.2 fun n => _
  rcases lt_iff_exists_nnreal_btwn.1 (pos_iff_ne_zero.2 hb) with ⟨ε, hε, hεb⟩
  have : ∀ᶠ c : ℝ≥0∞ × ℝ≥0∞ in 𝓝 (∞, b), ↑n / ↑ε < c.1 ∧ ↑ε < c.2 :=
    (lt_mem_nhds <| div_lt_top coe_ne_top hε.ne').prod_nhds (lt_mem_nhds hεb)
  refine' this.mono fun c hc => _
  exact (ENNReal.div_mul_cancel hε.ne' coe_ne_top).symm.trans_lt (mul_lt_mul hc.1 hc.2)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b✝ ≠ ⊤
hb✝ : b✝ ≠ 0 ∨ a ≠ ⊤
b : ℝ≥0∞
hb : b ≠ 0
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
[PROOFSTEP]
refine' tendsto_nhds_top_iff_nnreal.2 fun n => _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b✝ ≠ ⊤
hb✝ : b✝ ≠ 0 ∨ a ≠ ⊤
b : ℝ≥0∞
hb : b ≠ 0
n : ℝ≥0
⊢ ∀ᶠ (a : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (⊤, b), ↑n < a.fst * a.snd
[PROOFSTEP]
rcases lt_iff_exists_nnreal_btwn.1 (pos_iff_ne_zero.2 hb) with ⟨ε, hε, hεb⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b✝ ≠ ⊤
hb✝ : b✝ ≠ 0 ∨ a ≠ ⊤
b : ℝ≥0∞
hb : b ≠ 0
n ε : ℝ≥0
hε : 0 < ↑ε
hεb : ↑ε < b
⊢ ∀ᶠ (a : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (⊤, b), ↑n < a.fst * a.snd
[PROOFSTEP]
have : ∀ᶠ c : ℝ≥0∞ × ℝ≥0∞ in 𝓝 (∞, b), ↑n / ↑ε < c.1 ∧ ↑ε < c.2 :=
  (lt_mem_nhds <| div_lt_top coe_ne_top hε.ne').prod_nhds (lt_mem_nhds hεb)
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b✝ ≠ ⊤
hb✝ : b✝ ≠ 0 ∨ a ≠ ⊤
b : ℝ≥0∞
hb : b ≠ 0
n ε : ℝ≥0
hε : 0 < ↑ε
hεb : ↑ε < b
this : ∀ᶠ (c : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (⊤, b), ↑n / ↑ε < c.fst ∧ ↑ε < c.snd
⊢ ∀ᶠ (a : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (⊤, b), ↑n < a.fst * a.snd
[PROOFSTEP]
refine' this.mono fun c hc => _
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b✝ c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b✝ ≠ ⊤
hb✝ : b✝ ≠ 0 ∨ a ≠ ⊤
b : ℝ≥0∞
hb : b ≠ 0
n ε : ℝ≥0
hε : 0 < ↑ε
hεb : ↑ε < b
this : ∀ᶠ (c : ℝ≥0∞ × ℝ≥0∞) in 𝓝 (⊤, b), ↑n / ↑ε < c.fst ∧ ↑ε < c.snd
c : ℝ≥0∞ × ℝ≥0∞
hc : ↑n / ↑ε < c.fst ∧ ↑ε < c.snd
⊢ ↑n < c.fst * c.snd
[PROOFSTEP]
exact (ENNReal.div_mul_cancel hε.ne' coe_ne_top).symm.trans_lt (mul_lt_mul hc.1 hc.2)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ a ≠ ⊤
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b))
[PROOFSTEP]
induction a using recTopCoe with
| top => simp only [ne_eq, or_false] at hb ; simp [ht b hb, top_mul hb]
| coe a =>
  induction b using recTopCoe with
  | top =>
    simp only [ne_eq, or_false] at ha 
    simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
  | coe b => simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ha : a ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ a ≠ ⊤
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b))
[PROOFSTEP]
induction a using recTopCoe with
| top => simp only [ne_eq, or_false] at hb ; simp [ht b hb, top_mul hb]
| coe a =>
  induction b using recTopCoe with
  | top =>
    simp only [ne_eq, or_false] at ha 
    simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
  | coe b => simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
case top
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
ha : ⊤ ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ ⊤ ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 (⊤ * b))
[PROOFSTEP]

| top => simp only [ne_eq, or_false] at hb ; simp [ht b hb, top_mul hb]
[GOAL]
case top
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
ha : ⊤ ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ ⊤ ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 (⊤ * b))
[PROOFSTEP]
simp only [ne_eq, or_false] at hb 
[GOAL]
case top
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
ha : ⊤ ≠ 0 ∨ b ≠ ⊤
hb : ¬b = 0
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 (⊤ * b))
[PROOFSTEP]
simp [ht b hb, top_mul hb]
[GOAL]
case coe
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a : ℝ≥0
ha : ↑a ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, b)) (𝓝 (↑a * b))
[PROOFSTEP]

| coe a =>
  induction b using recTopCoe with
  | top =>
    simp only [ne_eq, or_false] at ha 
    simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
  | coe b => simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
case coe
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a : ℝ≥0
ha : ↑a ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, b)) (𝓝 (↑a * b))
[PROOFSTEP]
induction b using recTopCoe with
| top =>
  simp only [ne_eq, or_false] at ha 
  simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
| coe b => simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
case coe
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a : ℝ≥0
ha : ↑a ≠ 0 ∨ b ≠ ⊤
hb : b ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, b)) (𝓝 (↑a * b))
[PROOFSTEP]
induction b using recTopCoe with
| top =>
  simp only [ne_eq, or_false] at ha 
  simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
| coe b => simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
case coe.top
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a : ℝ≥0
ha : ↑a ≠ 0 ∨ ⊤ ≠ ⊤
hb : ⊤ ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, ⊤)) (𝓝 (↑a * ⊤))
[PROOFSTEP]

| top =>
  simp only [ne_eq, or_false] at ha 
  simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
[GOAL]
case coe.top
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a : ℝ≥0
ha : ↑a ≠ 0 ∨ ⊤ ≠ ⊤
hb : ⊤ ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, ⊤)) (𝓝 (↑a * ⊤))
[PROOFSTEP]
simp only [ne_eq, or_false] at ha 
[GOAL]
case coe.top
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a : ℝ≥0
hb : ⊤ ≠ 0 ∨ ↑a ≠ ⊤
ha : ¬↑a = 0
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, ⊤)) (𝓝 (↑a * ⊤))
[PROOFSTEP]
simpa [(· ∘ ·), mul_comm, mul_top ha] using (ht a ha).comp (continuous_swap.tendsto (some a, ⊤))
[GOAL]
case coe.coe
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a b : ℝ≥0
ha : ↑a ≠ 0 ∨ ↑b ≠ ⊤
hb : ↑b ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, ↑b)) (𝓝 (↑a * ↑b))
[PROOFSTEP]

| coe b => simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
case coe.coe
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ht : ∀ (b : ℝ≥0∞), b ≠ 0 → Tendsto (fun p => p.fst * p.snd) (𝓝 (⊤, b)) (𝓝 ⊤)
a b : ℝ≥0
ha : ↑a ≠ 0 ∨ ↑b ≠ ⊤
hb : ↑b ≠ 0 ∨ ↑a ≠ ⊤
⊢ Tendsto (fun p => p.fst * p.snd) (𝓝 (↑a, ↑b)) (𝓝 (↑a * ↑b))
[PROOFSTEP]
simp only [nhds_coe_coe, ← coe_mul, tendsto_coe, tendsto_map'_iff, (· ∘ ·), tendsto_mul]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a b : ℝ≥0∞
hm : Tendsto m f (𝓝 b)
hb : b ≠ 0 ∨ a ≠ ⊤
this : a = 0
⊢ Tendsto (fun b => a * m b) f (𝓝 (a * b))
[PROOFSTEP]
simp [this, tendsto_const_nhds]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a b : ℝ≥0∞
hm : Tendsto m f (𝓝 a)
ha : a ≠ 0 ∨ b ≠ ⊤
⊢ Tendsto (fun x => m x * b) f (𝓝 (a * b))
[PROOFSTEP]
simpa only [mul_comm] using ENNReal.Tendsto.const_mul hm ha
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a : ι → ℝ≥0∞
s : Finset ι
h : ∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a i))
h' : ∀ (i : ι), i ∈ s → a i ≠ ⊤
⊢ Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a c))
[PROOFSTEP]
induction' s using Finset.induction with a s has IH
[GOAL]
case empty
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a : ι → ℝ≥0∞
s : Finset ι
h✝ : ∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a i))
h'✝ : ∀ (i : ι), i ∈ s → a i ≠ ⊤
h : ∀ (i : ι), i ∈ ∅ → Tendsto (f i) x (𝓝 (a i))
h' : ∀ (i : ι), i ∈ ∅ → a i ≠ ⊤
⊢ Tendsto (fun b => ∏ c in ∅, f c b) x (𝓝 (∏ c in ∅, a c))
[PROOFSTEP]
simp [tendsto_const_nhds]
[GOAL]
case insert
α : Type u_1
β : Type u_2
γ : Type u_3
a✝¹ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a✝ : ι → ℝ≥0∞
s✝ : Finset ι
h✝ : ∀ (i : ι), i ∈ s✝ → Tendsto (f i) x (𝓝 (a✝ i))
h'✝ : ∀ (i : ι), i ∈ s✝ → a✝ i ≠ ⊤
a : ι
s : Finset ι
has : ¬a ∈ s
IH :
  (∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a✝ i))) →
    (∀ (i : ι), i ∈ s → a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a✝ c))
h : ∀ (i : ι), i ∈ insert a s → Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ (i : ι), i ∈ insert a s → a✝ i ≠ ⊤
⊢ Tendsto (fun b => ∏ c in insert a s, f c b) x (𝓝 (∏ c in insert a s, a✝ c))
[PROOFSTEP]
simp only [Finset.prod_insert has]
[GOAL]
case insert
α : Type u_1
β : Type u_2
γ : Type u_3
a✝¹ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a✝ : ι → ℝ≥0∞
s✝ : Finset ι
h✝ : ∀ (i : ι), i ∈ s✝ → Tendsto (f i) x (𝓝 (a✝ i))
h'✝ : ∀ (i : ι), i ∈ s✝ → a✝ i ≠ ⊤
a : ι
s : Finset ι
has : ¬a ∈ s
IH :
  (∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a✝ i))) →
    (∀ (i : ι), i ∈ s → a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a✝ c))
h : ∀ (i : ι), i ∈ insert a s → Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ (i : ι), i ∈ insert a s → a✝ i ≠ ⊤
⊢ Tendsto (fun b => f a b * ∏ c in s, f c b) x (𝓝 (a✝ a * ∏ c in s, a✝ c))
[PROOFSTEP]
apply Tendsto.mul (h _ (Finset.mem_insert_self _ _))
[GOAL]
case insert.ha
α : Type u_1
β : Type u_2
γ : Type u_3
a✝¹ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a✝ : ι → ℝ≥0∞
s✝ : Finset ι
h✝ : ∀ (i : ι), i ∈ s✝ → Tendsto (f i) x (𝓝 (a✝ i))
h'✝ : ∀ (i : ι), i ∈ s✝ → a✝ i ≠ ⊤
a : ι
s : Finset ι
has : ¬a ∈ s
IH :
  (∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a✝ i))) →
    (∀ (i : ι), i ∈ s → a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a✝ c))
h : ∀ (i : ι), i ∈ insert a s → Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ (i : ι), i ∈ insert a s → a✝ i ≠ ⊤
⊢ a✝ a ≠ 0 ∨ ∏ c in s, a✝ c ≠ ⊤
[PROOFSTEP]
right
[GOAL]
case insert.ha.h
α : Type u_1
β : Type u_2
γ : Type u_3
a✝¹ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a✝ : ι → ℝ≥0∞
s✝ : Finset ι
h✝ : ∀ (i : ι), i ∈ s✝ → Tendsto (f i) x (𝓝 (a✝ i))
h'✝ : ∀ (i : ι), i ∈ s✝ → a✝ i ≠ ⊤
a : ι
s : Finset ι
has : ¬a ∈ s
IH :
  (∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a✝ i))) →
    (∀ (i : ι), i ∈ s → a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a✝ c))
h : ∀ (i : ι), i ∈ insert a s → Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ (i : ι), i ∈ insert a s → a✝ i ≠ ⊤
⊢ ∏ c in s, a✝ c ≠ ⊤
[PROOFSTEP]
exact (prod_lt_top fun i hi => h' _ (Finset.mem_insert_of_mem hi)).ne
[GOAL]
case insert.hmb
α : Type u_1
β : Type u_2
γ : Type u_3
a✝¹ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a✝ : ι → ℝ≥0∞
s✝ : Finset ι
h✝ : ∀ (i : ι), i ∈ s✝ → Tendsto (f i) x (𝓝 (a✝ i))
h'✝ : ∀ (i : ι), i ∈ s✝ → a✝ i ≠ ⊤
a : ι
s : Finset ι
has : ¬a ∈ s
IH :
  (∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a✝ i))) →
    (∀ (i : ι), i ∈ s → a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a✝ c))
h : ∀ (i : ι), i ∈ insert a s → Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ (i : ι), i ∈ insert a s → a✝ i ≠ ⊤
⊢ Tendsto (fun a => ∏ c in s, f c a) x (𝓝 (∏ c in s, a✝ c))
[PROOFSTEP]
exact IH (fun i hi => h _ (Finset.mem_insert_of_mem hi)) fun i hi => h' _ (Finset.mem_insert_of_mem hi)
[GOAL]
case insert.hb
α : Type u_1
β : Type u_2
γ : Type u_3
a✝¹ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
ι : Type u_4
f : ι → α → ℝ≥0∞
x : Filter α
a✝ : ι → ℝ≥0∞
s✝ : Finset ι
h✝ : ∀ (i : ι), i ∈ s✝ → Tendsto (f i) x (𝓝 (a✝ i))
h'✝ : ∀ (i : ι), i ∈ s✝ → a✝ i ≠ ⊤
a : ι
s : Finset ι
has : ¬a ∈ s
IH :
  (∀ (i : ι), i ∈ s → Tendsto (f i) x (𝓝 (a✝ i))) →
    (∀ (i : ι), i ∈ s → a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c in s, f c b) x (𝓝 (∏ c in s, a✝ c))
h : ∀ (i : ι), i ∈ insert a s → Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ (i : ι), i ∈ insert a s → a✝ i ≠ ⊤
⊢ ∏ c in s, a✝ c ≠ 0 ∨ a✝ a ≠ ⊤
[PROOFSTEP]
exact Or.inr (h' _ (Finset.mem_insert_self _ _))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
c : ℝ≥0∞
c_ne_zero : c ≠ 0
⊢ Continuous fun x => x / c
[PROOFSTEP]
simp_rw [div_eq_mul_inv, continuous_iff_continuousAt]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
c : ℝ≥0∞
c_ne_zero : c ≠ 0
⊢ ∀ (x : ℝ≥0∞), ContinuousAt (fun x => x * c⁻¹) x
[PROOFSTEP]
intro x
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
c : ℝ≥0∞
c_ne_zero : c ≠ 0
x : ℝ≥0∞
⊢ ContinuousAt (fun x => x * c⁻¹) x
[PROOFSTEP]
exact ENNReal.continuousAt_mul_const (Or.intro_left _ (inv_ne_top.mpr c_ne_zero))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
⊢ Continuous fun a => a ^ n
[PROOFSTEP]
induction' n with n IH
[GOAL]
case zero
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ Continuous fun a => a ^ Nat.zero
[PROOFSTEP]
simp [continuous_const]
[GOAL]
case succ
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
⊢ Continuous fun a => a ^ Nat.succ n
[PROOFSTEP]
simp_rw [Nat.succ_eq_add_one, pow_add, pow_one, continuous_iff_continuousAt]
[GOAL]
case succ
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
⊢ ∀ (x : ℝ≥0∞), ContinuousAt (fun a => a ^ n * a) x
[PROOFSTEP]
intro x
[GOAL]
case succ
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
⊢ ContinuousAt (fun a => a ^ n * a) x
[PROOFSTEP]
refine' ENNReal.Tendsto.mul (IH.tendsto _) _ tendsto_id _
[GOAL]
case succ.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
⊢ x ^ n ≠ 0 ∨ x ≠ ⊤
[PROOFSTEP]
by_cases H : x = 0
[GOAL]
case succ.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
⊢ x ≠ 0 ∨ x ^ n ≠ ⊤
[PROOFSTEP]
by_cases H : x = 0
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
H : x = 0
⊢ x ^ n ≠ 0 ∨ x ≠ ⊤
[PROOFSTEP]
simp only [H, zero_ne_top, Ne.def, or_true_iff, not_false_iff]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
H : ¬x = 0
⊢ x ^ n ≠ 0 ∨ x ≠ ⊤
[PROOFSTEP]
exact Or.inl fun h => H (pow_eq_zero h)
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
H : x = 0
⊢ x ≠ 0 ∨ x ^ n ≠ ⊤
[PROOFSTEP]
simp only [H, pow_eq_top_iff, zero_ne_top, false_or_iff, eq_self_iff_true, not_true, Ne.def, not_false_iff,
  false_and_iff]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
n : ℕ
IH : Continuous fun a => a ^ n
x : ℝ≥0∞
H : ¬x = 0
⊢ x ≠ 0 ∨ x ^ n ≠ ⊤
[PROOFSTEP]
simp only [H, true_or_iff, Ne.def, not_false_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ContinuousOn (fun p => p.fst - p.snd) {p | p ≠ (⊤, ⊤)}
[PROOFSTEP]
rw [ContinuousOn]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ∀ (x : ℝ≥0∞ × ℝ≥0∞), x ∈ {p | p ≠ (⊤, ⊤)} → ContinuousWithinAt (fun p => p.fst - p.snd) {p | p ≠ (⊤, ⊤)} x
[PROOFSTEP]
rintro ⟨x, y⟩ hp
[GOAL]
case mk
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y : ℝ≥0∞
hp : (x, y) ∈ {p | p ≠ (⊤, ⊤)}
⊢ ContinuousWithinAt (fun p => p.fst - p.snd) {p | p ≠ (⊤, ⊤)} (x, y)
[PROOFSTEP]
simp only [Ne.def, Set.mem_setOf_eq, Prod.mk.inj_iff] at hp 
[GOAL]
case mk
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y : ℝ≥0∞
hp : ¬(x = ⊤ ∧ y = ⊤)
⊢ ContinuousWithinAt (fun p => p.fst - p.snd) {p | p ≠ (⊤, ⊤)} (x, y)
[PROOFSTEP]
refine' tendsto_nhdsWithin_of_tendsto_nhds (tendsto_sub (not_and_or.mp hp))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_ne_top : a ≠ ⊤
⊢ Continuous fun x => a - x
[PROOFSTEP]
change Continuous (Function.uncurry Sub.sub ∘ (a, ·))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_ne_top : a ≠ ⊤
⊢ Continuous (uncurry Sub.sub ∘ fun x => (a, x))
[PROOFSTEP]
refine continuousOn_sub.comp_continuous (Continuous.Prod.mk a) fun x => ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_ne_top : a ≠ ⊤
x : ℝ≥0∞
⊢ (a, x) ∈ {p | p ≠ (⊤, ⊤)}
[PROOFSTEP]
simp only [a_ne_top, Ne.def, mem_setOf_eq, Prod.mk.inj_iff, false_and_iff, not_false_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ ContinuousOn (fun x => a - x) {x | x ≠ ⊤}
[PROOFSTEP]
rw [show (fun x => a - x) = (fun p : ℝ≥0∞ × ℝ≥0∞ => p.fst - p.snd) ∘ fun x => ⟨a, x⟩ by rfl]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ (fun x => a - x) = (fun p => p.fst - p.snd) ∘ fun x => (a, x)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ ContinuousOn ((fun p => p.fst - p.snd) ∘ fun x => (a, x)) {x | x ≠ ⊤}
[PROOFSTEP]
apply ContinuousOn.comp continuousOn_sub (Continuous.continuousOn (Continuous.Prod.mk a))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ MapsTo (fun b => (a, b)) {x | x ≠ ⊤} {p | p ≠ (⊤, ⊤)}
[PROOFSTEP]
rintro _ h (_ | _)
[GOAL]
case refl
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
h : ⊤ ∈ {x | x ≠ ⊤}
⊢ False
[PROOFSTEP]
exact h none_eq_top
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ Continuous fun x => x - a
[PROOFSTEP]
by_cases a_infty : a = ∞
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : a = ⊤
⊢ Continuous fun x => x - a
[PROOFSTEP]
simp [a_infty, continuous_const]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ Continuous fun x => x - a
[PROOFSTEP]
rw [show (fun x => x - a) = (fun p : ℝ≥0∞ × ℝ≥0∞ => p.fst - p.snd) ∘ fun x => ⟨x, a⟩ by rfl]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ (fun x => x - a) = (fun p => p.fst - p.snd) ∘ fun x => (x, a)
[PROOFSTEP]
rfl
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ Continuous ((fun p => p.fst - p.snd) ∘ fun x => (x, a))
[PROOFSTEP]
apply ContinuousOn.comp_continuous continuousOn_sub (continuous_id'.prod_mk continuous_const)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ ∀ (x : ℝ≥0∞), (x, a) ∈ {p | p ≠ (⊤, ⊤)}
[PROOFSTEP]
intro x
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
x : ℝ≥0∞
⊢ (x, a) ∈ {p | p ≠ (⊤, ⊤)}
[PROOFSTEP]
simp only [a_infty, Ne.def, mem_setOf_eq, Prod.mk.inj_iff, and_false_iff, not_false_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y : ℝ≥0∞
h : ∀ (a : ℝ≥0∞), a < 1 → a * x ≤ y
⊢ x ≤ y
[PROOFSTEP]
have : Tendsto (· * x) (𝓝[<] 1) (𝓝 (1 * x)) :=
  (ENNReal.continuousAt_mul_const (Or.inr one_ne_zero)).mono_left inf_le_left
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y : ℝ≥0∞
h : ∀ (a : ℝ≥0∞), a < 1 → a * x ≤ y
this : Tendsto (fun x_1 => x_1 * x) (𝓝[Iio 1] 1) (𝓝 (1 * x))
⊢ x ≤ y
[PROOFSTEP]
rw [one_mul] at this 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y : ℝ≥0∞
h : ∀ (a : ℝ≥0∞), a < 1 → a * x ≤ y
this : Tendsto (fun x_1 => x_1 * x) (𝓝[Iio 1] 1) (𝓝 x)
⊢ x ≤ y
[PROOFSTEP]
exact le_of_tendsto this (eventually_nhdsWithin_iff.2 <| eventually_of_forall h)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
by_cases H : a = ⊤ ∧ ⨅ i, f i = 0
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : a = ⊤ ∧ ⨅ (i : ι), f i = 0
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
rcases h H.1 H.2 with ⟨i, hi⟩
[GOAL]
case pos.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : a = ⊤ ∧ ⨅ (i : ι), f i = 0
i : ι
hi : f i = 0
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
rw [H.2, mul_zero, ← bot_eq_zero, iInf_eq_bot]
[GOAL]
case pos.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : a = ⊤ ∧ ⨅ (i : ι), f i = 0
i : ι
hi : f i = 0
⊢ ∀ (b : ℝ≥0∞), b > ⊥ → ∃ i, a * f i < b
[PROOFSTEP]
exact fun b hb => ⟨i, by rwa [hi, mul_zero, ← bot_eq_zero]⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : a = ⊤ ∧ ⨅ (i : ι), f i = 0
i : ι
hi : f i = 0
b : ℝ≥0∞
hb : b > ⊥
⊢ a * f i < b
[PROOFSTEP]
rwa [hi, mul_zero, ← bot_eq_zero]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : ¬(a = ⊤ ∧ ⨅ (i : ι), f i = 0)
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
rw [not_and_or] at H 
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : ¬a = ⊤ ∨ ¬⨅ (i : ι), f i = 0
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
cases isEmpty_or_nonempty ι
[GOAL]
case neg.inl
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : ¬a = ⊤ ∨ ¬⨅ (i : ι), f i = 0
h✝ : IsEmpty ι
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
rw [iInf_of_empty, iInf_of_empty, mul_top]
[GOAL]
case neg.inl
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : ¬a = ⊤ ∨ ¬⨅ (i : ι), f i = 0
h✝ : IsEmpty ι
⊢ a ≠ 0
[PROOFSTEP]
exact mt h0 (not_nonempty_iff.2 ‹_›)
[GOAL]
case neg.inr
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
H : ¬a = ⊤ ∨ ¬⨅ (i : ι), f i = 0
h✝ : Nonempty ι
⊢ ⨅ (i : ι), a * f i = a * ⨅ (i : ι), f i
[PROOFSTEP]
exact (ENNReal.mul_left_mono.map_iInf_of_continuousAt' (ENNReal.continuousAt_const_mul H)).symm
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
h : a = ⊤ → ⨅ (i : ι), f i = 0 → ∃ i, f i = 0
h0 : a = 0 → Nonempty ι
⊢ ⨅ (i : ι), f i * a = (⨅ (i : ι), f i) * a
[PROOFSTEP]
simpa only [mul_comm a] using iInf_mul_left' h h0
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a : ℝ≥0∞
h : Tendsto (fun x => (m x)⁻¹) f (𝓝 a⁻¹)
⊢ Tendsto m f (𝓝 a)
[PROOFSTEP]
simpa only [inv_inv] using Tendsto.inv h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
ma mb : α → ℝ≥0∞
a b : ℝ≥0∞
hma : Tendsto ma f (𝓝 a)
ha : a ≠ 0 ∨ b ≠ 0
hmb : Tendsto mb f (𝓝 b)
hb : b ≠ ⊤ ∨ a ≠ ⊤
⊢ Tendsto (fun a => ma a / mb a) f (𝓝 (a / b))
[PROOFSTEP]
apply Tendsto.mul hma _ (ENNReal.tendsto_inv_iff.2 hmb) _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
ma mb : α → ℝ≥0∞
a b : ℝ≥0∞
hma : Tendsto ma f (𝓝 a)
ha : a ≠ 0 ∨ b ≠ 0
hmb : Tendsto mb f (𝓝 b)
hb : b ≠ ⊤ ∨ a ≠ ⊤
⊢ a ≠ 0 ∨ b⁻¹ ≠ ⊤
[PROOFSTEP]
simp [ha, hb]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
ma mb : α → ℝ≥0∞
a b : ℝ≥0∞
hma : Tendsto ma f (𝓝 a)
ha : a ≠ 0 ∨ b ≠ 0
hmb : Tendsto mb f (𝓝 b)
hb : b ≠ ⊤ ∨ a ≠ ⊤
⊢ b⁻¹ ≠ 0 ∨ a ≠ ⊤
[PROOFSTEP]
simp [ha, hb]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a b : ℝ≥0∞
hm : Tendsto m f (𝓝 b)
hb : b ≠ ⊤ ∨ a ≠ ⊤
⊢ Tendsto (fun b => a / m b) f (𝓝 (a / b))
[PROOFSTEP]
apply Tendsto.const_mul (ENNReal.tendsto_inv_iff.2 hm)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a b : ℝ≥0∞
hm : Tendsto m f (𝓝 b)
hb : b ≠ ⊤ ∨ a ≠ ⊤
⊢ b⁻¹ ≠ 0 ∨ a ≠ ⊤
[PROOFSTEP]
simp [hb]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a b : ℝ≥0∞
hm : Tendsto m f (𝓝 a)
ha : a ≠ 0 ∨ b ≠ 0
⊢ Tendsto (fun x => m x / b) f (𝓝 (a / b))
[PROOFSTEP]
apply Tendsto.mul_const hm
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b✝ c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : Filter α
m : α → ℝ≥0∞
a b : ℝ≥0∞
hm : Tendsto m f (𝓝 a)
ha : a ≠ 0 ∨ b ≠ 0
⊢ a ≠ 0 ∨ b⁻¹ ≠ ⊤
[PROOFSTEP]
simp [ha]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p✝ q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
p : ι → Prop
h : ∃ i, p i
f : ι → ℝ≥0∞
⊢ (⨆ (i : ι) (_ : p i), f i) + a = ⨆ (i : ι) (_ : p i), f i + a
[PROOFSTEP]
haveI : Nonempty { i // p i } := nonempty_subtype.2 h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p✝ q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
p : ι → Prop
h : ∃ i, p i
f : ι → ℝ≥0∞
this : Nonempty { i // p i }
⊢ (⨆ (i : ι) (_ : p i), f i) + a = ⨆ (i : ι) (_ : p i), f i + a
[PROOFSTEP]
simp only [iSup_subtype', iSup_add]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p✝ q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
p : ι → Prop
h : ∃ i, p i
f : ι → ℝ≥0∞
⊢ a + ⨆ (i : ι) (_ : p i), f i = ⨆ (i : ι) (_ : p i), a + f i
[PROOFSTEP]
simp only [add_comm a, biSup_add' h]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ s : Set ℝ≥0∞
hs : Set.Nonempty s
⊢ sSup s + a = ⨆ (b : ℝ≥0∞) (_ : b ∈ s), b + a
[PROOFSTEP]
rw [sSup_eq_iSup, biSup_add hs]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
ι : Sort u_4
s : ι → ℝ≥0∞
inst✝ : Nonempty ι
⊢ a + iSup s = ⨆ (b : ι), a + s b
[PROOFSTEP]
rw [add_comm, iSup_add]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
ι : Sort u_4
s : ι → ℝ≥0∞
inst✝ : Nonempty ι
⊢ ⨆ (b : ι), s b + a = ⨆ (b : ι), a + s b
[PROOFSTEP]
simp [add_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
ι' : Sort u_5
inst✝¹ : Nonempty ι
inst✝ : Nonempty ι'
f : ι → ℝ≥0∞
g : ι' → ℝ≥0∞
a : ℝ≥0∞
h : ∀ (i : ι) (j : ι'), f i + g j ≤ a
⊢ iSup f + iSup g ≤ a
[PROOFSTEP]
simp_rw [iSup_add, add_iSup]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
ι' : Sort u_5
inst✝¹ : Nonempty ι
inst✝ : Nonempty ι'
f : ι → ℝ≥0∞
g : ι' → ℝ≥0∞
a : ℝ≥0∞
h : ∀ (i : ι) (j : ι'), f i + g j ≤ a
⊢ ⨆ (b : ι) (b_1 : ι'), f b + g b_1 ≤ a
[PROOFSTEP]
exact iSup₂_le h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
q : ι' → Prop
hp : ∃ i, p i
hq : ∃ j, q j
f : ι → ℝ≥0∞
g : ι' → ℝ≥0∞
a : ℝ≥0∞
h : ∀ (i : ι), p i → ∀ (j : ι'), q j → f i + g j ≤ a
⊢ (⨆ (i : ι) (_ : p i), f i) + ⨆ (j : ι') (_ : q j), g j ≤ a
[PROOFSTEP]
simp_rw [biSup_add' hp, add_biSup' hq]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
q : ι' → Prop
hp : ∃ i, p i
hq : ∃ j, q j
f : ι → ℝ≥0∞
g : ι' → ℝ≥0∞
a : ℝ≥0∞
h : ∀ (i : ι), p i → ∀ (j : ι'), q j → f i + g j ≤ a
⊢ ⨆ (i : ι) (_ : p i) (i_1 : ι') (_ : q i_1), f i + g i_1 ≤ a
[PROOFSTEP]
exact iSup₂_le fun i hi => iSup₂_le (h i hi)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f g : ι → ℝ≥0∞
h : ∀ (i j : ι), ∃ k, f i + g j ≤ f k + g k
⊢ iSup f + iSup g = ⨆ (a : ι), f a + g a
[PROOFSTEP]
cases isEmpty_or_nonempty ι
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f g : ι → ℝ≥0∞
h : ∀ (i j : ι), ∃ k, f i + g j ≤ f k + g k
h✝ : IsEmpty ι
⊢ iSup f + iSup g = ⨆ (a : ι), f a + g a
[PROOFSTEP]
simp only [iSup_of_empty, bot_eq_zero, zero_add]
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f g : ι → ℝ≥0∞
h : ∀ (i j : ι), ∃ k, f i + g j ≤ f k + g k
h✝ : Nonempty ι
⊢ iSup f + iSup g = ⨆ (a : ι), f a + g a
[PROOFSTEP]
refine' le_antisymm _ (iSup_le fun a => add_le_add (le_iSup _ _) (le_iSup _ _))
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f g : ι → ℝ≥0∞
h : ∀ (i j : ι), ∃ k, f i + g j ≤ f k + g k
h✝ : Nonempty ι
⊢ iSup f + iSup g ≤ ⨆ (a : ι), f a + g a
[PROOFSTEP]
refine' iSup_add_iSup_le fun i j => _
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f g : ι → ℝ≥0∞
h : ∀ (i j : ι), ∃ k, f i + g j ≤ f k + g k
h✝ : Nonempty ι
i j : ι
⊢ f i + g j ≤ ⨆ (a : ι), f a + g a
[PROOFSTEP]
rcases h i j with ⟨k, hk⟩
[GOAL]
case inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f g : ι → ℝ≥0∞
h : ∀ (i j : ι), ∃ k, f i + g j ≤ f k + g k
h✝ : Nonempty ι
i j k : ι
hk : f i + g j ≤ f k + g k
⊢ f i + g j ≤ ⨆ (a : ι), f a + g a
[PROOFSTEP]
exact le_iSup_of_le k hk
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
⊢ ∑ a in s, iSup (f a) = ⨆ (n : ι), ∑ a in s, f a n
[PROOFSTEP]
refine' Finset.induction_on s _ _
[GOAL]
case refine'_1
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
⊢ ∑ a in ∅, iSup (f a) = ⨆ (n : ι), ∑ a in ∅, f a n
[PROOFSTEP]
simp
[GOAL]
case refine'_2
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
⊢ ∀ ⦃a : α⦄ {s : Finset α},
    ¬a ∈ s →
      ∑ a in s, iSup (f a) = ⨆ (n : ι), ∑ a in s, f a n →
        ∑ a in insert a s, iSup (f a) = ⨆ (n : ι), ∑ a in insert a s, f a n
[PROOFSTEP]
intro a s has ih
[GOAL]
case refine'_2
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s✝ : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
a : α
s : Finset α
has : ¬a ∈ s
ih : ∑ a in s, iSup (f a) = ⨆ (n : ι), ∑ a in s, f a n
⊢ ∑ a in insert a s, iSup (f a) = ⨆ (n : ι), ∑ a in insert a s, f a n
[PROOFSTEP]
simp only [Finset.sum_insert has]
[GOAL]
case refine'_2
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s✝ : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
a : α
s : Finset α
has : ¬a ∈ s
ih : ∑ a in s, iSup (f a) = ⨆ (n : ι), ∑ a in s, f a n
⊢ iSup (f a) + ∑ a in s, iSup (f a) = ⨆ (n : ι), f a n + ∑ a in s, f a n
[PROOFSTEP]
rw [ih, iSup_add_iSup_of_monotone (hf a)]
[GOAL]
case refine'_2
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s✝ : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
a : α
s : Finset α
has : ¬a ∈ s
ih : ∑ a in s, iSup (f a) = ⨆ (n : ι), ∑ a in s, f a n
⊢ Monotone fun n => ∑ a in s, f a n
[PROOFSTEP]
intro i j h
[GOAL]
case refine'_2
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝¹ : Set ℝ≥0∞
α : Type u_4
ι : Type u_5
inst✝ : SemilatticeSup ι
s✝ : Finset α
f : α → ι → ℝ≥0∞
hf : ∀ (a : α), Monotone (f a)
a : α
s : Finset α
has : ¬a ∈ s
ih : ∑ a in s, iSup (f a) = ⨆ (n : ι), ∑ a in s, f a n
i j : ι
h : i ≤ j
⊢ (fun n => ∑ a in s, f a n) i ≤ (fun n => ∑ a in s, f a n) j
[PROOFSTEP]
exact Finset.sum_le_sum fun a _ => hf a h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
⊢ a * iSup f = ⨆ (i : ι), a * f i
[PROOFSTEP]
by_cases hf : ∀ i, f i = 0
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
hf : ∀ (i : ι), f i = 0
⊢ a * iSup f = ⨆ (i : ι), a * f i
[PROOFSTEP]
obtain rfl : f = fun _ => 0
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
hf : ∀ (i : ι), f i = 0
⊢ f = fun x => 0
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
a : ℝ≥0∞
hf : ∀ (i : ι), (fun x => 0) i = 0
⊢ a * ⨆ (x : ι), 0 = ⨆ (i : ι), a * (fun x => 0) i
[PROOFSTEP]
exact funext hf
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
a : ℝ≥0∞
hf : ∀ (i : ι), (fun x => 0) i = 0
⊢ a * ⨆ (x : ι), 0 = ⨆ (i : ι), a * (fun x => 0) i
[PROOFSTEP]
simp only [iSup_zero_eq_zero, mul_zero]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
hf : ¬∀ (i : ι), f i = 0
⊢ a * iSup f = ⨆ (i : ι), a * f i
[PROOFSTEP]
refine' (monotone_id.const_mul' _).map_iSup_of_continuousAt _ (mul_zero a)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
hf : ¬∀ (i : ι), f i = 0
⊢ ContinuousAt (fun x => a * id x) (⨆ (i : ι), f i)
[PROOFSTEP]
refine' ENNReal.Tendsto.const_mul tendsto_id (Or.inl _)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
hf : ¬∀ (i : ι), f i = 0
⊢ id (⨆ (i : ι), f i) ≠ 0
[PROOFSTEP]
exact mt iSup_eq_zero.1 hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ a * sSup s = ⨆ (i : ℝ≥0∞) (_ : i ∈ s), a * i
[PROOFSTEP]
simp only [sSup_eq_iSup, mul_iSup]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
⊢ iSup f * a = ⨆ (i : ι), f i * a
[PROOFSTEP]
rw [mul_comm, mul_iSup]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
⊢ ⨆ (i : ι), a * f i = ⨆ (i : ι), f i * a
[PROOFSTEP]
congr
[GOAL]
case e_s
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
⊢ (fun i => a * f i) = fun i => f i * a
[PROOFSTEP]
funext
[GOAL]
case e_s.h
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
f : ι → ℝ≥0∞
a : ℝ≥0∞
x✝ : ι
⊢ a * f x✝ = f x✝ * a
[PROOFSTEP]
rw [mul_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Sort u_4
R : Type u_5
inst✝¹ : SMul R ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
f : ι → ℝ≥0∞
c : R
⊢ c • ⨆ (i : ι), f i = ⨆ (i : ι), c • f i
[PROOFSTEP]
simp only [← smul_one_mul c (f _), ← smul_one_mul c (iSup f), ENNReal.mul_iSup]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
R : Type u_4
inst✝¹ : SMul R ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
s : Set ℝ≥0∞
c : R
⊢ c • sSup s = ⨆ (i : ℝ≥0∞) (_ : i ∈ s), c • i
[PROOFSTEP]
simp_rw [← smul_one_mul c (sSup s), ENNReal.mul_sSup, smul_one_mul]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ∃ s, Set.Countable s ∧ Dense s ∧ ¬0 ∈ s ∧ ¬⊤ ∈ s
[PROOFSTEP]
obtain ⟨s, s_count, s_dense, hs⟩ :
  ∃ s : Set ℝ≥0∞, s.Countable ∧ Dense s ∧ (∀ x, IsBot x → x ∉ s) ∧ ∀ x, IsTop x → x ∉ s :=
  exists_countable_dense_no_bot_top ℝ≥0∞
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ s : Set ℝ≥0∞
s_count : Set.Countable s
s_dense : Dense s
hs : (∀ (x : ℝ≥0∞), IsBot x → ¬x ∈ s) ∧ ∀ (x : ℝ≥0∞), IsTop x → ¬x ∈ s
⊢ ∃ s, Set.Countable s ∧ Dense s ∧ ¬0 ∈ s ∧ ¬⊤ ∈ s
[PROOFSTEP]
exact ⟨s, s_count, s_dense, fun h => hs.1 0 (by simp) h, fun h => hs.2 ∞ (by simp) h⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ s : Set ℝ≥0∞
s_count : Set.Countable s
s_dense : Dense s
hs : (∀ (x : ℝ≥0∞), IsBot x → ¬x ∈ s) ∧ ∀ (x : ℝ≥0∞), IsTop x → ¬x ∈ s
h : 0 ∈ s
⊢ IsBot 0
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ s : Set ℝ≥0∞
s_count : Set.Countable s
s_dense : Dense s
hs : (∀ (x : ℝ≥0∞), IsBot x → ¬x ∈ s) ∧ ∀ (x : ℝ≥0∞), IsTop x → ¬x ∈ s
h : ⊤ ∈ s
⊢ IsTop ⊤
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
⊢ ∃ y' z', y' < y ∧ z' < z ∧ x < y' + z'
[PROOFSTEP]
have : NeZero y := ⟨hy⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this : NeZero y
⊢ ∃ y' z', y' < y ∧ z' < z ∧ x < y' + z'
[PROOFSTEP]
have : NeZero z := ⟨hz⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this✝ : NeZero y
this : NeZero z
⊢ ∃ y' z', y' < y ∧ z' < z ∧ x < y' + z'
[PROOFSTEP]
have A : Tendsto (fun p : ℝ≥0∞ × ℝ≥0∞ => p.1 + p.2) (𝓝[<] y ×ˢ 𝓝[<] z) (𝓝 (y + z)) :=
  by
  apply Tendsto.mono_left _ (Filter.prod_mono nhdsWithin_le_nhds nhdsWithin_le_nhds)
  rw [← nhds_prod_eq]
  exact tendsto_add
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this✝ : NeZero y
this : NeZero z
⊢ Tendsto (fun p => p.fst + p.snd) (𝓝[Iio y] y ×ˢ 𝓝[Iio z] z) (𝓝 (y + z))
[PROOFSTEP]
apply Tendsto.mono_left _ (Filter.prod_mono nhdsWithin_le_nhds nhdsWithin_le_nhds)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this✝ : NeZero y
this : NeZero z
⊢ Tendsto (fun p => p.fst + p.snd) (𝓝 y ×ˢ 𝓝 z) (𝓝 (y + z))
[PROOFSTEP]
rw [← nhds_prod_eq]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this✝ : NeZero y
this : NeZero z
⊢ Tendsto (fun p => p.fst + p.snd) (𝓝 (y, z)) (𝓝 (y + z))
[PROOFSTEP]
exact tendsto_add
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this✝ : NeZero y
this : NeZero z
A : Tendsto (fun p => p.fst + p.snd) (𝓝[Iio y] y ×ˢ 𝓝[Iio z] z) (𝓝 (y + z))
⊢ ∃ y' z', y' < y ∧ z' < z ∧ x < y' + z'
[PROOFSTEP]
rcases((A.eventually (lt_mem_nhds h)).and (Filter.prod_mem_prod self_mem_nhdsWithin self_mem_nhdsWithin)).exists with
  ⟨⟨y', z'⟩, hx, hy', hz'⟩
[GOAL]
case intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z✝ ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
x y z : ℝ≥0∞
h : x < y + z
hy : y ≠ 0
hz : z ≠ 0
this✝ : NeZero y
this : NeZero z
A : Tendsto (fun p => p.fst + p.snd) (𝓝[Iio y] y ×ˢ 𝓝[Iio z] z) (𝓝 (y + z))
y' z' : ℝ≥0∞
hx : x < (y', z').fst + (y', z').snd
hy' : (y', z').fst ∈ Iio y
hz' : (y', z').snd ∈ Iio z
⊢ ∃ y' z', y' < y ∧ z' < z ∧ x < y' + z'
[PROOFSTEP]
exact ⟨y', z', hy', hz', hx⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
⊢ ∃ R, ∃ᶠ (n : ι) in l, x n < R
[PROOFSTEP]
by_contra h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ¬∃ R, ∃ᶠ (n : ι) in l, x n < R
⊢ False
[PROOFSTEP]
simp_rw [not_exists, not_frequently, not_lt] at h 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x_1 ≤ x x_2
⊢ False
[PROOFSTEP]
refine hx (ENNReal.eq_top_of_forall_nnreal_le fun r => le_limsInf_of_le (by isBoundedDefault) ?_)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x_1 ≤ x x_2
r : ℝ≥0
⊢ IsCobounded (fun x x_1 => x ≥ x_1) (map (fun n => ↑(↑Real.nnabs (x n))) l)
[PROOFSTEP]
isBoundedDefault
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x_1 ≤ x x_2
r : ℝ≥0
⊢ ∀ᶠ (n : ℝ≥0∞) in map (fun n => ↑(↑Real.nnabs (x n))) l, ↑r ≤ n
[PROOFSTEP]
simp only [eventually_map, ENNReal.coe_le_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x_1 ≤ x x_2
r : ℝ≥0
⊢ ∀ᶠ (a : ι) in l, r ≤ ↑Real.nnabs (x a)
[PROOFSTEP]
filter_upwards [h r] with i hi using hi.trans (le_abs_self (x i))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
⊢ ∃ R, ∃ᶠ (n : ι) in l, R < x n
[PROOFSTEP]
by_contra h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ¬∃ R, ∃ᶠ (n : ι) in l, R < x n
⊢ False
[PROOFSTEP]
simp_rw [not_exists, not_frequently, not_lt] at h 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x x_2 ≤ x_1
⊢ False
[PROOFSTEP]
refine hx (ENNReal.eq_top_of_forall_nnreal_le fun r => le_limsInf_of_le (by isBoundedDefault) ?_)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x x_2 ≤ x_1
r : ℝ≥0
⊢ IsCobounded (fun x x_1 => x ≥ x_1) (map (fun n => ↑(↑Real.nnabs (x n))) l)
[PROOFSTEP]
isBoundedDefault
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x x_2 ≤ x_1
r : ℝ≥0
⊢ ∀ᶠ (n : ℝ≥0∞) in map (fun n => ↑(↑Real.nnabs (x n))) l, ↑r ≤ n
[PROOFSTEP]
simp only [eventually_map, ENNReal.coe_le_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hx : liminf (fun n => ↑(↑Real.nnabs (x n))) l ≠ ⊤
h : ∀ (x_1 : ℝ), ∀ᶠ (x_2 : ι) in l, x x_2 ≤ x_1
r : ℝ≥0
⊢ ∀ᶠ (a : ι) in l, r ≤ ↑Real.nnabs (x a)
[PROOFSTEP]
filter_upwards [h (-r)] with i hi using (le_neg.1 hi).trans (neg_le_abs_self _)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => |x i|
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
rw [isBoundedUnder_le_abs, not_and_or] at hbdd 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : (¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i) ∨ ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
obtain hbdd | hbdd := hbdd
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
obtain ⟨R, hR⟩ := exists_frequently_lt_of_liminf_ne_top hf
[GOAL]
case inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
obtain ⟨q, hq⟩ := exists_rat_gt R
[GOAL]
case inl.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
refine' ⟨q, q + 1, (lt_add_iff_pos_right _).2 zero_lt_one, _, _⟩
[GOAL]
case inl.intro.intro.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
⊢ ∃ᶠ (i : ι) in l, x i < ↑q
[PROOFSTEP]
refine' fun hcon => hR _
[GOAL]
case inl.intro.intro.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => x i < ↑q) x_1
⊢ ∀ᶠ (x_1 : ι) in l, ¬(fun n => x n < R) x_1
[PROOFSTEP]
filter_upwards [hcon] with x hx using not_lt.2 (lt_of_lt_of_le hq (not_lt.1 hx)).le
[GOAL]
case inl.intro.intro.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
⊢ ∃ᶠ (i : ι) in l, ↑(q + 1) < x i
[PROOFSTEP]
simp only [IsBoundedUnder, IsBounded, eventually_map, eventually_atTop, ge_iff_le, not_exists, not_forall, not_le,
  exists_prop] at hbdd 
[GOAL]
case inl.intro.intro.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x a ≤ x_1
⊢ ∃ᶠ (i : ι) in l, ↑(q + 1) < x i
[PROOFSTEP]
refine' fun hcon => hbdd ↑(q + 1) _
[GOAL]
case inl.intro.intro.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x a ≤ x_1
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => ↑(q + 1) < x i) x_1
⊢ ∀ᶠ (a : ι) in l, x a ≤ ↑(q + 1)
[PROOFSTEP]
filter_upwards [hcon] with x hx using not_lt.1 hx
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
obtain ⟨R, hR⟩ := exists_frequently_lt_of_liminf_ne_top' hf
[GOAL]
case inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
obtain ⟨q, hq⟩ := exists_rat_lt R
[GOAL]
case inr.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i
[PROOFSTEP]
refine' ⟨q - 1, q, (sub_lt_self_iff _).2 zero_lt_one, _, _⟩
[GOAL]
case inr.intro.intro.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
⊢ ∃ᶠ (i : ι) in l, x i < ↑(q - 1)
[PROOFSTEP]
simp only [IsBoundedUnder, IsBounded, eventually_map, eventually_atTop, ge_iff_le, not_exists, not_forall, not_le,
  exists_prop] at hbdd 
[GOAL]
case inr.intro.intro.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x_1 ≤ x a
⊢ ∃ᶠ (i : ι) in l, x i < ↑(q - 1)
[PROOFSTEP]
refine' fun hcon => hbdd ↑(q - 1) _
[GOAL]
case inr.intro.intro.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x_1 ≤ x a
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => x i < ↑(q - 1)) x_1
⊢ ∀ᶠ (a : ι) in l, ↑(q - 1) ≤ x a
[PROOFSTEP]
filter_upwards [hcon] with x hx using not_lt.1 hx
[GOAL]
case inr.intro.intro.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
⊢ ∃ᶠ (i : ι) in l, ↑q < x i
[PROOFSTEP]
refine' fun hcon => hR _
[GOAL]
case inr.intro.intro.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => ↑q < x i) x_1
⊢ ∀ᶠ (x_1 : ι) in l, ¬(fun n => R < x n) x_1
[PROOFSTEP]
filter_upwards [hcon] with x hx using not_lt.2 ((not_lt.1 hx).trans hq.le)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : α → ℝ≥0
r : ℝ≥0
⊢ HasSum (fun a => ↑(f a)) ↑r ↔ HasSum f r
[PROOFSTEP]
simp only [HasSum, ← coe_finset_sum, tendsto_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : α → ℝ≥0
r : ℝ≥0
hr : HasSum f r
⊢ ↑(tsum f) = ∑' (a : α), ↑(f a)
[PROOFSTEP]
rw [hr.tsum_eq, ENNReal.tsum_coe_eq hr]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : β → ℝ≥0
⊢ ∑' (b : β), ↑(f b) ≠ ⊤ ↔ Summable f
[PROOFSTEP]
refine ⟨fun h => ?_, fun h => ENNReal.coe_tsum h ▸ ENNReal.coe_ne_top⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : β → ℝ≥0
h : ∑' (b : β), ↑(f b) ≠ ⊤
⊢ Summable f
[PROOFSTEP]
lift ∑' b, (f b : ℝ≥0∞) to ℝ≥0 using h with a ha
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : β → ℝ≥0
a : ℝ≥0
ha : ↑a = ∑' (b : β), ↑(f b)
⊢ Summable f
[PROOFSTEP]
refine' ⟨a, ENNReal.hasSum_coe.1 _⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : β → ℝ≥0
a : ℝ≥0
ha : ↑a = ∑' (b : β), ↑(f b)
⊢ HasSum (fun a => ↑(f a)) ↑a
[PROOFSTEP]
rw [ha]
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : β → ℝ≥0
a : ℝ≥0
ha : ↑a = ∑' (b : β), ↑(f b)
⊢ HasSum (fun a => ↑(f a)) (∑' (b : β), ↑(f b))
[PROOFSTEP]
exact ENNReal.summable.hasSum
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
s : ι → Finset α
hs : ∀ (t : Finset α), ∃ i, t ⊆ s i
⊢ ∑' (a : α), f a = ⨆ (i : ι), ∑ a in s i, f a
[PROOFSTEP]
rw [ENNReal.tsum_eq_iSup_sum]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
s : ι → Finset α
hs : ∀ (t : Finset α), ∃ i, t ⊆ s i
⊢ ⨆ (s : Finset α), ∑ a in s, f a = ⨆ (i : ι), ∑ a in s i, f a
[PROOFSTEP]
symm
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
s : ι → Finset α
hs : ∀ (t : Finset α), ∃ i, t ⊆ s i
⊢ ⨆ (i : ι), ∑ a in s i, f a = ⨆ (s : Finset α), ∑ a in s, f a
[PROOFSTEP]
change ⨆ i : ι, (fun t : Finset α => ∑ a in t, f a) (s i) = ⨆ s : Finset α, ∑ a in s, f a
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
s : ι → Finset α
hs : ∀ (t : Finset α), ∃ i, t ⊆ s i
⊢ ⨆ (i : ι), (fun t => ∑ a in t, f a) (s i) = ⨆ (s : Finset α), ∑ a in s, f a
[PROOFSTEP]
exact (Finset.sum_mono_set f).iSup_comp_eq hs
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g a : α → ℝ≥0∞
tsum_ne_top : ∑' (i : α), a i ≠ ⊤
j : α
⊢ a j < ⊤
[PROOFSTEP]
contrapose! tsum_ne_top with h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g a : α → ℝ≥0∞
j : α
h : ⊤ ≤ a j
⊢ ∑' (i : α), a i = ⊤
[PROOFSTEP]
exact ENNReal.tsum_eq_top_of_eq_top ⟨j, top_unique h⟩
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
⊢ ∑' (x : α), c = ⊤
[PROOFSTEP]
have A : Tendsto (fun n : ℕ => (n : ℝ≥0∞) * c) atTop (𝓝 (∞ * c)) :=
  by
  apply ENNReal.Tendsto.mul_const tendsto_nat_nhds_top
  simp only [true_or_iff, top_ne_zero, Ne.def, not_false_iff]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
⊢ Tendsto (fun n => ↑n * c) atTop (𝓝 (⊤ * c))
[PROOFSTEP]
apply ENNReal.Tendsto.mul_const tendsto_nat_nhds_top
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
⊢ ⊤ ≠ 0 ∨ c ≠ ⊤
[PROOFSTEP]
simp only [true_or_iff, top_ne_zero, Ne.def, not_false_iff]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
A : Tendsto (fun n => ↑n * c) atTop (𝓝 (⊤ * c))
⊢ ∑' (x : α), c = ⊤
[PROOFSTEP]
have B : ∀ n : ℕ, (n : ℝ≥0∞) * c ≤ ∑' _ : α, c := fun n =>
  by
  rcases Infinite.exists_subset_card_eq α n with ⟨s, hs⟩
  simpa [hs] using @ENNReal.sum_le_tsum α (fun _ => c) s
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
A : Tendsto (fun n => ↑n * c) atTop (𝓝 (⊤ * c))
n : ℕ
⊢ ↑n * c ≤ ∑' (x : α), c
[PROOFSTEP]
rcases Infinite.exists_subset_card_eq α n with ⟨s, hs⟩
[GOAL]
case intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
A : Tendsto (fun n => ↑n * c) atTop (𝓝 (⊤ * c))
n : ℕ
s : Finset α
hs : Finset.card s = n
⊢ ↑n * c ≤ ∑' (x : α), c
[PROOFSTEP]
simpa [hs] using @ENNReal.sum_le_tsum α (fun _ => c) s
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α✝ → ℝ≥0∞
α : Type u_4
inst✝ : Infinite α
c : ℝ≥0∞
hc : c ≠ 0
A : Tendsto (fun n => ↑n * c) atTop (𝓝 (⊤ * c))
B : ∀ (n : ℕ), ↑n * c ≤ ∑' (x : α), c
⊢ ∑' (x : α), c = ⊤
[PROOFSTEP]
simpa [hc] using le_of_tendsto' A B
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
⊢ ∑' (i : α), a * f i = a * ∑' (i : α), f i
[PROOFSTEP]
by_cases hf : ∀ i, f i = 0
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
hf : ∀ (i : α), f i = 0
⊢ ∑' (i : α), a * f i = a * ∑' (i : α), f i
[PROOFSTEP]
simp [hf]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
hf : ¬∀ (i : α), f i = 0
⊢ ∑' (i : α), a * f i = a * ∑' (i : α), f i
[PROOFSTEP]
rw [← ENNReal.tsum_eq_zero] at hf 
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
hf : ¬∑' (i : α), f i = 0
⊢ ∑' (i : α), a * f i = a * ∑' (i : α), f i
[PROOFSTEP]
have : Tendsto (fun s : Finset α => ∑ j in s, a * f j) atTop (𝓝 (a * ∑' i, f i)) :=
  by
  simp only [← Finset.mul_sum]
  exact ENNReal.Tendsto.const_mul ENNReal.summable.hasSum (Or.inl hf)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
hf : ¬∑' (i : α), f i = 0
⊢ Tendsto (fun s => ∑ j in s, a * f j) atTop (𝓝 (a * ∑' (i : α), f i))
[PROOFSTEP]
simp only [← Finset.mul_sum]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
hf : ¬∑' (i : α), f i = 0
⊢ Tendsto (fun s => a * ∑ x in s, f x) atTop (𝓝 (a * ∑' (x : α), f x))
[PROOFSTEP]
exact ENNReal.Tendsto.const_mul ENNReal.summable.hasSum (Or.inl hf)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
hf : ¬∑' (i : α), f i = 0
this : Tendsto (fun s => ∑ j in s, a * f j) atTop (𝓝 (a * ∑' (i : α), f i))
⊢ ∑' (i : α), a * f i = a * ∑' (i : α), f i
[PROOFSTEP]
exact HasSum.tsum_eq this
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
⊢ ∑' (i : α), f i * a = (∑' (i : α), f i) * a
[PROOFSTEP]
simp [mul_comm, ENNReal.tsum_mul_left]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
R : Type u_4
inst✝¹ : SMul R ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
a : R
⊢ ∑' (i : α), a • f i = a • ∑' (i : α), f i
[PROOFSTEP]
simpa only [smul_one_mul] using @ENNReal.tsum_mul_left _ (a • (1 : ℝ≥0∞)) _
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
a : α
f : α → ℝ≥0∞
x✝ : α
h : x✝ ≠ a
⊢ ⨆ (_ : a = x✝), f x✝ = 0
[PROOFSTEP]
simp [h.symm]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
a : α
f : α → ℝ≥0∞
⊢ ⨆ (_ : a = a), f a = f a
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
r : ℝ≥0∞
⊢ HasSum f r ↔ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
[PROOFSTEP]
refine' ⟨HasSum.tendsto_sum_nat, fun h => _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
r : ℝ≥0∞
h : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
⊢ HasSum f r
[PROOFSTEP]
rw [← iSup_eq_of_tendsto _ h, ← ENNReal.tsum_eq_iSup_nat]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
r : ℝ≥0∞
h : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
⊢ HasSum f (∑' (i : ℕ), f i)
[PROOFSTEP]
exact ENNReal.summable.hasSum
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
r : ℝ≥0∞
h : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
⊢ Monotone fun n => ∑ i in Finset.range n, f i
[PROOFSTEP]
exact fun s t hst => Finset.sum_le_sum_of_subset (Finset.range_subset.2 hst)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
⊢ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 (∑' (n : ℕ), f n))
[PROOFSTEP]
rw [← hasSum_iff_tendsto_nat]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
⊢ HasSum (fun i => f i) (∑' (n : ℕ), f n)
[PROOFSTEP]
exact ENNReal.summable.hasSum
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0∞
hf : ∑' (i : α), f i ≠ ⊤
⊢ Summable (ENNReal.toNNReal ∘ f)
[PROOFSTEP]
simpa only [← tsum_coe_ne_top_iff_summable, toNNReal_apply_of_tsum_ne_top hf] using hf
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0∞
hf : ∑' (x : α), f x ≠ ⊤
⊢ Tendsto f cofinite (𝓝 0)
[PROOFSTEP]
have f_ne_top : ∀ n, f n ≠ ∞ := ENNReal.ne_top_of_tsum_ne_top hf
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0∞
hf : ∑' (x : α), f x ≠ ⊤
f_ne_top : ∀ (n : α), f n ≠ ⊤
⊢ Tendsto f cofinite (𝓝 0)
[PROOFSTEP]
have h_f_coe : f = fun n => ((f n).toNNReal : ENNReal) := funext fun n => (coe_toNNReal (f_ne_top n)).symm
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0∞
hf : ∑' (x : α), f x ≠ ⊤
f_ne_top : ∀ (n : α), f n ≠ ⊤
h_f_coe : f = fun n => ↑(ENNReal.toNNReal (f n))
⊢ Tendsto f cofinite (𝓝 0)
[PROOFSTEP]
rw [h_f_coe, ← @coe_zero, tendsto_coe]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0∞
hf : ∑' (x : α), f x ≠ ⊤
f_ne_top : ∀ (n : α), f n ≠ ⊤
h_f_coe : f = fun n => ↑(ENNReal.toNNReal (f n))
⊢ Tendsto (fun n => ENNReal.toNNReal (f n)) cofinite (𝓝 0)
[PROOFSTEP]
exact NNReal.tendsto_cofinite_zero_of_summable (summable_toNNReal_of_tsum_ne_top hf)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
hf : ∑' (x : ℕ), f x ≠ ⊤
⊢ Tendsto f atTop (𝓝 0)
[PROOFSTEP]
rw [← Nat.cofinite_eq_atTop]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
hf : ∑' (x : ℕ), f x ≠ ⊤
⊢ Tendsto f cofinite (𝓝 0)
[PROOFSTEP]
exact tendsto_cofinite_zero_of_tsum_ne_top hf
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0∞
hf : ∑' (x : α), f x ≠ ⊤
⊢ Tendsto (fun s => ∑' (b : { x // ¬x ∈ s }), f ↑b) atTop (𝓝 0)
[PROOFSTEP]
lift f to α → ℝ≥0 using ENNReal.ne_top_of_tsum_ne_top hf
[GOAL]
case intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0
hf : ∑' (x : α), (fun i => ↑(f i)) x ≠ ⊤
⊢ Tendsto (fun s => ∑' (b : { x // ¬x ∈ s }), (fun i => ↑(f i)) ↑b) atTop (𝓝 0)
[PROOFSTEP]
convert ENNReal.tendsto_coe.2 (NNReal.tendsto_tsum_compl_atTop_zero f)
[GOAL]
case h.e'_3.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0
hf : ∑' (x : α), (fun i => ↑(f i)) x ≠ ⊤
x✝ : Finset α
⊢ ∑' (b : { x // ¬x ∈ x✝ }), (fun i => ↑(f i)) ↑b = ↑(∑' (b : { x // ¬x ∈ x✝ }), f ↑b)
[PROOFSTEP]
rw [ENNReal.coe_tsum]
[GOAL]
case h.e'_3.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α✝ → ℝ≥0∞
α : Type u_4
f : α → ℝ≥0
hf : ∑' (x : α), (fun i => ↑(f i)) x ≠ ⊤
x✝ : Finset α
⊢ Summable fun b => f ↑b
[PROOFSTEP]
exact NNReal.summable_comp_injective (tsum_coe_ne_top_iff_summable.1 hf) Subtype.coe_injective
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g✝ : α → ℝ≥0∞
f g : ℕ → ℝ≥0∞
h₁ : ∑' (i : ℕ), g i ≠ ⊤
h₂ : g ≤ f
this : ∀ (i : ℕ), f i - g i + g i = f i
⊢ ∑' (i : ℕ), (f i - g i) + ∑' (i : ℕ), g i = ∑' (i : ℕ), f i
[PROOFSTEP]
simp only [← ENNReal.tsum_add, this]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g✝ : α → ℝ≥0∞
f : α → β
hf : Surjective f
g : β → ℝ≥0∞
⊢ ∑' (y : β), g y = ∑' (y : β), g (f (surjInv hf y))
[PROOFSTEP]
simp only [surjInv_eq hf]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
ι : Type u_4
f : α → ℝ≥0∞
s : Set ι
t : ι → Set α
⊢ ⋃ (i : ι) (_ : i ∈ s), t i = ⋃ (i : ↑s), t ↑i
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
ι : Type u_4
inst✝ : Fintype ι
f : α → ℝ≥0∞
t : ι → Set α
⊢ ∑' (x : ↑(⋃ (i : ι), t i)), f ↑x ≤ ∑ i : ι, ∑' (x : ↑(t i)), f ↑x
[PROOFSTEP]
rw [← tsum_fintype]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
ι : Type u_4
inst✝ : Fintype ι
f : α → ℝ≥0∞
t : ι → Set α
⊢ ∑' (x : ↑(⋃ (i : ι), t i)), f ↑x ≤ ∑' (b : ι) (x : ↑(t b)), f ↑x
[PROOFSTEP]
exact tsum_iUnion_le_tsum f t
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s✝ : Set ℝ≥0∞
f✝ g f : α → ℝ≥0∞
s t : Set α
⊢ ∑' (x : ↑(⋃ (b : Bool), bif b then s else t)), f ↑x ≤ ∑' (x : ↑s), f ↑x + ∑' (x : ↑t), f ↑x
[PROOFSTEP]
simpa using tsum_iUnion_le f (cond · s t)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
hf : ∑' (n : ℕ), f n = ⊤
hf0 : f 0 ≠ ⊤
⊢ ∑' (n : ℕ), f (n + 1) = ⊤
[PROOFSTEP]
rw [tsum_eq_zero_add' ENNReal.summable, add_eq_top] at hf 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g : α → ℝ≥0∞
f : ℕ → ℝ≥0∞
hf : f 0 = ⊤ ∨ ∑' (b : ℕ), f (b + 1) = ⊤
hf0 : f 0 ≠ ⊤
⊢ ∑' (n : ℕ), f (n + 1) = ⊤
[PROOFSTEP]
exact hf.resolve_left hf0
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
tsum_ne_top : ∑' (i : ι), a i ≠ ⊤
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
⊢ Set.Finite {i | ε ≤ a i}
[PROOFSTEP]
by_contra h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
tsum_ne_top : ∑' (i : ι), a i ≠ ⊤
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
h : ¬Set.Finite {i | ε ≤ a i}
⊢ False
[PROOFSTEP]
have := Infinite.to_subtype h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
tsum_ne_top : ∑' (i : ι), a i ≠ ⊤
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
h : ¬Set.Finite {i | ε ≤ a i}
this : Infinite ↑{i | ε ≤ a i}
⊢ False
[PROOFSTEP]
refine tsum_ne_top (top_unique ?_)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
tsum_ne_top : ∑' (i : ι), a i ≠ ⊤
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
h : ¬Set.Finite {i | ε ≤ a i}
this : Infinite ↑{i | ε ≤ a i}
⊢ ⊤ ≤ ∑' (i : ι), a i
[PROOFSTEP]
calc
  ⊤ = ∑' _ : {i | ε ≤ a i}, ε := (tsum_const_eq_top_of_ne_zero ε_ne_zero).symm
  _ ≤ ∑' i, a i :=
    tsum_le_tsum_of_inj (↑) Subtype.val_injective (fun _ _ => zero_le _) (fun i => i.2) ENNReal.summable
      ENNReal.summable
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
c : ℝ≥0∞
c_ne_top : c ≠ ⊤
tsum_le_c : ∑' (i : ι), a i ≤ c
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
⊢ ∃ hf, ↑(Finset.card (Finite.toFinset hf)) ≤ c / ε
[PROOFSTEP]
have hf : {i : ι | ε ≤ a i}.Finite := finite_const_le_of_tsum_ne_top (ne_top_of_le_ne_top c_ne_top tsum_le_c) ε_ne_zero
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
c : ℝ≥0∞
c_ne_top : c ≠ ⊤
tsum_le_c : ∑' (i : ι), a i ≤ c
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
hf : Set.Finite {i | ε ≤ a i}
⊢ ∃ hf, ↑(Finset.card (Finite.toFinset hf)) ≤ c / ε
[PROOFSTEP]
refine ⟨hf, (ENNReal.le_div_iff_mul_le (.inl ε_ne_zero) (.inr c_ne_top)).2 ?_⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
c : ℝ≥0∞
c_ne_top : c ≠ ⊤
tsum_le_c : ∑' (i : ι), a i ≤ c
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
hf : Set.Finite {i | ε ≤ a i}
⊢ ↑(Finset.card (Finite.toFinset hf)) * ε ≤ c
[PROOFSTEP]
calc
  ↑hf.toFinset.card * ε = ∑ _i in hf.toFinset, ε := by rw [Finset.sum_const, nsmul_eq_mul]
  _ ≤ ∑ i in hf.toFinset, a i := (Finset.sum_le_sum fun i => hf.mem_toFinset.1)
  _ ≤ ∑' i, a i := (ENNReal.sum_le_tsum _)
  _ ≤ c := tsum_le_c
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c✝ d : ℝ≥0∞
r p q : ℝ≥0
x y z ε✝ ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f g : α → ℝ≥0∞
ι : Type u_4
a : ι → ℝ≥0∞
c : ℝ≥0∞
c_ne_top : c ≠ ⊤
tsum_le_c : ∑' (i : ι), a i ≤ c
ε : ℝ≥0∞
ε_ne_zero : ε ≠ 0
hf : Set.Finite {i | ε ≤ a i}
⊢ ↑(Finset.card (Finite.toFinset hf)) * ε = ∑ _i in Finite.toFinset hf, ε
[PROOFSTEP]
rw [Finset.sum_const, nsmul_eq_mul]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
fi : Filter ι
f : ι → ℝ≥0∞
hf : ∀ (i : ι), f i ≠ ⊤
x : ℝ≥0∞
hx : x ≠ ⊤
⊢ Tendsto (fun n => ENNReal.toReal (f n)) fi (𝓝 (ENNReal.toReal x)) ↔ Tendsto f fi (𝓝 x)
[PROOFSTEP]
lift f to ι → ℝ≥0 using hf
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
fi : Filter ι
x : ℝ≥0∞
hx : x ≠ ⊤
f : ι → ℝ≥0
⊢ Tendsto (fun n => ENNReal.toReal ((fun i => ↑(f i)) n)) fi (𝓝 (ENNReal.toReal x)) ↔ Tendsto (fun i => ↑(f i)) fi (𝓝 x)
[PROOFSTEP]
lift x to ℝ≥0 using hx
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_4
fi : Filter ι
f : ι → ℝ≥0
x : ℝ≥0
⊢ Tendsto (fun n => ENNReal.toReal ((fun i => ↑(f i)) n)) fi (𝓝 (ENNReal.toReal ↑x)) ↔
    Tendsto (fun i => ↑(f i)) fi (𝓝 ↑x)
[PROOFSTEP]
simp [tendsto_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0
⊢ ∑' (a : α), ↑(f a) ≠ ⊤ ↔ Summable fun a => ↑(f a)
[PROOFSTEP]
rw [NNReal.summable_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0
⊢ ∑' (a : α), ↑(f a) ≠ ⊤ ↔ Summable fun a => f a
[PROOFSTEP]
exact tsum_coe_ne_top_iff_summable
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0∞
hsum : ∑' (x : α), f x ≠ ⊤
⊢ HasSum (fun x => ENNReal.toReal (f x)) (∑' (x : α), ENNReal.toReal (f x))
[PROOFSTEP]
lift f to α → ℝ≥0 using ENNReal.ne_top_of_tsum_ne_top hsum
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0
hsum : ∑' (x : α), (fun i => ↑(f i)) x ≠ ⊤
⊢ HasSum (fun x => ENNReal.toReal ((fun i => ↑(f i)) x)) (∑' (x : α), ENNReal.toReal ((fun i => ↑(f i)) x))
[PROOFSTEP]
simp only [coe_toReal, ← NNReal.coe_tsum, NNReal.hasSum_coe]
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f : α → ℝ≥0
hsum : ∑' (x : α), (fun i => ↑(f i)) x ≠ ⊤
⊢ HasSum (fun a => f a) (∑' (a : α), f a)
[PROOFSTEP]
exact (tsum_coe_ne_top_iff_summable.1 hsum).hasSum
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
⊢ ∑' (b : β), f b = ENNReal.toNNReal (∑' (b : β), ↑(f b))
[PROOFSTEP]
by_cases h : Summable f
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
h : Summable f
⊢ ∑' (b : β), f b = ENNReal.toNNReal (∑' (b : β), ↑(f b))
[PROOFSTEP]
rw [← ENNReal.coe_tsum h, ENNReal.toNNReal_coe]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
h : ¬Summable f
⊢ ∑' (b : β), f b = ENNReal.toNNReal (∑' (b : β), ↑(f b))
[PROOFSTEP]
have A := tsum_eq_zero_of_not_summable h
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
h : ¬Summable f
A : ∑' (b : β), f b = 0
⊢ ∑' (b : β), f b = ENNReal.toNNReal (∑' (b : β), ↑(f b))
[PROOFSTEP]
simp only [← ENNReal.tsum_coe_ne_top_iff_summable, Classical.not_not] at h 
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
A : ∑' (b : β), f b = 0
h : ∑' (b : β), ↑(f b) = ⊤
⊢ ∑' (b : β), f b = ENNReal.toNNReal (∑' (b : β), ↑(f b))
[PROOFSTEP]
simp only [h, ENNReal.top_toNNReal, A]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : β → ℝ≥0
r : ℝ≥0
hgf : ∀ (b : β), g b ≤ f b
hfr : HasSum f r
⊢ ∑' (b : β), ↑(g b) ≤ ↑r
[PROOFSTEP]
refine hasSum_le (fun b => ?_) ENNReal.summable.hasSum (ENNReal.hasSum_coe.2 hfr)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : β → ℝ≥0
r : ℝ≥0
hgf : ∀ (b : β), g b ≤ f b
hfr : HasSum f r
b : β
⊢ ↑(g b) ≤ ↑(f b)
[PROOFSTEP]
exact ENNReal.coe_le_coe.2 (hgf _)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : Summable f
⊢ Set.Countable (support f)
[PROOFSTEP]
rw [← NNReal.summable_coe] at h 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : Summable fun a => ↑(f a)
⊢ Set.Countable (support f)
[PROOFSTEP]
simpa [support] using h.countable_support
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
r : ℝ≥0
⊢ HasSum f r ↔ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
[PROOFSTEP]
rw [← ENNReal.hasSum_coe, ENNReal.hasSum_iff_tendsto_nat]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
r : ℝ≥0
⊢ Tendsto (fun n => ∑ i in Finset.range n, ↑(f i)) atTop (𝓝 ↑r) ↔
    Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
[PROOFSTEP]
simp only [← ENNReal.coe_finset_sum]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
r : ℝ≥0
⊢ Tendsto (fun n => ↑(∑ a in Finset.range n, f a)) atTop (𝓝 ↑r) ↔
    Tendsto (fun n => ∑ a in Finset.range n, f a) atTop (𝓝 r)
[PROOFSTEP]
exact ENNReal.tendsto_coe
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ ¬Summable f ↔ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ ¬Summable f → Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
[PROOFSTEP]
intro h
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
h : ¬Summable f
⊢ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
[PROOFSTEP]
refine' ((tendsto_of_monotone _).resolve_right h).comp _
[GOAL]
case mp.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
h : ¬Summable f
⊢ Monotone fun s => ∑ b in s, f b
case mp.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
h : ¬Summable f
⊢ Tendsto (fun n => Finset.range n) atTop atTop
[PROOFSTEP]
exacts [Finset.sum_mono_set _, tendsto_finset_range]
[GOAL]
case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop → ¬Summable f
[PROOFSTEP]
rintro hnat ⟨r, hr⟩
[GOAL]
case mpr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
hnat : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
r : ℝ≥0
hr : HasSum f r
⊢ False
[PROOFSTEP]
exact not_tendsto_nhds_of_tendsto_atTop hnat _ (hasSum_iff_tendsto_nat.1 hr)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ Summable f ↔ ¬Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
[PROOFSTEP]
rw [← not_iff_not, Classical.not_not, not_summable_iff_tendsto_nat_atTop]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
c : ℝ≥0
h : ∀ (n : ℕ), ∑ i in Finset.range n, f i ≤ c
⊢ Summable f
[PROOFSTEP]
refine summable_iff_not_tendsto_nat_atTop.2 fun H => ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
c : ℝ≥0
h : ∀ (n : ℕ), ∑ i in Finset.range n, f i ≤ c
H : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
⊢ False
[PROOFSTEP]
rcases exists_lt_of_tendsto_atTop H 0 c with ⟨n, -, hn⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
c : ℝ≥0
h : ∀ (n : ℕ), ∑ i in Finset.range n, f i ≤ c
H : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
n : ℕ
hn : c < ∑ i in Finset.range n, f i
⊢ False
[PROOFSTEP]
exact lt_irrefl _ (hn.trans_le (h n))
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ≥0
⊢ Summable f ↔
    (∀ (x : α), Summable fun y => f { fst := x, snd := y }) ∧ Summable fun x => ∑' (y : β x), f { fst := x, snd := y }
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ≥0
⊢ Summable f →
    (∀ (x : α), Summable fun y => f { fst := x, snd := y }) ∧ Summable fun x => ∑' (y : β x), f { fst := x, snd := y }
[PROOFSTEP]
simp only [← NNReal.summable_coe, NNReal.coe_tsum]
[GOAL]
case mp
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ≥0
⊢ (Summable fun a => ↑(f a)) →
    (∀ (x : α), Summable fun a => ↑(f { fst := x, snd := a })) ∧
      Summable fun a => ∑' (a_1 : β a), ↑(f { fst := a, snd := a_1 })
[PROOFSTEP]
exact fun h => ⟨h.sigma_factor, h.sigma⟩
[GOAL]
case mpr
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ≥0
⊢ ((∀ (x : α), Summable fun y => f { fst := x, snd := y }) ∧ Summable fun x => ∑' (y : β x), f { fst := x, snd := y }) →
    Summable f
[PROOFSTEP]
rintro ⟨h₁, h₂⟩
[GOAL]
case mpr.intro
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ≥0
h₁ : ∀ (x : α), Summable fun y => f { fst := x, snd := y }
h₂ : Summable fun x => ∑' (y : β x), f { fst := x, snd := y }
⊢ Summable f
[PROOFSTEP]
simpa only [← ENNReal.tsum_coe_ne_top_iff_summable, ENNReal.tsum_sigma', ENNReal.coe_tsum (h₁ _)] using h₂
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
s : Set α
⊢ Summable (indicator s f)
[PROOFSTEP]
refine' NNReal.summable_of_le (fun a => le_trans (le_of_eq (s.indicator_apply f a)) _) hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
s : Set α
a : α
⊢ (if a ∈ s then f a else 0) ≤ f a
[PROOFSTEP]
split_ifs
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
s : Set α
a : α
h✝ : a ∈ s
⊢ f a ≤ f a
case neg α : Type u_1 β : Type u_2 γ : Type u_3 f : α → ℝ≥0 hf : Summable f s : Set α a : α h✝ : ¬a ∈ s ⊢ 0 ≤ f a
[PROOFSTEP]
exact le_refl (f a)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
s : Set α
a : α
h✝ : ¬a ∈ s
⊢ 0 ≤ f a
[PROOFSTEP]
exact zero_le_coe
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ Tendsto (fun i => ∑' (k : ℕ), f (k + i)) atTop (𝓝 0)
[PROOFSTEP]
rw [← tendsto_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ Tendsto (fun a => ↑(∑' (k : ℕ), f (k + a))) atTop (𝓝 ↑0)
[PROOFSTEP]
convert _root_.tendsto_sum_nat_add fun i => (f i : ℝ)
[GOAL]
case h.e'_3.h
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
x✝ : ℕ
⊢ ↑(∑' (k : ℕ), f (k + x✝)) = ∑' (k : ℕ), ↑(f (k + x✝))
[PROOFSTEP]
norm_cast
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0
sf sg : ℝ≥0
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hf : HasSum f sf
hg : HasSum g sg
⊢ sf < sg
[PROOFSTEP]
have A : ∀ a : α, (f a : ℝ) ≤ g a := fun a => NNReal.coe_le_coe.2 (h a)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0
sf sg : ℝ≥0
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hf : HasSum f sf
hg : HasSum g sg
A : ∀ (a : α), ↑(f a) ≤ ↑(g a)
⊢ sf < sg
[PROOFSTEP]
have : (sf : ℝ) < sg := hasSum_lt A (NNReal.coe_lt_coe.2 hi) (hasSum_coe.2 hf) (hasSum_coe.2 hg)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0
sf sg : ℝ≥0
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hf : HasSum f sf
hg : HasSum g sg
A : ∀ (a : α), ↑(f a) ≤ ↑(g a)
this : ↑sf < ↑sg
⊢ sf < sg
[PROOFSTEP]
exact NNReal.coe_lt_coe.1 this
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
g : α → ℝ≥0
hg : Summable g
i : α
hi : 0 < g i
⊢ 0 < ∑' (b : α), g b
[PROOFSTEP]
rw [← tsum_zero]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
g : α → ℝ≥0
hg : Summable g
i : α
hi : 0 < g i
⊢ ∑' (x : ?m.347288), 0 < ∑' (b : α), g b
α : Type u_1 β : Type u_2 γ : Type u_3 g : α → ℝ≥0 hg : Summable g i : α hi : 0 < g i ⊢ Type ?u.347286
[PROOFSTEP]
exact tsum_lt_tsum (fun a => zero_le _) hi hg
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
i : α
⊢ ∑' (x : α), f x = f i + ∑' (x : α), if x = i then 0 else f x
[PROOFSTEP]
refine' tsum_eq_add_tsum_ite' i (NNReal.summable_of_le (fun i' => _) hf)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
i i' : α
⊢ update (fun x => f x) i 0 i' ≤ f i'
[PROOFSTEP]
rw [Function.update_apply]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
i i' : α
⊢ (if i' = i then 0 else f i') ≤ f i'
[PROOFSTEP]
split_ifs
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
i i' : α
h✝ : i' = i
⊢ 0 ≤ f i'
[PROOFSTEP]
simp only [zero_le', le_rfl]
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
hf : Summable f
i i' : α
h✝ : ¬i' = i
⊢ f i' ≤ f i'
[PROOFSTEP]
simp only [zero_le', le_rfl]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0∞
hf : ∀ (a : α), f a ≠ ⊤
⊢ ENNReal.toReal (∑' (a : α), f a) = ∑' (a : α), ENNReal.toReal (f a)
[PROOFSTEP]
simp only [ENNReal.toReal, tsum_toNNReal_eq hf, NNReal.coe_tsum]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0∞
hf : ∑' (i : ℕ), f i ≠ ⊤
⊢ Tendsto (fun i => ∑' (k : ℕ), f (k + i)) atTop (𝓝 0)
[PROOFSTEP]
lift f to ℕ → ℝ≥0 using ENNReal.ne_top_of_tsum_ne_top hf
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
hf : ∑' (i : ℕ), (fun i => ↑(f i)) i ≠ ⊤
⊢ Tendsto (fun i => ∑' (k : ℕ), (fun i => ↑(f i)) (k + i)) atTop (𝓝 0)
[PROOFSTEP]
replace hf : Summable f := tsum_coe_ne_top_iff_summable.1 hf
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
hf : Summable f
⊢ Tendsto (fun i => ∑' (k : ℕ), (fun i => ↑(f i)) (k + i)) atTop (𝓝 0)
[PROOFSTEP]
simp only [← ENNReal.coe_tsum, NNReal.summable_nat_add _ hf, ← ENNReal.coe_zero]
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
hf : Summable f
⊢ Tendsto (fun i => ↑(∑' (a : ℕ), f (a + i))) atTop (𝓝 ↑0)
[PROOFSTEP]
exact_mod_cast NNReal.tendsto_sum_nat_add f
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0∞
sf sg : ℝ≥0∞
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hsf : sf ≠ ⊤
hf : HasSum f sf
hg : HasSum g sg
⊢ sf < sg
[PROOFSTEP]
by_cases hsg : sg = ⊤
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0∞
sf sg : ℝ≥0∞
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hsf : sf ≠ ⊤
hf : HasSum f sf
hg : HasSum g sg
hsg : sg = ⊤
⊢ sf < sg
[PROOFSTEP]
exact hsg.symm ▸ lt_of_le_of_ne le_top hsf
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0∞
sf sg : ℝ≥0∞
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hsf : sf ≠ ⊤
hf : HasSum f sf
hg : HasSum g sg
hsg : ¬sg = ⊤
⊢ sf < sg
[PROOFSTEP]
have hg' : ∀ x, g x ≠ ⊤ := ENNReal.ne_top_of_tsum_ne_top (hg.tsum_eq.symm ▸ hsg)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → ℝ≥0∞
sf sg : ℝ≥0∞
i : α
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
hsf : sf ≠ ⊤
hf : HasSum f sf
hg : HasSum g sg
hsg : ¬sg = ⊤
hg' : ∀ (x : α), g x ≠ ⊤
⊢ sf < sg
[PROOFSTEP]
lift f to α → ℝ≥0 using fun x => ne_of_lt (lt_of_le_of_lt (h x) <| lt_of_le_of_ne le_top (hg' x))
[GOAL]
case neg.intro
α : Type u_1
β : Type u_2
γ : Type u_3
g : α → ℝ≥0∞
sf sg : ℝ≥0∞
i : α
hsf : sf ≠ ⊤
hg : HasSum g sg
hsg : ¬sg = ⊤
hg' : ∀ (x : α), g x ≠ ⊤
f : α → ℝ≥0
h : ∀ (a : α), (fun i => ↑(f i)) a ≤ g a
hi : (fun i => ↑(f i)) i < g i
hf : HasSum (fun i => ↑(f i)) sf
⊢ sf < sg
[PROOFSTEP]
lift g to α → ℝ≥0 using hg'
[GOAL]
case neg.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
sf sg : ℝ≥0∞
i : α
hsf : sf ≠ ⊤
hsg : ¬sg = ⊤
f : α → ℝ≥0
hf : HasSum (fun i => ↑(f i)) sf
g : α → ℝ≥0
hg : HasSum (fun i => ↑(g i)) sg
h : ∀ (a : α), (fun i => ↑(f i)) a ≤ (fun i => ↑(g i)) a
hi : (fun i => ↑(f i)) i < (fun i => ↑(g i)) i
⊢ sf < sg
[PROOFSTEP]
lift sf to ℝ≥0 using hsf
[GOAL]
case neg.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
sg : ℝ≥0∞
i : α
hsg : ¬sg = ⊤
f g : α → ℝ≥0
hg : HasSum (fun i => ↑(g i)) sg
h : ∀ (a : α), (fun i => ↑(f i)) a ≤ (fun i => ↑(g i)) a
hi : (fun i => ↑(f i)) i < (fun i => ↑(g i)) i
sf : ℝ≥0
hf : HasSum (fun i => ↑(f i)) ↑sf
⊢ ↑sf < sg
[PROOFSTEP]
lift sg to ℝ≥0 using hsg
[GOAL]
case neg.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
i : α
f g : α → ℝ≥0
h : ∀ (a : α), (fun i => ↑(f i)) a ≤ (fun i => ↑(g i)) a
hi : (fun i => ↑(f i)) i < (fun i => ↑(g i)) i
sf : ℝ≥0
hf : HasSum (fun i => ↑(f i)) ↑sf
sg : ℝ≥0
hg : HasSum (fun i => ↑(g i)) ↑sg
⊢ ↑sf < ↑sg
[PROOFSTEP]
simp only [coe_le_coe, coe_lt_coe] at h hi ⊢
[GOAL]
case neg.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
i : α
f g : α → ℝ≥0
sf : ℝ≥0
hf : HasSum (fun i => ↑(f i)) ↑sf
sg : ℝ≥0
hg : HasSum (fun i => ↑(g i)) ↑sg
h : ∀ (a : α), f a ≤ g a
hi : f i < g i
⊢ sf < sg
[PROOFSTEP]
exact NNReal.hasSum_lt h hi (ENNReal.hasSum_coe.1 hf) (ENNReal.hasSum_coe.1 hg)
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : Type u_4
f : α → ℝ
hf : Summable f
hn : ∀ (a : α), 0 ≤ f a
i : β → α
hi : Injective i
⊢ tsum (f ∘ i) ≤ tsum f
[PROOFSTEP]
lift f to α → ℝ≥0 using hn
[GOAL]
case intro
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : Type u_4
i : β → α
hi : Injective i
f : α → ℝ≥0
hf : Summable fun i => ↑(f i)
⊢ tsum ((fun i => ↑(f i)) ∘ i) ≤ ∑' (i : α), ↑(f i)
[PROOFSTEP]
rw [NNReal.summable_coe] at hf 
[GOAL]
case intro
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : Type u_4
i : β → α
hi : Injective i
f : α → ℝ≥0
hf : Summable fun i => f i
⊢ tsum ((fun i => ↑(f i)) ∘ i) ≤ ∑' (i : α), ↑(f i)
[PROOFSTEP]
simpa only [(· ∘ ·), ← NNReal.coe_tsum] using NNReal.tsum_comp_le_tsum_of_inj hf hi
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f g : β → ℝ
hg : ∀ (b : β), 0 ≤ g b
hgf : ∀ (b : β), g b ≤ f b
hf : Summable f
⊢ Summable g
[PROOFSTEP]
lift f to β → ℝ≥0 using fun b => (hg b).trans (hgf b)
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
g : β → ℝ
hg : ∀ (b : β), 0 ≤ g b
f : β → ℝ≥0
hgf : ∀ (b : β), g b ≤ (fun i => ↑(f i)) b
hf : Summable fun i => ↑(f i)
⊢ Summable g
[PROOFSTEP]
lift g to β → ℝ≥0 using hg
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
hf : Summable fun i => ↑(f i)
g : β → ℝ≥0
hgf : ∀ (b : β), (fun i => ↑(g i)) b ≤ (fun i => ↑(f i)) b
⊢ Summable fun i => ↑(g i)
[PROOFSTEP]
rw [NNReal.summable_coe] at hf ⊢
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : β → ℝ≥0
hf : Summable fun i => f i
g : β → ℝ≥0
hgf : ∀ (b : β), (fun i => ↑(g i)) b ≤ (fun i => ↑(f i)) b
⊢ Summable fun i => g i
[PROOFSTEP]
exact NNReal.summable_of_le (fun b => NNReal.coe_le_coe.1 (hgf b)) hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ
hf : Summable f
⊢ Summable fun n => Real.toNNReal (f n)
[PROOFSTEP]
apply NNReal.summable_coe.1
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ
hf : Summable f
⊢ Summable fun a => ↑(Real.toNNReal (f a))
[PROOFSTEP]
refine' summable_of_nonneg_of_le (fun n => NNReal.coe_nonneg _) (fun n => _) hf.abs
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ
hf : Summable f
n : α
⊢ ↑(Real.toNNReal (f n)) ≤ |f n|
[PROOFSTEP]
simp only [le_abs_self, Real.coe_toNNReal', max_le_iff, abs_nonneg, and_self_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0∞
h : ∑' (i : α), f i ≠ ⊤
⊢ Set.Countable (support f)
[PROOFSTEP]
lift f to α → ℝ≥0 using ENNReal.ne_top_of_tsum_ne_top h
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : ∑' (i : α), (fun i => ↑(f i)) i ≠ ⊤
⊢ Set.Countable (support fun i => ↑(f i))
[PROOFSTEP]
simpa [support] using (ENNReal.tsum_coe_ne_top_iff_summable.1 h).countable_support_nnreal
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ
hf : ∀ (i : ℕ), 0 ≤ f i
r : ℝ
⊢ HasSum f r ↔ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop (𝓝 r)
[PROOFSTEP]
lift f to ℕ → ℝ≥0 using hf
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : ℝ
f : ℕ → ℝ≥0
⊢ HasSum (fun i => ↑(f i)) r ↔ Tendsto (fun n => ∑ i in Finset.range n, (fun i => ↑(f i)) i) atTop (𝓝 r)
[PROOFSTEP]
simp only [HasSum, ← NNReal.coe_sum, NNReal.tendsto_coe']
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : ℝ
f : ℕ → ℝ≥0
⊢ (∃ hx, Tendsto (fun a => ∑ a in a, f a) atTop (𝓝 { val := r, property := hx })) ↔
    ∃ hx, Tendsto (fun a => ∑ a in Finset.range a, f a) atTop (𝓝 { val := r, property := hx })
[PROOFSTEP]
exact exists_congr fun hr => NNReal.hasSum_iff_tendsto_nat
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ
hf_nonneg : ∀ (n : α), 0 ≤ f n
hf : Summable f
⊢ ENNReal.ofReal (∑' (n : α), f n) = ∑' (n : α), ENNReal.ofReal (f n)
[PROOFSTEP]
simp_rw [ENNReal.ofReal, ENNReal.tsum_coe_eq (NNReal.hasSum_real_toNNReal_of_nonneg hf_nonneg hf)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
⊢ ¬Summable f ↔ Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
[PROOFSTEP]
lift f to ℕ → ℝ≥0 using hf
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ≥0
⊢ (¬Summable fun i => ↑(f i)) ↔ Tendsto (fun n => ∑ i in Finset.range n, (fun i => ↑(f i)) i) atTop atTop
[PROOFSTEP]
exact_mod_cast NNReal.not_summable_iff_tendsto_nat_atTop
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
⊢ Summable f ↔ ¬Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
[PROOFSTEP]
rw [← not_iff_not, Classical.not_not, not_summable_iff_tendsto_nat_atTop_of_nonneg hf]
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ
hf : ∀ (x : (x : α) × β x), 0 ≤ f x
⊢ Summable f ↔
    (∀ (x : α), Summable fun y => f { fst := x, snd := y }) ∧ Summable fun x => ∑' (y : β x), f { fst := x, snd := y }
[PROOFSTEP]
lift f to (Σ x, β x) → ℝ≥0 using hf
[GOAL]
case intro
α : Type u_1
β✝ : Type u_2
γ : Type u_3
β : α → Type u_4
f : (x : α) × β x → ℝ≥0
⊢ (Summable fun i => ↑(f i)) ↔
    (∀ (x : α), Summable fun y => (fun i => ↑(f i)) { fst := x, snd := y }) ∧
      Summable fun x => ∑' (y : β x), (fun i => ↑(f i)) { fst := x, snd := y }
[PROOFSTEP]
exact_mod_cast NNReal.summable_sigma
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i in Finset.range n, f i ≤ c
⊢ Summable f
[PROOFSTEP]
refine (summable_iff_not_tendsto_nat_atTop_of_nonneg hf).2 fun H => ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i in Finset.range n, f i ≤ c
H : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
⊢ False
[PROOFSTEP]
rcases exists_lt_of_tendsto_atTop H 0 c with ⟨n, -, hn⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i in Finset.range n, f i ≤ c
H : Tendsto (fun n => ∑ i in Finset.range n, f i) atTop atTop
n : ℕ
hn : c < ∑ i in Finset.range n, f i
⊢ False
[PROOFSTEP]
exact lt_irrefl _ (hn.trans_le (h n))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : EMetricSpace β
a : β
r : ℝ≥0∞
x y : ↑(EMetric.ball a r)
⊢ edist a ↑x + edist a ↑y < r + r
[PROOFSTEP]
rw [edist_comm a x, edist_comm a y]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : EMetricSpace β
a : β
r : ℝ≥0∞
x y : ↑(EMetric.ball a r)
⊢ edist (↑x) a + edist (↑y) a < r + r
[PROOFSTEP]
exact add_lt_add x.2 y.2
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
l : Filter β
f : β → α
y : α
⊢ Tendsto f l (𝓝 y) ↔ Tendsto (fun x => edist (f x) y) l (𝓝 0)
[PROOFSTEP]
simp only [EMetric.nhds_basis_eball.tendsto_right_iff, EMetric.mem_ball, @tendsto_order ℝ≥0∞ β _ _,
  forall_prop_of_false ENNReal.not_lt_zero, forall_const, true_and_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
⊢ (∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε) ↔
    ∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
⊢ (∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε) →
    ∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
intro hs
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
⊢ ∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
refine
  ⟨fun N => EMetric.diam (s '' Ici N), fun n m N hn hm => ?_, ?_⟩
    -- Prove that it bounds the distances of points in the Cauchy sequence
[GOAL]
case mp.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
n m N : β
hn : N ≤ n
hm : N ≤ m
⊢ edist (s n) (s m) ≤ (fun N => diam (s '' Ici N)) N
[PROOFSTEP]
exact
  EMetric.edist_le_diam_of_mem (mem_image_of_mem _ hn)
    (mem_image_of_mem _ hm)
      -- Prove that it tends to `0`, by using the Cauchy property of `s`
[GOAL]
case mp.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
⊢ Tendsto (fun N => diam (s '' Ici N)) atTop (𝓝 0)
[PROOFSTEP]
refine ENNReal.tendsto_nhds_zero.2 fun ε ε0 => ?_
[GOAL]
case mp.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
⊢ ∀ᶠ (x : β) in atTop, diam (s '' Ici x) ≤ ε
[PROOFSTEP]
rcases hs ε ε0 with ⟨N, hN⟩
[GOAL]
case mp.refine_2.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
N : β
hN : ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
⊢ ∀ᶠ (x : β) in atTop, diam (s '' Ici x) ≤ ε
[PROOFSTEP]
refine (eventually_ge_atTop N).mono fun n hn => EMetric.diam_le ?_
[GOAL]
case mp.refine_2.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
N : β
hN : ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
n : β
hn : N ≤ n
⊢ ∀ (x : α), x ∈ s '' Ici n → ∀ (y : α), y ∈ s '' Ici n → edist x y ≤ ε
[PROOFSTEP]
rintro _ ⟨k, hk, rfl⟩ _ ⟨l, hl, rfl⟩
[GOAL]
case mp.refine_2.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
N : β
hN : ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
n : β
hn : N ≤ n
k : β
hk : k ∈ Ici n
l : β
hl : l ∈ Ici n
⊢ edist (s k) (s l) ≤ ε
[PROOFSTEP]
exact (hN _ (hn.trans hk) _ (hn.trans hl)).le
[GOAL]
case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
⊢ (∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)) →
    ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
[PROOFSTEP]
rintro ⟨b, ⟨b_bound, b_lim⟩⟩ ε εpos
[GOAL]
case mpr.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
[PROOFSTEP]
have : ∀ᶠ n in atTop, b n < ε := b_lim.eventually (gt_mem_nhds εpos)
[GOAL]
case mpr.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
this : ∀ᶠ (n : β) in atTop, b n < ε
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
[PROOFSTEP]
rcases this.exists with ⟨N, hN⟩
[GOAL]
case mpr.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
this : ∀ᶠ (n : β) in atTop, b n < ε
N : β
hN : b N < ε
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
[PROOFSTEP]
refine ⟨N, fun m hm n hn => ?_⟩
[GOAL]
case mpr.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
this : ∀ᶠ (n : β) in atTop, b n < ε
N : β
hN : b N < ε
m : β
hm : N ≤ m
n : β
hn : N ≤ n
⊢ edist (s m) (s n) < ε
[PROOFSTEP]
calc
  edist (s m) (s n) ≤ b N := b_bound m n N hm hn
  _ < ε := hN
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
⊢ Continuous f
[PROOFSTEP]
refine continuous_iff_continuousAt.2 fun x => ENNReal.tendsto_nhds_of_Icc fun ε ε0 => ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
⊢ ∀ᶠ (x_1 : α) in 𝓝 x, f x_1 ∈ Icc (f x - ε) (f x + ε)
[PROOFSTEP]
rcases ENNReal.exists_nnreal_pos_mul_lt hC ε0.ne' with ⟨δ, δ0, hδ⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : ↑δ * C < ε
⊢ ∀ᶠ (x_1 : α) in 𝓝 x, f x_1 ∈ Icc (f x - ε) (f x + ε)
[PROOFSTEP]
rw [mul_comm] at hδ 
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : C * ↑δ < ε
⊢ ∀ᶠ (x_1 : α) in 𝓝 x, f x_1 ∈ Icc (f x - ε) (f x + ε)
[PROOFSTEP]
filter_upwards [EMetric.closedBall_mem_nhds x (ENNReal.coe_pos.2 δ0)] with y hy
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : C * ↑δ < ε
y : α
hy : y ∈ EMetric.closedBall x ↑δ
⊢ f y ∈ Icc (f x - ε) (f x + ε)
[PROOFSTEP]
refine ⟨tsub_le_iff_right.2 <| (h x y).trans ?_, (h y x).trans ?_⟩
[GOAL]
case h.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : C * ↑δ < ε
y : α
hy : y ∈ EMetric.closedBall x ↑δ
⊢ f y + C * edist x y ≤ f y + ε
[PROOFSTEP]
refine add_le_add_left (le_trans (mul_le_mul_left' ?_ _) hδ.le) _
[GOAL]
case h.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : C * ↑δ < ε
y : α
hy : y ∈ EMetric.closedBall x ↑δ
⊢ f x + C * edist y x ≤ f x + ε
[PROOFSTEP]
refine add_le_add_left (le_trans (mul_le_mul_left' ?_ _) hδ.le) _
[GOAL]
case h.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : C * ↑δ < ε
y : α
hy : y ∈ EMetric.closedBall x ↑δ
⊢ edist x y ≤ ↑δ
case h.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : α → ℝ≥0∞
C : ℝ≥0∞
hC : C ≠ ⊤
h : ∀ (x y : α), f x ≤ f y + C * edist x y
x : α
ε : ℝ≥0∞
ε0 : ε > 0
δ : ℝ≥0
δ0 : δ > 0
hδ : C * ↑δ < ε
y : α
hy : y ∈ EMetric.closedBall x ↑δ
⊢ edist y x ≤ ↑δ
[PROOFSTEP]
exacts [EMetric.mem_closedBall'.1 hy, EMetric.mem_closedBall.1 hy]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
⊢ Continuous fun p => edist p.fst p.snd
[PROOFSTEP]
apply continuous_of_le_add_edist 2 (by norm_num)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
⊢ 2 ≠ ⊤
[PROOFSTEP]
norm_num
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
⊢ ∀ (x y : α × α), edist x.fst x.snd ≤ edist y.fst y.snd + 2 * edist x y
[PROOFSTEP]
rintro ⟨x, y⟩ ⟨x', y'⟩
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
x y x' y' : α
⊢ edist (x, y).fst (x, y).snd ≤ edist (x', y').fst (x', y').snd + 2 * edist (x, y) (x', y')
[PROOFSTEP]
calc
  edist x y ≤ edist x x' + edist x' y' + edist y' y := edist_triangle4 _ _ _ _
  _ = edist x' y' + (edist x x' + edist y y') := by simp only [edist_comm]; ac_rfl
  _ ≤ edist x' y' + (edist (x, y) (x', y') + edist (x, y) (x', y')) :=
    (add_le_add_left (add_le_add (le_max_left _ _) (le_max_right _ _)) _)
  _ = edist x' y' + 2 * edist (x, y) (x', y') := by rw [← mul_two, mul_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
x y x' y' : α
⊢ edist x x' + edist x' y' + edist y' y = edist x' y' + (edist x x' + edist y y')
[PROOFSTEP]
simp only [edist_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
x y x' y' : α
⊢ edist x x' + edist x' y' + edist y y' = edist x' y' + (edist x x' + edist y y')
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
x y x' y' : α
⊢ edist x' y' + (edist (x, y) (x', y') + edist (x, y) (x', y')) = edist x' y' + 2 * edist (x, y) (x', y')
[PROOFSTEP]
rw [← mul_two, mul_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ d n
hd : tsum d ≠ ⊤
⊢ CauchySeq f
[PROOFSTEP]
lift d to ℕ → NNReal using fun i => ENNReal.ne_top_of_tsum_ne_top hd i
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ (fun i => ↑(d i)) n
hd : ∑' (i : ℕ), ↑(d i) ≠ ⊤
⊢ CauchySeq f
[PROOFSTEP]
rw [ENNReal.tsum_coe_ne_top_iff_summable] at hd 
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ (fun i => ↑(d i)) n
hd : Summable fun i => d i
⊢ CauchySeq f
[PROOFSTEP]
exact cauchySeq_of_edist_le_of_summable d hf hd
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set α
⊢ diam (closure s) = diam s
[PROOFSTEP]
refine' le_antisymm (diam_le fun x hx y hy => _) (diam_mono subset_closure)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set α
x : α
hx : x ∈ closure s
y : α
hy : y ∈ closure s
⊢ edist x y ≤ diam s
[PROOFSTEP]
have : edist x y ∈ closure (Iic (diam s)) :=
  map_mem_closure₂ continuous_edist hx hy fun x hx y hy => edist_le_diam_of_mem hx hy
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set α
x : α
hx : x ∈ closure s
y : α
hy : y ∈ closure s
this : edist x y ∈ closure (Iic (diam s))
⊢ edist x y ≤ diam s
[PROOFSTEP]
rwa [closure_Iic] at this 
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : PseudoEMetricSpace α✝
α : Type u_4
inst✝ : PseudoMetricSpace α
s : Set α
⊢ diam (closure s) = diam s
[PROOFSTEP]
simp only [Metric.diam, EMetric.diam_closure]
[GOAL]
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α✝
α : Type u_4
β : Type u_5
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
K : ℝ≥0
s : Set α
⊢ IsClosed {f | LipschitzOnWith K f s}
[PROOFSTEP]
simp only [LipschitzOnWith, setOf_forall]
[GOAL]
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α✝
α : Type u_4
β : Type u_5
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
K : ℝ≥0
s : Set α
⊢ IsClosed (⋂ (i : α) (_ : i ∈ s) (i_1 : α) (_ : i_1 ∈ s), {x | edist (x i) (x i_1) ≤ ↑K * edist i i_1})
[PROOFSTEP]
refine' isClosed_biInter fun x _ => isClosed_biInter fun y _ => isClosed_le _ _
[GOAL]
case refine'_1
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α✝
α : Type u_4
β : Type u_5
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
K : ℝ≥0
s : Set α
x : α
x✝¹ : x ∈ s
y : α
x✝ : y ∈ s
⊢ Continuous fun x_1 => edist (x_1 x) (x_1 y)
case refine'_2
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α✝
α : Type u_4
β : Type u_5
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
K : ℝ≥0
s : Set α
x : α
x✝¹ : x ∈ s
y : α
x✝ : y ∈ s
⊢ Continuous fun x_1 => ↑K * edist x y
[PROOFSTEP]
exacts [.edist (continuous_apply x) (continuous_apply y), continuous_const]
[GOAL]
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
inst✝² : PseudoEMetricSpace α✝
α : Type u_4
β : Type u_5
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
K : ℝ≥0
⊢ IsClosed {f | LipschitzWith K f}
[PROOFSTEP]
simp only [← lipschitz_on_univ, isClosed_setOf_lipschitzOnWith]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
⊢ EMetric.diam s = ENNReal.ofReal (sSup s - sInf s)
[PROOFSTEP]
rcases eq_empty_or_nonempty s with (rfl | hne)
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
h : Metric.Bounded ∅
⊢ EMetric.diam ∅ = ENNReal.ofReal (sSup ∅ - sInf ∅)
[PROOFSTEP]
simp
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
⊢ EMetric.diam s = ENNReal.ofReal (sSup s - sInf s)
[PROOFSTEP]
refine' le_antisymm (Metric.ediam_le_of_forall_dist_le fun x hx y hy => _) _
[GOAL]
case inr.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
x : ℝ
hx : x ∈ s
y : ℝ
hy : y ∈ s
⊢ dist x y ≤ sSup s - sInf s
[PROOFSTEP]
have := Real.subset_Icc_sInf_sSup_of_bounded h
[GOAL]
case inr.refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
x : ℝ
hx : x ∈ s
y : ℝ
hy : y ∈ s
this : s ⊆ Icc (sInf s) (sSup s)
⊢ dist x y ≤ sSup s - sInf s
[PROOFSTEP]
exact Real.dist_le_of_mem_Icc (this hx) (this hy)
[GOAL]
case inr.refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
⊢ ENNReal.ofReal (sSup s - sInf s) ≤ EMetric.diam s
[PROOFSTEP]
apply ENNReal.ofReal_le_of_le_toReal
[GOAL]
case inr.refine'_2.h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
⊢ sSup s - sInf s ≤ ENNReal.toReal (EMetric.diam s)
[PROOFSTEP]
rw [← Metric.diam, ← Metric.diam_closure]
[GOAL]
case inr.refine'_2.h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
⊢ sSup s - sInf s ≤ Metric.diam (closure s)
[PROOFSTEP]
have h' := Real.bounded_iff_bddBelow_bddAbove.1 h
[GOAL]
case inr.refine'_2.h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
hne : Set.Nonempty s
h' : BddBelow s ∧ BddAbove s
⊢ sSup s - sInf s ≤ Metric.diam (closure s)
[PROOFSTEP]
calc
  sSup s - sInf s ≤ dist (sSup s) (sInf s) := le_abs_self _
  _ ≤ Metric.diam (closure s) := dist_le_diam_of_mem h.closure (csSup_mem_closure hne h'.2) (csInf_mem_closure hne h'.1)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
⊢ Metric.diam s = sSup s - sInf s
[PROOFSTEP]
rw [Metric.diam, Real.ediam_eq h, ENNReal.toReal_ofReal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : Metric.Bounded s
⊢ 0 ≤ sSup s - sInf s
[PROOFSTEP]
rw [Real.bounded_iff_bddBelow_bddAbove] at h 
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
s : Set ℝ
h : BddBelow s ∧ BddAbove s
⊢ 0 ≤ sSup s - sInf s
[PROOFSTEP]
exact sub_nonneg.2 (Real.sInf_le_sSup s h.1 h.2)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
⊢ EMetric.diam (Ioo a b) = ENNReal.ofReal (b - a)
[PROOFSTEP]
rcases le_or_lt b a with (h | h)
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : b ≤ a
⊢ EMetric.diam (Ioo a b) = ENNReal.ofReal (b - a)
[PROOFSTEP]
simp [h]
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : a < b
⊢ EMetric.diam (Ioo a b) = ENNReal.ofReal (b - a)
[PROOFSTEP]
rw [Real.ediam_eq (bounded_Ioo _ _), csSup_Ioo h, csInf_Ioo h]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
⊢ EMetric.diam (Icc a b) = ENNReal.ofReal (b - a)
[PROOFSTEP]
rcases le_or_lt a b with (h | h)
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : a ≤ b
⊢ EMetric.diam (Icc a b) = ENNReal.ofReal (b - a)
[PROOFSTEP]
rw [Real.ediam_eq (bounded_Icc _ _), csSup_Icc h, csInf_Icc h]
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : b < a
⊢ EMetric.diam (Icc a b) = ENNReal.ofReal (b - a)
[PROOFSTEP]
simp [h, h.le]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : a ≤ b
⊢ Metric.diam (Icc a b) = b - a
[PROOFSTEP]
simp [Metric.diam, ENNReal.toReal_ofReal (sub_nonneg.2 h)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : a ≤ b
⊢ Metric.diam (Ico a b) = b - a
[PROOFSTEP]
simp [Metric.diam, ENNReal.toReal_ofReal (sub_nonneg.2 h)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : a ≤ b
⊢ Metric.diam (Ioc a b) = b - a
[PROOFSTEP]
simp [Metric.diam, ENNReal.toReal_ofReal (sub_nonneg.2 h)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
a b : ℝ
h : a ≤ b
⊢ Metric.diam (Ioo a b) = b - a
[PROOFSTEP]
simp [Metric.diam, ENNReal.toReal_ofReal (sub_nonneg.2 h)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ d n
a : α
ha : Tendsto f atTop (𝓝 a)
n : ℕ
⊢ edist (f n) a ≤ ∑' (m : ℕ), d (n + m)
[PROOFSTEP]
refine' le_of_tendsto (tendsto_const_nhds.edist ha) (mem_atTop_sets.2 ⟨n, fun m hnm => _⟩)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ d n
a : α
ha : Tendsto f atTop (𝓝 a)
n m : ℕ
hnm : m ≥ n
⊢ m ∈ {x | (fun c => edist (f n) (f c) ≤ ∑' (m : ℕ), d (n + m)) x}
[PROOFSTEP]
refine' le_trans (edist_le_Ico_sum_of_edist_le hnm fun _ _ => hf _) _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ d n
a : α
ha : Tendsto f atTop (𝓝 a)
n m : ℕ
hnm : m ≥ n
⊢ ∑ i in Finset.Ico n m, d i ≤ ∑' (m : ℕ), d (n + m)
[PROOFSTEP]
rw [Finset.sum_Ico_eq_sum_range]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ d n
a : α
ha : Tendsto f atTop (𝓝 a)
n m : ℕ
hnm : m ≥ n
⊢ ∑ k in Finset.range (m - n), d (n + k) ≤ ∑' (m : ℕ), d (n + m)
[PROOFSTEP]
exact sum_le_tsum _ (fun _ _ => zero_le _) ENNReal.summable
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f (Nat.succ n)) ≤ d n
a : α
ha : Tendsto f atTop (𝓝 a)
⊢ edist (f 0) a ≤ ∑' (m : ℕ), d m
[PROOFSTEP]
simpa using edist_le_tsum_of_edist_le_of_tendsto d hf ha 0
