ring_theory.multiplicity
⟷
Mathlib.RingTheory.Multiplicity
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
A few convenience shortcuts for dvd
along with some simple nat
lemmas. Also
neg_dvd_of_dvd
/dvd_of_neg_dvd
/dvd_neg_of_dvd
/dvd_of_dvd_neg
in favor of the aforementioned shortcuts.dvd_neg
/neg_dvd
.int.of_nat_dvd_of_dvd_nat_abs
/int.dvd_nat_abs_of_of_nat_dvd
because they are the two directions of int.coe_nat_dvd_left
.group_with_zero.to_cancel_monoid_with_zero
from algebra.group_with_zero.units.basic
back to algebra.group_with_zero.basic
. It was erroneously moved during the Great Splits.@@ -330,8 +330,8 @@ variables [ring α] [decidable_rel ((∣) : α → α → Prop)]
@[simp] protected lemma neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
part.ext' (by simp only [multiplicity, part_enat.find, dvd_neg])
(λ h₁ h₂, part_enat.coe_inj.1 (by rw [part_enat.coe_get]; exact
- eq.symm (unique ((dvd_neg _ _).2 (pow_multiplicity_dvd _))
- (mt (dvd_neg _ _).1 (is_greatest' _ (lt_succ_self _))))))
+ eq.symm (unique (pow_multiplicity_dvd _).neg_right
+ (mt dvd_neg.1 (is_greatest' _ (lt_succ_self _))))))
theorem int.nat_abs (a : ℕ) (b : ℤ) : multiplicity a b.nat_abs = multiplicity (a : ℤ) b :=
begin
@@ -346,8 +346,8 @@ begin
apply le_antisymm,
{ apply part_enat.le_of_lt_add_one,
cases part_enat.ne_top_iff.mp (part_enat.ne_top_of_lt h) with k hk,
- rw [hk], rw_mod_cast [multiplicity_lt_iff_neg_dvd], intro h_dvd,
- rw [← dvd_add_iff_right] at h_dvd,
+ rw [hk], rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right],
+ intro h_dvd,
apply multiplicity.is_greatest _ h_dvd, rw [hk], apply_mod_cast nat.lt_succ_self,
rw [pow_dvd_iff_le_multiplicity, nat.cast_add, ← hk, nat.cast_one],
exact part_enat.add_one_le_of_lt h },
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -75,16 +75,16 @@ theorem not_dvd_one_of_finite_one_right {a : α} : Finite a 1 → ¬a ∣ 1 := f
#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_right
-/
-#print multiplicity.Int.coe_nat_multiplicity /-
+#print multiplicity.Int.natCast_multiplicity /-
@[norm_cast]
-theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b :=
+theorem Int.natCast_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b :=
by
apply Part.ext'
· repeat' rw [← finite_iff_dom, finite_def]
norm_cast
· intro h1 h2
apply _root_.le_antisymm <;> · apply Nat.find_mono; norm_cast; simp
-#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicity
+#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.natCast_multiplicity
-/
#print multiplicity.not_finite_iff_forall /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -277,7 +277,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
obtain ⟨c, hc⟩ := multiplicity.pow_multiplicity_dvd hfin
refine' ⟨c, hc, _⟩
rintro ⟨k, hk⟩
- rw [hk, ← mul_assoc, ← pow_succ'] at hc
+ rw [hk, ← mul_assoc, ← pow_succ] at hc
have h₁ : a ^ ((multiplicity a b).get hfin + 1) ∣ b := ⟨k, hc⟩
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
@@ -632,7 +632,7 @@ theorem finite_mul_iff {p a b : α} (hp : Prime p) : Finite p (a * b) ↔ Finite
#print multiplicity.finite_pow /-
theorem finite_pow {p a : α} (hp : Prime p) : ∀ {k : ℕ} (ha : Finite p a), Finite p (a ^ k)
| 0, ha => ⟨0, by simp [mt isUnit_iff_dvd_one.2 hp.2.1]⟩
- | k + 1, ha => by rw [pow_succ] <;> exact finite_mul hp ha (finite_pow ha)
+ | k + 1, ha => by rw [pow_succ'] <;> exact finite_mul hp ha (finite_pow ha)
#align multiplicity.finite_pow multiplicity.finite_pow
-/
@@ -650,7 +650,7 @@ theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplic
⟨b,
mul_left_cancel₀ ha0 <| by
clear _fun_match
- simpa [pow_succ, mul_assoc] using hb⟩)⟩
+ simpa [pow_succ', mul_assoc] using hb⟩)⟩
#align multiplicity.multiplicity_self multiplicity.multiplicity_self
-/
@@ -736,7 +736,7 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
| 0 => by simp [one_right hp.not_unit]
| k + 1 =>
by
- have : multiplicity p (a ^ (k + 1)) = multiplicity p (a * a ^ k) := by rw [pow_succ]
+ have : multiplicity p (a ^ (k + 1)) = multiplicity p (a * a ^ k) := by rw [pow_succ']
rw [get_eq_get_of_eq _ _ this, multiplicity.mul' hp, pow', add_mul, one_mul, add_comm]
#align multiplicity.pow' multiplicity.pow'
-/
@@ -744,7 +744,7 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
#print multiplicity.pow /-
theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) = k • multiplicity p a
| 0 => by simp [one_right hp.not_unit]
- | succ k => by simp [pow_succ, succ_nsmul, pow, multiplicity.mul hp]
+ | succ k => by simp [pow_succ', succ_nsmul', pow, multiplicity.mul hp]
#align multiplicity.pow multiplicity.pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -128,14 +128,14 @@ theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity
#print multiplicity.is_greatest /-
theorem is_greatest {a b : α} {m : ℕ} (hm : multiplicity a b < m) : ¬a ^ m ∣ b := fun h => by
- rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
+ rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
#align multiplicity.is_greatest multiplicity.is_greatest
-/
#print multiplicity.is_greatest' /-
theorem is_greatest' {a b : α} {m : ℕ} (h : Finite a b) (hm : get (multiplicity a b) h < m) :
¬a ^ m ∣ b :=
- is_greatest (by rwa [← PartENat.coe_lt_coe, PartENat.natCast_get] at hm )
+ is_greatest (by rwa [← PartENat.coe_lt_coe, PartENat.natCast_get] at hm)
#align multiplicity.is_greatest' multiplicity.is_greatest'
-/
@@ -277,7 +277,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
obtain ⟨c, hc⟩ := multiplicity.pow_multiplicity_dvd hfin
refine' ⟨c, hc, _⟩
rintro ⟨k, hk⟩
- rw [hk, ← mul_assoc, ← pow_succ'] at hc
+ rw [hk, ← mul_assoc, ← pow_succ'] at hc
have h₁ : a ^ ((multiplicity a b).get hfin + 1) ∣ b := ⟨k, hc⟩
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
@@ -472,7 +472,7 @@ theorem multiplicity_mk_eq_multiplicity
((PartENat.lt_coe_iff _ _).mpr (Exists.intro (finite_iff_dom.mp h) (Nat.lt_succ_self _)))
· suffices ¬Finite (Associates.mk a) (Associates.mk b)
by
- rw [finite_iff_dom, PartENat.not_dom_iff_eq_top] at h this
+ rw [finite_iff_dom, PartENat.not_dom_iff_eq_top] at h this
rw [h, this]
refine'
not_finite_iff_forall.mpr fun n =>
@@ -585,7 +585,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
(hx.symm ▸
⟨y,
mul_right_cancel₀ hp.1 <| by
- rw [tsub_add_cancel_of_le (succ_le_of_lt hn0)] at hy <;>
+ rw [tsub_add_cancel_of_le (succ_le_of_lt hn0)] at hy <;>
simp [hy, pow_add, mul_comm, mul_assoc, mul_left_comm]⟩)
have : 1 ≤ n + m := le_trans hn0 (Nat.le_add_right n m)
finite_mul_aux hpx hb
@@ -604,7 +604,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
(hx.symm ▸
⟨y,
mul_right_cancel₀ hp.1 <| by
- rw [tsub_add_cancel_of_le (succ_le_of_lt hm0)] at hy <;>
+ rw [tsub_add_cancel_of_le (succ_le_of_lt hm0)] at hy <;>
simp [hy, pow_add, mul_comm, mul_assoc, mul_left_comm]⟩)
finite_mul_aux ha hpx
⟨s,
@@ -661,7 +661,7 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
(eq_coe_iff.2
⟨by simp, fun ⟨b, hb⟩ => by
rw [← mul_one a, pow_add, pow_one, mul_assoc, mul_assoc,
- mul_right_inj' (ne_zero_of_finite ha)] at hb <;>
+ mul_right_inj' (ne_zero_of_finite ha)] at hb <;>
exact
mt isUnit_iff_dvd_one.2 (not_unit_of_finite ha) ⟨b, by clear _fun_match <;> simp_all⟩⟩)
#align multiplicity.get_multiplicity_self multiplicity.get_multiplicity_self
@@ -795,12 +795,12 @@ open multiplicity
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
(hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.Coprime a b) : multiplicity p a = 0 :=
by
- rw [multiplicity_le_multiplicity_iff] at hle
+ rw [multiplicity_le_multiplicity_iff] at hle
rw [← nonpos_iff_eq_zero, ← not_lt, PartENat.pos_iff_one_le, ← Nat.cast_one, ←
pow_dvd_iff_le_multiplicity]
intro h
have := Nat.dvd_gcd h (hle _ h)
- rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
+ rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
exact hp this
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -720,7 +720,13 @@ protected theorem mul {p a b : α} (hp : Prime p) :
#print multiplicity.Finset.prod /-
theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
- multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by classical
+ multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by
+ classical
+ induction' s using Finset.induction with a s has ih h
+ · simp only [Finset.sum_empty, Finset.prod_empty]
+ convert one_right hp.not_unit
+ · simp [has, ← ih]
+ convert multiplicity.mul hp
#align multiplicity.finset.prod multiplicity.Finset.prod
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -720,13 +720,7 @@ protected theorem mul {p a b : α} (hp : Prime p) :
#print multiplicity.Finset.prod /-
theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
- multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by
- classical
- induction' s using Finset.induction with a s has ih h
- · simp only [Finset.sum_empty, Finset.prod_empty]
- convert one_right hp.not_unit
- · simp [has, ← ih]
- convert multiplicity.mul hp
+ multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by classical
#align multiplicity.finset.prod multiplicity.Finset.prod
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -179,10 +179,10 @@ theorem pow_dvd_iff_le_multiplicity {a b : α} {k : ℕ} :
#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicity
-/
-#print multiplicity.multiplicity_lt_iff_neg_dvd /-
-theorem multiplicity_lt_iff_neg_dvd {a b : α} {k : ℕ} :
+#print multiplicity.multiplicity_lt_iff_not_dvd /-
+theorem multiplicity_lt_iff_not_dvd {a b : α} {k : ℕ} :
multiplicity a b < (k : PartENat) ↔ ¬a ^ k ∣ b := by rw [pow_dvd_iff_le_multiplicity, not_le]
-#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvd
+#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_not_dvd
-/
#print multiplicity.eq_coe_iff /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -351,7 +351,7 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
le_zero_iff]
exact
⟨fun h =>
- or_iff_not_imp_right.2 fun hb =>
+ Classical.or_iff_not_imp_right.2 fun hb =>
have ha : a ≠ 0 := fun ha => by simpa [ha] using h 1
by_contradiction fun ha1 : a ≠ 1 =>
have ha_gt_one : 1 < a := lt_of_not_ge fun ha' => by clear h; revert ha ha1; decide!
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2018 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
-/
-import Mathbin.Algebra.Associated
-import Mathbin.Algebra.BigOperators.Basic
-import Mathbin.RingTheory.Valuation.Basic
+import Algebra.Associated
+import Algebra.BigOperators.Basic
+import RingTheory.Valuation.Basic
#align_import ring_theory.multiplicity from "leanprover-community/mathlib"@"e8638a0fcaf73e4500469f368ef9494e495099b3"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -793,7 +793,7 @@ open multiplicity
#print multiplicity_eq_zero_of_coprime /-
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
- (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 :=
+ (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.Coprime a b) : multiplicity p a = 0 :=
by
rw [multiplicity_le_multiplicity_iff] at hle
rw [← nonpos_iff_eq_zero, ← not_lt, PartENat.pos_iff_one_le, ← Nat.cast_one, ←
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -360,7 +360,7 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
#align multiplicity.finite_nat_iff multiplicity.finite_nat_iff
-/
-alias dvd_iff_multiplicity_pos ↔ _ _root_.has_dvd.dvd.multiplicity_pos
+alias ⟨_, _root_.has_dvd.dvd.multiplicity_pos⟩ := dvd_iff_multiplicity_pos
#align has_dvd.dvd.multiplicity_pos Dvd.Dvd.multiplicity_pos
end Monoid
@@ -414,7 +414,7 @@ theorem eq_of_associated_left {a b c : α} (h : Associated a b) :
#align multiplicity.eq_of_associated_left multiplicity.eq_of_associated_left
-/
-alias dvd_iff_multiplicity_pos ↔ _ _root_.has_dvd.dvd.multiplicity_pos
+alias ⟨_, _root_.has_dvd.dvd.multiplicity_pos⟩ := dvd_iff_multiplicity_pos
#align has_dvd.dvd.multiplicity_pos Dvd.Dvd.multiplicity_pos
end CommMonoid
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2018 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
-
-! This file was ported from Lean 3 source module ring_theory.multiplicity
-! leanprover-community/mathlib commit e8638a0fcaf73e4500469f368ef9494e495099b3
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Associated
import Mathbin.Algebra.BigOperators.Basic
import Mathbin.RingTheory.Valuation.Basic
+#align_import ring_theory.multiplicity from "leanprover-community/mathlib"@"e8638a0fcaf73e4500469f368ef9494e495099b3"
+
/-!
# Multiplicity of a divisor
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -72,10 +72,13 @@ theorem finite_def {a b : α} : Finite a b ↔ ∃ n : ℕ, ¬a ^ (n + 1) ∣ b
#align multiplicity.finite_def multiplicity.finite_def
-/
+#print multiplicity.not_dvd_one_of_finite_one_right /-
theorem not_dvd_one_of_finite_one_right {a : α} : Finite a 1 → ¬a ∣ 1 := fun ⟨n, hn⟩ ⟨d, hd⟩ =>
hn ⟨d ^ (n + 1), (pow_mul_pow_eq_one (n + 1) hd.symm).symm⟩
#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_right
+-/
+#print multiplicity.Int.coe_nat_multiplicity /-
@[norm_cast]
theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b :=
by
@@ -85,6 +88,7 @@ theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ)
· intro h1 h2
apply _root_.le_antisymm <;> · apply Nat.find_mono; norm_cast; simp
#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicity
+-/
#print multiplicity.not_finite_iff_forall /-
theorem not_finite_iff_forall {a b : α} : ¬Finite a b ↔ ∀ n : ℕ, a ^ n ∣ b :=
@@ -102,18 +106,22 @@ theorem not_unit_of_finite {a b : α} (h : Finite a b) : ¬IsUnit a :=
#align multiplicity.not_unit_of_finite multiplicity.not_unit_of_finite
-/
+#print multiplicity.finite_of_finite_mul_right /-
theorem finite_of_finite_mul_right {a b c : α} : Finite a (b * c) → Finite a b := fun ⟨n, hn⟩ =>
⟨n, fun h => hn (h.trans (dvd_mul_right _ _))⟩
#align multiplicity.finite_of_finite_mul_right multiplicity.finite_of_finite_mul_right
+-/
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.pow_dvd_of_le_multiplicity /-
theorem pow_dvd_of_le_multiplicity {a b : α} {k : ℕ} :
(k : PartENat) ≤ multiplicity a b → a ^ k ∣ b := by rw [← PartENat.some_eq_natCast];
exact
Nat.casesOn k (fun _ => by rw [pow_zero]; exact one_dvd _) fun k ⟨h₁, h₂⟩ =>
by_contradiction fun hk => Nat.find_min _ (lt_of_succ_le (h₂ ⟨k, hk⟩)) hk
#align multiplicity.pow_dvd_of_le_multiplicity multiplicity.pow_dvd_of_le_multiplicity
+-/
#print multiplicity.pow_multiplicity_dvd /-
theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity a b) h ∣ b :=
@@ -121,9 +129,11 @@ theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity
#align multiplicity.pow_multiplicity_dvd multiplicity.pow_multiplicity_dvd
-/
+#print multiplicity.is_greatest /-
theorem is_greatest {a b : α} {m : ℕ} (hm : multiplicity a b < m) : ¬a ^ m ∣ b := fun h => by
rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
#align multiplicity.is_greatest multiplicity.is_greatest
+-/
#print multiplicity.is_greatest' /-
theorem is_greatest' {a b : α} {m : ℕ} (h : Finite a b) (hm : get (multiplicity a b) h < m) :
@@ -140,6 +150,7 @@ theorem pos_of_dvd {a b : α} (hfin : Finite a b) (hdiv : a ∣ b) : 0 < (multip
#align multiplicity.pos_of_dvd multiplicity.pos_of_dvd
-/
+#print multiplicity.unique /-
theorem unique {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1) ∣ b) :
(k : PartENat) = multiplicity a b :=
le_antisymm (le_of_not_gt fun hk' => is_greatest hk' hk) <|
@@ -148,6 +159,7 @@ theorem unique {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1)
rw [PartENat.le_coe_iff]
exact ⟨this, Nat.find_min' _ hsucc⟩
#align multiplicity.unique multiplicity.unique
+-/
#print multiplicity.unique' /-
theorem unique' {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1) ∣ b) :
@@ -156,20 +168,27 @@ theorem unique' {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1)
#align multiplicity.unique' multiplicity.unique'
-/
+#print multiplicity.le_multiplicity_of_pow_dvd /-
theorem le_multiplicity_of_pow_dvd {a b : α} {k : ℕ} (hk : a ^ k ∣ b) :
(k : PartENat) ≤ multiplicity a b :=
le_of_not_gt fun hk' => is_greatest hk' hk
#align multiplicity.le_multiplicity_of_pow_dvd multiplicity.le_multiplicity_of_pow_dvd
+-/
+#print multiplicity.pow_dvd_iff_le_multiplicity /-
theorem pow_dvd_iff_le_multiplicity {a b : α} {k : ℕ} :
a ^ k ∣ b ↔ (k : PartENat) ≤ multiplicity a b :=
⟨le_multiplicity_of_pow_dvd, pow_dvd_of_le_multiplicity⟩
#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicity
+-/
+#print multiplicity.multiplicity_lt_iff_neg_dvd /-
theorem multiplicity_lt_iff_neg_dvd {a b : α} {k : ℕ} :
multiplicity a b < (k : PartENat) ↔ ¬a ^ k ∣ b := by rw [pow_dvd_iff_le_multiplicity, not_le]
#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvd
+-/
+#print multiplicity.eq_coe_iff /-
theorem eq_coe_iff {a b : α} {n : ℕ} :
multiplicity a b = (n : PartENat) ↔ a ^ n ∣ b ∧ ¬a ^ (n + 1) ∣ b :=
by
@@ -182,6 +201,7 @@ theorem eq_coe_iff {a b : α} {n : ℕ} :
IsGreatest (by rw [PartENat.lt_coe_iff]; exact ⟨h₁, lt_succ_self _⟩)⟩,
fun h => eq_some_iff.2 ⟨⟨n, h.2⟩, Eq.symm <| unique' h.1 h.2⟩⟩
#align multiplicity.eq_coe_iff multiplicity.eq_coe_iff
+-/
#print multiplicity.eq_top_iff /-
theorem eq_top_iff {a b : α} : multiplicity a b = ⊤ ↔ ∀ n : ℕ, a ^ n ∣ b :=
@@ -200,17 +220,21 @@ theorem isUnit_left {a : α} (b : α) (ha : IsUnit a) : multiplicity a b = ⊤ :
#align multiplicity.is_unit_left multiplicity.isUnit_left
-/
+#print multiplicity.one_left /-
@[simp]
theorem one_left (b : α) : multiplicity 1 b = ⊤ :=
isUnit_left b isUnit_one
#align multiplicity.one_left multiplicity.one_left
+-/
+#print multiplicity.get_one_right /-
@[simp]
theorem get_one_right {a : α} (ha : Finite a 1) : get (multiplicity a 1) ha = 0 :=
by
rw [PartENat.get_eq_iff_eq_coe, eq_coe_iff, pow_zero]
simp [not_dvd_one_of_finite_one_right ha]
#align multiplicity.get_one_right multiplicity.get_one_right
+-/
#print multiplicity.unit_left /-
@[simp]
@@ -249,6 +273,7 @@ theorem lt_top_iff_finite {a b : α} : multiplicity a b < ⊤ ↔ Finite a b :=
#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finite
-/
+#print multiplicity.exists_eq_pow_mul_and_not_dvd /-
theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
∃ c : α, b = a ^ (multiplicity a b).get hfin * c ∧ ¬a ∣ c :=
by
@@ -259,6 +284,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
have h₁ : a ^ ((multiplicity a b).get hfin + 1) ∣ b := ⟨k, hc⟩
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
+-/
open scoped Classical
@@ -346,9 +372,11 @@ section CommMonoid
variable [CommMonoid α]
+#print multiplicity.finite_of_finite_mul_left /-
theorem finite_of_finite_mul_left {a b c : α} : Finite a (b * c) → Finite a c := by
rw [mul_comm] <;> exact finite_of_finite_mul_right
#align multiplicity.finite_of_finite_mul_left multiplicity.finite_of_finite_mul_left
+-/
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
@@ -360,9 +388,11 @@ theorem isUnit_right {a b : α} (ha : ¬IsUnit a) (hb : IsUnit b) : multiplicity
#align multiplicity.is_unit_right multiplicity.isUnit_right
-/
+#print multiplicity.one_right /-
theorem one_right {a : α} (ha : ¬IsUnit a) : multiplicity a 1 = 0 :=
isUnit_right ha isUnit_one
#align multiplicity.one_right multiplicity.one_right
+-/
#print multiplicity.unit_right /-
theorem unit_right {a : α} (ha : ¬IsUnit a) (u : αˣ) : multiplicity a u = 0 :=
@@ -396,22 +426,28 @@ section MonoidWithZero
variable [MonoidWithZero α]
+#print multiplicity.ne_zero_of_finite /-
theorem ne_zero_of_finite {a b : α} (h : Finite a b) : b ≠ 0 :=
let ⟨n, hn⟩ := h
fun hb => by simpa [hb] using hn
#align multiplicity.ne_zero_of_finite multiplicity.ne_zero_of_finite
+-/
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.zero /-
@[simp]
protected theorem zero (a : α) : multiplicity a 0 = ⊤ :=
Part.eq_none_iff.2 fun n ⟨⟨k, hk⟩, _⟩ => hk (dvd_zero _)
#align multiplicity.zero multiplicity.zero
+-/
+#print multiplicity.multiplicity_zero_eq_zero_of_ne_zero /-
@[simp]
theorem multiplicity_zero_eq_zero_of_ne_zero (a : α) (ha : a ≠ 0) : multiplicity 0 a = 0 :=
multiplicity.multiplicity_eq_zero.2 <| mt zero_dvd_iff.1 ha
#align multiplicity.multiplicity_zero_eq_zero_of_ne_zero multiplicity.multiplicity_zero_eq_zero_of_ne_zero
+-/
end MonoidWithZero
@@ -421,6 +457,7 @@ variable [CommMonoidWithZero α]
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.multiplicity_mk_eq_multiplicity /-
theorem multiplicity_mk_eq_multiplicity
[DecidableRel ((· ∣ ·) : Associates α → Associates α → Prop)] {a b : α} :
multiplicity (Associates.mk a) (Associates.mk b) = multiplicity a b :=
@@ -446,6 +483,7 @@ theorem multiplicity_mk_eq_multiplicity
rw [← Associates.mk_pow, Associates.mk_dvd_mk]
exact not_finite_iff_forall.mp h n
#align multiplicity.multiplicity_mk_eq_multiplicity multiplicity.multiplicity_mk_eq_multiplicity
+-/
end CommMonoidWithZero
@@ -453,6 +491,7 @@ section Semiring
variable [Semiring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.min_le_multiplicity_add /-
theorem min_le_multiplicity_add {p a b : α} :
min (multiplicity p a) (multiplicity p b) ≤ multiplicity p (a + b) :=
(le_total (multiplicity p a) (multiplicity p b)).elim
@@ -463,6 +502,7 @@ theorem min_le_multiplicity_add {p a b : α} :
rw [min_eq_right h, multiplicity_le_multiplicity_iff] <;>
exact fun n hn => dvd_add (multiplicity_le_multiplicity_iff.1 h n hn) hn
#align multiplicity.min_le_multiplicity_add multiplicity.min_le_multiplicity_add
+-/
end Semiring
@@ -470,6 +510,7 @@ section Ring
variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.neg /-
@[simp]
protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
Part.ext' (by simp only [multiplicity, PartENat.find, dvd_neg]) fun h₁ h₂ =>
@@ -481,14 +522,18 @@ protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
(Unique (pow_multiplicity_dvd _).neg_right
(mt dvd_neg.1 (is_greatest' _ (lt_succ_self _)))))
#align multiplicity.neg multiplicity.neg
+-/
+#print multiplicity.Int.natAbs /-
theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity (a : ℤ) b :=
by
cases' Int.natAbs_eq b with h h <;> conv_rhs => rw [h]
· rw [int.coe_nat_multiplicity]
· rw [multiplicity.neg, int.coe_nat_multiplicity]
#align multiplicity.int.nat_abs multiplicity.Int.natAbs
+-/
+#print multiplicity.multiplicity_add_of_gt /-
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a + b) = multiplicity p b :=
by
@@ -502,12 +547,16 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
exact PartENat.add_one_le_of_lt h
· convert min_le_multiplicity_add; rw [min_eq_right (le_of_lt h)]
#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gt
+-/
+#print multiplicity.multiplicity_sub_of_gt /-
theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a - b) = multiplicity p b := by
rw [sub_eq_add_neg, multiplicity_add_of_gt] <;> rwa [multiplicity.neg]
#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gt
+-/
+#print multiplicity.multiplicity_add_eq_min /-
theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplicity p b) :
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
by
@@ -516,6 +565,7 @@ theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplic
· contradiction
· rw [multiplicity_add_of_gt hab, min_eq_right]; exact le_of_lt hab
#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_min
+-/
end Ring
@@ -523,6 +573,7 @@ section CancelCommMonoidWithZero
variable [CancelCommMonoidWithZero α]
+#print multiplicity.finite_mul_aux /-
theorem finite_mul_aux {p : α} (hp : Prime p) :
∀ {n m : ℕ} {a b : α}, ¬p ^ (n + 1) ∣ a → ¬p ^ (m + 1) ∣ b → ¬p ^ (n + m + 1) ∣ a * b
| n, m => fun a b ha hb ⟨s, hs⟩ =>
@@ -566,15 +617,20 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
clear _fun_match _fun_match finite_mul_aux
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
+-/
+#print multiplicity.finite_mul /-
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
fun ⟨n, hn⟩ ⟨m, hm⟩ => ⟨n + m, finite_mul_aux hp hn hm⟩
#align multiplicity.finite_mul multiplicity.finite_mul
+-/
+#print multiplicity.finite_mul_iff /-
theorem finite_mul_iff {p a b : α} (hp : Prime p) : Finite p (a * b) ↔ Finite p a ∧ Finite p b :=
⟨fun h => ⟨finite_of_finite_mul_right h, finite_of_finite_mul_left h⟩, fun h =>
finite_mul hp h.1 h.2⟩
#align multiplicity.finite_mul_iff multiplicity.finite_mul_iff
+-/
#print multiplicity.finite_pow /-
theorem finite_pow {p a : α} (hp : Prime p) : ∀ {k : ℕ} (ha : Finite p a), Finite p (a ^ k)
@@ -585,6 +641,7 @@ theorem finite_pow {p a : α} (hp : Prime p) : ∀ {k : ℕ} (ha : Finite p a),
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.multiplicity_self /-
@[simp]
theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 := by
rw [← Nat.cast_one];
@@ -598,6 +655,7 @@ theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplic
clear _fun_match
simpa [pow_succ, mul_assoc] using hb⟩)⟩
#align multiplicity.multiplicity_self multiplicity.multiplicity_self
+-/
#print multiplicity.get_multiplicity_self /-
@[simp]
@@ -612,6 +670,7 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
#align multiplicity.get_multiplicity_self multiplicity.get_multiplicity_self
-/
+#print multiplicity.mul' /-
protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b)).Dom) :
get (multiplicity p (a * b)) h =
get (multiplicity p a) ((finite_mul_iff hp).1 h).1 +
@@ -643,9 +702,11 @@ protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b))
(_root_.succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul hp hdiva hdivb h)
rw [← PartENat.natCast_inj, PartENat.natCast_get, eq_coe_iff] <;> exact ⟨hdiv, hsucc⟩
#align multiplicity.mul' multiplicity.mul'
+-/
open scoped Classical
+#print multiplicity.mul /-
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
if h : Finite p a ∧ Finite p b then by
@@ -658,6 +719,7 @@ protected theorem mul {p a b : α} (hp : Prime p) :
rw [eq_top_iff_not_finite.2 (mt (finite_mul_iff hp).1 h)]
cases' not_and_or.1 h with h h <;> simp [eq_top_iff_not_finite.2 h]
#align multiplicity.mul multiplicity.mul
+-/
#print multiplicity.Finset.prod /-
theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
@@ -682,20 +744,26 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
#align multiplicity.pow' multiplicity.pow'
-/
+#print multiplicity.pow /-
theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) = k • multiplicity p a
| 0 => by simp [one_right hp.not_unit]
| succ k => by simp [pow_succ, succ_nsmul, pow, multiplicity.mul hp]
#align multiplicity.pow multiplicity.pow
+-/
+#print multiplicity.multiplicity_pow_self /-
theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ) :
multiplicity p (p ^ n) = n := by rw [eq_coe_iff]; use dvd_rfl; rw [pow_dvd_pow_iff h0 hu];
apply Nat.not_succ_le_self
#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_self
+-/
+#print multiplicity.multiplicity_pow_self_of_prime /-
theorem multiplicity_pow_self_of_prime {p : α} (hp : Prime p) (n : ℕ) :
multiplicity p (p ^ n) = n :=
multiplicity_pow_self hp.NeZero hp.not_unit n
#align multiplicity.multiplicity_pow_self_of_prime multiplicity.multiplicity_pow_self_of_prime
+-/
end CancelCommMonoidWithZero
@@ -703,16 +771,20 @@ section Valuation
variable {R : Type _} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.Dvd : R → R → Prop)]
+#print multiplicity.addValuation /-
/-- `multiplicity` of a prime inan integral domain as an additive valuation to `part_enat`. -/
noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
AddValuation.of (multiplicity p) (multiplicity.zero _) (one_right hp.not_unit)
(fun _ _ => min_le_multiplicity_add) fun a b => multiplicity.mul hp
#align multiplicity.add_valuation multiplicity.addValuation
+-/
+#print multiplicity.addValuation_apply /-
@[simp]
theorem addValuation_apply {hp : Prime p} {r : R} : addValuation hp r = multiplicity p r :=
rfl
#align multiplicity.add_valuation_apply multiplicity.addValuation_apply
+-/
end Valuation
@@ -722,6 +794,7 @@ section Nat
open multiplicity
+#print multiplicity_eq_zero_of_coprime /-
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
(hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 :=
by
@@ -733,6 +806,7 @@ theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
exact hp this
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
+-/
end Nat
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -663,11 +663,11 @@ protected theorem mul {p a b : α} (hp : Prime p) :
theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by
classical
- induction' s using Finset.induction with a s has ih h
- · simp only [Finset.sum_empty, Finset.prod_empty]
- convert one_right hp.not_unit
- · simp [has, ← ih]
- convert multiplicity.mul hp
+ induction' s using Finset.induction with a s has ih h
+ · simp only [Finset.sum_empty, Finset.prod_empty]
+ convert one_right hp.not_unit
+ · simp [has, ← ih]
+ convert multiplicity.mul hp
#align multiplicity.finset.prod multiplicity.Finset.prod
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -122,13 +122,13 @@ theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity
-/
theorem is_greatest {a b : α} {m : ℕ} (hm : multiplicity a b < m) : ¬a ^ m ∣ b := fun h => by
- rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
+ rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
#align multiplicity.is_greatest multiplicity.is_greatest
#print multiplicity.is_greatest' /-
theorem is_greatest' {a b : α} {m : ℕ} (h : Finite a b) (hm : get (multiplicity a b) h < m) :
¬a ^ m ∣ b :=
- is_greatest (by rwa [← PartENat.coe_lt_coe, PartENat.natCast_get] at hm)
+ is_greatest (by rwa [← PartENat.coe_lt_coe, PartENat.natCast_get] at hm )
#align multiplicity.is_greatest' multiplicity.is_greatest'
-/
@@ -255,7 +255,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
obtain ⟨c, hc⟩ := multiplicity.pow_multiplicity_dvd hfin
refine' ⟨c, hc, _⟩
rintro ⟨k, hk⟩
- rw [hk, ← mul_assoc, ← pow_succ'] at hc
+ rw [hk, ← mul_assoc, ← pow_succ'] at hc
have h₁ : a ^ ((multiplicity a b).get hfin + 1) ∣ b := ⟨k, hc⟩
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
@@ -438,7 +438,7 @@ theorem multiplicity_mk_eq_multiplicity
((PartENat.lt_coe_iff _ _).mpr (Exists.intro (finite_iff_dom.mp h) (Nat.lt_succ_self _)))
· suffices ¬Finite (Associates.mk a) (Associates.mk b)
by
- rw [finite_iff_dom, PartENat.not_dom_iff_eq_top] at h this
+ rw [finite_iff_dom, PartENat.not_dom_iff_eq_top] at h this
rw [h, this]
refine'
not_finite_iff_forall.mpr fun n =>
@@ -537,7 +537,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
(hx.symm ▸
⟨y,
mul_right_cancel₀ hp.1 <| by
- rw [tsub_add_cancel_of_le (succ_le_of_lt hn0)] at hy <;>
+ rw [tsub_add_cancel_of_le (succ_le_of_lt hn0)] at hy <;>
simp [hy, pow_add, mul_comm, mul_assoc, mul_left_comm]⟩)
have : 1 ≤ n + m := le_trans hn0 (Nat.le_add_right n m)
finite_mul_aux hpx hb
@@ -556,7 +556,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
(hx.symm ▸
⟨y,
mul_right_cancel₀ hp.1 <| by
- rw [tsub_add_cancel_of_le (succ_le_of_lt hm0)] at hy <;>
+ rw [tsub_add_cancel_of_le (succ_le_of_lt hm0)] at hy <;>
simp [hy, pow_add, mul_comm, mul_assoc, mul_left_comm]⟩)
finite_mul_aux ha hpx
⟨s,
@@ -606,7 +606,7 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
(eq_coe_iff.2
⟨by simp, fun ⟨b, hb⟩ => by
rw [← mul_one a, pow_add, pow_one, mul_assoc, mul_assoc,
- mul_right_inj' (ne_zero_of_finite ha)] at hb <;>
+ mul_right_inj' (ne_zero_of_finite ha)] at hb <;>
exact
mt isUnit_iff_dvd_one.2 (not_unit_of_finite ha) ⟨b, by clear _fun_match <;> simp_all⟩⟩)
#align multiplicity.get_multiplicity_self multiplicity.get_multiplicity_self
@@ -725,12 +725,12 @@ open multiplicity
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
(hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 :=
by
- rw [multiplicity_le_multiplicity_iff] at hle
+ rw [multiplicity_le_multiplicity_iff] at hle
rw [← nonpos_iff_eq_zero, ← not_lt, PartENat.pos_iff_one_le, ← Nat.cast_one, ←
pow_dvd_iff_le_multiplicity]
intro h
have := Nat.dvd_gcd h (hle _ h)
- rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
+ rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
exact hp this
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -34,7 +34,7 @@ variable {α : Type _}
open Nat Part
-open BigOperators
+open scoped BigOperators
#print multiplicity /-
/-- `multiplicity a b` returns the largest natural number `n` such that
@@ -243,9 +243,11 @@ theorem ne_top_iff_finite {a b : α} : multiplicity a b ≠ ⊤ ↔ Finite a b :
#align multiplicity.ne_top_iff_finite multiplicity.ne_top_iff_finite
-/
+#print multiplicity.lt_top_iff_finite /-
theorem lt_top_iff_finite {a b : α} : multiplicity a b < ⊤ ↔ Finite a b := by
rw [lt_top_iff_ne_top, ne_top_iff_finite]
#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finite
+-/
theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
∃ c : α, b = a ^ (multiplicity a b).get hfin * c ∧ ¬a ∣ c :=
@@ -258,7 +260,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
-open Classical
+open scoped Classical
#print multiplicity.multiplicity_le_multiplicity_iff /-
theorem multiplicity_le_multiplicity_iff {a b c d : α} :
@@ -299,13 +301,16 @@ theorem eq_of_associated_right {a b c : α} (h : Associated b c) :
#align multiplicity.eq_of_associated_right multiplicity.eq_of_associated_right
-/
+#print multiplicity.dvd_of_multiplicity_pos /-
theorem dvd_of_multiplicity_pos {a b : α} (h : (0 : PartENat) < multiplicity a b) : a ∣ b :=
by
rw [← pow_one a]
apply pow_dvd_of_le_multiplicity
simpa only [Nat.cast_one, PartENat.pos_iff_one_le] using h
#align multiplicity.dvd_of_multiplicity_pos multiplicity.dvd_of_multiplicity_pos
+-/
+#print multiplicity.dvd_iff_multiplicity_pos /-
theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b ↔ a ∣ b :=
⟨dvd_of_multiplicity_pos, fun hdvd =>
lt_of_le_of_ne (zero_le _) fun heq =>
@@ -314,6 +319,7 @@ theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b
simpa only [HEq, Nat.cast_zero] using part_enat.coe_lt_coe.mpr zero_lt_one)
(by rwa [pow_one a])⟩
#align multiplicity.dvd_iff_multiplicity_pos multiplicity.dvd_iff_multiplicity_pos
+-/
#print multiplicity.finite_nat_iff /-
theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
@@ -364,7 +370,7 @@ theorem unit_right {a : α} (ha : ¬IsUnit a) (u : αˣ) : multiplicity a u = 0
#align multiplicity.unit_right multiplicity.unit_right
-/
-open Classical
+open scoped Classical
#print multiplicity.multiplicity_le_multiplicity_of_dvd_left /-
theorem multiplicity_le_multiplicity_of_dvd_left {a b c : α} (hdvd : a ∣ b) :
@@ -638,7 +644,7 @@ protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b))
rw [← PartENat.natCast_inj, PartENat.natCast_get, eq_coe_iff] <;> exact ⟨hdiv, hsucc⟩
#align multiplicity.mul' multiplicity.mul'
-open Classical
+open scoped Classical
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -72,22 +72,10 @@ theorem finite_def {a b : α} : Finite a b ↔ ∃ n : ℕ, ¬a ^ (n + 1) ∣ b
#align multiplicity.finite_def multiplicity.finite_def
-/
-/- warning: multiplicity.not_dvd_one_of_finite_one_right -> multiplicity.not_dvd_one_of_finite_one_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α}, (multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α}, (multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_rightₓ'. -/
theorem not_dvd_one_of_finite_one_right {a : α} : Finite a 1 → ¬a ∣ 1 := fun ⟨n, hn⟩ ⟨d, hd⟩ =>
hn ⟨d ^ (n + 1), (pow_mul_pow_eq_one (n + 1) hd.symm).symm⟩
#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_right
-/- warning: multiplicity.int.coe_nat_multiplicity -> multiplicity.Int.coe_nat_multiplicity is a dubious translation:
-lean 3 declaration is
- forall (a : Nat) (b : Nat), Eq.{1} PartENat (multiplicity.{0} Int Int.monoid (fun (a : Int) (b : Int) => Int.decidableDvd a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) a) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) b)) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) a b)
-but is expected to have type
- forall (a : Nat) (b : Nat), Eq.{1} PartENat (multiplicity.{0} Int Int.instMonoidInt (fun (a : Int) (b : Int) => Int.decidableDvd a b) (Nat.cast.{0} Int instNatCastInt a) (Nat.cast.{0} Int instNatCastInt b)) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicityₓ'. -/
@[norm_cast]
theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b :=
by
@@ -114,24 +102,12 @@ theorem not_unit_of_finite {a b : α} (h : Finite a b) : ¬IsUnit a :=
#align multiplicity.not_unit_of_finite multiplicity.not_unit_of_finite
-/
-/- warning: multiplicity.finite_of_finite_mul_right -> multiplicity.finite_of_finite_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α _inst_1 a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) b c)) -> (multiplicity.Finite.{u1} α _inst_1 a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α _inst_1 a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) b c)) -> (multiplicity.Finite.{u1} α _inst_1 a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_of_finite_mul_right multiplicity.finite_of_finite_mul_rightₓ'. -/
theorem finite_of_finite_mul_right {a b c : α} : Finite a (b * c) → Finite a b := fun ⟨n, hn⟩ =>
⟨n, fun h => hn (h.trans (dvd_mul_right _ _))⟩
#align multiplicity.finite_of_finite_mul_right multiplicity.finite_of_finite_mul_right
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
-/- warning: multiplicity.pow_dvd_of_le_multiplicity -> multiplicity.pow_dvd_of_le_multiplicity is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, (LE.le.{0} PartENat PartENat.hasLe ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.761 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.763 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.761 x._@.Mathlib.RingTheory.Multiplicity._hyg.763)] {a : α} {b : α} {k : Nat}, (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.pow_dvd_of_le_multiplicity multiplicity.pow_dvd_of_le_multiplicityₓ'. -/
theorem pow_dvd_of_le_multiplicity {a b : α} {k : ℕ} :
(k : PartENat) ≤ multiplicity a b → a ^ k ∣ b := by rw [← PartENat.some_eq_natCast];
exact
@@ -145,12 +121,6 @@ theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity
#align multiplicity.pow_multiplicity_dvd multiplicity.pow_multiplicity_dvd
-/
-/- warning: multiplicity.is_greatest -> multiplicity.is_greatest is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) m)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1017 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1019 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1017 x._@.Mathlib.RingTheory.Multiplicity._hyg.1019)] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) m)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.is_greatest multiplicity.is_greatestₓ'. -/
theorem is_greatest {a b : α} {m : ℕ} (hm : multiplicity a b < m) : ¬a ^ m ∣ b := fun h => by
rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
#align multiplicity.is_greatest multiplicity.is_greatest
@@ -170,12 +140,6 @@ theorem pos_of_dvd {a b : α} (hfin : Finite a b) (hdiv : a ∣ b) : 0 < (multip
#align multiplicity.pos_of_dvd multiplicity.pos_of_dvd
-/
-/- warning: multiplicity.unique -> multiplicity.unique is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) b)) -> (Eq.{1} PartENat ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1289 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1291 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1289 x._@.Mathlib.RingTheory.Multiplicity._hyg.1291)] {a : α} {b : α} {k : Nat}, (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) b)) -> (Eq.{1} PartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.unique multiplicity.uniqueₓ'. -/
theorem unique {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1) ∣ b) :
(k : PartENat) = multiplicity a b :=
le_antisymm (le_of_not_gt fun hk' => is_greatest hk' hk) <|
@@ -192,44 +156,20 @@ theorem unique' {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1)
#align multiplicity.unique' multiplicity.unique'
-/
-/- warning: multiplicity.le_multiplicity_of_pow_dvd -> multiplicity.le_multiplicity_of_pow_dvd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (LE.le.{0} PartENat PartENat.hasLe ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1541 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1543 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1541 x._@.Mathlib.RingTheory.Multiplicity._hyg.1543)] {a : α} {b : α} {k : Nat}, (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.le_multiplicity_of_pow_dvd multiplicity.le_multiplicity_of_pow_dvdₓ'. -/
theorem le_multiplicity_of_pow_dvd {a b : α} {k : ℕ} (hk : a ^ k ∣ b) :
(k : PartENat) ≤ multiplicity a b :=
le_of_not_gt fun hk' => is_greatest hk' hk
#align multiplicity.le_multiplicity_of_pow_dvd multiplicity.le_multiplicity_of_pow_dvd
-/- warning: multiplicity.pow_dvd_iff_le_multiplicity -> multiplicity.pow_dvd_iff_le_multiplicity is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, Iff (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) (LE.le.{0} PartENat PartENat.hasLe ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1603 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1605 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1603 x._@.Mathlib.RingTheory.Multiplicity._hyg.1605)] {a : α} {b : α} {k : Nat}, Iff (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicityₓ'. -/
theorem pow_dvd_iff_le_multiplicity {a b : α} {k : ℕ} :
a ^ k ∣ b ↔ (k : PartENat) ≤ multiplicity a b :=
⟨le_multiplicity_of_pow_dvd, pow_dvd_of_le_multiplicity⟩
#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicity
-/- warning: multiplicity.multiplicity_lt_iff_neg_dvd -> multiplicity.multiplicity_lt_iff_neg_dvd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k)) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1665 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1667 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1665 x._@.Mathlib.RingTheory.Multiplicity._hyg.1667)] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k)) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvdₓ'. -/
theorem multiplicity_lt_iff_neg_dvd {a b : α} {k : ℕ} :
multiplicity a b < (k : PartENat) ↔ ¬a ^ k ∣ b := by rw [pow_dvd_iff_le_multiplicity, not_le]
#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvd
-/- warning: multiplicity.eq_coe_iff -> multiplicity.eq_coe_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {n : Nat}, Iff (Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n)) (And (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a n) b) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) b)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1755 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1757 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1755 x._@.Mathlib.RingTheory.Multiplicity._hyg.1757)] {a : α} {b : α} {n : Nat}, Iff (Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n)) (And (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a n) b) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) b)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.eq_coe_iff multiplicity.eq_coe_iffₓ'. -/
theorem eq_coe_iff {a b : α} {n : ℕ} :
multiplicity a b = (n : PartENat) ↔ a ^ n ∣ b ∧ ¬a ^ (n + 1) ∣ b :=
by
@@ -260,23 +200,11 @@ theorem isUnit_left {a : α} (b : α) (ha : IsUnit a) : multiplicity a b = ⊤ :
#align multiplicity.is_unit_left multiplicity.isUnit_left
-/
-/- warning: multiplicity.one_left -> multiplicity.one_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] (b : α), Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))))) b) (Top.top.{0} PartENat PartENat.hasTop)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2134 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2136 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2134 x._@.Mathlib.RingTheory.Multiplicity._hyg.2136)] (b : α), Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1))) b) (Top.top.{0} PartENat PartENat.instTopPartENat)
-Case conversion may be inaccurate. Consider using '#align multiplicity.one_left multiplicity.one_leftₓ'. -/
@[simp]
theorem one_left (b : α) : multiplicity 1 b = ⊤ :=
isUnit_left b isUnit_one
#align multiplicity.one_left multiplicity.one_left
-/- warning: multiplicity.get_one_right -> multiplicity.get_one_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} (ha : multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))) ha) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2176 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2178 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2176 x._@.Mathlib.RingTheory.Multiplicity._hyg.2178)] {a : α} (ha : multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))) ha) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
-Case conversion may be inaccurate. Consider using '#align multiplicity.get_one_right multiplicity.get_one_rightₓ'. -/
@[simp]
theorem get_one_right {a : α} (ha : Finite a 1) : get (multiplicity a 1) ha = 0 :=
by
@@ -315,22 +243,10 @@ theorem ne_top_iff_finite {a b : α} : multiplicity a b ≠ ⊤ ↔ Finite a b :
#align multiplicity.ne_top_iff_finite multiplicity.ne_top_iff_finite
-/
-/- warning: multiplicity.lt_top_iff_finite -> multiplicity.lt_top_iff_finite is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Top.top.{0} PartENat PartENat.hasTop)) (multiplicity.Finite.{u1} α _inst_1 a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2567 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2569 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2567 x._@.Mathlib.RingTheory.Multiplicity._hyg.2569)] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Top.top.{0} PartENat PartENat.instTopPartENat)) (multiplicity.Finite.{u1} α _inst_1 a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finiteₓ'. -/
theorem lt_top_iff_finite {a b : α} : multiplicity a b < ⊤ ↔ Finite a b := by
rw [lt_top_iff_ne_top, ne_top_iff_finite]
#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finite
-/- warning: multiplicity.exists_eq_pow_mul_and_not_dvd -> multiplicity.exists_eq_pow_mul_and_not_dvd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} (hfin : multiplicity.Finite.{u1} α _inst_1 a b), Exists.{succ u1} α (fun (c : α) => And (Eq.{succ u1} α b (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) hfin)) c)) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a c)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2642 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2644 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2642 x._@.Mathlib.RingTheory.Multiplicity._hyg.2644)] {a : α} {b : α} (hfin : multiplicity.Finite.{u1} α _inst_1 a b), Exists.{succ u1} α (fun (c : α) => And (Eq.{succ u1} α b (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) hfin)) c)) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a c)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvdₓ'. -/
theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
∃ c : α, b = a ^ (multiplicity a b).get hfin * c ∧ ¬a ∣ c :=
by
@@ -383,12 +299,6 @@ theorem eq_of_associated_right {a b c : α} (h : Associated b c) :
#align multiplicity.eq_of_associated_right multiplicity.eq_of_associated_right
-/
-/- warning: multiplicity.dvd_of_multiplicity_pos -> multiplicity.dvd_of_multiplicity_pos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.3267 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.3269 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.3267 x._@.Mathlib.RingTheory.Multiplicity._hyg.3269)] {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.dvd_of_multiplicity_pos multiplicity.dvd_of_multiplicity_posₓ'. -/
theorem dvd_of_multiplicity_pos {a b : α} (h : (0 : PartENat) < multiplicity a b) : a ∣ b :=
by
rw [← pow_one a]
@@ -396,12 +306,6 @@ theorem dvd_of_multiplicity_pos {a b : α} (h : (0 : PartENat) < multiplicity a
simpa only [Nat.cast_one, PartENat.pos_iff_one_le] using h
#align multiplicity.dvd_of_multiplicity_pos multiplicity.dvd_of_multiplicity_pos
-/- warning: multiplicity.dvd_iff_multiplicity_pos -> multiplicity.dvd_iff_multiplicity_pos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.3353 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.3355 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.3353 x._@.Mathlib.RingTheory.Multiplicity._hyg.3355)] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.dvd_iff_multiplicity_pos multiplicity.dvd_iff_multiplicity_posₓ'. -/
theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b ↔ a ∣ b :=
⟨dvd_of_multiplicity_pos, fun hdvd =>
lt_of_le_of_ne (zero_le _) fun heq =>
@@ -436,12 +340,6 @@ section CommMonoid
variable [CommMonoid α]
-/- warning: multiplicity.finite_of_finite_mul_left -> multiplicity.finite_of_finite_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1)))) b c)) -> (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a c)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1)))) b c)) -> (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a c)
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_of_finite_mul_left multiplicity.finite_of_finite_mul_leftₓ'. -/
theorem finite_of_finite_mul_left {a b c : α} : Finite a (b * c) → Finite a c := by
rw [mul_comm] <;> exact finite_of_finite_mul_right
#align multiplicity.finite_of_finite_mul_left multiplicity.finite_of_finite_mul_left
@@ -456,12 +354,6 @@ theorem isUnit_right {a b : α} (ha : ¬IsUnit a) (hb : IsUnit b) : multiplicity
#align multiplicity.is_unit_right multiplicity.isUnit_right
-/
-/- warning: multiplicity.one_right -> multiplicity.one_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))))) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4001 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4003 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4001 x._@.Mathlib.RingTheory.Multiplicity._hyg.4003)] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.one_right multiplicity.one_rightₓ'. -/
theorem one_right {a : α} (ha : ¬IsUnit a) : multiplicity a 1 = 0 :=
isUnit_right ha isUnit_one
#align multiplicity.one_right multiplicity.one_right
@@ -498,12 +390,6 @@ section MonoidWithZero
variable [MonoidWithZero α]
-/- warning: multiplicity.ne_zero_of_finite -> multiplicity.ne_zero_of_finite is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] {a : α} {b : α}, (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) a b) -> (Ne.{succ u1} α b (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1)))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] {a : α} {b : α}, (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) a b) -> (Ne.{succ u1} α b (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1))))
-Case conversion may be inaccurate. Consider using '#align multiplicity.ne_zero_of_finite multiplicity.ne_zero_of_finiteₓ'. -/
theorem ne_zero_of_finite {a b : α} (h : Finite a b) : b ≠ 0 :=
let ⟨n, hn⟩ := h
fun hb => by simpa [hb] using hn
@@ -511,23 +397,11 @@ theorem ne_zero_of_finite {a b : α} (h : Finite a b) : b ≠ 0 :=
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
-/- warning: multiplicity.zero -> multiplicity.zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))))] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1))))))) (Top.top.{0} PartENat PartENat.hasTop)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4287 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4289 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4287 x._@.Mathlib.RingTheory.Multiplicity._hyg.4289)] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) (Top.top.{0} PartENat PartENat.instTopPartENat)
-Case conversion may be inaccurate. Consider using '#align multiplicity.zero multiplicity.zeroₓ'. -/
@[simp]
protected theorem zero (a : α) : multiplicity a 0 = ⊤ :=
Part.eq_none_iff.2 fun n ⟨⟨k, hk⟩, _⟩ => hk (dvd_zero _)
#align multiplicity.zero multiplicity.zero
-/- warning: multiplicity.multiplicity_zero_eq_zero_of_ne_zero -> multiplicity.multiplicity_zero_eq_zero_of_ne_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))))] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1)))))) a) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4365 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4367 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4365 x._@.Mathlib.RingTheory.Multiplicity._hyg.4367)] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1))) a) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_zero_eq_zero_of_ne_zero multiplicity.multiplicity_zero_eq_zero_of_ne_zeroₓ'. -/
@[simp]
theorem multiplicity_zero_eq_zero_of_ne_zero (a : α) (ha : a ≠ 0) : multiplicity 0 a = 0 :=
multiplicity.multiplicity_eq_zero.2 <| mt zero_dvd_iff.1 ha
@@ -541,12 +415,6 @@ variable [CommMonoidWithZero α]
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
-/- warning: multiplicity.multiplicity_mk_eq_multiplicity -> multiplicity.multiplicity_mk_eq_multiplicity is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))))] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Dvd.Dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.commMonoidWithZero.{u1} α _inst_1))))))] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.commMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4452 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4454 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4452 x._@.Mathlib.RingTheory.Multiplicity._hyg.4454)] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4478 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4480 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => Dvd.dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4478 x._@.Mathlib.RingTheory.Multiplicity._hyg.4480)] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_mk_eq_multiplicity multiplicity.multiplicity_mk_eq_multiplicityₓ'. -/
theorem multiplicity_mk_eq_multiplicity
[DecidableRel ((· ∣ ·) : Associates α → Associates α → Prop)] {a b : α} :
multiplicity (Associates.mk a) (Associates.mk b) = multiplicity a b :=
@@ -579,12 +447,6 @@ section Semiring
variable [Semiring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
-/- warning: multiplicity.min_le_multiplicity_add -> multiplicity.min_le_multiplicity_add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))))] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.hasLe (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4899 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4901 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4899 x._@.Mathlib.RingTheory.Multiplicity._hyg.4901)] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.instLEPartENat (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.min_le_multiplicity_add multiplicity.min_le_multiplicity_addₓ'. -/
theorem min_le_multiplicity_add {p a b : α} :
min (multiplicity p a) (multiplicity p b) ≤ multiplicity p (a + b) :=
(le_total (multiplicity p a) (multiplicity p b)).elim
@@ -602,12 +464,6 @@ section Ring
variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
-/- warning: multiplicity.neg -> multiplicity.neg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1))))) b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5106 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 x._@.Mathlib.RingTheory.Multiplicity._hyg.5106)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.neg multiplicity.negₓ'. -/
@[simp]
protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
Part.ext' (by simp only [multiplicity, PartENat.find, dvd_neg]) fun h₁ h₂ =>
@@ -620,12 +476,6 @@ protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
(mt dvd_neg.1 (is_greatest' _ (lt_succ_self _)))))
#align multiplicity.neg multiplicity.neg
-/- warning: multiplicity.int.nat_abs -> multiplicity.Int.natAbs is a dubious translation:
-lean 3 declaration is
- forall (a : Nat) (b : Int), Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) a (Int.natAbs b)) (multiplicity.{0} Int Int.monoid (fun (a : Int) (b : Int) => Int.decidableDvd a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) a) b)
-but is expected to have type
- forall (a : Nat) (b : Int), Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) a (Int.natAbs b)) (multiplicity.{0} Int Int.instMonoidInt (fun (a : Int) (b : Int) => Int.decidableDvd a b) (Nat.cast.{0} Int instNatCastInt a) b)
-Case conversion may be inaccurate. Consider using '#align multiplicity.int.nat_abs multiplicity.Int.natAbsₓ'. -/
theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity (a : ℤ) b :=
by
cases' Int.natAbs_eq b with h h <;> conv_rhs => rw [h]
@@ -633,12 +483,6 @@ theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity
· rw [multiplicity.neg, int.coe_nat_multiplicity]
#align multiplicity.int.nat_abs multiplicity.Int.natAbs
-/- warning: multiplicity.multiplicity_add_of_gt -> multiplicity.multiplicity_add_of_gt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 x._@.Mathlib.RingTheory.Multiplicity._hyg.5400)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gtₓ'. -/
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a + b) = multiplicity p b :=
by
@@ -653,23 +497,11 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
· convert min_le_multiplicity_add; rw [min_eq_right (le_of_lt h)]
#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gt
-/- warning: multiplicity.multiplicity_sub_of_gt -> multiplicity.multiplicity_sub_of_gt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5833 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 x._@.Mathlib.RingTheory.Multiplicity._hyg.5833)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a - b) = multiplicity p b := by
rw [sub_eq_add_neg, multiplicity_add_of_gt] <;> rwa [multiplicity.neg]
#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gt
-/- warning: multiplicity.multiplicity_add_eq_min -> multiplicity.multiplicity_add_eq_min is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5990 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 x._@.Mathlib.RingTheory.Multiplicity._hyg.5990)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_minₓ'. -/
theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplicity p b) :
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
by
@@ -685,12 +517,6 @@ section CancelCommMonoidWithZero
variable [CancelCommMonoidWithZero α]
-/- warning: multiplicity.finite_mul_aux -> multiplicity.finite_mul_aux is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {n : Nat} {m : Nat} {a : α} {b : α}, (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) a)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) b)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n m) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {n : α} {m : α} {a : Nat} {b : Nat}, (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) a (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) n)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) b (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) m)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) a b) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) n m))))
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_mul_aux multiplicity.finite_mul_auxₓ'. -/
theorem finite_mul_aux {p : α} (hp : Prime p) :
∀ {n m : ℕ} {a b : α}, ¬p ^ (n + 1) ∣ a → ¬p ^ (m + 1) ∣ b → ¬p ^ (n + m + 1) ∣ a * b
| n, m => fun a b ha hb ⟨s, hs⟩ =>
@@ -735,22 +561,10 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
-/- warning: multiplicity.finite_mul -> multiplicity.finite_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_mul multiplicity.finite_mulₓ'. -/
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
fun ⟨n, hn⟩ ⟨m, hm⟩ => ⟨n + m, finite_mul_aux hp hn hm⟩
#align multiplicity.finite_mul multiplicity.finite_mul
-/- warning: multiplicity.finite_mul_iff -> multiplicity.finite_mul_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Iff (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Iff (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_mul_iff multiplicity.finite_mul_iffₓ'. -/
theorem finite_mul_iff {p a b : α} (hp : Prime p) : Finite p (a * b) ↔ Finite p a ∧ Finite p b :=
⟨fun h => ⟨finite_of_finite_mul_right h, finite_of_finite_mul_left h⟩, fun h =>
finite_mul hp h.1 h.2⟩
@@ -765,12 +579,6 @@ theorem finite_pow {p a : α} (hp : Prime p) : ∀ {k : ℕ} (ha : Finite p a),
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
-/- warning: multiplicity.multiplicity_self -> multiplicity.multiplicity_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (OfNat.mk.{0} PartENat 1 (One.one.{0} PartENat PartENat.hasOne))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7164 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7166 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7164 x._@.Mathlib.RingTheory.Multiplicity._hyg.7166)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_self multiplicity.multiplicity_selfₓ'. -/
@[simp]
theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 := by
rw [← Nat.cast_one];
@@ -798,12 +606,6 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
#align multiplicity.get_multiplicity_self multiplicity.get_multiplicity_self
-/
-/- warning: multiplicity.mul' -> multiplicity.mul' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7422 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7424 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7422 x._@.Mathlib.RingTheory.Multiplicity._hyg.7424)] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
-Case conversion may be inaccurate. Consider using '#align multiplicity.mul' multiplicity.mul'ₓ'. -/
protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b)).Dom) :
get (multiplicity p (a * b)) h =
get (multiplicity p a) ((finite_mul_iff hp).1 h).1 +
@@ -838,12 +640,6 @@ protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b))
open Classical
-/- warning: multiplicity.mul -> multiplicity.mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.hasAdd) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7933 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7935 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7933 x._@.Mathlib.RingTheory.Multiplicity._hyg.7935)] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.instAddPartENat) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.mul multiplicity.mulₓ'. -/
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
if h : Finite p a ∧ Finite p b then by
@@ -880,34 +676,16 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
#align multiplicity.pow' multiplicity.pow'
-/
-/- warning: multiplicity.pow -> multiplicity.pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (SMul.smul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8419 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8421 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8419 x._@.Mathlib.RingTheory.Multiplicity._hyg.8421)] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (HSMul.hSMul.{0, 0, 0} Nat PartENat PartENat (instHSMul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
-Case conversion may be inaccurate. Consider using '#align multiplicity.pow multiplicity.powₓ'. -/
theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) = k • multiplicity p a
| 0 => by simp [one_right hp.not_unit]
| succ k => by simp [pow_succ, succ_nsmul, pow, multiplicity.mul hp]
#align multiplicity.pow multiplicity.pow
-/- warning: multiplicity.multiplicity_pow_self -> multiplicity.multiplicity_pow_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8514 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8516 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8514 x._@.Mathlib.RingTheory.Multiplicity._hyg.8516)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_selfₓ'. -/
theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ) :
multiplicity p (p ^ n) = n := by rw [eq_coe_iff]; use dvd_rfl; rw [pow_dvd_pow_iff h0 hu];
apply Nat.not_succ_le_self
#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_self
-/- warning: multiplicity.multiplicity_pow_self_of_prime -> multiplicity.multiplicity_pow_self_of_prime is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8661 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8663 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8661 x._@.Mathlib.RingTheory.Multiplicity._hyg.8663)] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
-Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self_of_prime multiplicity.multiplicity_pow_self_of_primeₓ'. -/
theorem multiplicity_pow_self_of_prime {p : α} (hp : Prime p) (n : ℕ) :
multiplicity p (p ^ n) = n :=
multiplicity_pow_self hp.NeZero hp.not_unit n
@@ -919,24 +697,12 @@ section Valuation
variable {R : Type _} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.Dvd : R → R → Prop)]
-/- warning: multiplicity.add_valuation -> multiplicity.addValuation is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalCommSemiring.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalCommSemiring.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)
-Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation multiplicity.addValuationₓ'. -/
/-- `multiplicity` of a prime inan integral domain as an additive valuation to `part_enat`. -/
noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
AddValuation.of (multiplicity p) (multiplicity.zero _) (one_right hp.not_unit)
(fun _ _ => min_le_multiplicity_add) fun a b => multiplicity.mul hp
#align multiplicity.add_valuation multiplicity.addValuation
-/- warning: multiplicity.add_valuation_apply -> multiplicity.addValuation_apply is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p} {r : R}, Eq.{1} PartENat (coeFn.{succ u1, succ u1} (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) (fun (_x : AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) => R -> PartENat) (AddValuation.hasCoeToFun.{u1, 0} R PartENat PartENat.linearOrderedAddCommMonoidWithTop (CommRing.toRing.{u1} R _inst_1)) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp) r) (multiplicity.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)) (fun (a : R) (b : R) => _inst_3 a b) p r)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalCommSemiring.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalCommSemiring.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p} {r : R}, Eq.{1} ((fun (x._@.Mathlib.RingTheory.Valuation.Basic._hyg.8830 : R) => PartENat) r) (FunLike.coe.{succ u1, succ u1, 1} (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) R (fun (_x : R) => (fun (x._@.Mathlib.RingTheory.Valuation.Basic._hyg.8830 : R) => PartENat) _x) (AddValuation.instFunLikeAddValuation.{u1, 0} R PartENat (CommRing.toRing.{u1} R _inst_1) PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp) r) (multiplicity.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (fun (a : R) (b : R) => _inst_3 a b) p r)
-Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation_apply multiplicity.addValuation_applyₓ'. -/
@[simp]
theorem addValuation_apply {hp : Prime p} {r : R} : addValuation hp r = multiplicity p r :=
rfl
@@ -950,12 +716,6 @@ section Nat
open multiplicity
-/- warning: multiplicity_eq_zero_of_coprime -> multiplicity_eq_zero_of_coprime is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} {a : Nat} {b : Nat}, (Ne.{1} Nat p (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) -> (LE.le.{0} PartENat PartENat.hasLe (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) p a) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) p b)) -> (Nat.coprime a b) -> (Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) p a) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
-but is expected to have type
- forall {p : Nat} {a : Nat} {b : Nat}, (Ne.{1} Nat p (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) -> (LE.le.{0} PartENat PartENat.instLEPartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) p a) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) p b)) -> (Nat.coprime a b) -> (Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) p a) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
-Case conversion may be inaccurate. Consider using '#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprimeₓ'. -/
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
(hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -95,19 +95,13 @@ theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ)
· repeat' rw [← finite_iff_dom, finite_def]
norm_cast
· intro h1 h2
- apply _root_.le_antisymm <;>
- · apply Nat.find_mono
- norm_cast
- simp
+ apply _root_.le_antisymm <;> · apply Nat.find_mono; norm_cast; simp
#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicity
#print multiplicity.not_finite_iff_forall /-
theorem not_finite_iff_forall {a b : α} : ¬Finite a b ↔ ∀ n : ℕ, a ^ n ∣ b :=
⟨fun h n =>
- Nat.casesOn n
- (by
- rw [pow_zero]
- exact one_dvd _)
+ Nat.casesOn n (by rw [pow_zero]; exact one_dvd _)
(by simpa [Finite, Classical.not_not] using h),
by simp [Finite, multiplicity, Classical.not_not] <;> tauto⟩
#align multiplicity.not_finite_iff_forall multiplicity.not_finite_iff_forall
@@ -139,15 +133,10 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.761 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.763 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.761 x._@.Mathlib.RingTheory.Multiplicity._hyg.763)] {a : α} {b : α} {k : Nat}, (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b)
Case conversion may be inaccurate. Consider using '#align multiplicity.pow_dvd_of_le_multiplicity multiplicity.pow_dvd_of_le_multiplicityₓ'. -/
theorem pow_dvd_of_le_multiplicity {a b : α} {k : ℕ} :
- (k : PartENat) ≤ multiplicity a b → a ^ k ∣ b :=
- by
- rw [← PartENat.some_eq_natCast]
+ (k : PartENat) ≤ multiplicity a b → a ^ k ∣ b := by rw [← PartENat.some_eq_natCast];
exact
- Nat.casesOn k
- (fun _ => by
- rw [pow_zero]
- exact one_dvd _)
- fun k ⟨h₁, h₂⟩ => by_contradiction fun hk => Nat.find_min _ (lt_of_succ_le (h₂ ⟨k, hk⟩)) hk
+ Nat.casesOn k (fun _ => by rw [pow_zero]; exact one_dvd _) fun k ⟨h₁, h₂⟩ =>
+ by_contradiction fun hk => Nat.find_min _ (lt_of_succ_le (h₂ ⟨k, hk⟩)) hk
#align multiplicity.pow_dvd_of_le_multiplicity multiplicity.pow_dvd_of_le_multiplicity
#print multiplicity.pow_multiplicity_dvd /-
@@ -250,10 +239,7 @@ theorem eq_coe_iff {a b : α} {n : ℕ} :
let ⟨h₁, h₂⟩ := eq_some_iff.1 h
h₂ ▸
⟨pow_multiplicity_dvd _,
- IsGreatest
- (by
- rw [PartENat.lt_coe_iff]
- exact ⟨h₁, lt_succ_self _⟩)⟩,
+ IsGreatest (by rw [PartENat.lt_coe_iff]; exact ⟨h₁, lt_succ_self _⟩)⟩,
fun h => eq_some_iff.2 ⟨⟨n, h.2⟩, Eq.symm <| unique' h.1 h.2⟩⟩
#align multiplicity.eq_coe_iff multiplicity.eq_coe_iff
@@ -263,13 +249,7 @@ theorem eq_top_iff {a b : α} : multiplicity a b = ⊤ ↔ ∀ n : ℕ, a ^ n
by
simp only [Classical.not_not]
exact
- ⟨fun h n =>
- Nat.casesOn n
- (by
- rw [pow_zero]
- exact one_dvd _)
- fun n => h _,
- fun h n => h _⟩
+ ⟨fun h n => Nat.casesOn n (by rw [pow_zero]; exact one_dvd _) fun n => h _, fun h n => h _⟩
#align multiplicity.eq_top_iff multiplicity.eq_top_iff
-/
@@ -312,10 +292,8 @@ theorem unit_left (a : α) (u : αˣ) : multiplicity (u : α) a = ⊤ :=
-/
#print multiplicity.multiplicity_eq_zero /-
-theorem multiplicity_eq_zero {a b : α} : multiplicity a b = 0 ↔ ¬a ∣ b :=
- by
- rw [← Nat.cast_zero, eq_coe_iff]
- simp
+theorem multiplicity_eq_zero {a b : α} : multiplicity a b = 0 ↔ ¬a ∣ b := by
+ rw [← Nat.cast_zero, eq_coe_iff]; simp
#align multiplicity.multiplicity_eq_zero multiplicity.multiplicity_eq_zero
-/
@@ -443,11 +421,7 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
or_iff_not_imp_right.2 fun hb =>
have ha : a ≠ 0 := fun ha => by simpa [ha] using h 1
by_contradiction fun ha1 : a ≠ 1 =>
- have ha_gt_one : 1 < a :=
- lt_of_not_ge fun ha' => by
- clear h
- revert ha ha1
- decide!
+ have ha_gt_one : 1 < a := lt_of_not_ge fun ha' => by clear h; revert ha ha1; decide!
not_lt_of_ge (le_of_dvd (Nat.pos_of_ne_zero hb) (h b)) (lt_pow_self ha_gt_one b),
fun h => by cases h <;> simp [*]⟩
#align multiplicity.finite_nat_iff multiplicity.finite_nat_iff
@@ -477,9 +451,7 @@ variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
#print multiplicity.isUnit_right /-
theorem isUnit_right {a b : α} (ha : ¬IsUnit a) (hb : IsUnit b) : multiplicity a b = 0 :=
eq_coe_iff.2
- ⟨show a ^ 0 ∣ b by simp only [pow_zero, one_dvd],
- by
- rw [pow_one]
+ ⟨show a ^ 0 ∣ b by simp only [pow_zero, one_dvd], by rw [pow_one];
exact fun h => mt (isUnit_of_dvd_unit h) ha hb⟩
#align multiplicity.is_unit_right multiplicity.isUnit_right
-/
@@ -673,16 +645,12 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
apply le_antisymm
· apply PartENat.le_of_lt_add_one
cases' part_enat.ne_top_iff.mp (PartENat.ne_top_of_lt h) with k hk
- rw [hk]
- rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
+ rw [hk]; rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
intro h_dvd
- apply multiplicity.is_greatest _ h_dvd
- rw [hk]
- apply_mod_cast Nat.lt_succ_self
+ apply multiplicity.is_greatest _ h_dvd; rw [hk]; apply_mod_cast Nat.lt_succ_self
rw [pow_dvd_iff_le_multiplicity, Nat.cast_add, ← hk, Nat.cast_one]
exact PartENat.add_one_le_of_lt h
- · convert min_le_multiplicity_add
- rw [min_eq_right (le_of_lt h)]
+ · convert min_le_multiplicity_add; rw [min_eq_right (le_of_lt h)]
#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gt
/- warning: multiplicity.multiplicity_sub_of_gt -> multiplicity.multiplicity_sub_of_gt is a dubious translation:
@@ -706,11 +674,9 @@ theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplic
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
by
rcases lt_trichotomy (multiplicity p a) (multiplicity p b) with (hab | hab | hab)
- · rw [add_comm, multiplicity_add_of_gt hab, min_eq_left]
- exact le_of_lt hab
+ · rw [add_comm, multiplicity_add_of_gt hab, min_eq_left]; exact le_of_lt hab
· contradiction
- · rw [multiplicity_add_of_gt hab, min_eq_right]
- exact le_of_lt hab
+ · rw [multiplicity_add_of_gt hab, min_eq_right]; exact le_of_lt hab
#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_min
end Ring
@@ -806,9 +772,8 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7164 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7166 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7164 x._@.Mathlib.RingTheory.Multiplicity._hyg.7166)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_self multiplicity.multiplicity_selfₓ'. -/
@[simp]
-theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 :=
- by
- rw [← Nat.cast_one]
+theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 := by
+ rw [← Nat.cast_one];
exact
eq_coe_iff.2
⟨by simp, fun ⟨b, hb⟩ =>
@@ -933,10 +898,7 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8514 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8516 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8514 x._@.Mathlib.RingTheory.Multiplicity._hyg.8516)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_selfₓ'. -/
theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ) :
- multiplicity p (p ^ n) = n := by
- rw [eq_coe_iff]
- use dvd_rfl
- rw [pow_dvd_pow_iff h0 hu]
+ multiplicity p (p ^ n) = n := by rw [eq_coe_iff]; use dvd_rfl; rw [pow_dvd_pow_iff h0 hu];
apply Nat.not_succ_le_self
#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_self
mathlib commit https://github.com/leanprover-community/mathlib/commit/1b0a28e1c93409dbf6d69526863cd9984ef652ce
@@ -973,7 +973,7 @@ noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
lean 3 declaration is
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p} {r : R}, Eq.{1} PartENat (coeFn.{succ u1, succ u1} (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) (fun (_x : AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) => R -> PartENat) (AddValuation.hasCoeToFun.{u1, 0} R PartENat PartENat.linearOrderedAddCommMonoidWithTop (CommRing.toRing.{u1} R _inst_1)) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp) r) (multiplicity.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)) (fun (a : R) (b : R) => _inst_3 a b) p r)
but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalCommSemiring.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalCommSemiring.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p} {r : R}, Eq.{1} (Multiplicative.{0} (OrderDual.{0} PartENat)) (ZeroHom.toFun.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (MulZeroOneClass.toZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat))))) (MonoidWithZeroHom.toZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)))) (Valuation.toMonoidWithZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) (CommRing.toRing.{u1} R _inst_1) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp))) r) (multiplicity.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (fun (a : R) (b : R) => _inst_3 a b) p r)
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalCommSemiring.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalCommSemiring.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p} {r : R}, Eq.{1} ((fun (x._@.Mathlib.RingTheory.Valuation.Basic._hyg.8830 : R) => PartENat) r) (FunLike.coe.{succ u1, succ u1, 1} (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) R (fun (_x : R) => (fun (x._@.Mathlib.RingTheory.Valuation.Basic._hyg.8830 : R) => PartENat) _x) (AddValuation.instFunLikeAddValuation.{u1, 0} R PartENat (CommRing.toRing.{u1} R _inst_1) PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp) r) (multiplicity.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (fun (a : R) (b : R) => _inst_3 a b) p r)
Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation_apply multiplicity.addValuation_applyₓ'. -/
@[simp]
theorem addValuation_apply {hp : Prime p} {r : R} : addValuation hp r = multiplicity p r :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -158,7 +158,7 @@ theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity
/- warning: multiplicity.is_greatest -> multiplicity.is_greatest is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) m)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) m)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1017 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1019 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1017 x._@.Mathlib.RingTheory.Multiplicity._hyg.1019)] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) m)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
Case conversion may be inaccurate. Consider using '#align multiplicity.is_greatest multiplicity.is_greatestₓ'. -/
@@ -227,7 +227,7 @@ theorem pow_dvd_iff_le_multiplicity {a b : α} {k : ℕ} :
/- warning: multiplicity.multiplicity_lt_iff_neg_dvd -> multiplicity.multiplicity_lt_iff_neg_dvd is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k)) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k)) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1665 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1667 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1665 x._@.Mathlib.RingTheory.Multiplicity._hyg.1667)] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k)) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvdₓ'. -/
@@ -337,11 +337,15 @@ theorem ne_top_iff_finite {a b : α} : multiplicity a b ≠ ⊤ ↔ Finite a b :
#align multiplicity.ne_top_iff_finite multiplicity.ne_top_iff_finite
-/
-#print multiplicity.lt_top_iff_finite /-
+/- warning: multiplicity.lt_top_iff_finite -> multiplicity.lt_top_iff_finite is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Top.top.{0} PartENat PartENat.hasTop)) (multiplicity.Finite.{u1} α _inst_1 a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2567 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2569 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2567 x._@.Mathlib.RingTheory.Multiplicity._hyg.2569)] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Top.top.{0} PartENat PartENat.instTopPartENat)) (multiplicity.Finite.{u1} α _inst_1 a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finiteₓ'. -/
theorem lt_top_iff_finite {a b : α} : multiplicity a b < ⊤ ↔ Finite a b := by
rw [lt_top_iff_ne_top, ne_top_iff_finite]
#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finite
--/
/- warning: multiplicity.exists_eq_pow_mul_and_not_dvd -> multiplicity.exists_eq_pow_mul_and_not_dvd is a dubious translation:
lean 3 declaration is
@@ -401,16 +405,25 @@ theorem eq_of_associated_right {a b c : α} (h : Associated b c) :
#align multiplicity.eq_of_associated_right multiplicity.eq_of_associated_right
-/
-#print multiplicity.dvd_of_multiplicity_pos /-
+/- warning: multiplicity.dvd_of_multiplicity_pos -> multiplicity.dvd_of_multiplicity_pos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.3267 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.3269 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.3267 x._@.Mathlib.RingTheory.Multiplicity._hyg.3269)] {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.dvd_of_multiplicity_pos multiplicity.dvd_of_multiplicity_posₓ'. -/
theorem dvd_of_multiplicity_pos {a b : α} (h : (0 : PartENat) < multiplicity a b) : a ∣ b :=
by
rw [← pow_one a]
apply pow_dvd_of_le_multiplicity
simpa only [Nat.cast_one, PartENat.pos_iff_one_le] using h
#align multiplicity.dvd_of_multiplicity_pos multiplicity.dvd_of_multiplicity_pos
--/
-#print multiplicity.dvd_iff_multiplicity_pos /-
+/- warning: multiplicity.dvd_iff_multiplicity_pos -> multiplicity.dvd_iff_multiplicity_pos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.3353 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.3355 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.3353 x._@.Mathlib.RingTheory.Multiplicity._hyg.3355)] {a : α} {b : α}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.dvd_iff_multiplicity_pos multiplicity.dvd_iff_multiplicity_posₓ'. -/
theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b ↔ a ∣ b :=
⟨dvd_of_multiplicity_pos, fun hdvd =>
lt_of_le_of_ne (zero_le _) fun heq =>
@@ -419,7 +432,6 @@ theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b
simpa only [HEq, Nat.cast_zero] using part_enat.coe_lt_coe.mpr zero_lt_one)
(by rwa [pow_one a])⟩
#align multiplicity.dvd_iff_multiplicity_pos multiplicity.dvd_iff_multiplicity_pos
--/
#print multiplicity.finite_nat_iff /-
theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
@@ -651,7 +663,7 @@ theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity
/- warning: multiplicity.multiplicity_add_of_gt -> multiplicity.multiplicity_add_of_gt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 x._@.Mathlib.RingTheory.Multiplicity._hyg.5400)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gtₓ'. -/
@@ -675,7 +687,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
/- warning: multiplicity.multiplicity_sub_of_gt -> multiplicity.multiplicity_sub_of_gt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toHasLt.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5833 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 x._@.Mathlib.RingTheory.Multiplicity._hyg.5833)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -622,7 +622,7 @@ variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1))))) b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a b)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5106 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 x._@.Mathlib.RingTheory.Multiplicity._hyg.5106)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5106 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 x._@.Mathlib.RingTheory.Multiplicity._hyg.5106)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
Case conversion may be inaccurate. Consider using '#align multiplicity.neg multiplicity.negₓ'. -/
@[simp]
protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
@@ -653,7 +653,7 @@ theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 x._@.Mathlib.RingTheory.Multiplicity._hyg.5400)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 x._@.Mathlib.RingTheory.Multiplicity._hyg.5400)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gtₓ'. -/
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a + b) = multiplicity p b :=
@@ -677,7 +677,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5833 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 x._@.Mathlib.RingTheory.Multiplicity._hyg.5833)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5833 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 x._@.Mathlib.RingTheory.Multiplicity._hyg.5833)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a - b) = multiplicity p b := by
@@ -688,7 +688,7 @@ theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5990 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 x._@.Mathlib.RingTheory.Multiplicity._hyg.5990)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5990 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 x._@.Mathlib.RingTheory.Multiplicity._hyg.5990)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_minₓ'. -/
theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplicity p b) :
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
@@ -949,7 +949,7 @@ variable {R : Type _} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.Dvd :
lean 3 declaration is
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop)
but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalCommSemiring.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalCommSemiring.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)
Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation multiplicity.addValuationₓ'. -/
/-- `multiplicity` of a prime inan integral domain as an additive valuation to `part_enat`. -/
noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
@@ -961,7 +961,7 @@ noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
lean 3 declaration is
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p} {r : R}, Eq.{1} PartENat (coeFn.{succ u1, succ u1} (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) (fun (_x : AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) => R -> PartENat) (AddValuation.hasCoeToFun.{u1, 0} R PartENat PartENat.linearOrderedAddCommMonoidWithTop (CommRing.toRing.{u1} R _inst_1)) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp) r) (multiplicity.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)) (fun (a : R) (b : R) => _inst_3 a b) p r)
but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p} {r : R}, Eq.{1} (Multiplicative.{0} (OrderDual.{0} PartENat)) (ZeroHom.toFun.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (MulZeroOneClass.toZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat))))) (MonoidWithZeroHom.toZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)))) (Valuation.toMonoidWithZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) (CommRing.toRing.{u1} R _inst_1) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp))) r) (multiplicity.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (fun (a : R) (b : R) => _inst_3 a b) p r)
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalCommSemiring.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalCommSemiring.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p} {r : R}, Eq.{1} (Multiplicative.{0} (OrderDual.{0} PartENat)) (ZeroHom.toFun.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (MulZeroOneClass.toZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat))))) (MonoidWithZeroHom.toZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)))) (Valuation.toMonoidWithZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) (CommRing.toRing.{u1} R _inst_1) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp))) r) (multiplicity.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (fun (a : R) (b : R) => _inst_3 a b) p r)
Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation_apply multiplicity.addValuation_applyₓ'. -/
@[simp]
theorem addValuation_apply {hp : Prime p} {r : R} : addValuation hp r = multiplicity p r :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -476,7 +476,7 @@ theorem isUnit_right {a b : α} (ha : ¬IsUnit a) (hb : IsUnit b) : multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))))) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4005 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4007 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4005 x._@.Mathlib.RingTheory.Multiplicity._hyg.4007)] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
+ forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4001 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4003 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4001 x._@.Mathlib.RingTheory.Multiplicity._hyg.4003)] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
Case conversion may be inaccurate. Consider using '#align multiplicity.one_right multiplicity.one_rightₓ'. -/
theorem one_right {a : α} (ha : ¬IsUnit a) : multiplicity a 1 = 0 :=
isUnit_right ha isUnit_one
@@ -531,7 +531,7 @@ variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))))] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1))))))) (Top.top.{0} PartENat PartENat.hasTop)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4291 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4293 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4291 x._@.Mathlib.RingTheory.Multiplicity._hyg.4293)] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) (Top.top.{0} PartENat PartENat.instTopPartENat)
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4287 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4289 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4287 x._@.Mathlib.RingTheory.Multiplicity._hyg.4289)] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) (Top.top.{0} PartENat PartENat.instTopPartENat)
Case conversion may be inaccurate. Consider using '#align multiplicity.zero multiplicity.zeroₓ'. -/
@[simp]
protected theorem zero (a : α) : multiplicity a 0 = ⊤ :=
@@ -542,7 +542,7 @@ protected theorem zero (a : α) : multiplicity a 0 = ⊤ :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))))] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1)))))) a) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4369 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4371 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4369 x._@.Mathlib.RingTheory.Multiplicity._hyg.4371)] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1))) a) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4365 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4367 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4365 x._@.Mathlib.RingTheory.Multiplicity._hyg.4367)] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1))) a) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_zero_eq_zero_of_ne_zero multiplicity.multiplicity_zero_eq_zero_of_ne_zeroₓ'. -/
@[simp]
theorem multiplicity_zero_eq_zero_of_ne_zero (a : α) (ha : a ≠ 0) : multiplicity 0 a = 0 :=
@@ -561,7 +561,7 @@ variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))))] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Dvd.Dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.commMonoidWithZero.{u1} α _inst_1))))))] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.commMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4456 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4458 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4456 x._@.Mathlib.RingTheory.Multiplicity._hyg.4458)] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4482 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4484 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => Dvd.dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4482 x._@.Mathlib.RingTheory.Multiplicity._hyg.4484)] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
+ forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4452 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4454 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4452 x._@.Mathlib.RingTheory.Multiplicity._hyg.4454)] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4478 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4480 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => Dvd.dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4478 x._@.Mathlib.RingTheory.Multiplicity._hyg.4480)] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_mk_eq_multiplicity multiplicity.multiplicity_mk_eq_multiplicityₓ'. -/
theorem multiplicity_mk_eq_multiplicity
[DecidableRel ((· ∣ ·) : Associates α → Associates α → Prop)] {a b : α} :
@@ -599,7 +599,7 @@ variable [Semiring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))))] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.hasLe (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4903 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4905 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4903 x._@.Mathlib.RingTheory.Multiplicity._hyg.4905)] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.instLEPartENat (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
+ forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4899 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4901 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4899 x._@.Mathlib.RingTheory.Multiplicity._hyg.4901)] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.instLEPartENat (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
Case conversion may be inaccurate. Consider using '#align multiplicity.min_le_multiplicity_add multiplicity.min_le_multiplicity_addₓ'. -/
theorem min_le_multiplicity_add {p a b : α} :
min (multiplicity p a) (multiplicity p b) ≤ multiplicity p (a + b) :=
@@ -622,7 +622,7 @@ variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1))))) b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a b)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5108 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5110 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5108 x._@.Mathlib.RingTheory.Multiplicity._hyg.5110)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5106 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5104 x._@.Mathlib.RingTheory.Multiplicity._hyg.5106)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
Case conversion may be inaccurate. Consider using '#align multiplicity.neg multiplicity.negₓ'. -/
@[simp]
protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
@@ -653,7 +653,7 @@ theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5402 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5404 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5402 x._@.Mathlib.RingTheory.Multiplicity._hyg.5404)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5398 x._@.Mathlib.RingTheory.Multiplicity._hyg.5400)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gtₓ'. -/
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a + b) = multiplicity p b :=
@@ -677,7 +677,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5835 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5837 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5835 x._@.Mathlib.RingTheory.Multiplicity._hyg.5837)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5833 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5831 x._@.Mathlib.RingTheory.Multiplicity._hyg.5833)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a - b) = multiplicity p b := by
@@ -688,7 +688,7 @@ theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5992 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5994 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5992 x._@.Mathlib.RingTheory.Multiplicity._hyg.5994)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5990 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5988 x._@.Mathlib.RingTheory.Multiplicity._hyg.5990)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_minₓ'. -/
theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplicity p b) :
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
@@ -791,7 +791,7 @@ variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (OfNat.mk.{0} PartENat 1 (One.one.{0} PartENat PartENat.hasOne))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7168 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7170 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7168 x._@.Mathlib.RingTheory.Multiplicity._hyg.7170)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7164 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7166 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7164 x._@.Mathlib.RingTheory.Multiplicity._hyg.7166)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_self multiplicity.multiplicity_selfₓ'. -/
@[simp]
theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 :=
@@ -825,7 +825,7 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7426 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7428 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7426 x._@.Mathlib.RingTheory.Multiplicity._hyg.7428)] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7422 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7424 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7422 x._@.Mathlib.RingTheory.Multiplicity._hyg.7424)] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
Case conversion may be inaccurate. Consider using '#align multiplicity.mul' multiplicity.mul'ₓ'. -/
protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b)).Dom) :
get (multiplicity p (a * b)) h =
@@ -865,7 +865,7 @@ open Classical
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.hasAdd) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7937 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7939 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7937 x._@.Mathlib.RingTheory.Multiplicity._hyg.7939)] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.instAddPartENat) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7933 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7935 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7933 x._@.Mathlib.RingTheory.Multiplicity._hyg.7935)] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.instAddPartENat) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
Case conversion may be inaccurate. Consider using '#align multiplicity.mul multiplicity.mulₓ'. -/
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
@@ -907,7 +907,7 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (SMul.smul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8423 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8425 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8423 x._@.Mathlib.RingTheory.Multiplicity._hyg.8425)] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (HSMul.hSMul.{0, 0, 0} Nat PartENat PartENat (instHSMul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8419 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8421 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8419 x._@.Mathlib.RingTheory.Multiplicity._hyg.8421)] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (HSMul.hSMul.{0, 0, 0} Nat PartENat PartENat (instHSMul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
Case conversion may be inaccurate. Consider using '#align multiplicity.pow multiplicity.powₓ'. -/
theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) = k • multiplicity p a
| 0 => by simp [one_right hp.not_unit]
@@ -918,7 +918,7 @@ theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) =
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8518 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8520 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8518 x._@.Mathlib.RingTheory.Multiplicity._hyg.8520)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8514 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8516 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8514 x._@.Mathlib.RingTheory.Multiplicity._hyg.8516)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_selfₓ'. -/
theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ) :
multiplicity p (p ^ n) = n := by
@@ -932,7 +932,7 @@ theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8665 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8667 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8665 x._@.Mathlib.RingTheory.Multiplicity._hyg.8667)] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8661 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8663 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8661 x._@.Mathlib.RingTheory.Multiplicity._hyg.8663)] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self_of_prime multiplicity.multiplicity_pow_self_of_primeₓ'. -/
theorem multiplicity_pow_self_of_prime {p : α} (hp : Prime p) (n : ℕ) :
multiplicity p (p ^ n) = n :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/c9236f47f5b9df573443aa499c0d3968769628b7
@@ -653,7 +653,7 @@ theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5414 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5416 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5414 x._@.Mathlib.RingTheory.Multiplicity._hyg.5416)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5402 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5404 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5402 x._@.Mathlib.RingTheory.Multiplicity._hyg.5404)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gtₓ'. -/
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a + b) = multiplicity p b :=
@@ -677,7 +677,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5810 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5812 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5810 x._@.Mathlib.RingTheory.Multiplicity._hyg.5812)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5835 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5837 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5835 x._@.Mathlib.RingTheory.Multiplicity._hyg.5837)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a - b) = multiplicity p b := by
@@ -688,7 +688,7 @@ theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5967 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5969 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5967 x._@.Mathlib.RingTheory.Multiplicity._hyg.5969)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5992 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5994 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5992 x._@.Mathlib.RingTheory.Multiplicity._hyg.5994)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_minₓ'. -/
theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplicity p b) :
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
@@ -791,7 +791,7 @@ variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (OfNat.mk.{0} PartENat 1 (One.one.{0} PartENat PartENat.hasOne))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7143 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7145 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7143 x._@.Mathlib.RingTheory.Multiplicity._hyg.7145)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7168 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7170 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7168 x._@.Mathlib.RingTheory.Multiplicity._hyg.7170)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_self multiplicity.multiplicity_selfₓ'. -/
@[simp]
theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 :=
@@ -825,7 +825,7 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7401 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7403 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7401 x._@.Mathlib.RingTheory.Multiplicity._hyg.7403)] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7426 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7428 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7426 x._@.Mathlib.RingTheory.Multiplicity._hyg.7428)] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
Case conversion may be inaccurate. Consider using '#align multiplicity.mul' multiplicity.mul'ₓ'. -/
protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b)).Dom) :
get (multiplicity p (a * b)) h =
@@ -865,7 +865,7 @@ open Classical
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.hasAdd) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7912 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7914 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7912 x._@.Mathlib.RingTheory.Multiplicity._hyg.7914)] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.instAddPartENat) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7937 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7939 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7937 x._@.Mathlib.RingTheory.Multiplicity._hyg.7939)] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.instAddPartENat) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
Case conversion may be inaccurate. Consider using '#align multiplicity.mul multiplicity.mulₓ'. -/
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
@@ -907,7 +907,7 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (SMul.smul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8398 x._@.Mathlib.RingTheory.Multiplicity._hyg.8400)] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (HSMul.hSMul.{0, 0, 0} Nat PartENat PartENat (instHSMul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8423 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8425 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8423 x._@.Mathlib.RingTheory.Multiplicity._hyg.8425)] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (HSMul.hSMul.{0, 0, 0} Nat PartENat PartENat (instHSMul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
Case conversion may be inaccurate. Consider using '#align multiplicity.pow multiplicity.powₓ'. -/
theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) = k • multiplicity p a
| 0 => by simp [one_right hp.not_unit]
@@ -918,7 +918,7 @@ theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) =
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8493 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8495 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8493 x._@.Mathlib.RingTheory.Multiplicity._hyg.8495)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8518 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8520 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8518 x._@.Mathlib.RingTheory.Multiplicity._hyg.8520)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_selfₓ'. -/
theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ) :
multiplicity p (p ^ n) = n := by
@@ -932,7 +932,7 @@ theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8640 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8642 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8640 x._@.Mathlib.RingTheory.Multiplicity._hyg.8642)] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8665 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8667 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8665 x._@.Mathlib.RingTheory.Multiplicity._hyg.8667)] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self_of_prime multiplicity.multiplicity_pow_self_of_primeₓ'. -/
theorem multiplicity_pow_self_of_prime {p : α} (hp : Prime p) (n : ℕ) :
multiplicity p (p ^ n) = n :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/06a655b5fcfbda03502f9158bbf6c0f1400886f9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
! This file was ported from Lean 3 source module ring_theory.multiplicity
-! leanprover-community/mathlib commit 1dac236edca9b4b6f5f00b1ad831e35f89472837
+! leanprover-community/mathlib commit e8638a0fcaf73e4500469f368ef9494e495099b3
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -632,8 +632,8 @@ protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
rw [PartENat.natCast_get] <;>
exact
Eq.symm
- (Unique ((dvd_neg _ _).2 (pow_multiplicity_dvd _))
- (mt (dvd_neg _ _).1 (is_greatest' _ (lt_succ_self _)))))
+ (Unique (pow_multiplicity_dvd _).neg_right
+ (mt dvd_neg.1 (is_greatest' _ (lt_succ_self _)))))
#align multiplicity.neg multiplicity.neg
/- warning: multiplicity.int.nat_abs -> multiplicity.Int.natAbs is a dubious translation:
@@ -662,9 +662,8 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
· apply PartENat.le_of_lt_add_one
cases' part_enat.ne_top_iff.mp (PartENat.ne_top_of_lt h) with k hk
rw [hk]
- rw_mod_cast [multiplicity_lt_iff_neg_dvd]
+ rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
intro h_dvd
- rw [← dvd_add_iff_right] at h_dvd
apply multiplicity.is_greatest _ h_dvd
rw [hk]
apply_mod_cast Nat.lt_succ_self
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -620,7 +620,7 @@ variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
/- warning: multiplicity.neg -> multiplicity.neg is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1))))) b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a b)
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1))))) b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a b)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5108 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5110 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5108 x._@.Mathlib.RingTheory.Multiplicity._hyg.5110)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
Case conversion may be inaccurate. Consider using '#align multiplicity.neg multiplicity.negₓ'. -/
@@ -676,7 +676,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
/- warning: multiplicity.multiplicity_sub_of_gt -> multiplicity.multiplicity_sub_of_gt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5810 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5812 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5810 x._@.Mathlib.RingTheory.Multiplicity._hyg.5812)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ec294687917cbc5c73620b4414ae9b5dd9ae1b4
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
! This file was ported from Lean 3 source module ring_theory.multiplicity
-! leanprover-community/mathlib commit ceb887ddf3344dab425292e497fa2af91498437c
+! leanprover-community/mathlib commit 1dac236edca9b4b6f5f00b1ad831e35f89472837
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.RingTheory.Valuation.Basic
/-!
# Multiplicity of a divisor
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
For a commutative monoid, this file introduces the notion of multiplicity of a divisor and proves
several basic results on it.
mathlib commit https://github.com/leanprover-community/mathlib/commit/02ba8949f486ebecf93fe7460f1ed0564b5e442c
@@ -33,12 +33,14 @@ open Nat Part
open BigOperators
+#print multiplicity /-
/-- `multiplicity a b` returns the largest natural number `n` such that
`a ^ n ∣ b`, as an `part_enat` or natural with infinity. If `∀ n, a ^ n ∣ b`,
then it returns `⊤`-/
def multiplicity [Monoid α] [DecidableRel ((· ∣ ·) : α → α → Prop)] (a b : α) : PartENat :=
PartENat.find fun n => ¬a ^ (n + 1) ∣ b
#align multiplicity multiplicity
+-/
namespace multiplicity
@@ -46,25 +48,43 @@ section Monoid
variable [Monoid α]
+#print multiplicity.Finite /-
/-- `multiplicity.finite a b` indicates that the multiplicity of `a` in `b` is finite. -/
@[reducible]
def Finite (a b : α) : Prop :=
∃ n : ℕ, ¬a ^ (n + 1) ∣ b
#align multiplicity.finite multiplicity.Finite
+-/
+#print multiplicity.finite_iff_dom /-
theorem finite_iff_dom [DecidableRel ((· ∣ ·) : α → α → Prop)] {a b : α} :
Finite a b ↔ (multiplicity a b).Dom :=
Iff.rfl
#align multiplicity.finite_iff_dom multiplicity.finite_iff_dom
+-/
+#print multiplicity.finite_def /-
theorem finite_def {a b : α} : Finite a b ↔ ∃ n : ℕ, ¬a ^ (n + 1) ∣ b :=
Iff.rfl
#align multiplicity.finite_def multiplicity.finite_def
+-/
+/- warning: multiplicity.not_dvd_one_of_finite_one_right -> multiplicity.not_dvd_one_of_finite_one_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α}, (multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α}, (multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_rightₓ'. -/
theorem not_dvd_one_of_finite_one_right {a : α} : Finite a 1 → ¬a ∣ 1 := fun ⟨n, hn⟩ ⟨d, hd⟩ =>
hn ⟨d ^ (n + 1), (pow_mul_pow_eq_one (n + 1) hd.symm).symm⟩
#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_right
+/- warning: multiplicity.int.coe_nat_multiplicity -> multiplicity.Int.coe_nat_multiplicity is a dubious translation:
+lean 3 declaration is
+ forall (a : Nat) (b : Nat), Eq.{1} PartENat (multiplicity.{0} Int Int.monoid (fun (a : Int) (b : Int) => Int.decidableDvd a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) a) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) b)) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) a b)
+but is expected to have type
+ forall (a : Nat) (b : Nat), Eq.{1} PartENat (multiplicity.{0} Int Int.instMonoidInt (fun (a : Int) (b : Int) => Int.decidableDvd a b) (Nat.cast.{0} Int instNatCastInt a) (Nat.cast.{0} Int instNatCastInt b)) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicityₓ'. -/
@[norm_cast]
theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b :=
by
@@ -78,6 +98,7 @@ theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ)
simp
#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicity
+#print multiplicity.not_finite_iff_forall /-
theorem not_finite_iff_forall {a b : α} : ¬Finite a b ↔ ∀ n : ℕ, a ^ n ∣ b :=
⟨fun h n =>
Nat.casesOn n
@@ -87,18 +108,33 @@ theorem not_finite_iff_forall {a b : α} : ¬Finite a b ↔ ∀ n : ℕ, a ^ n
(by simpa [Finite, Classical.not_not] using h),
by simp [Finite, multiplicity, Classical.not_not] <;> tauto⟩
#align multiplicity.not_finite_iff_forall multiplicity.not_finite_iff_forall
+-/
+#print multiplicity.not_unit_of_finite /-
theorem not_unit_of_finite {a b : α} (h : Finite a b) : ¬IsUnit a :=
let ⟨n, hn⟩ := h
hn ∘ IsUnit.dvd ∘ IsUnit.pow (n + 1)
#align multiplicity.not_unit_of_finite multiplicity.not_unit_of_finite
+-/
+/- warning: multiplicity.finite_of_finite_mul_right -> multiplicity.finite_of_finite_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α _inst_1 a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) b c)) -> (multiplicity.Finite.{u1} α _inst_1 a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α _inst_1 a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) b c)) -> (multiplicity.Finite.{u1} α _inst_1 a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_of_finite_mul_right multiplicity.finite_of_finite_mul_rightₓ'. -/
theorem finite_of_finite_mul_right {a b c : α} : Finite a (b * c) → Finite a b := fun ⟨n, hn⟩ =>
⟨n, fun h => hn (h.trans (dvd_mul_right _ _))⟩
#align multiplicity.finite_of_finite_mul_right multiplicity.finite_of_finite_mul_right
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+/- warning: multiplicity.pow_dvd_of_le_multiplicity -> multiplicity.pow_dvd_of_le_multiplicity is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, (LE.le.{0} PartENat PartENat.hasLe ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.761 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.763 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.761 x._@.Mathlib.RingTheory.Multiplicity._hyg.763)] {a : α} {b : α} {k : Nat}, (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b)) -> (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.pow_dvd_of_le_multiplicity multiplicity.pow_dvd_of_le_multiplicityₓ'. -/
theorem pow_dvd_of_le_multiplicity {a b : α} {k : ℕ} :
(k : PartENat) ≤ multiplicity a b → a ^ k ∣ b :=
by
@@ -111,25 +147,43 @@ theorem pow_dvd_of_le_multiplicity {a b : α} {k : ℕ} :
fun k ⟨h₁, h₂⟩ => by_contradiction fun hk => Nat.find_min _ (lt_of_succ_le (h₂ ⟨k, hk⟩)) hk
#align multiplicity.pow_dvd_of_le_multiplicity multiplicity.pow_dvd_of_le_multiplicity
+#print multiplicity.pow_multiplicity_dvd /-
theorem pow_multiplicity_dvd {a b : α} (h : Finite a b) : a ^ get (multiplicity a b) h ∣ b :=
pow_dvd_of_le_multiplicity (by rw [PartENat.natCast_get])
#align multiplicity.pow_multiplicity_dvd multiplicity.pow_multiplicity_dvd
+-/
+/- warning: multiplicity.is_greatest -> multiplicity.is_greatest is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) m)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1017 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1019 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1017 x._@.Mathlib.RingTheory.Multiplicity._hyg.1019)] {a : α} {b : α} {m : Nat}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) m)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a m) b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.is_greatest multiplicity.is_greatestₓ'. -/
theorem is_greatest {a b : α} {m : ℕ} (hm : multiplicity a b < m) : ¬a ^ m ∣ b := fun h => by
rw [PartENat.lt_coe_iff] at hm <;> exact Nat.find_spec hm.fst ((pow_dvd_pow _ hm.snd).trans h)
#align multiplicity.is_greatest multiplicity.is_greatest
+#print multiplicity.is_greatest' /-
theorem is_greatest' {a b : α} {m : ℕ} (h : Finite a b) (hm : get (multiplicity a b) h < m) :
¬a ^ m ∣ b :=
is_greatest (by rwa [← PartENat.coe_lt_coe, PartENat.natCast_get] at hm)
#align multiplicity.is_greatest' multiplicity.is_greatest'
+-/
+#print multiplicity.pos_of_dvd /-
theorem pos_of_dvd {a b : α} (hfin : Finite a b) (hdiv : a ∣ b) : 0 < (multiplicity a b).get hfin :=
by
refine' zero_lt_iff.2 fun h => _
simpa [hdiv] using is_greatest' hfin (lt_one_iff.mpr h)
#align multiplicity.pos_of_dvd multiplicity.pos_of_dvd
+-/
+/- warning: multiplicity.unique -> multiplicity.unique is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) b)) -> (Eq.{1} PartENat ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1289 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1291 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1289 x._@.Mathlib.RingTheory.Multiplicity._hyg.1291)] {a : α} {b : α} {k : Nat}, (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) b)) -> (Eq.{1} PartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.unique multiplicity.uniqueₓ'. -/
theorem unique {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1) ∣ b) :
(k : PartENat) = multiplicity a b :=
le_antisymm (le_of_not_gt fun hk' => is_greatest hk' hk) <|
@@ -139,25 +193,51 @@ theorem unique {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1)
exact ⟨this, Nat.find_min' _ hsucc⟩
#align multiplicity.unique multiplicity.unique
+#print multiplicity.unique' /-
theorem unique' {a b : α} {k : ℕ} (hk : a ^ k ∣ b) (hsucc : ¬a ^ (k + 1) ∣ b) :
k = get (multiplicity a b) ⟨k, hsucc⟩ := by
rw [← PartENat.natCast_inj, PartENat.natCast_get, Unique hk hsucc]
#align multiplicity.unique' multiplicity.unique'
+-/
+/- warning: multiplicity.le_multiplicity_of_pow_dvd -> multiplicity.le_multiplicity_of_pow_dvd is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (LE.le.{0} PartENat PartENat.hasLe ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1541 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1543 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1541 x._@.Mathlib.RingTheory.Multiplicity._hyg.1543)] {a : α} {b : α} {k : Nat}, (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) -> (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.le_multiplicity_of_pow_dvd multiplicity.le_multiplicity_of_pow_dvdₓ'. -/
theorem le_multiplicity_of_pow_dvd {a b : α} {k : ℕ} (hk : a ^ k ∣ b) :
(k : PartENat) ≤ multiplicity a b :=
le_of_not_gt fun hk' => is_greatest hk' hk
#align multiplicity.le_multiplicity_of_pow_dvd multiplicity.le_multiplicity_of_pow_dvd
+/- warning: multiplicity.pow_dvd_iff_le_multiplicity -> multiplicity.pow_dvd_iff_le_multiplicity is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, Iff (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) (LE.le.{0} PartENat PartENat.hasLe ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1603 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1605 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1603 x._@.Mathlib.RingTheory.Multiplicity._hyg.1605)] {a : α} {b : α} {k : Nat}, Iff (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b) (LE.le.{0} PartENat PartENat.instLEPartENat (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicityₓ'. -/
theorem pow_dvd_iff_le_multiplicity {a b : α} {k : ℕ} :
a ^ k ∣ b ↔ (k : PartENat) ≤ multiplicity a b :=
⟨le_multiplicity_of_pow_dvd, pow_dvd_of_le_multiplicity⟩
#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicity
+/- warning: multiplicity.multiplicity_lt_iff_neg_dvd -> multiplicity.multiplicity_lt_iff_neg_dvd is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) k)) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1665 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1667 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1665 x._@.Mathlib.RingTheory.Multiplicity._hyg.1667)] {a : α} {b : α} {k : Nat}, Iff (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) k)) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a k) b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvdₓ'. -/
theorem multiplicity_lt_iff_neg_dvd {a b : α} {k : ℕ} :
multiplicity a b < (k : PartENat) ↔ ¬a ^ k ∣ b := by rw [pow_dvd_iff_le_multiplicity, not_le]
#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvd
+/- warning: multiplicity.eq_coe_iff -> multiplicity.eq_coe_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} {n : Nat}, Iff (Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n)) (And (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a n) b) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) b)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.1755 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.1757 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.1755 x._@.Mathlib.RingTheory.Multiplicity._hyg.1757)] {a : α} {b : α} {n : Nat}, Iff (Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n)) (And (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a n) b) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) b)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.eq_coe_iff multiplicity.eq_coe_iffₓ'. -/
theorem eq_coe_iff {a b : α} {n : ℕ} :
multiplicity a b = (n : PartENat) ↔ a ^ n ∣ b ∧ ¬a ^ (n + 1) ∣ b :=
by
@@ -174,6 +254,7 @@ theorem eq_coe_iff {a b : α} {n : ℕ} :
fun h => eq_some_iff.2 ⟨⟨n, h.2⟩, Eq.symm <| unique' h.1 h.2⟩⟩
#align multiplicity.eq_coe_iff multiplicity.eq_coe_iff
+#print multiplicity.eq_top_iff /-
theorem eq_top_iff {a b : α} : multiplicity a b = ⊤ ↔ ∀ n : ℕ, a ^ n ∣ b :=
(PartENat.find_eq_top_iff _).trans <|
by
@@ -187,17 +268,32 @@ theorem eq_top_iff {a b : α} : multiplicity a b = ⊤ ↔ ∀ n : ℕ, a ^ n
fun n => h _,
fun h n => h _⟩
#align multiplicity.eq_top_iff multiplicity.eq_top_iff
+-/
+#print multiplicity.isUnit_left /-
@[simp]
theorem isUnit_left {a : α} (b : α) (ha : IsUnit a) : multiplicity a b = ⊤ :=
eq_top_iff.2 fun _ => IsUnit.dvd (ha.pow _)
#align multiplicity.is_unit_left multiplicity.isUnit_left
+-/
+/- warning: multiplicity.one_left -> multiplicity.one_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] (b : α), Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))))) b) (Top.top.{0} PartENat PartENat.hasTop)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2134 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2136 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2134 x._@.Mathlib.RingTheory.Multiplicity._hyg.2136)] (b : α), Eq.{1} PartENat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1))) b) (Top.top.{0} PartENat PartENat.instTopPartENat)
+Case conversion may be inaccurate. Consider using '#align multiplicity.one_left multiplicity.one_leftₓ'. -/
@[simp]
theorem one_left (b : α) : multiplicity 1 b = ⊤ :=
isUnit_left b isUnit_one
#align multiplicity.one_left multiplicity.one_left
+/- warning: multiplicity.get_one_right -> multiplicity.get_one_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} (ha : multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))))) ha) (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2176 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2178 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2176 x._@.Mathlib.RingTheory.Multiplicity._hyg.2178)] {a : α} (ha : multiplicity.Finite.{u1} α _inst_1 a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_1)))) ha) (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))
+Case conversion may be inaccurate. Consider using '#align multiplicity.get_one_right multiplicity.get_one_rightₓ'. -/
@[simp]
theorem get_one_right {a : α} (ha : Finite a 1) : get (multiplicity a 1) ha = 0 :=
by
@@ -205,33 +301,51 @@ theorem get_one_right {a : α} (ha : Finite a 1) : get (multiplicity a 1) ha = 0
simp [not_dvd_one_of_finite_one_right ha]
#align multiplicity.get_one_right multiplicity.get_one_right
+#print multiplicity.unit_left /-
@[simp]
theorem unit_left (a : α) (u : αˣ) : multiplicity (u : α) a = ⊤ :=
isUnit_left a u.IsUnit
#align multiplicity.unit_left multiplicity.unit_left
+-/
+#print multiplicity.multiplicity_eq_zero /-
theorem multiplicity_eq_zero {a b : α} : multiplicity a b = 0 ↔ ¬a ∣ b :=
by
rw [← Nat.cast_zero, eq_coe_iff]
simp
#align multiplicity.multiplicity_eq_zero multiplicity.multiplicity_eq_zero
+-/
+#print multiplicity.multiplicity_ne_zero /-
theorem multiplicity_ne_zero {a b : α} : multiplicity a b ≠ 0 ↔ a ∣ b :=
multiplicity_eq_zero.not_left
#align multiplicity.multiplicity_ne_zero multiplicity.multiplicity_ne_zero
+-/
+#print multiplicity.eq_top_iff_not_finite /-
theorem eq_top_iff_not_finite {a b : α} : multiplicity a b = ⊤ ↔ ¬Finite a b :=
Part.eq_none_iff'
#align multiplicity.eq_top_iff_not_finite multiplicity.eq_top_iff_not_finite
+-/
+#print multiplicity.ne_top_iff_finite /-
theorem ne_top_iff_finite {a b : α} : multiplicity a b ≠ ⊤ ↔ Finite a b := by
rw [Ne.def, eq_top_iff_not_finite, Classical.not_not]
#align multiplicity.ne_top_iff_finite multiplicity.ne_top_iff_finite
+-/
+#print multiplicity.lt_top_iff_finite /-
theorem lt_top_iff_finite {a b : α} : multiplicity a b < ⊤ ↔ Finite a b := by
rw [lt_top_iff_ne_top, ne_top_iff_finite]
#align multiplicity.lt_top_iff_finite multiplicity.lt_top_iff_finite
+-/
+/- warning: multiplicity.exists_eq_pow_mul_and_not_dvd -> multiplicity.exists_eq_pow_mul_and_not_dvd is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)))] {a : α} {b : α} (hfin : multiplicity.Finite.{u1} α _inst_1 a b), Exists.{succ u1} α (fun (c : α) => And (Eq.{succ u1} α b (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) hfin)) c)) (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a c)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.2642 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.2644 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) x._@.Mathlib.RingTheory.Multiplicity._hyg.2642 x._@.Mathlib.RingTheory.Multiplicity._hyg.2644)] {a : α} {b : α} (hfin : multiplicity.Finite.{u1} α _inst_1 a b), Exists.{succ u1} α (fun (c : α) => And (Eq.{succ u1} α b (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_1)) a (Part.get.{0} Nat (multiplicity.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a b) hfin)) c)) (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α _inst_1)) a c)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvdₓ'. -/
theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
∃ c : α, b = a ^ (multiplicity a b).get hfin * c ∧ ¬a ∣ c :=
by
@@ -245,6 +359,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
open Classical
+#print multiplicity.multiplicity_le_multiplicity_iff /-
theorem multiplicity_le_multiplicity_iff {a b c d : α} :
multiplicity a b ≤ multiplicity c d ↔ ∀ n : ℕ, a ^ n ∣ b → c ^ n ∣ d :=
⟨fun h n hab => pow_dvd_of_le_multiplicity (le_trans (le_multiplicity_of_pow_dvd hab) h), fun h =>
@@ -255,7 +370,9 @@ theorem multiplicity_le_multiplicity_iff {a b c d : α} :
have : ∀ n : ℕ, c ^ n ∣ d := fun n => h n (not_finite_iff_forall.1 hab _)
rw [eq_top_iff_not_finite.2 hab, eq_top_iff_not_finite.2 (not_finite_iff_forall.2 this)]⟩
#align multiplicity.multiplicity_le_multiplicity_iff multiplicity.multiplicity_le_multiplicity_iff
+-/
+#print multiplicity.multiplicity_eq_multiplicity_iff /-
theorem multiplicity_eq_multiplicity_iff {a b c d : α} :
multiplicity a b = multiplicity c d ↔ ∀ n : ℕ, a ^ n ∣ b ↔ c ^ n ∣ d :=
⟨fun h n =>
@@ -264,25 +381,33 @@ theorem multiplicity_eq_multiplicity_iff {a b c d : α} :
le_antisymm (multiplicity_le_multiplicity_iff.mpr fun n => (h n).mp)
(multiplicity_le_multiplicity_iff.mpr fun n => (h n).mpr)⟩
#align multiplicity.multiplicity_eq_multiplicity_iff multiplicity.multiplicity_eq_multiplicity_iff
+-/
+#print multiplicity.multiplicity_le_multiplicity_of_dvd_right /-
theorem multiplicity_le_multiplicity_of_dvd_right {a b c : α} (h : b ∣ c) :
multiplicity a b ≤ multiplicity a c :=
multiplicity_le_multiplicity_iff.2 fun n hb => hb.trans h
#align multiplicity.multiplicity_le_multiplicity_of_dvd_right multiplicity.multiplicity_le_multiplicity_of_dvd_right
+-/
+#print multiplicity.eq_of_associated_right /-
theorem eq_of_associated_right {a b c : α} (h : Associated b c) :
multiplicity a b = multiplicity a c :=
le_antisymm (multiplicity_le_multiplicity_of_dvd_right h.Dvd)
(multiplicity_le_multiplicity_of_dvd_right h.symm.Dvd)
#align multiplicity.eq_of_associated_right multiplicity.eq_of_associated_right
+-/
+#print multiplicity.dvd_of_multiplicity_pos /-
theorem dvd_of_multiplicity_pos {a b : α} (h : (0 : PartENat) < multiplicity a b) : a ∣ b :=
by
rw [← pow_one a]
apply pow_dvd_of_le_multiplicity
simpa only [Nat.cast_one, PartENat.pos_iff_one_le] using h
#align multiplicity.dvd_of_multiplicity_pos multiplicity.dvd_of_multiplicity_pos
+-/
+#print multiplicity.dvd_iff_multiplicity_pos /-
theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b ↔ a ∣ b :=
⟨dvd_of_multiplicity_pos, fun hdvd =>
lt_of_le_of_ne (zero_le _) fun heq =>
@@ -291,7 +416,9 @@ theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b
simpa only [HEq, Nat.cast_zero] using part_enat.coe_lt_coe.mpr zero_lt_one)
(by rwa [pow_one a])⟩
#align multiplicity.dvd_iff_multiplicity_pos multiplicity.dvd_iff_multiplicity_pos
+-/
+#print multiplicity.finite_nat_iff /-
theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
by
rw [← not_iff_not, not_finite_iff_forall, not_and_or, Ne.def, Classical.not_not, not_lt,
@@ -309,6 +436,7 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b :=
not_lt_of_ge (le_of_dvd (Nat.pos_of_ne_zero hb) (h b)) (lt_pow_self ha_gt_one b),
fun h => by cases h <;> simp [*]⟩
#align multiplicity.finite_nat_iff multiplicity.finite_nat_iff
+-/
alias dvd_iff_multiplicity_pos ↔ _ _root_.has_dvd.dvd.multiplicity_pos
#align has_dvd.dvd.multiplicity_pos Dvd.Dvd.multiplicity_pos
@@ -319,12 +447,19 @@ section CommMonoid
variable [CommMonoid α]
+/- warning: multiplicity.finite_of_finite_mul_left -> multiplicity.finite_of_finite_mul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1)))) b c)) -> (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a c)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] {a : α} {b : α} {c : α}, (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1)))) b c)) -> (multiplicity.Finite.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a c)
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_of_finite_mul_left multiplicity.finite_of_finite_mul_leftₓ'. -/
theorem finite_of_finite_mul_left {a b c : α} : Finite a (b * c) → Finite a c := by
rw [mul_comm] <;> exact finite_of_finite_mul_right
#align multiplicity.finite_of_finite_mul_left multiplicity.finite_of_finite_mul_left
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+#print multiplicity.isUnit_right /-
theorem isUnit_right {a b : α} (ha : ¬IsUnit a) (hb : IsUnit b) : multiplicity a b = 0 :=
eq_coe_iff.2
⟨show a ^ 0 ∣ b by simp only [pow_zero, one_dvd],
@@ -332,27 +467,40 @@ theorem isUnit_right {a b : α} (ha : ¬IsUnit a) (hb : IsUnit b) : multiplicity
rw [pow_one]
exact fun h => mt (isUnit_of_dvd_unit h) ha hb⟩
#align multiplicity.is_unit_right multiplicity.isUnit_right
+-/
+/- warning: multiplicity.one_right -> multiplicity.one_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))))) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CommMonoid.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4005 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4007 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (Monoid.toSemigroup.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4005 x._@.Mathlib.RingTheory.Multiplicity._hyg.4007)] {a : α}, (Not (IsUnit.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α (CommMonoid.toMonoid.{u1} α _inst_1))))) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.one_right multiplicity.one_rightₓ'. -/
theorem one_right {a : α} (ha : ¬IsUnit a) : multiplicity a 1 = 0 :=
isUnit_right ha isUnit_one
#align multiplicity.one_right multiplicity.one_right
+#print multiplicity.unit_right /-
theorem unit_right {a : α} (ha : ¬IsUnit a) (u : αˣ) : multiplicity a u = 0 :=
isUnit_right ha u.IsUnit
#align multiplicity.unit_right multiplicity.unit_right
+-/
open Classical
+#print multiplicity.multiplicity_le_multiplicity_of_dvd_left /-
theorem multiplicity_le_multiplicity_of_dvd_left {a b c : α} (hdvd : a ∣ b) :
multiplicity b c ≤ multiplicity a c :=
multiplicity_le_multiplicity_iff.2 fun n h => (pow_dvd_pow_of_dvd hdvd n).trans h
#align multiplicity.multiplicity_le_multiplicity_of_dvd_left multiplicity.multiplicity_le_multiplicity_of_dvd_left
+-/
+#print multiplicity.eq_of_associated_left /-
theorem eq_of_associated_left {a b c : α} (h : Associated a b) :
multiplicity b c = multiplicity a c :=
le_antisymm (multiplicity_le_multiplicity_of_dvd_left h.Dvd)
(multiplicity_le_multiplicity_of_dvd_left h.symm.Dvd)
#align multiplicity.eq_of_associated_left multiplicity.eq_of_associated_left
+-/
alias dvd_iff_multiplicity_pos ↔ _ _root_.has_dvd.dvd.multiplicity_pos
#align has_dvd.dvd.multiplicity_pos Dvd.Dvd.multiplicity_pos
@@ -363,6 +511,12 @@ section MonoidWithZero
variable [MonoidWithZero α]
+/- warning: multiplicity.ne_zero_of_finite -> multiplicity.ne_zero_of_finite is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] {a : α} {b : α}, (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) a b) -> (Ne.{succ u1} α b (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1)))))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] {a : α} {b : α}, (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) a b) -> (Ne.{succ u1} α b (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1))))
+Case conversion may be inaccurate. Consider using '#align multiplicity.ne_zero_of_finite multiplicity.ne_zero_of_finiteₓ'. -/
theorem ne_zero_of_finite {a b : α} (h : Finite a b) : b ≠ 0 :=
let ⟨n, hn⟩ := h
fun hb => by simpa [hb] using hn
@@ -370,11 +524,23 @@ theorem ne_zero_of_finite {a b : α} (h : Finite a b) : b ≠ 0 :=
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+/- warning: multiplicity.zero -> multiplicity.zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))))] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1))))))) (Top.top.{0} PartENat PartENat.hasTop)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4291 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4293 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4291 x._@.Mathlib.RingTheory.Multiplicity._hyg.4293)] (a : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) (Top.top.{0} PartENat PartENat.instTopPartENat)
+Case conversion may be inaccurate. Consider using '#align multiplicity.zero multiplicity.zeroₓ'. -/
@[simp]
protected theorem zero (a : α) : multiplicity a 0 = ⊤ :=
Part.eq_none_iff.2 fun n ⟨⟨k, hk⟩, _⟩ => hk (dvd_zero _)
#align multiplicity.zero multiplicity.zero
+/- warning: multiplicity.multiplicity_zero_eq_zero_of_ne_zero -> multiplicity.multiplicity_zero_eq_zero_of_ne_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))))] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α _inst_1)))))) a) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : MonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4369 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4371 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α _inst_1))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4369 x._@.Mathlib.RingTheory.Multiplicity._hyg.4371)] (a : α), (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1)))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α _inst_1))) a) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_zero_eq_zero_of_ne_zero multiplicity.multiplicity_zero_eq_zero_of_ne_zeroₓ'. -/
@[simp]
theorem multiplicity_zero_eq_zero_of_ne_zero (a : α) (ha : a ≠ 0) : multiplicity 0 a = 0 :=
multiplicity.multiplicity_eq_zero.2 <| mt zero_dvd_iff.1 ha
@@ -388,6 +554,12 @@ variable [CommMonoidWithZero α]
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+/- warning: multiplicity.multiplicity_mk_eq_multiplicity -> multiplicity.multiplicity_mk_eq_multiplicity is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))))] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Dvd.Dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.commMonoidWithZero.{u1} α _inst_1))))))] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.commMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4456 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4458 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4456 x._@.Mathlib.RingTheory.Multiplicity._hyg.4458)] [_inst_3 : DecidableRel.{succ u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4482 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4484 : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => Dvd.dvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (semigroupDvd.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (SemigroupWithZero.toSemigroup.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toSemigroupWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4482 x._@.Mathlib.RingTheory.Multiplicity._hyg.4484)] {a : α} {b : α}, Eq.{1} PartENat (multiplicity.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (MonoidWithZero.toMonoid.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (CommMonoidWithZero.toMonoidWithZero.{u1} (Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (Associates.instCommMonoidWithZeroAssociatesToMonoidToMonoidWithZero.{u1} α _inst_1))) (fun (a : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) (b : Associates.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1))) => _inst_3 a b) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) a) (Associates.mk.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_mk_eq_multiplicity multiplicity.multiplicity_mk_eq_multiplicityₓ'. -/
theorem multiplicity_mk_eq_multiplicity
[DecidableRel ((· ∣ ·) : Associates α → Associates α → Prop)] {a b : α} :
multiplicity (Associates.mk a) (Associates.mk b) = multiplicity a b :=
@@ -420,6 +592,12 @@ section Semiring
variable [Semiring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
+/- warning: multiplicity.min_le_multiplicity_add -> multiplicity.min_le_multiplicity_add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))))] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.hasLe (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Semiring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.4903 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.4905 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (Semiring.toNonUnitalSemiring.{u1} α _inst_1)))) x._@.Mathlib.RingTheory.Multiplicity._hyg.4903 x._@.Mathlib.RingTheory.Multiplicity._hyg.4905)] {p : α} {a : α} {b : α}, LE.le.{0} PartENat PartENat.instLEPartENat (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α _inst_1)) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} α (Semiring.toNonAssocSemiring.{u1} α _inst_1))))) a b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.min_le_multiplicity_add multiplicity.min_le_multiplicity_addₓ'. -/
theorem min_le_multiplicity_add {p a b : α} :
min (multiplicity p a) (multiplicity p b) ≤ multiplicity p (a + b) :=
(le_total (multiplicity p a) (multiplicity p b)).elim
@@ -437,6 +615,12 @@ section Ring
variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
+/- warning: multiplicity.neg -> multiplicity.neg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1))))) b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) a b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5108 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5110 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5108 x._@.Mathlib.RingTheory.Multiplicity._hyg.5110)] (a : α) (b : α), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.neg multiplicity.negₓ'. -/
@[simp]
protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
Part.ext' (by simp only [multiplicity, PartENat.find, dvd_neg]) fun h₁ h₂ =>
@@ -449,6 +633,12 @@ protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
(mt (dvd_neg _ _).1 (is_greatest' _ (lt_succ_self _)))))
#align multiplicity.neg multiplicity.neg
+/- warning: multiplicity.int.nat_abs -> multiplicity.Int.natAbs is a dubious translation:
+lean 3 declaration is
+ forall (a : Nat) (b : Int), Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) a (Int.natAbs b)) (multiplicity.{0} Int Int.monoid (fun (a : Int) (b : Int) => Int.decidableDvd a b) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) a) b)
+but is expected to have type
+ forall (a : Nat) (b : Int), Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) a (Int.natAbs b)) (multiplicity.{0} Int Int.instMonoidInt (fun (a : Int) (b : Int) => Int.decidableDvd a b) (Nat.cast.{0} Int instNatCastInt a) b)
+Case conversion may be inaccurate. Consider using '#align multiplicity.int.nat_abs multiplicity.Int.natAbsₓ'. -/
theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity (a : ℤ) b :=
by
cases' Int.natAbs_eq b with h h <;> conv_rhs => rw [h]
@@ -456,6 +646,12 @@ theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity
· rw [multiplicity.neg, int.coe_nat_multiplicity]
#align multiplicity.int.nat_abs multiplicity.Int.natAbs
+/- warning: multiplicity.multiplicity_add_of_gt -> multiplicity.multiplicity_add_of_gt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5414 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5416 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5414 x._@.Mathlib.RingTheory.Multiplicity._hyg.5416)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gtₓ'. -/
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a + b) = multiplicity p b :=
by
@@ -475,11 +671,23 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
rw [min_eq_right (le_of_lt h)]
#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gt
+/- warning: multiplicity.multiplicity_sub_of_gt -> multiplicity.multiplicity_sub_of_gt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (SubNegMonoid.toHasSub.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5810 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5812 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5810 x._@.Mathlib.RingTheory.Multiplicity._hyg.5812)] {p : α} {a : α} {b : α}, (LT.lt.{0} PartENat (Preorder.toLT.{0} PartENat (PartialOrder.toPreorder.{0} PartENat PartENat.partialOrder)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HSub.hSub.{u1, u1, u1} α α α (instHSub.{u1} α (Ring.toSub.{u1} α _inst_1)) a b)) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gtₓ'. -/
theorem multiplicity_sub_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
multiplicity p (a - b) = multiplicity p b := by
rw [sub_eq_add_neg, multiplicity_add_of_gt] <;> rwa [multiplicity.neg]
#align multiplicity.multiplicity_sub_of_gt multiplicity.multiplicity_sub_of_gt
+/- warning: multiplicity.multiplicity_add_eq_min -> multiplicity.multiplicity_add_eq_min is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toHasAdd.{u1} α (Ring.toDistrib.{u1} α _inst_1))) a b)) (LinearOrder.min.{0} PartENat PartENat.linearOrder (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (Ring.toMonoid.{u1} α _inst_1) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Ring.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.5967 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.5969 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (NonUnitalSemiring.toSemigroupWithZero.{u1} α (NonUnitalRing.toNonUnitalSemiring.{u1} α (Ring.toNonUnitalRing.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.5967 x._@.Mathlib.RingTheory.Multiplicity._hyg.5969)] {p : α} {a : α} {b : α}, (Ne.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HAdd.hAdd.{u1, u1, u1} α α α (instHAdd.{u1} α (Distrib.toAdd.{u1} α (NonUnitalNonAssocSemiring.toDistrib.{u1} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} α (NonAssocRing.toNonUnitalNonAssocRing.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) a b)) (Min.min.{0} PartENat (LinearOrder.toMin.{0} PartENat PartENat.linearOrder) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_add_eq_min multiplicity.multiplicity_add_eq_minₓ'. -/
theorem multiplicity_add_eq_min {p a b : α} (h : multiplicity p a ≠ multiplicity p b) :
multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b) :=
by
@@ -497,6 +705,12 @@ section CancelCommMonoidWithZero
variable [CancelCommMonoidWithZero α]
+/- warning: multiplicity.finite_mul_aux -> multiplicity.finite_mul_aux is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {n : Nat} {m : Nat} {a : α} {b : α}, (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) a)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) b)) -> (Not (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n m) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {n : α} {m : α} {a : Nat} {b : Nat}, (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) a (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) n)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) b (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) m)) -> (Not (Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) a b) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) n m))))
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_mul_aux multiplicity.finite_mul_auxₓ'. -/
theorem finite_mul_aux {p : α} (hp : Prime p) :
∀ {n m : ℕ} {a b : α}, ¬p ^ (n + 1) ∣ a → ¬p ^ (m + 1) ∣ b → ¬p ^ (n + m + 1) ∣ a * b
| n, m => fun a b ha hb ⟨s, hs⟩ =>
@@ -541,22 +755,42 @@ theorem finite_mul_aux {p : α} (hp : Prime p) :
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
+/- warning: multiplicity.finite_mul -> multiplicity.finite_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) -> (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_mul multiplicity.finite_mulₓ'. -/
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
fun ⟨n, hn⟩ ⟨m, hm⟩ => ⟨n + m, finite_mul_aux hp hn hm⟩
#align multiplicity.finite_mul multiplicity.finite_mul
+/- warning: multiplicity.finite_mul_iff -> multiplicity.finite_mul_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Iff (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Iff (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_mul_iff multiplicity.finite_mul_iffₓ'. -/
theorem finite_mul_iff {p a b : α} (hp : Prime p) : Finite p (a * b) ↔ Finite p a ∧ Finite p b :=
⟨fun h => ⟨finite_of_finite_mul_right h, finite_of_finite_mul_left h⟩, fun h =>
finite_mul hp h.1 h.2⟩
#align multiplicity.finite_mul_iff multiplicity.finite_mul_iff
+#print multiplicity.finite_pow /-
theorem finite_pow {p a : α} (hp : Prime p) : ∀ {k : ℕ} (ha : Finite p a), Finite p (a ^ k)
| 0, ha => ⟨0, by simp [mt isUnit_iff_dvd_one.2 hp.2.1]⟩
| k + 1, ha => by rw [pow_succ] <;> exact finite_mul hp ha (finite_pow ha)
#align multiplicity.finite_pow multiplicity.finite_pow
+-/
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+/- warning: multiplicity.multiplicity_self -> multiplicity.multiplicity_self is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (OfNat.mk.{0} PartENat 1 (One.one.{0} PartENat PartENat.hasOne))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7143 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7145 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7143 x._@.Mathlib.RingTheory.Multiplicity._hyg.7145)] {a : α}, (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) a)) -> (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) a a) (OfNat.ofNat.{0} PartENat 1 (One.toOfNat1.{0} PartENat PartENat.instOnePartENat)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_self multiplicity.multiplicity_selfₓ'. -/
@[simp]
theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 :=
by
@@ -572,6 +806,7 @@ theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplic
simpa [pow_succ, mul_assoc] using hb⟩)⟩
#align multiplicity.multiplicity_self multiplicity.multiplicity_self
+#print multiplicity.get_multiplicity_self /-
@[simp]
theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a) ha = 1 :=
PartENat.get_eq_iff_eq_coe.2
@@ -582,7 +817,14 @@ theorem get_multiplicity_self {a : α} (ha : Finite a a) : get (multiplicity a a
exact
mt isUnit_iff_dvd_one.2 (not_unit_of_finite ha) ⟨b, by clear _fun_match <;> simp_all⟩⟩)
#align multiplicity.get_multiplicity_self multiplicity.get_multiplicity_self
+-/
+/- warning: multiplicity.mul' -> multiplicity.mul' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7401 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7403 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7401 x._@.Mathlib.RingTheory.Multiplicity._hyg.7403)] {p : α} {a : α} {b : α} (hp : Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) (h : Part.Dom.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b))), Eq.{1} Nat (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) h) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (And.left (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))) (Part.get.{0} Nat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b) (And.right (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b) (Iff.mp (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (And (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p a) (multiplicity.Finite.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p b)) (multiplicity.finite_mul_iff.{u1} α _inst_1 p a b hp) h))))
+Case conversion may be inaccurate. Consider using '#align multiplicity.mul' multiplicity.mul'ₓ'. -/
protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b)).Dom) :
get (multiplicity p (a * b)) h =
get (multiplicity p a) ((finite_mul_iff hp).1 h).1 +
@@ -617,6 +859,12 @@ protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b))
open Classical
+/- warning: multiplicity.mul -> multiplicity.mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toHasMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.hasAdd) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.7912 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.7914 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.7912 x._@.Mathlib.RingTheory.Multiplicity._hyg.7914)] {p : α} {a : α} {b : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulZeroClass.toMul.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1)))))) a b)) (HAdd.hAdd.{0, 0, 0} PartENat PartENat PartENat (instHAdd.{0} PartENat PartENat.instAddPartENat) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a) (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p b)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.mul multiplicity.mulₓ'. -/
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
if h : Finite p a ∧ Finite p b then by
@@ -630,6 +878,7 @@ protected theorem mul {p a b : α} (hp : Prime p) :
cases' not_and_or.1 h with h h <;> simp [eq_top_iff_not_finite.2 h]
#align multiplicity.mul multiplicity.mul
+#print multiplicity.Finset.prod /-
theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by
classical
@@ -639,7 +888,9 @@ theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f :
· simp [has, ← ih]
convert multiplicity.mul hp
#align multiplicity.finset.prod multiplicity.Finset.prod
+-/
+#print multiplicity.pow' /-
protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
∀ {k : ℕ}, get (multiplicity p (a ^ k)) (finite_pow hp ha) = k * get (multiplicity p a) ha
| 0 => by simp [one_right hp.not_unit]
@@ -648,12 +899,25 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
have : multiplicity p (a ^ (k + 1)) = multiplicity p (a * a ^ k) := by rw [pow_succ]
rw [get_eq_get_of_eq _ _ this, multiplicity.mul' hp, pow', add_mul, one_mul, add_comm]
#align multiplicity.pow' multiplicity.pow'
+-/
+/- warning: multiplicity.pow -> multiplicity.pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (SMul.smul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8398 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8400 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8398 x._@.Mathlib.RingTheory.Multiplicity._hyg.8400)] {p : α} {a : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall {k : Nat}, Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) a k)) (HSMul.hSMul.{0, 0, 0} Nat PartENat PartENat (instHSMul.{0, 0} Nat PartENat (AddMonoid.SMul.{0} PartENat (AddMonoidWithOne.toAddMonoid.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)))) k (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p a)))
+Case conversion may be inaccurate. Consider using '#align multiplicity.pow multiplicity.powₓ'. -/
theorem pow {p a : α} (hp : Prime p) : ∀ {k : ℕ}, multiplicity p (a ^ k) = k • multiplicity p a
| 0 => by simp [one_right hp.not_unit]
| succ k => by simp [pow_succ, succ_nsmul, pow, multiplicity.mul hp]
#align multiplicity.pow multiplicity.pow
+/- warning: multiplicity.multiplicity_pow_self -> multiplicity.multiplicity_pow_self is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8493 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8495 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8493 x._@.Mathlib.RingTheory.Multiplicity._hyg.8495)] {p : α}, (Ne.{succ u1} α p (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (CommMonoidWithZero.toZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) -> (Not (IsUnit.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) p)) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_selfₓ'. -/
theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ) :
multiplicity p (p ^ n) = n := by
rw [eq_coe_iff]
@@ -662,6 +926,12 @@ theorem multiplicity_pow_self {p : α} (h0 : p ≠ 0) (hu : ¬IsUnit p) (n : ℕ
apply Nat.not_succ_le_self
#align multiplicity.multiplicity_pow_self multiplicity.multiplicity_pow_self
+/- warning: multiplicity.multiplicity_pow_self_of_prime -> multiplicity.multiplicity_pow_self_of_prime is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (Dvd.Dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))))] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat PartENat (HasLiftT.mk.{1, 1} Nat PartENat (CoeTCₓ.coe.{1, 1} Nat PartENat (Nat.castCoe.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.addCommMonoidWithOne))))) n))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : CancelCommMonoidWithZero.{u1} α] [_inst_2 : DecidableRel.{succ u1} α (fun (x._@.Mathlib.RingTheory.Multiplicity._hyg.8640 : α) (x._@.Mathlib.RingTheory.Multiplicity._hyg.8642 : α) => Dvd.dvd.{u1} α (semigroupDvd.{u1} α (SemigroupWithZero.toSemigroup.{u1} α (MonoidWithZero.toSemigroupWithZero.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) x._@.Mathlib.RingTheory.Multiplicity._hyg.8640 x._@.Mathlib.RingTheory.Multiplicity._hyg.8642)] {p : α}, (Prime.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1) p) -> (forall (n : Nat), Eq.{1} PartENat (multiplicity.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))) (fun (a : α) (b : α) => _inst_2 a b) p (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α (MonoidWithZero.toMonoid.{u1} α (CommMonoidWithZero.toMonoidWithZero.{u1} α (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} α _inst_1))))) p n)) (Nat.cast.{0} PartENat (AddMonoidWithOne.toNatCast.{0} PartENat (AddCommMonoidWithOne.toAddMonoidWithOne.{0} PartENat PartENat.instAddCommMonoidWithOnePartENat)) n))
+Case conversion may be inaccurate. Consider using '#align multiplicity.multiplicity_pow_self_of_prime multiplicity.multiplicity_pow_self_of_primeₓ'. -/
theorem multiplicity_pow_self_of_prime {p : α} (hp : Prime p) (n : ℕ) :
multiplicity p (p ^ n) = n :=
multiplicity_pow_self hp.NeZero hp.not_unit n
@@ -673,12 +943,24 @@ section Valuation
variable {R : Type _} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.Dvd : R → R → Prop)]
+/- warning: multiplicity.add_valuation -> multiplicity.addValuation is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))], (Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p) -> (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)
+Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation multiplicity.addValuationₓ'. -/
/-- `multiplicity` of a prime inan integral domain as an additive valuation to `part_enat`. -/
noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
AddValuation.of (multiplicity p) (multiplicity.zero _) (one_right hp.not_unit)
(fun _ _ => min_le_multiplicity_add) fun a b => multiplicity.mul hp
#align multiplicity.add_valuation multiplicity.addValuation
+/- warning: multiplicity.add_valuation_apply -> multiplicity.addValuation_apply is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.Dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) p} {r : R}, Eq.{1} PartENat (coeFn.{succ u1, succ u1} (AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) (fun (_x : AddValuation.{u1, 0} R (CommRing.toRing.{u1} R _inst_1) PartENat PartENat.linearOrderedAddCommMonoidWithTop) => R -> PartENat) (AddValuation.hasCoeToFun.{u1, 0} R PartENat PartENat.linearOrderedAddCommMonoidWithTop (CommRing.toRing.{u1} R _inst_1)) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp) r) (multiplicity.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)) (fun (a : R) (b : R) => _inst_3 a b) p r)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_2 : IsDomain.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {p : R} [_inst_3 : DecidableRel.{succ u1} R (Dvd.dvd.{u1} R (semigroupDvd.{u1} R (SemigroupWithZero.toSemigroup.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R (NonUnitalCommRing.toNonUnitalRing.{u1} R (CommRing.toNonUnitalCommRing.{u1} R _inst_1)))))))] {hp : Prime.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) _inst_2)) p} {r : R}, Eq.{1} (Multiplicative.{0} (OrderDual.{0} PartENat)) (ZeroHom.toFun.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (MulZeroOneClass.toZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat))))) (MonoidWithZeroHom.toZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (MonoidWithZero.toMulZeroOneClass.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (CommMonoidWithZero.toMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (LinearOrderedCommMonoidWithZero.toCommMonoidWithZero.{0} (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat)))) (Valuation.toMonoidWithZeroHom.{u1, 0} R (Multiplicative.{0} (OrderDual.{0} PartENat)) (instLinearOrderedCommMonoidWithZeroMultiplicativeOrderDual.{0} PartENat PartENat.instLinearOrderedAddCommMonoidWithTopPartENat) (CommRing.toRing.{u1} R _inst_1) (multiplicity.addValuation.{u1} R _inst_1 _inst_2 p (fun (a : R) (b : R) => _inst_3 a b) hp))) r) (multiplicity.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (fun (a : R) (b : R) => _inst_3 a b) p r)
+Case conversion may be inaccurate. Consider using '#align multiplicity.add_valuation_apply multiplicity.addValuation_applyₓ'. -/
@[simp]
theorem addValuation_apply {hp : Prime p} {r : R} : addValuation hp r = multiplicity p r :=
rfl
@@ -692,6 +974,12 @@ section Nat
open multiplicity
+/- warning: multiplicity_eq_zero_of_coprime -> multiplicity_eq_zero_of_coprime is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} {a : Nat} {b : Nat}, (Ne.{1} Nat p (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) -> (LE.le.{0} PartENat PartENat.hasLe (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) p a) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) p b)) -> (Nat.coprime a b) -> (Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidableDvd a b) p a) (OfNat.ofNat.{0} PartENat 0 (OfNat.mk.{0} PartENat 0 (Zero.zero.{0} PartENat PartENat.hasZero))))
+but is expected to have type
+ forall {p : Nat} {a : Nat} {b : Nat}, (Ne.{1} Nat p (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) -> (LE.le.{0} PartENat PartENat.instLEPartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) p a) (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) p b)) -> (Nat.coprime a b) -> (Eq.{1} PartENat (multiplicity.{0} Nat Nat.monoid (fun (a : Nat) (b : Nat) => Nat.decidable_dvd a b) p a) (OfNat.ofNat.{0} PartENat 0 (Zero.toOfNat0.{0} PartENat PartENat.instZeroPartENat)))
+Case conversion may be inaccurate. Consider using '#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprimeₓ'. -/
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
(hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a313d8bba1bad05faba71a4a4e9742ab5bd9efd
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
! This file was ported from Lean 3 source module ring_theory.multiplicity
-! leanprover-community/mathlib commit 3d32bf9cef95940e3fe1ca0dd2412e0f21579f46
+! leanprover-community/mathlib commit ceb887ddf3344dab425292e497fa2af91498437c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -216,6 +216,10 @@ theorem multiplicity_eq_zero {a b : α} : multiplicity a b = 0 ↔ ¬a ∣ b :=
simp
#align multiplicity.multiplicity_eq_zero multiplicity.multiplicity_eq_zero
+theorem multiplicity_ne_zero {a b : α} : multiplicity a b ≠ 0 ↔ a ∣ b :=
+ multiplicity_eq_zero.not_left
+#align multiplicity.multiplicity_ne_zero multiplicity.multiplicity_ne_zero
+
theorem eq_top_iff_not_finite {a b : α} : multiplicity a b = ⊤ ↔ ¬Finite a b :=
Part.eq_none_iff'
#align multiplicity.eq_top_iff_not_finite multiplicity.eq_top_iff_not_finite
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -448,8 +448,8 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
cases' PartENat.ne_top_iff.mp (PartENat.ne_top_of_lt h) with k hk
rw [hk]
rw_mod_cast [multiplicity_lt_iff_not_dvd, dvd_add_right]
- intro h_dvd
- · apply multiplicity.is_greatest _ h_dvd
+ · intro h_dvd
+ apply multiplicity.is_greatest _ h_dvd
rw [hk, ← Nat.succ_eq_add_one]
norm_cast
apply Nat.lt_succ_self k
These are changes from #11997, the latest adaptation PR for nightly-2024-04-07, which can be made directly on master.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -216,7 +216,7 @@ theorem eq_top_iff_not_finite {a b : α} : multiplicity a b = ⊤ ↔ ¬Finite a
#align multiplicity.eq_top_iff_not_finite multiplicity.eq_top_iff_not_finite
theorem ne_top_iff_finite {a b : α} : multiplicity a b ≠ ⊤ ↔ Finite a b := by
- rw [Ne.def, eq_top_iff_not_finite, Classical.not_not]
+ rw [Ne, eq_top_iff_not_finite, Classical.not_not]
#align multiplicity.ne_top_iff_finite multiplicity.ne_top_iff_finite
theorem lt_top_iff_finite {a b : α} : multiplicity a b < ⊤ ↔ Finite a b := by
@@ -289,7 +289,7 @@ theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b
#align multiplicity.dvd_iff_multiplicity_pos multiplicity.dvd_iff_multiplicity_pos
theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b := by
- rw [← not_iff_not, not_finite_iff_forall, not_and_or, Ne.def, Classical.not_not, not_lt,
+ rw [← not_iff_not, not_finite_iff_forall, not_and_or, Ne, Classical.not_not, not_lt,
Nat.le_zero]
exact
⟨fun h =>
@@ -64,7 +64,7 @@ theorem not_dvd_one_of_finite_one_right {a : α} : Finite a 1 → ¬a ∣ 1 := f
#align multiplicity.not_dvd_one_of_finite_one_right multiplicity.not_dvd_one_of_finite_one_right
@[norm_cast]
-theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b := by
+theorem Int.natCast_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ) = multiplicity a b := by
apply Part.ext'
· rw [← @finite_iff_dom ℕ, @finite_def ℕ, ← @finite_iff_dom ℤ, @finite_def ℤ]
norm_cast
@@ -73,7 +73,10 @@ theorem Int.coe_nat_multiplicity (a b : ℕ) : multiplicity (a : ℤ) (b : ℤ)
· apply Nat.find_mono
norm_cast
simp
-#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.coe_nat_multiplicity
+#align multiplicity.int.coe_nat_multiplicity multiplicity.Int.natCast_multiplicity
+
+-- 2024-04-05
+@[deprecated] alias Int.coe_nat_multiplicity := Int.natCast_multiplicity
theorem not_finite_iff_forall {a b : α} : ¬Finite a b ↔ ∀ n : ℕ, a ^ n ∣ b :=
⟨fun h n =>
@@ -434,8 +437,8 @@ protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity (a : ℤ) b := by
cases' Int.natAbs_eq b with h h <;> conv_rhs => rw [h]
- · rw [Int.coe_nat_multiplicity]
- · rw [multiplicity.neg, Int.coe_nat_multiplicity]
+ · rw [Int.natCast_multiplicity]
+ · rw [multiplicity.neg, Int.natCast_multiplicity]
#align multiplicity.int.nat_abs multiplicity.Int.natAbs
theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity p a) :
This means Mathlib.NumberTheory.Padics.PadicVal no longer needs to depend on Mathlib.RingTheory.Int.Basic, which is surprisingly heavy (in particular through Mathlib.RingTheory.Noetherian).
@@ -647,3 +647,23 @@ theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
end Nat
+
+namespace multiplicity
+
+theorem finite_int_iff_natAbs_finite {a b : ℤ} : Finite a b ↔ Finite a.natAbs b.natAbs := by
+ simp only [finite_def, ← Int.natAbs_dvd_natAbs, Int.natAbs_pow]
+#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finite
+
+theorem finite_int_iff {a b : ℤ} : Finite a b ↔ a.natAbs ≠ 1 ∧ b ≠ 0 := by
+ rw [finite_int_iff_natAbs_finite, finite_nat_iff, pos_iff_ne_zero, Int.natAbs_ne_zero]
+#align multiplicity.finite_int_iff multiplicity.finite_int_iff
+
+instance decidableNat : DecidableRel fun a b : ℕ => (multiplicity a b).Dom := fun _ _ =>
+ decidable_of_iff _ finite_nat_iff.symm
+#align multiplicity.decidable_nat multiplicity.decidableNat
+
+instance decidableInt : DecidableRel fun a b : ℤ => (multiplicity a b).Dom := fun _ _ =>
+ decidable_of_iff _ finite_int_iff.symm
+#align multiplicity.decidable_int multiplicity.decidableInt
+
+end multiplicity
LinearOrderedCommGroupWithZero
(#11716)
Reconstitute the file Algebra.Order.Monoid.WithZero
from three files:
Algebra.Order.Monoid.WithZero.Defs
Algebra.Order.Monoid.WithZero.Basic
Algebra.Order.WithZero
Avoid importing it in many files. Most uses were just to get le_zero_iff
to work on Nat
.
Before
After
@@ -287,7 +287,7 @@ theorem dvd_iff_multiplicity_pos {a b : α} : (0 : PartENat) < multiplicity a b
theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b := by
rw [← not_iff_not, not_finite_iff_forall, not_and_or, Ne.def, Classical.not_not, not_lt,
- le_zero_iff]
+ Nat.le_zero]
exact
⟨fun h =>
or_iff_not_imp_right.2 fun hb =>
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -225,7 +225,7 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
obtain ⟨c, hc⟩ := multiplicity.pow_multiplicity_dvd hfin
refine' ⟨c, hc, _⟩
rintro ⟨k, hk⟩
- rw [hk, ← mul_assoc, ← _root_.pow_succ'] at hc
+ rw [hk, ← mul_assoc, ← _root_.pow_succ] at hc
have h₁ : a ^ ((multiplicity a b).get hfin + 1) ∣ b := ⟨k, hc⟩
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
@@ -523,7 +523,7 @@ theorem finite_mul_iff {p a b : α} (hp : Prime p) : Finite p (a * b) ↔ Finite
theorem finite_pow {p a : α} (hp : Prime p) : ∀ {k : ℕ} (_ : Finite p a), Finite p (a ^ k)
| 0, _ => ⟨0, by simp [mt isUnit_iff_dvd_one.2 hp.2.1]⟩
- | k + 1, ha => by rw [_root_.pow_succ]; exact finite_mul hp ha (finite_pow hp ha)
+ | k + 1, ha => by rw [_root_.pow_succ']; exact finite_mul hp ha (finite_pow hp ha)
#align multiplicity.finite_pow multiplicity.finite_pow
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
@@ -604,7 +604,7 @@ protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
intro k
induction' k with k hk
· simp [one_right hp.not_unit]
- · have : multiplicity p (a ^ (k + 1)) = multiplicity p (a * a ^ k) := by rw [_root_.pow_succ]
+ · have : multiplicity p (a ^ (k + 1)) = multiplicity p (a * a ^ k) := by rw [_root_.pow_succ']
rw [succ_eq_add_one, get_eq_get_of_eq _ _ this,
multiplicity.mul' hp, hk, add_mul, one_mul, add_comm]
#align multiplicity.pow' multiplicity.pow'
Move basic Nat
lemmas from Data.Nat.Order.Basic
and Data.Nat.Pow
to Data.Nat.Defs
. Most proofs need adapting, but that's easily solved by replacing the general mathlib lemmas by the new Std Nat
-specific lemmas and using omega
.
Data.Nat.Pow
to Algebra.GroupPower.Order
Data.Nat.Pow
to Algebra.GroupPower.Order
bit
/bit0
/bit1
lemmas from Data.Nat.Order.Basic
to Data.Nat.Bits
Data.Nat.Order.Basic
anymoreNat
-specific lemmas to help fix the fallout (look for nolint simpNF
)Nat.mul_self_le_mul_self_iff
and Nat.mul_self_lt_mul_self_iff
around (they were misnamed)Nat.one_lt_pow
implicit@@ -8,7 +8,6 @@ import Mathlib.Algebra.Associated
import Mathlib.Algebra.SMulWithZero
import Mathlib.Data.Nat.PartENat
import Mathlib.Tactic.Linarith
-import Mathlib.Data.Nat.Pow
#align_import ring_theory.multiplicity from "leanprover-community/mathlib"@"e8638a0fcaf73e4500469f368ef9494e495099b3"
Finset.preimage
not depend on Finset.sum
(#11601)
and Data.Finset.LocallyFinite
not depend on Finset.sum
too
@@ -3,6 +3,7 @@ Copyright (c) 2018 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
-/
+import Mathlib.Algebra.BigOperators.Basic
import Mathlib.Algebra.Associated
import Mathlib.Algebra.SMulWithZero
import Mathlib.Data.Nat.PartENat
@@ -29,8 +30,7 @@ several basic results on it.
variable {α β : Type*}
open Nat Part
-
-open BigOperators
+open scoped BigOperators
/-- `multiplicity a b` returns the largest natural number `n` such that
`a ^ n ∣ b`, as a `PartENat` or natural with infinity. If `∀ n, a ^ n ∣ b`,
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -377,7 +377,6 @@ end MonoidWithZero
section CommMonoidWithZero
variable [CommMonoidWithZero α]
-
variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
theorem multiplicity_mk_eq_multiplicity
The termination checker has been getting more capable, and many of the termination_by
or decreasing_by
clauses in Mathlib are no longer needed.
(Note that termination_by?
will show the automatically derived termination expression, so no information is being lost by removing these.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -479,8 +479,8 @@ section CancelCommMonoidWithZero
variable [CancelCommMonoidWithZero α]
-/- Porting note: removed previous wf recursion hints and added termination_by
-Also pulled a b intro parameters since Lean parses that more easily -/
+/- Porting note:
+Pulled a b intro parameters since Lean parses that more easily -/
theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α} :
∀ {n m : ℕ}, ¬p ^ (n + 1) ∣ a → ¬p ^ (m + 1) ∣ b → ¬p ^ (n + m + 1) ∣ a * b
| n, m => fun ha hb ⟨s, hs⟩ =>
@@ -512,7 +512,6 @@ theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α} :
⟨s, mul_right_cancel₀ hp.1 (by
rw [add_assoc, tsub_add_cancel_of_le (succ_le_of_lt hm0)]
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
-termination_by n m => n + m
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -333,7 +333,7 @@ theorem unit_right {a : α} (ha : ¬IsUnit a) (u : αˣ) : multiplicity a u = 0
isUnit_right ha u.isUnit
#align multiplicity.unit_right multiplicity.unit_right
-open Classical
+open scoped Classical
theorem multiplicity_le_multiplicity_of_dvd_left {a b c : α} (hdvd : a ∣ b) :
multiplicity b c ≤ multiplicity a c :=
@@ -577,7 +577,7 @@ protected theorem mul' {p a b : α} (hp : Prime p) (h : (multiplicity p (a * b))
rw [← PartENat.natCast_inj, PartENat.natCast_get, eq_coe_iff]; exact ⟨hdiv, hsucc⟩
#align multiplicity.mul' multiplicity.mul'
-open Classical
+open scoped Classical
protected theorem mul {p a b : α} (hp : Prime p) :
multiplicity p (a * b) = multiplicity p a + multiplicity p b :=
I ran tryAtEachStep on all files under Mathlib
to find all locations where omega
succeeds. For each that was a linarith
without an only
, I tried replacing it with omega
, and I verified that elaboration time got smaller. (In almost all cases, there was a noticeable speedup.) I also replaced some slow aesop
s along the way.
@@ -299,7 +299,7 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b := by
match a with
| 0 => ha rfl
| 1 => ha1 rfl
- | b+2 => by linarith
+ | b+2 => by omega
not_lt_of_ge (le_of_dvd (Nat.pos_of_ne_zero hb) (h b)) (lt_pow_self ha_gt_one b),
fun h => by cases h <;> simp [*]⟩
#align multiplicity.finite_nat_iff multiplicity.finite_nat_iff
@@ -184,7 +184,7 @@ theorem isUnit_left {a : α} (b : α) (ha : IsUnit a) : multiplicity a b = ⊤ :
eq_top_iff.2 fun _ => IsUnit.dvd (ha.pow _)
#align multiplicity.is_unit_left multiplicity.isUnit_left
--- @[simp] Porting note: simp can prove this
+-- @[simp] Porting note (#10618): simp can prove this
theorem one_left (b : α) : multiplicity 1 b = ⊤ :=
isUnit_left b isUnit_one
#align multiplicity.one_left multiplicity.one_left
@@ -195,7 +195,7 @@ theorem get_one_right {a : α} (ha : Finite a 1) : get (multiplicity a 1) ha = 0
simp [not_dvd_one_of_finite_one_right ha]
#align multiplicity.get_one_right multiplicity.get_one_right
--- @[simp] Porting note: simp can prove this
+-- @[simp] Porting note (#10618): simp can prove this
theorem unit_left (a : α) (u : αˣ) : multiplicity (u : α) a = ⊤ :=
isUnit_left a u.isUnit
#align multiplicity.unit_left multiplicity.unit_left
@@ -7,6 +7,7 @@ import Mathlib.Algebra.Associated
import Mathlib.Algebra.SMulWithZero
import Mathlib.Data.Nat.PartENat
import Mathlib.Tactic.Linarith
+import Mathlib.Data.Nat.Pow
#align_import ring_theory.multiplicity from "leanprover-community/mathlib"@"e8638a0fcaf73e4500469f368ef9494e495099b3"
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -251,12 +251,12 @@ theorem multiplicity_eq_multiplicity_iff {a b : α} {c d : β} :
(multiplicity_le_multiplicity_iff.mpr fun n => (h n).mpr)⟩
#align multiplicity.multiplicity_eq_multiplicity_iff multiplicity.multiplicity_eq_multiplicity_iff
-theorem le_multiplicity_map {F : Type*} [MonoidHomClass F α β] (f : F) {a b : α} :
- multiplicity a b ≤ multiplicity (f a) (f b) :=
+theorem le_multiplicity_map {F : Type*} [FunLike F α β] [MonoidHomClass F α β]
+ (f : F) {a b : α} : multiplicity a b ≤ multiplicity (f a) (f b) :=
multiplicity_le_multiplicity_iff.mpr fun n ↦ by rw [← map_pow]; exact map_dvd f
-theorem multiplicity_map_eq {F : Type*} [MulEquivClass F α β] (f : F) {a b : α} :
- multiplicity (f a) (f b) = multiplicity a b :=
+theorem multiplicity_map_eq {F : Type*} [EquivLike F α β] [MulEquivClass F α β]
+ (f : F) {a b : α} : multiplicity (f a) (f b) = multiplicity a b :=
multiplicity_eq_multiplicity_iff.mpr fun n ↦ by rw [← map_pow]; exact map_dvd_iff f
theorem multiplicity_le_multiplicity_of_dvd_right {a b c : α} (h : b ∣ c) :
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de>
@@ -511,7 +511,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α} :
⟨s, mul_right_cancel₀ hp.1 (by
rw [add_assoc, tsub_add_cancel_of_le (succ_le_of_lt hm0)]
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
-termination_by finite_mul_aux _ _ n m => n+m
+termination_by n m => n + m
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
Polynomial.rootMultiplicity
(#8563)
Main changes:
Monic.mem_nonZeroDivisors
and mem_nonZeroDivisors_of_leadingCoeff
which states that a monic polynomial (resp. a polynomial whose leading coefficient is not zero divisor) is not a zero divisor.rootMultiplicity_mul_X_sub_C_pow
which states that * (X - a) ^ n
adds the root multiplicity at a
by n
.rootMultiplicity_X_sub_C_self
, rootMultiplicity_X_sub_C
and rootMultiplicity_X_sub_C_pow
from IsDomain
to Nontrivial
.rootMultiplicity_eq_natTrailingDegree
which relates rootMultiplicity
and natTrailingDegree
, and eval_divByMonic_eq_trailingCoeff_comp
.le_rootMultiplicity_mul
which is similar to le_trailingDegree_mul
.rootMultiplicity_mul'
which slightly generalizes rootMultiplicity_mul
In Data/Polynomial/FieldDivision
:
rootMultiplicity_sub_one_le_derivative_rootMultiplicity_of_ne_zero
which slightly generalizes rootMultiplicity_sub_one_le_derivative_rootMultiplicity
.derivative_rootMultiplicity_of_root_of_mem_nonZeroDivisors
which slightly generalizes derivative_rootMultiplicity_of_root
.rootMultiplicity
In addition:
eq_of_monic_of_associated
from RingDivision to Monic and generalize.dvd_cancel
lemmas to NonZeroDivisors.algEquivOfCompEqX
: two polynomials that compose to X both ways induces an isomorphism of the polynomial algebra.Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -25,7 +25,7 @@ several basic results on it.
-/
-variable {α : Type*}
+variable {α β : Type*}
open Nat Part
@@ -42,7 +42,7 @@ namespace multiplicity
section Monoid
-variable [Monoid α]
+variable [Monoid α] [Monoid β]
/-- `multiplicity.Finite a b` indicates that the multiplicity of `a` in `b` is finite. -/
@[reducible]
@@ -94,7 +94,7 @@ theorem finite_of_finite_mul_right {a b c : α} : Finite a (b * c) → Finite a
⟨n, fun h => hn (h.trans (dvd_mul_right _ _))⟩
#align multiplicity.finite_of_finite_mul_right multiplicity.finite_of_finite_mul_right
-variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
+variable [DecidableRel ((· ∣ ·) : α → α → Prop)] [DecidableRel ((· ∣ ·) : β → β → Prop)]
theorem pow_dvd_of_le_multiplicity {a b : α} {k : ℕ} :
(k : PartENat) ≤ multiplicity a b → a ^ k ∣ b := by
@@ -149,9 +149,9 @@ theorem pow_dvd_iff_le_multiplicity {a b : α} {k : ℕ} :
⟨le_multiplicity_of_pow_dvd, pow_dvd_of_le_multiplicity⟩
#align multiplicity.pow_dvd_iff_le_multiplicity multiplicity.pow_dvd_iff_le_multiplicity
-theorem multiplicity_lt_iff_neg_dvd {a b : α} {k : ℕ} :
+theorem multiplicity_lt_iff_not_dvd {a b : α} {k : ℕ} :
multiplicity a b < (k : PartENat) ↔ ¬a ^ k ∣ b := by rw [pow_dvd_iff_le_multiplicity, not_le]
-#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_neg_dvd
+#align multiplicity.multiplicity_lt_iff_neg_dvd multiplicity.multiplicity_lt_iff_not_dvd
theorem eq_coe_iff {a b : α} {n : ℕ} :
multiplicity a b = (n : PartENat) ↔ a ^ n ∣ b ∧ ¬a ^ (n + 1) ∣ b := by
@@ -230,11 +230,10 @@ theorem exists_eq_pow_mul_and_not_dvd {a b : α} (hfin : Finite a b) :
exact (multiplicity.eq_coe_iff.1 (by simp)).2 h₁
#align multiplicity.exists_eq_pow_mul_and_not_dvd multiplicity.exists_eq_pow_mul_and_not_dvd
-open Classical
-
-theorem multiplicity_le_multiplicity_iff {a b c d : α} :
+theorem multiplicity_le_multiplicity_iff {a b : α} {c d : β} :
multiplicity a b ≤ multiplicity c d ↔ ∀ n : ℕ, a ^ n ∣ b → c ^ n ∣ d :=
⟨fun h n hab => pow_dvd_of_le_multiplicity (le_trans (le_multiplicity_of_pow_dvd hab) h), fun h =>
+ letI := Classical.dec (Finite a b)
if hab : Finite a b then by
rw [← PartENat.natCast_get (finite_iff_dom.1 hab)];
exact le_multiplicity_of_pow_dvd (h _ (pow_multiplicity_dvd _))
@@ -243,7 +242,7 @@ theorem multiplicity_le_multiplicity_iff {a b c d : α} :
rw [eq_top_iff_not_finite.2 hab, eq_top_iff_not_finite.2 (not_finite_iff_forall.2 this)]⟩
#align multiplicity.multiplicity_le_multiplicity_iff multiplicity.multiplicity_le_multiplicity_iff
-theorem multiplicity_eq_multiplicity_iff {a b c d : α} :
+theorem multiplicity_eq_multiplicity_iff {a b : α} {c d : β} :
multiplicity a b = multiplicity c d ↔ ∀ n : ℕ, a ^ n ∣ b ↔ c ^ n ∣ d :=
⟨fun h n =>
⟨multiplicity_le_multiplicity_iff.mp h.le n, multiplicity_le_multiplicity_iff.mp h.ge n⟩,
@@ -252,6 +251,14 @@ theorem multiplicity_eq_multiplicity_iff {a b c d : α} :
(multiplicity_le_multiplicity_iff.mpr fun n => (h n).mpr)⟩
#align multiplicity.multiplicity_eq_multiplicity_iff multiplicity.multiplicity_eq_multiplicity_iff
+theorem le_multiplicity_map {F : Type*} [MonoidHomClass F α β] (f : F) {a b : α} :
+ multiplicity a b ≤ multiplicity (f a) (f b) :=
+ multiplicity_le_multiplicity_iff.mpr fun n ↦ by rw [← map_pow]; exact map_dvd f
+
+theorem multiplicity_map_eq {F : Type*} [MulEquivClass F α β] (f : F) {a b : α} :
+ multiplicity (f a) (f b) = multiplicity a b :=
+ multiplicity_eq_multiplicity_iff.mpr fun n ↦ by rw [← map_pow]; exact map_dvd_iff f
+
theorem multiplicity_le_multiplicity_of_dvd_right {a b c : α} (h : b ∣ c) :
multiplicity a b ≤ multiplicity a c :=
multiplicity_le_multiplicity_iff.2 fun _ hb => hb.trans h
@@ -438,7 +445,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
· apply PartENat.le_of_lt_add_one
cases' PartENat.ne_top_iff.mp (PartENat.ne_top_of_lt h) with k hk
rw [hk]
- rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
+ rw_mod_cast [multiplicity_lt_iff_not_dvd, dvd_add_right]
intro h_dvd
· apply multiplicity.is_greatest _ h_dvd
rw [hk, ← Nat.succ_eq_add_one]
@@ -4,8 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
-/
import Mathlib.Algebra.Associated
-import Mathlib.Algebra.BigOperators.Basic
-import Mathlib.RingTheory.Valuation.Basic
+import Mathlib.Algebra.SMulWithZero
+import Mathlib.Data.Nat.PartENat
+import Mathlib.Tactic.Linarith
#align_import ring_theory.multiplicity from "leanprover-community/mathlib"@"e8638a0fcaf73e4500469f368ef9494e495099b3"
@@ -623,23 +624,6 @@ theorem multiplicity_pow_self_of_prime {p : α} (hp : Prime p) (n : ℕ) :
end CancelCommMonoidWithZero
-section Valuation
-
-variable {R : Type*} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.dvd : R → R → Prop)]
-
-/-- `multiplicity` of a prime in an integral domain as an additive valuation to `PartENat`. -/
-noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
- AddValuation.of (multiplicity p) (multiplicity.zero _) (one_right hp.not_unit)
- (fun _ _ => min_le_multiplicity_add) fun _ _ => multiplicity.mul hp
-#align multiplicity.add_valuation multiplicity.addValuation
-
-@[simp]
-theorem addValuation_apply {hp : Prime p} {r : R} : addValuation hp r = multiplicity p r :=
- rfl
-#align multiplicity.add_valuation_apply multiplicity.addValuation_apply
-
-end Valuation
-
end multiplicity
section Nat
@@ -440,7 +440,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
intro h_dvd
· apply multiplicity.is_greatest _ h_dvd
- rw [hk, ←Nat.succ_eq_add_one]
+ rw [hk, ← Nat.succ_eq_add_one]
norm_cast
apply Nat.lt_succ_self k
· rw [pow_dvd_iff_le_multiplicity, Nat.cast_add, ← hk, Nat.cast_one]
@@ -647,13 +647,13 @@ section Nat
open multiplicity
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
- (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 := by
+ (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.Coprime a b) : multiplicity p a = 0 := by
rw [multiplicity_le_multiplicity_iff] at hle
rw [← nonpos_iff_eq_zero, ← not_lt, PartENat.pos_iff_one_le, ← Nat.cast_one, ←
pow_dvd_iff_le_multiplicity]
intro h
have := Nat.dvd_gcd h (hle _ h)
- rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
+ rw [Coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
exact hp this
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
@@ -647,13 +647,13 @@ section Nat
open multiplicity
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
- (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.Coprime a b) : multiplicity p a = 0 := by
+ (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 := by
rw [multiplicity_le_multiplicity_iff] at hle
rw [← nonpos_iff_eq_zero, ← not_lt, PartENat.pos_iff_one_le, ← Nat.cast_one, ←
pow_dvd_iff_le_multiplicity]
intro h
have := Nat.dvd_gcd h (hle _ h)
- rw [Coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
+ rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
exact hp this
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
Some changes have already been review and delegated in #6910 and #7148.
The diff that needs looking at is https://github.com/leanprover-community/mathlib4/pull/7174/commits/64d6d07ee18163627c8f517eb31455411921c5ac
The std bump PR was insta-merged already!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -647,13 +647,13 @@ section Nat
open multiplicity
theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
- (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.coprime a b) : multiplicity p a = 0 := by
+ (hle : multiplicity p a ≤ multiplicity p b) (hab : Nat.Coprime a b) : multiplicity p a = 0 := by
rw [multiplicity_le_multiplicity_iff] at hle
rw [← nonpos_iff_eq_zero, ← not_lt, PartENat.pos_iff_one_le, ← Nat.cast_one, ←
pow_dvd_iff_le_multiplicity]
intro h
have := Nat.dvd_gcd h (hle _ h)
- rw [coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
+ rw [Coprime.gcd_eq_one hab, Nat.dvd_one, pow_one] at this
exact hp this
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
@@ -295,7 +295,7 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b := by
fun h => by cases h <;> simp [*]⟩
#align multiplicity.finite_nat_iff multiplicity.finite_nat_iff
-alias dvd_iff_multiplicity_pos ↔ _ _root_.has_dvd.dvd.multiplicity_pos
+alias ⟨_, _root_.has_dvd.dvd.multiplicity_pos⟩ := dvd_iff_multiplicity_pos
end Monoid
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -24,7 +24,7 @@ several basic results on it.
-/
-variable {α : Type _}
+variable {α : Type*}
open Nat Part
@@ -582,7 +582,7 @@ protected theorem mul {p a b : α} (hp : Prime p) :
cases' not_and_or.1 h with h h <;> simp [eq_top_iff_not_finite.2 h]
#align multiplicity.mul multiplicity.mul
-theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
+theorem Finset.prod {β : Type*} {p : α} (hp : Prime p) (s : Finset β) (f : β → α) :
multiplicity p (∏ x in s, f x) = ∑ x in s, multiplicity p (f x) := by
classical
induction' s using Finset.induction with a s has ih h
@@ -625,7 +625,7 @@ end CancelCommMonoidWithZero
section Valuation
-variable {R : Type _} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.dvd : R → R → Prop)]
+variable {R : Type*} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.dvd : R → R → Prop)]
/-- `multiplicity` of a prime in an integral domain as an additive valuation to `PartENat`. -/
noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
@@ -2,16 +2,13 @@
Copyright (c) 2018 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
-
-! This file was ported from Lean 3 source module ring_theory.multiplicity
-! leanprover-community/mathlib commit e8638a0fcaf73e4500469f368ef9494e495099b3
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Associated
import Mathlib.Algebra.BigOperators.Basic
import Mathlib.RingTheory.Valuation.Basic
+#align_import ring_theory.multiplicity from "leanprover-community/mathlib"@"e8638a0fcaf73e4500469f368ef9494e495099b3"
+
/-!
# Multiplicity of a divisor
@@ -506,7 +506,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α} :
⟨s, mul_right_cancel₀ hp.1 (by
rw [add_assoc, tsub_add_cancel_of_le (succ_le_of_lt hm0)]
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
-termination_by finite_mul_aux _ _ n m => n+m
+termination_by finite_mul_aux _ _ n m => n+m
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
@@ -34,7 +34,7 @@ open Nat Part
open BigOperators
/-- `multiplicity a b` returns the largest natural number `n` such that
- `a ^ n ∣ b`, as an `PartENat` or natural with infinity. If `∀ n, a ^ n ∣ b`,
+ `a ^ n ∣ b`, as a `PartENat` or natural with infinity. If `∀ n, a ^ n ∣ b`,
then it returns `⊤`-/
def multiplicity [Monoid α] [DecidableRel ((· ∣ ·) : α → α → Prop)] (a b : α) : PartENat :=
PartENat.find fun n => ¬a ^ (n + 1) ∣ b
@@ -475,7 +475,7 @@ variable [CancelCommMonoidWithZero α]
/- Porting note: removed previous wf recursion hints and added termination_by
Also pulled a b intro parameters since Lean parses that more easily -/
-theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α}:
+theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α} :
∀ {n m : ℕ}, ¬p ^ (n + 1) ∣ a → ¬p ^ (m + 1) ∣ b → ¬p ^ (n + m + 1) ∣ a * b
| n, m => fun ha hb ⟨s, hs⟩ =>
have : p ∣ a * b := ⟨p ^ (n + m) * s, by simp [hs, pow_add, mul_comm, mul_assoc, mul_left_comm]⟩
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -122,8 +122,8 @@ theorem is_greatest' {a b : α} {m : ℕ} (h : Finite a b) (hm : get (multiplici
is_greatest (by rwa [← PartENat.coe_lt_coe, PartENat.natCast_get] at hm)
#align multiplicity.is_greatest' multiplicity.is_greatest'
-theorem pos_of_dvd {a b : α} (hfin : Finite a b) (hdiv : a ∣ b) : 0 < (multiplicity a b).get hfin :=
- by
+theorem pos_of_dvd {a b : α} (hfin : Finite a b) (hdiv : a ∣ b) :
+ 0 < (multiplicity a b).get hfin := by
refine' zero_lt_iff.2 fun h => _
simpa [hdiv] using is_greatest' hfin (lt_one_iff.mpr h)
#align multiplicity.pos_of_dvd multiplicity.pos_of_dvd
@@ -168,8 +168,7 @@ theorem eq_coe_iff {a b : α} {n : ℕ} :
#align multiplicity.eq_coe_iff multiplicity.eq_coe_iff
theorem eq_top_iff {a b : α} : multiplicity a b = ⊤ ↔ ∀ n : ℕ, a ^ n ∣ b :=
- (PartENat.find_eq_top_iff _).trans <|
- by
+ (PartENat.find_eq_top_iff _).trans <| by
simp only [Classical.not_not]
exact
⟨fun h n =>
@@ -391,8 +390,7 @@ theorem multiplicity_mk_eq_multiplicity
rw [finite_iff_dom, PartENat.not_dom_iff_eq_top] at h this
rw [h, this]
refine'
- not_finite_iff_forall.mpr fun n =>
- by
+ not_finite_iff_forall.mpr fun n => by
rw [← Associates.mk_pow, Associates.mk_dvd_mk]
exact not_finite_iff_forall.mp h n
#align multiplicity.multiplicity_mk_eq_multiplicity multiplicity.multiplicity_mk_eq_multiplicity
@@ -599,8 +597,7 @@ theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f :
-- Porting note: with protected could not use pow' k in the succ branch
protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
- ∀ {k : ℕ}, get (multiplicity p (a ^ k)) (finite_pow hp ha) = k * get (multiplicity p a) ha :=
- by
+ ∀ {k : ℕ}, get (multiplicity p (a ^ k)) (finite_pow hp ha) = k * get (multiplicity p a) ha := by
intro k
induction' k with k hk
· simp [one_right hp.not_unit]
MetaM
version of rfl
tactic and missing whnfR
/instantiateMVars
(#3758)
This PR factors out a MetaM
version of the rfl
tactic and adds a missing whnfR
and instantiateMVars
in front of the goal type. This means that a few rw
s across mathlib4 now close the goal instead of e.g. requiring a trailing exact le_rfl
.
Note: we do not use whnfR
on the return type when adding the refl
extension in the first place, as forallMetaTelescopeReducing
already performs whnf
(here, at reducible transparency).
See zulip for some discussion on the internal changes made.
Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
@@ -243,8 +243,7 @@ theorem multiplicity_le_multiplicity_iff {a b c d : α} :
exact le_multiplicity_of_pow_dvd (h _ (pow_multiplicity_dvd _))
else by
have : ∀ n : ℕ, c ^ n ∣ d := fun n => h n (not_finite_iff_forall.1 hab _)
- rw [eq_top_iff_not_finite.2 hab, eq_top_iff_not_finite.2 (not_finite_iff_forall.2 this)]
- apply le_refl⟩
+ rw [eq_top_iff_not_finite.2 hab, eq_top_iff_not_finite.2 (not_finite_iff_forall.2 this)]⟩
#align multiplicity.multiplicity_le_multiplicity_iff multiplicity.multiplicity_le_multiplicity_iff
theorem multiplicity_eq_multiplicity_iff {a b c d : α} :
Match https://github.com/leanprover-community/mathlib/pull/18698 and a bit of https://github.com/leanprover-community/mathlib/pull/18785.
algebra.divisibility.basic
@70d50ecfd4900dd6d328da39ab7ebd516abe4025
..e8638a0fcaf73e4500469f368ef9494e495099b3
algebra.euclidean_domain.basic
@655994e298904d7e5bbd1e18c95defd7b543eb94
..e8638a0fcaf73e4500469f368ef9494e495099b3
algebra.group.units
@369525b73f229ccd76a6ec0e0e0bf2be57599768
..e8638a0fcaf73e4500469f368ef9494e495099b3
algebra.group_with_zero.basic
@2196ab363eb097c008d4497125e0dde23fb36db2
..e8638a0fcaf73e4500469f368ef9494e495099b3
algebra.group_with_zero.divisibility
@f1a2caaf51ef593799107fe9a8d5e411599f3996
..e8638a0fcaf73e4500469f368ef9494e495099b3
algebra.group_with_zero.units.basic
@70d50ecfd4900dd6d328da39ab7ebd516abe4025
..df5e9937a06fdd349fc60106f54b84d47b1434f0
algebra.order.monoid.canonical.defs
@de87d5053a9fe5cbde723172c0fb7e27e7436473
..e8638a0fcaf73e4500469f368ef9494e495099b3
algebra.ring.divisibility
@f1a2caaf51ef593799107fe9a8d5e411599f3996
..e8638a0fcaf73e4500469f368ef9494e495099b3
data.int.dvd.basic
@e1bccd6e40ae78370f01659715d3c948716e3b7e
..e8638a0fcaf73e4500469f368ef9494e495099b3
data.int.dvd.pow
@b3f25363ae62cb169e72cd6b8b1ac97bacf21ca7
..e8638a0fcaf73e4500469f368ef9494e495099b3
data.int.order.basic
@728baa2f54e6062c5879a3e397ac6bac323e506f
..e8638a0fcaf73e4500469f368ef9494e495099b3
data.nat.gcd.basic
@a47cda9662ff3925c6df271090b5808adbca5b46
..e8638a0fcaf73e4500469f368ef9494e495099b3
data.nat.order.basic
@26f081a2fb920140ed5bc5cc5344e84bcc7cb2b2
..e8638a0fcaf73e4500469f368ef9494e495099b3
data.nat.order.lemmas
@2258b40dacd2942571c8ce136215350c702dc78f
..e8638a0fcaf73e4500469f368ef9494e495099b3
group_theory.perm.cycle.basic
@92ca63f0fb391a9ca5f22d2409a6080e786d99f7
..e8638a0fcaf73e4500469f368ef9494e495099b3
number_theory.divisors
@f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
..e8638a0fcaf73e4500469f368ef9494e495099b3
number_theory.pythagorean_triples
@70fd9563a21e7b963887c9360bd29b2393e6225a
..e8638a0fcaf73e4500469f368ef9494e495099b3
number_theory.zsqrtd.basic
@7ec294687917cbc5c73620b4414ae9b5dd9ae1b4
..e8638a0fcaf73e4500469f368ef9494e495099b3
ring_theory.multiplicity
@ceb887ddf3344dab425292e497fa2af91498437c
..e8638a0fcaf73e4500469f368ef9494e495099b3
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Chris Hughes
! This file was ported from Lean 3 source module ring_theory.multiplicity
-! leanprover-community/mathlib commit ceb887ddf3344dab425292e497fa2af91498437c
+! leanprover-community/mathlib commit e8638a0fcaf73e4500469f368ef9494e495099b3
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -427,8 +427,8 @@ protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
PartENat.natCast_inj.1 (by
rw [PartENat.natCast_get]
exact Eq.symm
- (unique ((dvd_neg _ _).2 (pow_multiplicity_dvd _))
- (mt (dvd_neg _ _).1 (is_greatest' _ (lt_succ_self _)))))
+ (unique (pow_multiplicity_dvd _).neg_right
+ (mt dvd_neg.1 (is_greatest' _ (lt_succ_self _)))))
#align multiplicity.neg multiplicity.neg
theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity (a : ℤ) b := by
@@ -443,9 +443,8 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
· apply PartENat.le_of_lt_add_one
cases' PartENat.ne_top_iff.mp (PartENat.ne_top_of_lt h) with k hk
rw [hk]
- rw_mod_cast [multiplicity_lt_iff_neg_dvd]
+ rw_mod_cast [multiplicity_lt_iff_neg_dvd, dvd_add_right]
intro h_dvd
- rw [← dvd_add_iff_right] at h_dvd
· apply multiplicity.is_greatest _ h_dvd
rw [hk, ←Nat.succ_eq_add_one]
norm_cast
@@ -291,8 +291,8 @@ theorem finite_nat_iff {a b : ℕ} : Finite a b ↔ a ≠ 1 ∧ 0 < b := by
have ha : a ≠ 0 := fun ha => hb <| zero_dvd_iff.mp <| by rw [ha] at h; exact h 1
Classical.by_contradiction fun ha1 : a ≠ 1 =>
have ha_gt_one : 1 < a :=
- lt_of_not_ge fun _ =>
- match a with
+ lt_of_not_ge fun _ =>
+ match a with
| 0 => ha rfl
| 1 => ha1 rfl
| b+2 => by linarith
@@ -425,10 +425,10 @@ variable [Ring α] [DecidableRel ((· ∣ ·) : α → α → Prop)]
protected theorem neg (a b : α) : multiplicity a (-b) = multiplicity a b :=
Part.ext' (by simp only [multiplicity, PartENat.find, dvd_neg]) fun h₁ h₂ =>
PartENat.natCast_inj.1 (by
- rw [PartENat.natCast_get];
- exact Eq.symm
- (unique ((dvd_neg _ _).2 (pow_multiplicity_dvd _))
- (mt (dvd_neg _ _).1 (is_greatest' _ (lt_succ_self _)))))
+ rw [PartENat.natCast_get]
+ exact Eq.symm
+ (unique ((dvd_neg _ _).2 (pow_multiplicity_dvd _))
+ (mt (dvd_neg _ _).1 (is_greatest' _ (lt_succ_self _)))))
#align multiplicity.neg multiplicity.neg
theorem Int.natAbs (a : ℕ) (b : ℤ) : multiplicity a b.natAbs = multiplicity (a : ℤ) b := by
@@ -452,7 +452,7 @@ theorem multiplicity_add_of_gt {p a b : α} (h : multiplicity p b < multiplicity
apply Nat.lt_succ_self k
· rw [pow_dvd_iff_le_multiplicity, Nat.cast_add, ← hk, Nat.cast_one]
exact PartENat.add_one_le_of_lt h
- · have := @min_le_multiplicity_add α _ _ p a b
+ · have := @min_le_multiplicity_add α _ _ p a b
rwa [← min_eq_right (le_of_lt h)]
#align multiplicity.multiplicity_add_of_gt multiplicity.multiplicity_add_of_gt
@@ -510,7 +510,7 @@ theorem finite_mul_aux {p : α} (hp : Prime p) {a b : α}:
⟨s, mul_right_cancel₀ hp.1 (by
rw [add_assoc, tsub_add_cancel_of_le (succ_le_of_lt hm0)]
simp_all [mul_comm, mul_assoc, mul_left_comm, pow_add])⟩
-termination_by finite_mul_aux _ _ n m => n+m
+termination_by finite_mul_aux _ _ n m => n+m
#align multiplicity.finite_mul_aux multiplicity.finite_mul_aux
theorem finite_mul {p a b : α} (hp : Prime p) : Finite p a → Finite p b → Finite p (a * b) :=
@@ -532,7 +532,7 @@ variable [DecidableRel ((· ∣ ·) : α → α → Prop)]
@[simp]
theorem multiplicity_self {a : α} (ha : ¬IsUnit a) (ha0 : a ≠ 0) : multiplicity a a = 1 := by
rw [← Nat.cast_one]
- exact eq_coe_iff.2 ⟨by simp, fun ⟨b, hb⟩ => ha (isUnit_iff_dvd_one.2
+ exact eq_coe_iff.2 ⟨by simp, fun ⟨b, hb⟩ => ha (isUnit_iff_dvd_one.2
⟨b, mul_left_cancel₀ ha0 <| by simpa [_root_.pow_succ, mul_assoc] using hb⟩)⟩
#align multiplicity.multiplicity_self multiplicity.multiplicity_self
@@ -601,13 +601,13 @@ theorem Finset.prod {β : Type _} {p : α} (hp : Prime p) (s : Finset β) (f :
-- Porting note: with protected could not use pow' k in the succ branch
protected theorem pow' {p a : α} (hp : Prime p) (ha : Finite p a) :
- ∀ {k : ℕ}, get (multiplicity p (a ^ k)) (finite_pow hp ha) = k * get (multiplicity p a) ha :=
- by
- intro k
+ ∀ {k : ℕ}, get (multiplicity p (a ^ k)) (finite_pow hp ha) = k * get (multiplicity p a) ha :=
+ by
+ intro k
induction' k with k hk
· simp [one_right hp.not_unit]
· have : multiplicity p (a ^ (k + 1)) = multiplicity p (a * a ^ k) := by rw [_root_.pow_succ]
- rw [succ_eq_add_one, get_eq_get_of_eq _ _ this,
+ rw [succ_eq_add_one, get_eq_get_of_eq _ _ this,
multiplicity.mul' hp, hk, add_mul, one_mul, add_comm]
#align multiplicity.pow' multiplicity.pow'
@@ -635,7 +635,7 @@ section Valuation
variable {R : Type _} [CommRing R] [IsDomain R] {p : R} [DecidableRel (Dvd.dvd : R → R → Prop)]
-/-- `multiplicity` of a prime inan integral domain as an additive valuation to `PartENat`. -/
+/-- `multiplicity` of a prime in an integral domain as an additive valuation to `PartENat`. -/
noncomputable def addValuation (hp : Prime p) : AddValuation R PartENat :=
AddValuation.of (multiplicity p) (multiplicity.zero _) (one_right hp.not_unit)
(fun _ _ => min_le_multiplicity_add) fun _ _ => multiplicity.mul hp
@@ -666,4 +666,3 @@ theorem multiplicity_eq_zero_of_coprime {p a b : ℕ} (hp : p ≠ 1)
#align multiplicity_eq_zero_of_coprime multiplicity_eq_zero_of_coprime
end Nat
-
The unported dependencies are