Theorem: multiplicity.multiplicity_add_of_gt
File: Mathlib/RingTheory/Multiplicity.lean

tactic: apply le_antisymm
state_before: α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
⊢ multiplicity p (a + b) = multiplicity p b

tactic: apply PartENat.le_of_lt_add_one
state_before: case a
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
⊢ multiplicity p (a + b) ≤ multiplicity p b

tactic: cases' PartENat.ne_top_iff.mp (PartENat.ne_top_of_lt h) with k hk
state_before: case a.h
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
⊢ multiplicity p (a + b) < multiplicity p b + 1

tactic: rw [hk]
state_before: case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
⊢ multiplicity p (a + b) < multiplicity p b + 1

tactic: rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
state_before: case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
⊢ multiplicity p (a + b) < ↑k + 1

tactic: intro h_dvd
state_before: case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
⊢ ¬p ^ (k + 1) ∣ b

case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
⊢ p ^ (k + 1) ∣ a

tactic: apply multiplicity.is_greatest _ h_dvd
state_before: case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
h_dvd : p ^ (k + 1) ∣ b
⊢ False

tactic: rw [hk, ←Nat.succ_eq_add_one]
state_before: α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
h_dvd : p ^ (k + 1) ∣ b
⊢ multiplicity p b < ↑(k + 1)

tactic: norm_cast
state_before: α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
h_dvd : p ^ (k + 1) ∣ b
⊢ ↑k < ↑(succ k)

tactic: apply Nat.lt_succ_self k
state_before: α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
h_dvd : p ^ (k + 1) ∣ b
⊢ k < succ k

tactic: rw [pow_dvd_iff_le_multiplicity, Nat.cast_add, ← hk, Nat.cast_one]
state_before: case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
⊢ p ^ (k + 1) ∣ a

tactic: exact PartENat.add_one_le_of_lt h
state_before: case a.h.intro
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
k : ℕ
hk : multiplicity p b = ↑k
⊢ multiplicity p b + 1 ≤ multiplicity p a

tactic: have := @min_le_multiplicity_add α _ _ p a b
state_before: case a
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
⊢ multiplicity p b ≤ multiplicity p (a + b)

tactic: rwa [← min_eq_right (le_of_lt h)]
state_before: case a
α : Type u_1
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p b < multiplicity p a
this : min (multiplicity p a) (multiplicity p b) ≤ multiplicity p (a + b)
⊢ multiplicity p b ≤ multiplicity p (a + b)