Theorem: WittVector.wittOne_pos_eq_zero
File: Mathlib/RingTheory/WittVector/Defs.lean

tactic: apply MvPolynomial.map_injective (Int.castRingHom ℚ) Int.cast_injective
state_before: p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
hn : 0 < n
⊢ wittOne p n = 0
state_after: case a
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
hn : 0 < n
⊢ (map (Int.castRingHom ℚ)) (wittOne p n) = (map (Int.castRingHom ℚ)) 0

tactic: simp only [wittOne, wittStructureRat, RingHom.map_zero, AlgHom.map_one, RingHom.map_one,
  map_wittStructureInt]
state_before: case a
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
hn : 0 < n
⊢ (map (Int.castRingHom ℚ)) (wittOne p n) = (map (Int.castRingHom ℚ)) 0
state_after: case a
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
hn : 0 < n
⊢ (bind₁ fun k => 1) (xInTermsOfW p ℚ n) = 0

tactic: induction n using Nat.strong_induction_on with | h n IH => ?_
state_before: case a
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
hn : 0 < n
⊢ (bind₁ fun k => 1) (xInTermsOfW p ℚ n) = 0
state_after: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ (bind₁ fun k => 1) (xInTermsOfW p ℚ n) = 0

tactic: rw [xInTermsOfW_eq]
state_before: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ (bind₁ fun k => 1) (xInTermsOfW p ℚ n) = 0
state_after: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ (bind₁ fun k => 1) ((X n - ∑ i ∈ Finset.range n, C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i)) * C (⅟↑p ^ n)) = 0

tactic: simp only [AlgHom.map_mul, AlgHom.map_sub, AlgHom.map_sum, AlgHom.map_pow, bind₁_X_right,
  bind₁_C_right]
state_before: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ (bind₁ fun k => 1) ((X n - ∑ i ∈ Finset.range n, C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i)) * C (⅟↑p ^ n)) = 0
state_after: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ (1 - ∑ x ∈ Finset.range n, C (↑p ^ x) * (bind₁ fun k => 1) (xInTermsOfW p ℚ x) ^ p ^ (n - x)) * C (⅟↑p ^ n) = 0

tactic: rw [sub_mul, one_mul]
state_before: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ (1 - ∑ x ∈ Finset.range n, C (↑p ^ x) * (bind₁ fun k => 1) (xInTermsOfW p ℚ x) ^ p ^ (n - x)) * C (⅟↑p ^ n) = 0
state_after: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ C (⅟↑p ^ n) -
      (∑ x ∈ Finset.range n, C (↑p ^ x) * (bind₁ fun k => 1) (xInTermsOfW p ℚ x) ^ p ^ (n - x)) * C (⅟↑p ^ n) =
    0

tactic: rw [Finset.sum_eq_single 0]
state_before: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ C (⅟↑p ^ n) -
      (∑ x ∈ Finset.range n, C (↑p ^ x) * (bind₁ fun k => 1) (xInTermsOfW p ℚ x) ^ p ^ (n - x)) * C (⅟↑p ^ n) =
    0
state_after: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ C (⅟↑p ^ n) - C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) * C (⅟↑p ^ n) = 0

case a.h.h₀
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ ∀ b ∈ Finset.range n, b ≠ 0 → C (↑p ^ b) * (bind₁ fun k => 1) (xInTermsOfW p ℚ b) ^ p ^ (n - b) = 0

case a.h.h₁
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ 0 ∉ Finset.range n → C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) = 0

tactic: simp only [invOf_eq_inv, one_mul, inv_pow, tsub_zero, RingHom.map_one, pow_zero]
state_before: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ C (⅟↑p ^ n) - C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) * C (⅟↑p ^ n) = 0
state_after: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ C (↑p ^ n)⁻¹ - (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ n * C (↑p ^ n)⁻¹ = 0

tactic: simp only [one_pow, one_mul, xInTermsOfW_zero, sub_self, bind₁_X_right]
state_before: case a.h
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ C (↑p ^ n)⁻¹ - (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ n * C (↑p ^ n)⁻¹ = 0
state_after: no goals

tactic: intro i hin hi0
state_before: case a.h.h₀
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ ∀ b ∈ Finset.range n, b ≠ 0 → C (↑p ^ b) * (bind₁ fun k => 1) (xInTermsOfW p ℚ b) ^ p ^ (n - b) = 0
state_after: case a.h.h₀
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
i : ℕ
hin : i ∈ Finset.range n
hi0 : i ≠ 0
⊢ C (↑p ^ i) * (bind₁ fun k => 1) (xInTermsOfW p ℚ i) ^ p ^ (n - i) = 0

tactic: rw [Finset.mem_range] at hin
state_before: case a.h.h₀
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
i : ℕ
hin : i ∈ Finset.range n
hi0 : i ≠ 0
⊢ C (↑p ^ i) * (bind₁ fun k => 1) (xInTermsOfW p ℚ i) ^ p ^ (n - i) = 0
state_after: case a.h.h₀
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
i : ℕ
hin : i < n
hi0 : i ≠ 0
⊢ C (↑p ^ i) * (bind₁ fun k => 1) (xInTermsOfW p ℚ i) ^ p ^ (n - i) = 0

tactic: rw [IH _ hin (Nat.pos_of_ne_zero hi0), zero_pow (pow_ne_zero _ hp.1.ne_zero), mul_zero]
state_before: case a.h.h₀
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
i : ℕ
hin : i < n
hi0 : i ≠ 0
⊢ C (↑p ^ i) * (bind₁ fun k => 1) (xInTermsOfW p ℚ i) ^ p ^ (n - i) = 0
state_after: no goals

tactic: rw [Finset.mem_range]
state_before: case a.h.h₁
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ 0 ∉ Finset.range n → C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) = 0
state_after: case a.h.h₁
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ ¬0 < n → C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) = 0

tactic: intro
state_before: case a.h.h₁
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
⊢ ¬0 < n → C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) = 0
state_after: case a.h.h₁
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
a✝ : ¬0 < n
⊢ C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) = 0

tactic: contradiction
state_before: case a.h.h₁
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
IH : ∀ m < n, 0 < m → (bind₁ fun k => 1) (xInTermsOfW p ℚ m) = 0
hn : 0 < n
a✝ : ¬0 < n
⊢ C (↑p ^ 0) * (bind₁ fun k => 1) (xInTermsOfW p ℚ 0) ^ p ^ (n - 0) = 0
state_after: no goals