Multiplicity of a divisor #
For a commutative monoid, this file introduces the notion of multiplicity of a divisor and proves several basic results on it.
Main definitions #
emultiplicity a b
: for two elementsa
andb
of a commutative monoid returns the largest numbern
such thata ^ n ∣ b
or infinity, written⊤
, ifa ^ n ∣ b
for all natural numbersn
.multiplicity a b
: aℕ
-valued version ofmultiplicity
, defaulting for1
instead of⊤
. The reason for using1
as a default value instead of0
is to havemultiplicity_eq_zero_iff
.FiniteMultiplicity a b
: a predicate denoting that the multiplicity ofa
inb
is finite.
@[reducible, inline]
FiniteMultiplicity a b
indicates that the multiplicity of a
in b
is finite.
Instances For
emultiplicity a b
returns the largest natural number n
such that
a ^ n ∣ b
, as an ℕ∞
. If ∀ n, a ^ n ∣ b
then it returns ⊤
.
Equations
- emultiplicity a b = if h : FiniteMultiplicity a b then ↑(Nat.find h) else ⊤
Instances For
A ℕ
-valued version of emultiplicity
, returning 1
instead of ⊤
.
Equations
- multiplicity a b = WithTop.untopD 1 (emultiplicity a b)
Instances For
@[simp]
theorem
finiteMultiplicity_of_emultiplicity_eq_natCast
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : emultiplicity a b = ↑n)
:
theorem
multiplicity_eq_of_emultiplicity_eq_some
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : emultiplicity a b = ↑n)
:
theorem
emultiplicity_ne_of_multiplicity_ne
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
:
multiplicity a b ≠ n → emultiplicity a b ≠ ↑n
theorem
FiniteMultiplicity.emultiplicity_eq_multiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
(h : FiniteMultiplicity a b)
:
theorem
FiniteMultiplicity.emultiplicity_eq_iff_multiplicity_eq
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : FiniteMultiplicity a b)
:
theorem
emultiplicity_eq_iff_multiplicity_eq_of_ne_one
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : n ≠ 1)
:
@[simp]
theorem
multiplicity_eq_one_of_not_finiteMultiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
(h : ¬FiniteMultiplicity a b)
:
@[simp]
theorem
multiplicity_eq_of_emultiplicity_eq
{α : Type u_1}
{β : Type u_2}
[Monoid α]
[Monoid β]
{a b : α}
{c d : β}
(h : emultiplicity a b = emultiplicity c d)
:
theorem
multiplicity_le_of_emultiplicity_le
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : emultiplicity a b ≤ ↑n)
:
theorem
FiniteMultiplicity.emultiplicity_le_of_multiplicity_le
{α : Type u_1}
[Monoid α]
{a b : α}
(hfin : FiniteMultiplicity a b)
{n : ℕ}
(h : multiplicity a b ≤ n)
:
theorem
le_emultiplicity_of_le_multiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : n ≤ multiplicity a b)
:
theorem
FiniteMultiplicity.le_multiplicity_of_le_emultiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
(hfin : FiniteMultiplicity a b)
{n : ℕ}
(h : ↑n ≤ emultiplicity a b)
:
theorem
multiplicity_lt_of_emultiplicity_lt
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : emultiplicity a b < ↑n)
:
theorem
FiniteMultiplicity.emultiplicity_lt_of_multiplicity_lt
{α : Type u_1}
[Monoid α]
{a b : α}
(hfin : FiniteMultiplicity a b)
{n : ℕ}
(h : multiplicity a b < n)
:
theorem
lt_emultiplicity_of_lt_multiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
{n : ℕ}
(h : n < multiplicity a b)
:
theorem
FiniteMultiplicity.lt_multiplicity_of_lt_emultiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
(hfin : FiniteMultiplicity a b)
{n : ℕ}
(h : ↑n < emultiplicity a b)
:
theorem
FiniteMultiplicity.not_dvd_of_one_right
{α : Type u_1}
[Monoid α]
{a : α}
:
FiniteMultiplicity a 1 → ¬a ∣ 1
theorem
FiniteMultiplicity.not_unit
{α : Type u_1}
[Monoid α]
{a b : α}
(h : FiniteMultiplicity a b)
:
theorem
FiniteMultiplicity.mul_left
{α : Type u_1}
[Monoid α]
{a b c : α}
:
FiniteMultiplicity a (b * c) → FiniteMultiplicity a b
theorem
pow_dvd_of_le_emultiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
{k : ℕ}
(hk : ↑k ≤ emultiplicity a b)
:
theorem
pow_dvd_of_le_multiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
{k : ℕ}
(hk : k ≤ multiplicity a b)
:
@[simp]
theorem
not_pow_dvd_of_emultiplicity_lt
{α : Type u_1}
[Monoid α]
{a b : α}
{m : ℕ}
(hm : emultiplicity a b < ↑m)
:
theorem
FiniteMultiplicity.not_pow_dvd_of_multiplicity_lt
{α : Type u_1}
[Monoid α]
{a b : α}
(hf : FiniteMultiplicity a b)
{m : ℕ}
(hm : multiplicity a b < m)
:
theorem
FiniteMultiplicity.le_multiplicity_of_pow_dvd
{α : Type u_1}
[Monoid α]
{a b : α}
(hf : FiniteMultiplicity a b)
{k : ℕ}
(hk : a ^ k ∣ b)
:
theorem
FiniteMultiplicity.pow_dvd_iff_le_multiplicity
{α : Type u_1}
[Monoid α]
{a b : α}
(hf : FiniteMultiplicity a b)
{k : ℕ}
:
theorem
FiniteMultiplicity.multiplicity_lt_iff_not_dvd
{α : Type u_1}
[Monoid α]
{a b : α}
{k : ℕ}
(hf : FiniteMultiplicity a b)
:
@[simp]
theorem
FiniteMultiplicity.not_of_isUnit_left
{α : Type u_1}
[Monoid α]
{a : α}
(b : α)
(ha : IsUnit a)
:
@[simp]
@[simp]
theorem
FiniteMultiplicity.one_right
{α : Type u_1}
[Monoid α]
{a : α}
(ha : FiniteMultiplicity a 1)
:
theorem
FiniteMultiplicity.not_of_unit_left
{α : Type u_1}
[Monoid α]
(a : α)
(u : αˣ)
:
¬FiniteMultiplicity (↑u) a
theorem
FiniteMultiplicity.exists_eq_pow_mul_and_not_dvd
{α : Type u_1}
[Monoid α]
{a b : α}
(hfin : FiniteMultiplicity a b)
:
theorem
emultiplicity_le_emultiplicity_iff
{α : Type u_1}
{β : Type u_2}
[Monoid α]
[Monoid β]
{a b : α}
{c d : β}
:
theorem
FiniteMultiplicity.multiplicity_le_multiplicity_iff
{α : Type u_1}
{β : Type u_2}
[Monoid α]
[Monoid β]
{a b : α}
{c d : β}
(hab : FiniteMultiplicity a b)
(hcd : FiniteMultiplicity c d)
:
theorem
le_emultiplicity_map
{α : Type u_1}
{β : Type u_2}
[Monoid α]
[Monoid β]
{F : Type u_3}
[FunLike F α β]
[MonoidHomClass F α β]
(f : F)
{a b : α}
:
theorem
emultiplicity_map_eq
{α : Type u_1}
{β : Type u_2}
[Monoid α]
[Monoid β]
{F : Type u_3}
[EquivLike F α β]
[MulEquivClass F α β]
(f : F)
{a b : α}
:
theorem
multiplicity_map_eq
{α : Type u_1}
{β : Type u_2}
[Monoid α]
[Monoid β]
{F : Type u_3}
[EquivLike F α β]
[MulEquivClass F α β]
(f : F)
{a b : α}
:
theorem
emultiplicity_le_emultiplicity_of_dvd_right
{α : Type u_1}
[Monoid α]
{a b c : α}
(h : b ∣ c)
:
theorem
emultiplicity_eq_of_associated_right
{α : Type u_1}
[Monoid α]
{a b c : α}
(h : Associated b c)
:
theorem
multiplicity_eq_of_associated_right
{α : Type u_1}
[Monoid α]
{a b c : α}
(h : Associated b c)
:
Alias of the reverse direction of dvd_iff_multiplicity_pos
.
theorem
FiniteMultiplicity.mul_right
{α : Type u_1}
[CommMonoid α]
{a b c : α}
(hf : FiniteMultiplicity a (b * c))
:
theorem
emultiplicity_of_isUnit_right
{α : Type u_1}
[CommMonoid α]
{a b : α}
(ha : ¬IsUnit a)
(hb : IsUnit b)
:
theorem
multiplicity_of_isUnit_right
{α : Type u_1}
[CommMonoid α]
{a b : α}
(ha : ¬IsUnit a)
(hb : IsUnit b)
:
theorem
emultiplicity_of_unit_right
{α : Type u_1}
[CommMonoid α]
{a : α}
(ha : ¬IsUnit a)
(u : αˣ)
:
theorem
multiplicity_of_unit_right
{α : Type u_1}
[CommMonoid α]
{a : α}
(ha : ¬IsUnit a)
(u : αˣ)
:
theorem
emultiplicity_le_emultiplicity_of_dvd_left
{α : Type u_1}
[CommMonoid α]
{a b c : α}
(hdvd : a ∣ b)
:
theorem
emultiplicity_eq_of_associated_left
{α : Type u_1}
[CommMonoid α]
{a b c : α}
(h : Associated a b)
:
theorem
multiplicity_eq_of_associated_left
{α : Type u_1}
[CommMonoid α]
{a b c : α}
(h : Associated a b)
:
theorem
FiniteMultiplicity.ne_zero
{α : Type u_1}
[MonoidWithZero α]
{a b : α}
(h : FiniteMultiplicity a b)
:
@[simp]
@[simp]
theorem
emultiplicity_zero_eq_zero_of_ne_zero
{α : Type u_1}
[MonoidWithZero α]
(a : α)
(ha : a ≠ 0)
:
@[simp]
theorem
multiplicity_zero_eq_zero_of_ne_zero
{α : Type u_1}
[MonoidWithZero α]
(a : α)
(ha : a ≠ 0)
:
theorem
FiniteMultiplicity.or_of_add
{α : Type u_1}
[Semiring α]
{p a b : α}
(hf : FiniteMultiplicity p (a + b))
:
@[simp]
theorem
FiniteMultiplicity.neg
{α : Type u_1}
[Ring α]
{a b : α}
:
FiniteMultiplicity a b → FiniteMultiplicity a (-b)
Alias of the reverse direction of FiniteMultiplicity.neg_iff
.
@[simp]
@[simp]
theorem
emultiplicity_add_of_gt
{α : Type u_1}
[Ring α]
{p a b : α}
(h : emultiplicity p b < emultiplicity p a)
:
theorem
FiniteMultiplicity.multiplicity_add_of_gt
{α : Type u_1}
[Ring α]
{p a b : α}
(hf : FiniteMultiplicity p b)
(h : multiplicity p b < multiplicity p a)
:
theorem
emultiplicity_sub_of_gt
{α : Type u_1}
[Ring α]
{p a b : α}
(h : emultiplicity p b < emultiplicity p a)
:
theorem
multiplicity_sub_of_gt
{α : Type u_1}
[Ring α]
{p a b : α}
(h : multiplicity p b < multiplicity p a)
(hfin : FiniteMultiplicity p b)
:
theorem
emultiplicity_add_eq_min
{α : Type u_1}
[Ring α]
{p a b : α}
(h : emultiplicity p a ≠ emultiplicity p b)
:
theorem
multiplicity_add_eq_min
{α : Type u_1}
[Ring α]
{p a b : α}
(ha : FiniteMultiplicity p a)
(hb : FiniteMultiplicity p b)
(h : multiplicity p a ≠ multiplicity p b)
:
theorem
Prime.finiteMultiplicity_mul
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p a b : α}
(hp : Prime p)
:
FiniteMultiplicity p a → FiniteMultiplicity p b → FiniteMultiplicity p (a * b)
theorem
FiniteMultiplicity.mul_iff
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p a b : α}
(hp : Prime p)
:
theorem
FiniteMultiplicity.pow
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p a : α}
(hp : Prime p)
(hfin : FiniteMultiplicity p a)
{k : ℕ}
:
FiniteMultiplicity p (a ^ k)
@[simp]
@[simp]
theorem
FiniteMultiplicity.emultiplicity_self
{α : Type u_1}
[CancelCommMonoidWithZero α]
{a : α}
(hfin : FiniteMultiplicity a a)
:
theorem
multiplicity_mul
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p a b : α}
(hp : Prime p)
(hfin : FiniteMultiplicity p (a * b))
:
theorem
Finset.emultiplicity_prod
{α : Type u_1}
[CancelCommMonoidWithZero α]
{β : Type u_3}
{p : α}
(hp : Prime p)
(s : Finset β)
(f : β → α)
:
theorem
emultiplicity_pow
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p a : α}
(hp : Prime p)
{k : ℕ}
:
theorem
FiniteMultiplicity.multiplicity_pow
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p a : α}
(hp : Prime p)
(ha : FiniteMultiplicity p a)
{k : ℕ}
:
theorem
emultiplicity_pow_self
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p : α}
(h0 : p ≠ 0)
(hu : ¬IsUnit p)
(n : ℕ)
:
theorem
multiplicity_pow_self
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p : α}
(h0 : p ≠ 0)
(hu : ¬IsUnit p)
(n : ℕ)
:
theorem
emultiplicity_pow_self_of_prime
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p : α}
(hp : Prime p)
(n : ℕ)
:
theorem
multiplicity_pow_self_of_prime
{α : Type u_1}
[CancelCommMonoidWithZero α]
{p : α}
(hp : Prime p)
(n : ℕ)
:
theorem
multiplicity_eq_zero_of_coprime
{p a b : ℕ}
(hp : p ≠ 1)
(hle : multiplicity p a ≤ multiplicity p b)
(hab : a.Coprime b)
:
Equations
- x✝¹.decidableFiniteMultiplicity x✝ = decidable_of_iff' (x✝¹ ≠ 1 ∧ 0 < x✝) ⋯
Equations
- x✝¹.decidableMultiplicityFinite x✝ = decidable_of_iff' (x✝¹.natAbs ≠ 1 ∧ x✝ ≠ 0) ⋯