Associated, prime, and irreducible elements.
theorem
is_unit_of_dvd_unit
{α : Type u_1}
[comm_monoid α]
{x y : α}
(xy : x ∣ y)
(hu : is_unit y) :
is_unit x
theorem
prime.div_or_div
{α : Type u_1}
[comm_monoid_with_zero α]
{p : α}
(hp : prime p)
{a b : α}
(h : p ∣ a * b) :
theorem
prime.dvd_of_dvd_pow
{α : Type u_1}
[comm_monoid_with_zero α]
{p : α}
(hp : prime p)
{a : α}
{n : ℕ}
(h : p ∣ a ^ n) :
p ∣ a
theorem
exists_mem_multiset_dvd_of_prime
{α : Type u_1}
[comm_monoid_with_zero α]
{s : multiset α}
{p : α}
(hp : prime p)
(a : p ∣ s.prod) :
theorem
left_dvd_or_dvd_right_of_dvd_prime_mul
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{a b p : α}
(a_1 : prime p)
(a_2 : a ∣ p * b) :
@[class]
irreducible p
states that p
is non-unit and only factors into units.
We explicitly avoid stating that p
is non-zero, this would require a semiring. Assuming only a
monoid allows us to reuse irreducible for associated elements.
Instances
theorem
irreducible.is_unit_or_is_unit
{α : Type u_1}
[monoid α]
{p : α}
(hp : irreducible p)
{a b : α}
(h : p = a * b) :
theorem
irreducible_of_prime
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{p : α}
(hp : prime p) :
theorem
dvd_symm_of_irreducible
{α : Type u_1}
[monoid α]
{p q : α}
(hp : irreducible p)
(hq : irreducible q)
(a : p ∣ q) :
q ∣ p
If p
and q
are irreducible, then p ∣ q
implies q ∣ p
.
theorem
dvd_symm_iff_of_irreducible
{α : Type u_1}
[monoid α]
{p q : α}
(hp : irreducible p)
(hq : irreducible q) :
Two elements of a monoid
are associated
if one of them is another one
multiplied by a unit on the right.
theorem
associated.trans
{α : Type u_1}
[monoid α]
{x y z : α}
(a : associated x y)
(a_1 : associated y z) :
associated x z
The setoid of the relation x ~ᵤ y
iff there is a unit u
such that x * u = y
Equations
- associated.setoid α = {r := associated _inst_1, iseqv := _}
theorem
associated_zero_iff_eq_zero
{α : Type u_1}
[monoid_with_zero α]
(a : α) :
associated a 0 ↔ a = 0
theorem
associated_one_of_mul_eq_one
{α : Type u_1}
[comm_monoid α]
{a : α}
(b : α)
(hab : a * b = 1) :
associated a 1
theorem
associated_one_of_associated_mul_one
{α : Type u_1}
[comm_monoid α]
{a b : α}
(a_1 : associated (a * b) 1) :
associated a 1
theorem
associated_mul_mul
{α : Type u_1}
[comm_monoid α]
{a₁ a₂ b₁ b₂ : α}
(a : associated a₁ b₁)
(a_1 : associated a₂ b₂) :
associated (a₁ * a₂) (b₁ * b₂)
theorem
associated_of_dvd_dvd
{α : Type u_1}
[cancel_monoid_with_zero α]
{a b : α}
(hab : a ∣ b)
(hba : b ∣ a) :
associated a b
theorem
dvd_dvd_iff_associated
{α : Type u_1}
[cancel_monoid_with_zero α]
{a b : α} :
a ∣ b ∧ b ∣ a ↔ associated a b
theorem
exists_associated_mem_of_dvd_prod
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{p : α}
(hp : prime p)
{s : multiset α}
(a : ∀ (r : α), r ∈ s → prime r)
(a_1 : p ∣ s.prod) :
∃ (q : α) (H : q ∈ s), associated p q
theorem
dvd_iff_dvd_of_rel_left
{α : Type u_1}
[comm_monoid_with_zero α]
{a b c : α}
(h : associated a b) :
theorem
dvd_iff_dvd_of_rel_right
{α : Type u_1}
[comm_monoid_with_zero α]
{a b c : α}
(h : associated b c) :
theorem
eq_zero_iff_of_associated
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α}
(h : associated a b) :
theorem
ne_zero_iff_of_associated
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α}
(h : associated a b) :
theorem
prime_of_associated
{α : Type u_1}
[comm_monoid_with_zero α]
{p q : α}
(h : associated p q)
(hp : prime p) :
prime q
theorem
prime_iff_of_associated
{α : Type u_1}
[comm_monoid_with_zero α]
{p q : α}
(h : associated p q) :
theorem
irreducible_of_associated
{α : Type u_1}
[comm_monoid_with_zero α]
{p q : α}
(h : associated p q)
(hp : irreducible p) :
theorem
irreducible_iff_of_associated
{α : Type u_1}
[comm_monoid_with_zero α]
{p q : α}
(h : associated p q) :
irreducible p ↔ irreducible q
theorem
associated_mul_left_cancel
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{a b c d : α}
(h : associated (a * b) (c * d))
(h₁ : associated a c)
(ha : a ≠ 0) :
associated b d
theorem
associated_mul_right_cancel
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{a b c d : α}
(a_1 : associated (a * b) (c * d))
(a_2 : associated b d)
(a_3 : b ≠ 0) :
associated a c
theorem
associated_iff_eq
{α : Type u_1}
[monoid α]
[unique (units α)]
{x y : α} :
associated x y ↔ x = y
The quotient of a monoid by the associated
relation. Two elements x
and y
are associated iff there is a unit u
such that x * u = y
. There is a natural
monoid structure on associates α
.
Equations
- associates α = quotient (associated.setoid α)
The canonical quotient map from a monoid α
into the associates
of α
Equations
- associates.mk a = ⟦a⟧
@[instance]
theorem
associates.mk_eq_mk_iff_associated
{α : Type u_1}
[monoid α]
{a b : α} :
associates.mk a = associates.mk b ↔ associated a b
theorem
associates.quot_mk_eq_mk
{α : Type u_1}
[monoid α]
(a : α) :
quot.mk setoid.r a = associates.mk a
theorem
associates.forall_associated
{α : Type u_1}
[monoid α]
{p : associates α → Prop} :
(∀ (a : associates α), p a) ↔ ∀ (a : α), p (associates.mk a)
@[instance]
@[instance]
Equations
- associates.has_bot = {bot := 1}
theorem
associates.exists_rep
{α : Type u_1}
[monoid α]
(a : associates α) :
∃ (a0 : α), associates.mk a0 = a
@[instance]
Equations
- associates.has_mul = {mul := λ (a' b' : associates α), quotient.lift_on₂ a' b' (λ (a b : α), ⟦a * b⟧) associates.has_mul._proof_1}
theorem
associates.mk_mul_mk
{α : Type u_1}
[comm_monoid α]
{x y : α} :
(associates.mk x) * associates.mk y = associates.mk (x * y)
@[instance]
Equations
- associates.comm_monoid = {mul := has_mul.mul associates.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, mul_comm := _}
@[instance]
Equations
- associates.preorder = {le := has_dvd.dvd monoid_has_dvd, lt := λ (a b : associates α), a ∣ b ∧ ¬b ∣ a, le_refl := _, le_trans := _, lt_iff_le_not_le := _}
theorem
associates.mk_pow
{α : Type u_1}
[comm_monoid α]
(a : α)
(n : ℕ) :
associates.mk (a ^ n) = associates.mk a ^ n
theorem
associates.rel_associated_iff_map_eq_map
{α : Type u_1}
[comm_monoid α]
{p q : multiset α} :
@[instance]
Equations
- associates.unique_units = {to_inhabited := {default := 1}, uniq := _}
theorem
associates.is_unit_mk
{α : Type u_1}
[comm_monoid α]
{a : α} :
is_unit (associates.mk a) ↔ is_unit a
theorem
associates.mul_mono
{α : Type u_1}
[comm_monoid α]
{a b c d : associates α}
(h₁ : a ≤ b)
(h₂ : c ≤ d) :
theorem
associates.prod_le_prod
{α : Type u_1}
[comm_monoid α]
{p q : multiset (associates α)}
(h : p ≤ q) :
@[instance]
@[instance]
Equations
- associates.has_top = {top := 0}
@[simp]
theorem
associates.mk_eq_zero
{α : Type u_1}
[comm_monoid_with_zero α]
{a : α} :
associates.mk a = 0 ↔ a = 0
@[instance]
Equations
- associates.comm_monoid_with_zero = {mul := comm_monoid.mul associates.comm_monoid, mul_assoc := _, one := comm_monoid.one associates.comm_monoid, one_mul := _, mul_one := _, mul_comm := _, zero := 0, zero_mul := _, mul_zero := _}
@[instance]
def
associates.nontrivial
{α : Type u_1}
[comm_monoid_with_zero α]
[nontrivial α] :
nontrivial (associates α)
theorem
associates.exists_non_zero_rep
{α : Type u_1}
[comm_monoid_with_zero α]
{a : associates α}
(a_1 : a ≠ 0) :
∃ (a0 : α), a0 ≠ 0 ∧ associates.mk a0 = a
theorem
associates.dvd_of_mk_le_mk
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α}
(a_1 : associates.mk a ≤ associates.mk b) :
a ∣ b
theorem
associates.mk_le_mk_of_dvd
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α}
(a_1 : a ∣ b) :
theorem
associates.mk_le_mk_iff_dvd_iff
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α} :
associates.mk a ≤ associates.mk b ↔ a ∣ b
theorem
associates.mk_dvd_mk
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α} :
associates.mk a ∣ associates.mk b ↔ a ∣ b
theorem
associates.prime.le_or_le
{α : Type u_1}
[comm_monoid_with_zero α]
{p : associates α}
(hp : prime p)
{a b : associates α}
(h : p ≤ a * b) :
theorem
associates.exists_mem_multiset_le_of_prime
{α : Type u_1}
[comm_monoid_with_zero α]
{s : multiset (associates α)}
{p : associates α}
(hp : prime p)
(a : p ≤ s.prod) :
∃ (a : associates α) (H : a ∈ s), p ≤ a
theorem
associates.prime_mk
{α : Type u_1}
[comm_monoid_with_zero α]
(p : α) :
prime (associates.mk p) ↔ prime p
theorem
associates.irreducible_mk
{α : Type u_1}
[comm_monoid_with_zero α]
(a : α) :
irreducible (associates.mk a) ↔ irreducible a
theorem
associates.mk_dvd_not_unit_mk_iff
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : α} :
dvd_not_unit (associates.mk a) (associates.mk b) ↔ dvd_not_unit a b
theorem
associates.dvd_not_unit_of_lt
{α : Type u_1}
[comm_monoid_with_zero α]
{a b : associates α}
(hlt : a < b) :
dvd_not_unit a b
@[instance]
Equations
- associates.partial_order = {le := preorder.le associates.preorder, lt := preorder.lt associates.preorder, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _}
@[instance]
Equations
- associates.order_bot = {bot := 1, le := partial_order.le associates.partial_order, lt := partial_order.lt associates.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, bot_le := _}
@[instance]
Equations
- associates.order_top = {top := 0, le := partial_order.le associates.partial_order, lt := partial_order.lt associates.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_top := _}
@[instance]
theorem
associates.irreducible_iff_prime_iff
{α : Type u_1}
[comm_cancel_monoid_with_zero α] :
(∀ (a : α), irreducible a ↔ prime a) ↔ ∀ (a : associates α), irreducible a ↔ prime a
theorem
associates.eq_of_mul_eq_mul_left
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
(a b c : associates α)
(a_1 : a ≠ 0)
(a_2 : a * b = a * c) :
b = c
theorem
associates.eq_of_mul_eq_mul_right
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
(a b c : associates α)
(a_1 : b ≠ 0)
(a_2 : a * b = c * b) :
a = c
theorem
associates.le_of_mul_le_mul_left
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
(a b c : associates α)
(ha : a ≠ 0)
(a_1 : a * b ≤ a * c) :
b ≤ c
theorem
associates.one_or_eq_of_le_of_prime
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
(p m : associates α)
(a : prime p)
(a_1 : m ≤ p) :
@[instance]
Equations
- associates.comm_cancel_monoid_with_zero = {mul := comm_monoid_with_zero.mul infer_instance, mul_assoc := _, one := comm_monoid_with_zero.one infer_instance, one_mul := _, mul_one := _, mul_comm := _, zero := comm_monoid_with_zero.zero infer_instance, zero_mul := _, mul_zero := _, mul_left_cancel_of_ne_zero := _, mul_right_cancel_of_ne_zero := _}
theorem
associates.dvd_not_unit_iff_lt
{α : Type u_1}
[comm_cancel_monoid_with_zero α]
{a b : associates α} :
dvd_not_unit a b ↔ a < b