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

case neg.intro.intro.intro.inr
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
m n k : ℕ
hm : (coeff (ModP K v O hv p) p (max (max m n) k)) f ≠ 0
hn : (coeff (ModP K v O hv p) p (max (max m n) k)) g ≠ 0
hk : (coeff (ModP K v O hv p) p (max (max m n) k)) (f + g) ≠ 0
h :
  ModP.preVal K v O hv p
      ((coeff (ModP K v O hv p) p (max (max m n) k)) f + (coeff (ModP K v O hv p) p (max (max m n) k)) g) ≤
    ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max (max m n) k)) g)
⊢ ModP.preVal K v O hv p
        ((coeff (ModP K v O hv p) p (max (max m n) k)) f + (coeff (ModP K v O hv p) p (max (max m n) k)) g) ^
      p ^ max (max m n) k ≤
    max (ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max (max m n) k)) f) ^ p ^ max (max m n) k)
      (ModP.preVal K v O hv p ((coeff (ModP K v O hv p) p (max (max m n) k)) g) ^ p ^ max (max m n) k)
tactic: cases' le_max_iff.1
      (ModP.preVal_add (coeff _ _ (max (max m n) k) f) (coeff _ _ (max (max m n) k) g)) with h h