Theorem: ENNReal.tendsto_finset_prod_of_ne_top
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: induction' s using Finset.induction with a s has IH
state_before: α : Type 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 ∈ s, Tendsto (f i) x (𝓝 (a i))
h' : ∀ i ∈ s, a i ≠ ⊤
⊢ Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a c))
state_after: 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∞
h : ∀ i ∈ ∅, Tendsto (f i) x (𝓝 (a i))
h' : ∀ i ∈ ∅, a i ≠ ⊤
⊢ Tendsto (fun b => ∏ c ∈ ∅, f c b) x (𝓝 (∏ c ∈ ∅, a c))

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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ Tendsto (fun b => ∏ c ∈ insert a s, f c b) x (𝓝 (∏ c ∈ insert a s, a✝ c))

tactic: simp only [Finset.prod_insert has]
state_before: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ Tendsto (fun b => ∏ c ∈ insert a s, f c b) x (𝓝 (∏ c ∈ insert a s, a✝ c))
state_after: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ Tendsto (fun b => f a b * ∏ c ∈ s, f c b) x (𝓝 (a✝ a * ∏ c ∈ s, a✝ c))

tactic: apply Tendsto.mul (h _ (Finset.mem_insert_self _ _))
state_before: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ Tendsto (fun b => f a b * ∏ c ∈ s, f c b) x (𝓝 (a✝ a * ∏ c ∈ s, a✝ c))
state_after: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ a✝ a ≠ 0 ∨ ∏ c ∈ s, a✝ c ≠ ⊤

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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ Tendsto (fun a => ∏ c ∈ s, f c a) x (𝓝 (∏ c ∈ s, a✝ c))

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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ ∏ c ∈ s, a✝ c ≠ 0 ∨ a✝ a ≠ ⊤

tactic: simp [tendsto_const_nhds]
state_before: 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∞
h : ∀ i ∈ ∅, Tendsto (f i) x (𝓝 (a i))
h' : ∀ i ∈ ∅, a i ≠ ⊤
⊢ Tendsto (fun b => ∏ c ∈ ∅, f c b) x (𝓝 (∏ c ∈ ∅, a c))
state_after: no goals

tactic: right
state_before: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ a✝ a ≠ 0 ∨ ∏ c ∈ s, a✝ c ≠ ⊤
state_after: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ ∏ c ∈ s, a✝ c ≠ ⊤

tactic: exact (prod_lt_top fun i hi => h' _ (Finset.mem_insert_of_mem hi)).ne
state_before: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ ∏ c ∈ s, a✝ c ≠ ⊤
state_after: no goals

tactic: exact IH (fun i hi => h _ (Finset.mem_insert_of_mem hi)) fun i hi =>
  h' _ (Finset.mem_insert_of_mem hi)
state_before: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ Tendsto (fun a => ∏ c ∈ s, f c a) x (𝓝 (∏ c ∈ s, a✝ c))
state_after: no goals

tactic: exact Or.inr (h' _ (Finset.mem_insert_self _ _))
state_before: 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∞
a : ι
s : Finset ι
has : a ∉ s
IH :
  (∀ i ∈ s, Tendsto (f i) x (𝓝 (a✝ i))) → (∀ i ∈ s, a✝ i ≠ ⊤) → Tendsto (fun b => ∏ c ∈ s, f c b) x (𝓝 (∏ c ∈ s, a✝ c))
h : ∀ i ∈ insert a s, Tendsto (f i) x (𝓝 (a✝ i))
h' : ∀ i ∈ insert a s, a✝ i ≠ ⊤
⊢ ∏ c ∈ s, a✝ c ≠ 0 ∨ a✝ a ≠ ⊤
state_after: no goals