Theorem: EulerProduct.summable_and_hasSum_factoredNumbers_prod_filter_prime_geometric
File: Mathlib/NumberTheory/EulerProduct/Basic.lean

tactic: have hmul {m n} (_ : Nat.Coprime m n) := f.map_mul m n
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)

tactic: have H₁ :
    ∏ p ∈ s.filter Nat.Prime, ∑' n : ℕ, f (p ^ n) = ∏ p ∈ s.filter Nat.Prime, (1 - f p)⁻¹ := by
  refine prod_congr rfl fun p hp ↦ ?_
  simp only [map_pow]
  exact tsum_geometric_of_norm_lt_one <| h (mem_filter.mp hp).2
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)

tactic: have H₂ : ∀ {p : ℕ}, p.Prime → Summable fun n ↦ ‖f (p ^ n)‖ := by
  intro p hp
  simp only [map_pow]
  refine Summable.of_nonneg_of_le (fun _ ↦ norm_nonneg _) (fun _ ↦ norm_pow_le ..) ?_
  exact summable_geometric_iff_norm_lt_one.mpr <| (norm_norm (f p)).symm ▸ h hp
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
H₂ : ∀ {p : ℕ}, Nat.Prime p → Summable fun n => ‖f (p ^ n)‖
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)

tactic: exact H₁ ▸ summable_and_hasSum_factoredNumbers_prod_filter_prime_tsum f.map_one hmul H₂ s
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
H₂ : ∀ {p : ℕ}, Nat.Prime p → Summable fun n => ‖f (p ^ n)‖
⊢ (Summable fun m => ‖f ↑m‖) ∧ HasSum (fun m => f ↑m) (∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹)
state_after: no goals

tactic: refine prod_congr rfl fun p hp ↦ ?_
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
⊢ ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
p : ℕ
hp : p ∈ filter Nat.Prime s
⊢ ∑' (n : ℕ), f (p ^ n) = (1 - f p)⁻¹

tactic: simp only [map_pow]
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
p : ℕ
hp : p ∈ filter Nat.Prime s
⊢ ∑' (n : ℕ), f (p ^ n) = (1 - f p)⁻¹
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
p : ℕ
hp : p ∈ filter Nat.Prime s
⊢ ∑' (n : ℕ), f p ^ n = (1 - f p)⁻¹

tactic: exact tsum_geometric_of_norm_lt_one <| h (mem_filter.mp hp).2
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
p : ℕ
hp : p ∈ filter Nat.Prime s
⊢ ∑' (n : ℕ), f p ^ n = (1 - f p)⁻¹
state_after: no goals

tactic: intro p hp
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
⊢ ∀ {p : ℕ}, Nat.Prime p → Summable fun n => ‖f (p ^ n)‖
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
p : ℕ
hp : Nat.Prime p
⊢ Summable fun n => ‖f (p ^ n)‖

tactic: simp only [map_pow]
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
p : ℕ
hp : Nat.Prime p
⊢ Summable fun n => ‖f (p ^ n)‖
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
p : ℕ
hp : Nat.Prime p
⊢ Summable fun n => ‖f p ^ n‖

tactic: refine Summable.of_nonneg_of_le (fun _ ↦ norm_nonneg _) (fun _ ↦ norm_pow_le ..) ?_
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
p : ℕ
hp : Nat.Prime p
⊢ Summable fun n => ‖f p ^ n‖
state_after: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
p : ℕ
hp : Nat.Prime p
⊢ Summable (HPow.hPow ‖f p‖)

tactic: exact summable_geometric_iff_norm_lt_one.mpr <| (norm_norm (f p)).symm ▸ h hp
state_before: F : Type u_1
inst✝¹ : NormedField F
inst✝ : CompleteSpace F
f : ℕ →* F
h : ∀ {p : ℕ}, Nat.Prime p → ‖f p‖ < 1
s : Finset ℕ
hmul : ∀ {m n : ℕ}, m.Coprime n → f (m * n) = f m * f n
H₁ : ∏ p ∈ filter Nat.Prime s, ∑' (n : ℕ), f (p ^ n) = ∏ p ∈ filter Nat.Prime s, (1 - f p)⁻¹
p : ℕ
hp : Nat.Prime p
⊢ Summable (HPow.hPow ‖f p‖)
state_after: no goals