Theorem: PreTilt.valAux_eq
File: Mathlib/RingTheory/Perfection.lean

Proof steps:
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
n : ℕ
hfn : (coeff (ModP K v O hv p) p n) f ≠ 0
⊢ valAux K v O hv p f = ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p n) f) ^ p ^ n
state_after: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
n : ℕ
hfn : (coeff (ModP K v O hv p) p n) f ≠ 0
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
⊢ valAux K v O hv p f = ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p n) f) ^ p ^ n
tactic: have h : ∃ n, coeff _ _ n f ≠ 0 := ⟨n, hfn⟩
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
n : ℕ
hfn : (coeff (ModP K v O hv p) p n) f ≠ 0
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
⊢ valAux K v O hv p f = ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p n) f) ^ p ^ n
state_after: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
n : ℕ
hfn : (coeff (ModP K v O hv p) p n) f ≠ 0
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p n) f) ^ p ^ n
tactic: rw [valAux, dif_pos h]
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
n : ℕ
hfn : (coeff (ModP K v O hv p) p n) f ≠ 0
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p n) f) ^ p ^ n
state_after: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
hfn : (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
tactic: obtain ⟨k, rfl⟩ := Nat.exists_eq_add_of_le (Nat.find_min' h hfn)
state_before: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
hfn : (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
state_after: case intro.zero
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
hfn : (coeff (ModP K v O hv p) p (Nat.find h + 0)) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + 0)) f) ^ p ^ (Nat.find h + 0)

case intro.succ
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
tactic: induction' k with k ih
state_before: case intro.succ
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
state_after: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
tactic: obtain ⟨x, hx⟩ := Ideal.Quotient.mk_surjective (coeff (ModP K v O hv p) p (Nat.find h + k + 1) f)
state_before: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
state_after: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
h1 : (Ideal.Quotient.mk (Ideal.span {↑p})) x ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
tactic: have h1 : (Ideal.Quotient.mk _ x : ModP K v O hv p) ≠ 0 := hx.symm ▸ hfn
state_before: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
h1 : (Ideal.Quotient.mk (Ideal.span {↑p})) x ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
state_after: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
h1 : (Ideal.Quotient.mk (Ideal.span {↑p})) x ≠ 0
h2 : (Ideal.Quotient.mk (Ideal.span {↑p})) (x ^ p) ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
tactic: have h2 : (Ideal.Quotient.mk _ (x ^ p) : ModP K v O hv p) ≠ 0 := by
    erw [RingHom.map_pow, hx, ← RingHom.map_pow, coeff_pow_p]
    exact coeff_nat_find_add_ne_zero k
state_before: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
h1 : (Ideal.Quotient.mk (Ideal.span {↑p})) x ≠ 0
h2 : (Ideal.Quotient.mk (Ideal.span {↑p})) (x ^ p) ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f) ^ p ^ (Nat.find h + (k + 1))
state_after: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
h1 : (Ideal.Quotient.mk (Ideal.span {↑p})) x ≠ 0
h2 : (Ideal.Quotient.mk (Ideal.span {↑p})) (x ^ p) ≠ 0
⊢ v ((algebraMap O K) x) ^ (p * p ^ (Nat.find h + k)) = v ((algebraMap O K) x) ^ (p * p ^ (Nat.find h).add k)
tactic: erw [ih (coeff_nat_find_add_ne_zero k), ← hx, ← coeff_pow_p, RingHom.map_pow, ← hx,
    ← RingHom.map_pow, ModP.preVal_mk h1, ModP.preVal_mk h2, RingHom.map_pow, v.map_pow, ← pow_mul,
    pow_succ']
state_before: case intro.succ.intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
f : PreTilt K v O hv p
h : ∃ n, (coeff (ModP K v O hv p) p n) f ≠ 0
k : ℕ
ih :
  (coeff (ModP K v O hv p) p (Nat.find h + k)) f ≠ 0 →
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h)) f) ^ p ^ Nat.find h =
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (Nat.find h + k)) f) ^ p ^ (Nat.find h + k)
hfn : (coeff (ModP K v O hv p) p (Nat.find h + (k + 1))) f ≠ 0
x : O
hx : (Ideal.Quotient.mk (Ideal.span {↑p})) x = (coeff (ModP K v O hv p) p (Nat.find h + k + 1)) f
h1 : (Ideal.Quotient.mk (Ideal.span {↑p})) x ≠ 0
h2 : (Ideal.Quotient.mk (Ideal.span {↑p})) (x ^ p) ≠ 0
⊢ v ((algebraMap O K) x) ^ (p * p ^ (Nat.find h + k)) = v ((algebraMap O K) x) ^ (p * p ^ (Nat.find h).add k)
state_after: no goals
tactic: rfl