Theorem: ENatValRing.sub_val_mul_left (ECTate/Algebra/ValuedRing.lean)

State before:
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ sub_val evr n (x * y) = sub_val evr n x * y
Tactic:
apply nzero_mul_left_cancel (p ^ n)
State after:
case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n ≠ 0

case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n * sub_val evr n (x * y) = p ^ n * (sub_val evr n x * y)

State before:
case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n ≠ 0

case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n * sub_val evr n (x * y) = p ^ n * (sub_val evr n x * y)
Tactic:
. exact pow_ne_zero n (p_non_zero evr.valtn)
State after:
case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n * sub_val evr n (x * y) = p ^ n * (sub_val evr n x * y)

State before:
case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n * sub_val evr n (x * y) = p ^ n * (sub_val evr n x * y)
Tactic:
. rw [← factor_p_of_le_val evr (_ : n ≤ evr.valtn (x * y)), ← mul_assoc,
    ← factor_p_of_le_val evr hx]
  exact le_trans hx (val_mul_ge_left evr.valtn x y)
State after:
no goals

State before:
case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n ≠ 0
Tactic:
exact pow_ne_zero n (p_non_zero evr.valtn)
State after:
no goals

State before:
case a
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ p ^ n * sub_val evr n (x * y) = p ^ n * (sub_val evr n x * y)
Tactic:
rw [← factor_p_of_le_val evr (_ : n ≤ evr.valtn (x * y)), ← mul_assoc,
  ← factor_p_of_le_val evr hx]
State after:
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ ↑n ≤ v evr.valtn (x * y)

State before:
R : Type u
inst✝¹ : CommRing R
inst✝ : IsDomain R
p : R
evr : ENatValRing p
x y : R
n : ℕ
hx : ↑n ≤ v evr.valtn x
⊢ ↑n ≤ v evr.valtn (x * y)
Tactic:
exact le_trans hx (val_mul_ge_left evr.valtn x y)
State after:
no goals