Theorem: PreTilt.valAux_mul
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 g : PreTilt K v O hv p
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case pos
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 g : PreTilt K v O hv p
hf : f = 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g

case neg
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 g : PreTilt K v O hv p
hf : ¬f = 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
tactic: by_cases hf : f = 0
state_before: case neg
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 g : PreTilt K v O hv p
hf : ¬f = 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case pos
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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : g = 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g

case neg
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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
tactic: by_cases hg : g = 0
state_before: case neg
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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case neg.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m : ℕ
hm : (coeff (ModP K v O hv p) p m) f ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
tactic: obtain ⟨m, hm⟩ : ∃ n, coeff _ _ n f ≠ 0 := not_forall.1 fun h => hf <| Perfection.ext h
state_before: case neg.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m : ℕ
hm : (coeff (ModP K v O hv p) p m) f ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m : ℕ
hm : (coeff (ModP K v O hv p) p m) f ≠ 0
n : ℕ
hn : (coeff (ModP K v O hv p) p n) g ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
tactic: obtain ⟨n, hn⟩ : ∃ n, coeff _ _ n g ≠ 0 := not_forall.1 fun h => hg <| Perfection.ext h
state_before: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m : ℕ
hm : (coeff (ModP K v O hv p) p m) f ≠ 0
n : ℕ
hn : (coeff (ModP K v O hv p) p n) g ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hn : (coeff (ModP K v O hv p) p n) g ≠ 0
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
tactic: replace hm := coeff_ne_zero_of_le hm (le_max_left m n)
state_before: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hn : (coeff (ModP K v O hv p) p n) g ≠ 0
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max m n)) g ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
tactic: replace hn := coeff_ne_zero_of_le hn (le_max_right m n)
state_before: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max m n)) g ≠ 0
hfg : (coeff (ModP K v O hv p) p (max m n + 1)) (f * g) ≠ 0
⊢ valAux K v O hv p (f * g) = valAux K v O hv p f * valAux K v O hv p g
state_after: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max m n)) g ≠ 0
hfg : (coeff (ModP K v O hv p) p (max m n + 1)) (f * g) ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) (f * g)) ^ p ^ (max m n + 1) =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) f) ^ p ^ (max m n + 1) *
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) g) ^ p ^ (max m n + 1)
tactic: rw [valAux_eq (coeff_add_ne_zero hm 1), valAux_eq (coeff_add_ne_zero hn 1), valAux_eq hfg]
state_before: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max m n)) g ≠ 0
hfg : (coeff (ModP K v O hv p) p (max m n + 1)) (f * g) ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) (f * g)) ^ p ^ (max m n + 1) =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) f) ^ p ^ (max m n + 1) *
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) g) ^ p ^ (max m n + 1)
state_after: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max m n)) g ≠ 0
hfg : (coeff (ModP K v O hv p) p (max m n + 1)) f * (coeff (ModP K v O hv p) p (max m n + 1)) g ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) f * (coeff (ModP K v O hv p) p (max m n + 1)) g) ^
      p ^ (max m n + 1) =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) f) ^ p ^ (max m n + 1) *
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) g) ^ p ^ (max m n + 1)
tactic: rw [RingHom.map_mul] at hfg ⊢
state_before: case neg.intro.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 g : PreTilt K v O hv p
hf : ¬f = 0
hg : ¬g = 0
m n : ℕ
hm : (coeff (ModP K v O hv p) p (max m n)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max m n)) g ≠ 0
hfg : (coeff (ModP K v O hv p) p (max m n + 1)) f * (coeff (ModP K v O hv p) p (max m n + 1)) g ≠ 0
⊢ ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) f * (coeff (ModP K v O hv p) p (max m n + 1)) g) ^
      p ^ (max m n + 1) =
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) f) ^ p ^ (max m n + 1) *
      ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max m n + 1)) g) ^ p ^ (max m n + 1)
state_after: no goals
tactic: rw [ModP.preVal_mul hfg, mul_pow]