Theorem: wittStructureRat_rec_aux
File: Mathlib/RingTheory/WittVector/StructurePolynomial.lean

tactic: have := xInTermsOfW_aux p ℚ n
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
⊢ wittStructureRat p Φ n * ↑C (↑p ^ n) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: replace := congr_arg (bind₁ fun k : ℕ => bind₁ (fun i => rename (Prod.mk i) (W_ ℚ k)) Φ) this
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
this : xInTermsOfW p ℚ n * ↑C (↑p ^ n) = X n - ∑ i in Finset.range n, ↑C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i)
⊢ wittStructureRat p Φ n * ↑C (↑p ^ n) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: rw [AlgHom.map_mul, bind₁_C_right] at this
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
this :
  ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ) (xInTermsOfW p ℚ n * ↑C (↑p ^ n)) =
    ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
      (X n - ∑ i in Finset.range n, ↑C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i))
⊢ wittStructureRat p Φ n * ↑C (↑p ^ n) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: rw [wittStructureRat, this]
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
this :
  ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ) (xInTermsOfW p ℚ n) * ↑C (↑p ^ n) =
    ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
      (X n - ∑ i in Finset.range n, ↑C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i))
⊢ wittStructureRat p Φ n * ↑C (↑p ^ n) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: clear this
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
this :
  ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ) (xInTermsOfW p ℚ n) * ↑C (↑p ^ n) =
    ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
      (X n - ∑ i in Finset.range n, ↑C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i))
⊢ ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
      (X n - ∑ i in Finset.range n, ↑C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i)) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: conv_lhs => simp only [AlgHom.map_sub, bind₁_X_right]
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
⊢ ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
      (X n - ∑ i in Finset.range n, ↑C (↑p ^ i) * xInTermsOfW p ℚ i ^ p ^ (n - i)) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: rw [sub_right_inj]
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
⊢ ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ n)) Φ -
      ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
        (∑ x in Finset.range n, ↑C (↑p ^ x) * xInTermsOfW p ℚ x ^ p ^ (n - x)) =
    ↑(bind₁ fun b => ↑(rename fun i => (b, i)) (W_ ℚ n)) Φ -
      ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: simp only [AlgHom.map_sum, AlgHom.map_mul, bind₁_C_right, AlgHom.map_pow]
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
⊢ ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ)
      (∑ x in Finset.range n, ↑C (↑p ^ x) * xInTermsOfW p ℚ x ^ p ^ (n - x)) =
    ∑ i in Finset.range n, ↑C (↑p ^ i) * wittStructureRat p Φ i ^ p ^ (n - i)

tactic: rfl
state_before: p : ℕ
R : Type ?u.293108
idx : Type u_1
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
n : ℕ
⊢ ∑ x in Finset.range n,
      ↑C (↑p ^ x) *
        ↑(bind₁ fun k => ↑(bind₁ fun i => ↑(rename (Prod.mk i)) (W_ ℚ k)) Φ) (xInTermsOfW p ℚ x) ^ p ^ (n - x) =
    ∑ x in Finset.range n, ↑C (↑p ^ x) * wittStructureRat p Φ x ^ p ^ (n - x)