Theorem: tendsto_prod_nat_add
File: Mathlib/Topology/Algebra/InfiniteSum/NatInt.lean

tactic: by_cases hf : Multipliable f
state_before: M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)
state_after: case pos
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)

case neg
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : ¬Multipliable f
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)

tactic: have h₀ : (fun i ↦ (∏' i, f i) / ∏ j ∈ range i, f j) = fun i ↦ ∏' k : ℕ, f (k + i) := by
  ext1 i
  rw [div_eq_iff_eq_mul, mul_comm, prod_mul_tprod_nat_add i hf]
state_before: case pos
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)
state_after: case pos
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
h₀ : (fun i => (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j) = fun i => ∏' (k : ℕ), f (k + i)
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)

tactic: have h₁ : Tendsto (fun _ : ℕ ↦ ∏' i, f i) atTop (𝓝 (∏' i, f i)) := tendsto_const_nhds
state_before: case pos
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
h₀ : (fun i => (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j) = fun i => ∏' (k : ℕ), f (k + i)
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)
state_after: case pos
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
h₀ : (fun i => (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j) = fun i => ∏' (k : ℕ), f (k + i)
h₁ : Tendsto (fun x => ∏' (i : ℕ), f i) atTop (𝓝 (∏' (i : ℕ), f i))
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)

tactic: simpa only [h₀, div_self'] using Tendsto.div' h₁ hf.hasProd.tendsto_prod_nat
state_before: case pos
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
h₀ : (fun i => (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j) = fun i => ∏' (k : ℕ), f (k + i)
h₁ : Tendsto (fun x => ∏' (i : ℕ), f i) atTop (𝓝 (∏' (i : ℕ), f i))
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)
state_after: no goals

tactic: ext1 i
state_before: M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
⊢ (fun i => (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j) = fun i => ∏' (k : ℕ), f (k + i)
state_after: case h
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
i : ℕ
⊢ (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j = ∏' (k : ℕ), f (k + i)

tactic: rw [div_eq_iff_eq_mul, mul_comm, prod_mul_tprod_nat_add i hf]
state_before: case h
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : Multipliable f
i : ℕ
⊢ (∏' (i : ℕ), f i) / ∏ j ∈ range i, f j = ∏' (k : ℕ), f (k + i)
state_after: no goals

tactic: refine tendsto_const_nhds.congr fun n ↦ (tprod_eq_one_of_not_multipliable ?_).symm
state_before: case neg
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : ¬Multipliable f
⊢ Tendsto (fun i => ∏' (k : ℕ), f (k + i)) atTop (𝓝 1)
state_after: case neg
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : ¬Multipliable f
n : ℕ
⊢ ¬Multipliable fun k => f (k + n)

tactic: rwa [multipliable_nat_add_iff n]
state_before: case neg
M : Type u_1
inst✝⁵ : CommMonoid M
inst✝⁴ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝³ : CommGroup G
g g' : G
inst✝² : TopologicalSpace G
inst✝¹ : TopologicalGroup G
inst✝ : T2Space G
f : ℕ → G
hf : ¬Multipliable f
n : ℕ
⊢ ¬Multipliable fun k => f (k + n)
state_after: no goals