theorem
nat.find_le
{p q : ℕ → Prop}
[decidable_pred p]
[decidable_pred q]
(h : ∀ (n : ℕ), q n → p n)
(hp : ∃ (n : ℕ), p n)
(hq : ∃ (n : ℕ), q n) :
multiplicity a b
returns the largest natural number n
such that
a ^ n ∣ b
, as an enat
or natural with infinity. If ∀ n, a ^ n ∣ b
,
then it returns ⊤
theorem
multiplicity.finite_iff_dom
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α} :
multiplicity.finite a b ↔ (multiplicity a b).dom
theorem
multiplicity.not_unit_of_finite
{α : Type u_1}
[comm_monoid α]
{a b : α} :
multiplicity.finite a b → ¬is_unit a
theorem
multiplicity.finite_of_finite_mul_left
{α : Type u_1}
[comm_monoid α]
{a b c : α} :
multiplicity.finite a (b * c) → multiplicity.finite a c
theorem
multiplicity.finite_of_finite_mul_right
{α : Type u_1}
[comm_monoid α]
{a b c : α} :
multiplicity.finite a (b * c) → multiplicity.finite a b
theorem
multiplicity.pow_dvd_of_le_multiplicity
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{k : ℕ} :
↑k ≤ multiplicity a b → a ^ k ∣ b
theorem
multiplicity.pow_multiplicity_dvd
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
(h : multiplicity.finite a b) :
a ^ (multiplicity a b).get h ∣ b
theorem
multiplicity.is_greatest
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{m : ℕ} :
theorem
multiplicity.is_greatest'
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{m : ℕ}
(h : multiplicity.finite a b) :
theorem
multiplicity.unique
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{k : ℕ} :
theorem
multiplicity.unique'
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{k : ℕ}
(hk : a ^ k ∣ b)
(hsucc : ¬a ^ (k + 1) ∣ b) :
k = (multiplicity a b).get _
theorem
multiplicity.le_multiplicity_of_pow_dvd
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{k : ℕ} :
a ^ k ∣ b → ↑k ≤ multiplicity a b
theorem
multiplicity.pow_dvd_iff_le_multiplicity
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{k : ℕ} :
theorem
multiplicity.multiplicity_lt_iff_neg_dvd
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{k : ℕ} :
theorem
multiplicity.eq_some_iff
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α}
{n : ℕ} :
theorem
multiplicity.eq_top_iff
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α} :
theorem
multiplicity.one_right
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a : α} :
¬is_unit a → multiplicity a 1 = 0
@[simp]
theorem
multiplicity.get_one_right
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a : α}
(ha : multiplicity.finite a 1) :
(multiplicity a 1).get ha = 0
@[simp]
theorem
multiplicity.multiplicity_unit
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a : α}
(b : α) :
is_unit a → multiplicity a b = ⊤
@[simp]
theorem
multiplicity.one_left
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
(b : α) :
multiplicity 1 b = ⊤
theorem
multiplicity.multiplicity_eq_zero_of_not_dvd
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α} :
¬a ∣ b → multiplicity a b = 0
theorem
multiplicity.eq_top_iff_not_finite
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α} :
multiplicity a b = ⊤ ↔ ¬multiplicity.finite a b
theorem
multiplicity.multiplicity_le_multiplicity_iff
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b c d : α} :
multiplicity a b ≤ multiplicity c d ↔ ∀ (n : ℕ), a ^ n ∣ b → c ^ n ∣ d
theorem
multiplicity.dvd_of_multiplicity_pos
{α : Type u_1}
[comm_monoid α]
[decidable_rel has_dvd.dvd]
{a b : α} :
0 < multiplicity a b → a ∣ b
@[instance]
Equations
- multiplicity.decidable_nat = λ (a b : ℕ), decidable_of_iff (a ≠ 1 ∧ 0 < b) _
@[instance]
Equations
- multiplicity.decidable_int = λ (a b : ℤ), decidable_of_iff (a.nat_abs ≠ 1 ∧ b ≠ 0) _
theorem
multiplicity.ne_zero_of_finite
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α} :
multiplicity.finite a b → b ≠ 0
@[simp]
theorem
multiplicity.zero
{α : Type u_1}
[comm_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
(a : α) :
multiplicity a 0 = ⊤
theorem
multiplicity.min_le_multiplicity_add
{α : Type u_1}
[comm_semiring α]
[decidable_rel has_dvd.dvd]
{p a b : α} :
min (multiplicity p a) (multiplicity p b) ≤ multiplicity p (a + b)
@[simp]
theorem
multiplicity.neg
{α : Type u_1}
[comm_ring α]
[decidable_rel has_dvd.dvd]
(a b : α) :
multiplicity a (-b) = multiplicity a b
theorem
multiplicity.multiplicity_add_of_gt
{α : Type u_1}
[comm_ring α]
[decidable_rel has_dvd.dvd]
{p a b : α} :
multiplicity p b < multiplicity p a → multiplicity p (a + b) = multiplicity p b
theorem
multiplicity.multiplicity_sub_of_gt
{α : Type u_1}
[comm_ring α]
[decidable_rel has_dvd.dvd]
{p a b : α} :
multiplicity p b < multiplicity p a → multiplicity p (a - b) = multiplicity p b
theorem
multiplicity.multiplicity_add_eq_min
{α : Type u_1}
[comm_ring α]
[decidable_rel has_dvd.dvd]
{p a b : α} :
multiplicity p a ≠ multiplicity p b → multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b)
theorem
multiplicity.finite_mul
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{p a b : α} :
prime p → multiplicity.finite p a → multiplicity.finite p b → multiplicity.finite p (a * b)
theorem
multiplicity.finite_mul_iff
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{p a b : α} :
prime p → (multiplicity.finite p (a * b) ↔ multiplicity.finite p a ∧ multiplicity.finite p b)
theorem
multiplicity.finite_pow
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{p a : α}
(hp : prime p)
{k : ℕ} :
multiplicity.finite p a → multiplicity.finite p (a ^ k)
@[simp]
theorem
multiplicity.multiplicity_self
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{a : α} :
¬is_unit a → a ≠ 0 → multiplicity a a = 1
@[simp]
theorem
multiplicity.get_multiplicity_self
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{a : α}
(ha : multiplicity.finite a a) :
(multiplicity a a).get ha = 1
theorem
multiplicity.mul'
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{p a b : α}
(hp : prime p)
(h : (multiplicity p (a * b)).dom) :
(multiplicity p (a * b)).get h = (multiplicity p a).get _ + (multiplicity p b).get _
theorem
multiplicity.mul
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{p a b : α} :
prime p → multiplicity p (a * b) = multiplicity p a + multiplicity p b
theorem
multiplicity.finset.prod
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{β : Type u_2}
{p : α}
(hp : prime p)
(s : finset β)
(f : β → α) :
multiplicity p (s.prod (λ (x : β), f x)) = s.sum (λ (x : β), multiplicity p (f x))
theorem
multiplicity.pow'
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{p a : α}
(hp : prime p)
(ha : multiplicity.finite p a)
{k : ℕ} :
(multiplicity p (a ^ k)).get _ = k * (multiplicity p a).get ha
theorem
multiplicity.pow
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{p a : α}
(hp : prime p)
{k : ℕ} :
multiplicity p (a ^ k) = k •ℕ multiplicity p a
theorem
multiplicity.multiplicity_pow_self
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{p : α}
(h0 : p ≠ 0)
(hu : ¬is_unit p)
(n : ℕ) :
multiplicity p (p ^ n) = ↑n
theorem
multiplicity.multiplicity_pow_self_of_prime
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
[decidable_rel has_dvd.dvd]
{p : α}
(hp : prime p)
(n : ℕ) :
multiplicity p (p ^ n) = ↑n
theorem
multiplicity_eq_zero_of_coprime
{p a b : ℕ} :
p ≠ 1 → multiplicity p a ≤ multiplicity p b → a.coprime b → multiplicity p a = 0