Theorem: ArithmeticFunction.moebius_mul_coe_zeta
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: ext n
state_before: R : Type u_1
⊢ μ * ↑ζ = 1
state_after: case h
R : Type u_1
n : ℕ
⊢ (μ * ↑ζ) n = 1 n

tactic: refine recOnPosPrimePosCoprime ?_ ?_ ?_ ?_ n
state_before: case h
R : Type u_1
n : ℕ
⊢ (μ * ↑ζ) n = 1 n
state_after: case h.refine_1
R : Type u_1
n : ℕ
⊢ ∀ (p n : ℕ), Nat.Prime p → 0 < n → (μ * ↑ζ) (p ^ n) = 1 (p ^ n)

case h.refine_2
R : Type u_1
n : ℕ
⊢ (μ * ↑ζ) 0 = 1 0

case h.refine_3
R : Type u_1
n : ℕ
⊢ (μ * ↑ζ) 1 = 1 1

case h.refine_4
R : Type u_1
n : ℕ
⊢ ∀ (a b : ℕ), 1 < a → 1 < b → a.Coprime b → (μ * ↑ζ) a = 1 a → (μ * ↑ζ) b = 1 b → (μ * ↑ζ) (a * b) = 1 (a * b)

tactic: intro p n hp hn
state_before: case h.refine_1
R : Type u_1
n : ℕ
⊢ ∀ (p n : ℕ), Nat.Prime p → 0 < n → (μ * ↑ζ) (p ^ n) = 1 (p ^ n)
state_after: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ (μ * ↑ζ) (p ^ n) = 1 (p ^ n)

tactic: rw [coe_mul_zeta_apply, sum_divisors_prime_pow hp, sum_range_succ']
state_before: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ (μ * ↑ζ) (p ^ n) = 1 (p ^ n)
state_after: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ ∑ k ∈ range n, μ (p ^ (k + 1)) + μ (p ^ 0) = 1 (p ^ n)

tactic: simp_rw [Nat.pow_zero, moebius_apply_one,
  moebius_apply_prime_pow hp (Nat.succ_ne_zero _), Nat.succ_inj', sum_ite_eq', mem_range,
  if_pos hn, add_left_neg]
state_before: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ ∑ k ∈ range n, μ (p ^ (k + 1)) + μ (p ^ 0) = 1 (p ^ n)
state_after: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ 0 = 1 (p ^ n)

tactic: rw [one_apply_ne]
state_before: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ 0 = 1 (p ^ n)
state_after: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ p ^ n ≠ 1

tactic: rw [Ne, pow_eq_one_iff]
state_before: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ p ^ n ≠ 1
state_after: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ ¬p = 1

case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ n ≠ 0

tactic: exact hp.ne_one
state_before: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ ¬p = 1
state_after: no goals

tactic: exact hn.ne'
state_before: case h.refine_1
R : Type u_1
n✝ p n : ℕ
hp : Nat.Prime p
hn : 0 < n
⊢ n ≠ 0
state_after: no goals

tactic: rw [ZeroHom.map_zero, ZeroHom.map_zero]
state_before: case h.refine_2
R : Type u_1
n : ℕ
⊢ (μ * ↑ζ) 0 = 1 0
state_after: no goals

tactic: simp
state_before: case h.refine_3
R : Type u_1
n : ℕ
⊢ (μ * ↑ζ) 1 = 1 1
state_after: no goals

tactic: intro a b _ha _hb hab ha' hb'
state_before: case h.refine_4
R : Type u_1
n : ℕ
⊢ ∀ (a b : ℕ), 1 < a → 1 < b → a.Coprime b → (μ * ↑ζ) a = 1 a → (μ * ↑ζ) b = 1 b → (μ * ↑ζ) (a * b) = 1 (a * b)
state_after: case h.refine_4
R : Type u_1
n a b : ℕ
_ha : 1 < a
_hb : 1 < b
hab : a.Coprime b
ha' : (μ * ↑ζ) a = 1 a
hb' : (μ * ↑ζ) b = 1 b
⊢ (μ * ↑ζ) (a * b) = 1 (a * b)

tactic: rw [IsMultiplicative.map_mul_of_coprime _ hab, ha', hb',
  IsMultiplicative.map_mul_of_coprime isMultiplicative_one hab]
state_before: case h.refine_4
R : Type u_1
n a b : ℕ
_ha : 1 < a
_hb : 1 < b
hab : a.Coprime b
ha' : (μ * ↑ζ) a = 1 a
hb' : (μ * ↑ζ) b = 1 b
⊢ (μ * ↑ζ) (a * b) = 1 (a * b)
state_after: R : Type u_1
n a b : ℕ
_ha : 1 < a
_hb : 1 < b
hab : a.Coprime b
ha' : (μ * ↑ζ) a = 1 a
hb' : (μ * ↑ζ) b = 1 b
⊢ (μ * ↑ζ).IsMultiplicative

tactic: exact isMultiplicative_moebius.mul isMultiplicative_zeta.natCast
state_before: R : Type u_1
n a b : ℕ
_ha : 1 < a
_hb : 1 < b
hab : a.Coprime b
ha' : (μ * ↑ζ) a = 1 a
hb' : (μ * ↑ζ) b = 1 b
⊢ (μ * ↑ζ).IsMultiplicative
state_after: no goals