Associated elements. #
In this file we define an equivalence relation Associated
saying that two elements of a monoid differ by a multiplication by a unit.
Then we show that the quotient type Associates is a monoid
and prove basic properties of this quotient.
Two elements of a Monoid are Associated if one of them is another one
multiplied by a unit on the right.
Instances For
@[simp]
theorem
Associated.trans
{M : Type u_1}
[Monoid M]
{x y z : M}
:
Associated x y โ Associated y z โ Associated x z
@[implicit_reducible]
The setoid of the relation x ~แตค y iff there is a unit u such that x * u = y
Instances For
theorem
Associated.map
{M : Type u_2}
{N : Type u_3}
[Monoid M]
[Monoid N]
{F : Type u_4}
[FunLike F M N]
[MonoidHomClass F M N]
(f : F)
{x y : M}
(ha : Associated x y)
:
Associated (f x) (f y)
@[simp]
@[simp]
theorem
associated_zero_iff_eq_zero
{M : Type u_1}
[MonoidWithZero M]
(a : M)
:
Associated a 0 โ a = 0
theorem
associated_one_of_mul_eq_one
{M : Type u_1}
[CommMonoid M]
{a : M}
(b : M)
(hab : a * b = 1)
:
Associated a 1
theorem
associated_one_of_associated_mul_one
{M : Type u_1}
[CommMonoid M]
{a b : M}
:
Associated (a * b) 1 โ Associated a 1
theorem
associated_mul_unit_left
{N : Type u_2}
[Monoid N]
(a u : N)
(hu : IsUnit u)
:
Associated (a * u) a
theorem
associated_unit_mul_left
{N : Type u_2}
[CommMonoid N]
(a u : N)
(hu : IsUnit u)
:
Associated (u * a) a
theorem
associated_mul_unit_right
{N : Type u_2}
[Monoid N]
(a u : N)
(hu : IsUnit u)
:
Associated a (a * u)
theorem
associated_unit_mul_right
{N : Type u_2}
[CommMonoid N]
(a u : N)
(hu : IsUnit u)
:
Associated a (u * a)
theorem
associated_mul_isUnit_left_iff
{N : Type u_2}
[Monoid N]
{a u b : N}
(hu : IsUnit u)
:
Associated (a * u) b โ Associated a b
theorem
associated_isUnit_mul_left_iff
{N : Type u_2}
[CommMonoid N]
{u a b : N}
(hu : IsUnit u)
:
Associated (u * a) b โ Associated a b
theorem
associated_mul_isUnit_right_iff
{N : Type u_2}
[Monoid N]
{a b u : N}
(hu : IsUnit u)
:
Associated a (b * u) โ Associated a b
theorem
associated_isUnit_mul_right_iff
{N : Type u_2}
[CommMonoid N]
{a u b : N}
(hu : IsUnit u)
:
Associated a (u * b) โ Associated a b
@[simp]
theorem
associated_mul_unit_left_iff
{N : Type u_2}
[Monoid N]
{a b : N}
{u : Nหฃ}
:
Associated (a * โu) b โ Associated a b
@[simp]
theorem
associated_unit_mul_left_iff
{N : Type u_2}
[CommMonoid N]
{a b : N}
{u : Nหฃ}
:
Associated (โu * a) b โ Associated a b
@[simp]
theorem
associated_mul_unit_right_iff
{N : Type u_2}
[Monoid N]
{a b : N}
{u : Nหฃ}
:
Associated a (b * โu) โ Associated a b
@[simp]
theorem
associated_unit_mul_right_iff
{N : Type u_2}
[CommMonoid N]
{a b : N}
{u : Nหฃ}
:
Associated a (โu * b) โ Associated a b
theorem
Associated.mul_left
{M : Type u_1}
[Monoid M]
(a : M)
{b c : M}
(h : Associated b c)
:
Associated (a * b) (a * c)
theorem
Associated.mul_right
{M : Type u_1}
[CommMonoid M]
{a b : M}
(h : Associated a b)
(c : M)
:
Associated (a * c) (b * c)
theorem
Associated.mul_mul
{M : Type u_1}
[CommMonoid M]
{aโ aโ bโ bโ : M}
(hโ : Associated aโ bโ)
(hโ : Associated aโ bโ)
:
Associated (aโ * aโ) (bโ * bโ)
theorem
Associated.pow_pow
{M : Type u_1}
[CommMonoid M]
{a b : M}
{n : โ}
(h : Associated a b)
:
Associated (a ^ n) (b ^ n)
theorem
Associated.dvd_dvd
{M : Type u_1}
[Monoid M]
{a b : M}
(h : Associated a b)
:
a โฃ b โง b โฃ a
theorem
associated_of_dvd_dvd
{M : Type u_1}
[MonoidWithZero M]
[IsLeftCancelMulZero M]
{a b : M}
(hab : a โฃ b)
(hba : b โฃ a)
:
Associated a b
theorem
dvd_dvd_iff_associated
{M : Type u_1}
[MonoidWithZero M]
[IsLeftCancelMulZero M]
{a b : M}
:
a โฃ b โง b โฃ a โ Associated a b
@[implicit_reducible]
instance
instDecidableRelAssociatedOfIsLeftCancelMulZeroOfDvd
{M : Type u_1}
[MonoidWithZero M]
[IsLeftCancelMulZero M]
[DecidableRel fun (x1 x2 : M) => x1 โฃ x2]
:
DecidableRel fun (x1 x2 : M) => Associated x1 x2
theorem
Associated.dvd_iff_dvd_left
{M : Type u_1}
[Monoid M]
{a b c : M}
(h : Associated a b)
:
a โฃ c โ b โฃ c
theorem
Associated.dvd_iff_dvd_right
{M : Type u_1}
[Monoid M]
{a b c : M}
(h : Associated b c)
:
a โฃ b โ a โฃ c
theorem
Associated.eq_zero_iff
{M : Type u_1}
[MonoidWithZero M]
{a b : M}
(h : Associated a b)
:
a = 0 โ b = 0
theorem
Associated.ne_zero_iff
{M : Type u_1}
[MonoidWithZero M]
{a b : M}
(h : Associated a b)
:
a โ 0 โ b โ 0
theorem
Associated.prime
{M : Type u_1}
[CommMonoidWithZero M]
{p q : M}
(h : Associated p q)
(hp : Prime p)
:
Prime q
@[simp]
theorem
Irreducible.dvd_iff
{M : Type u_1}
[Monoid M]
{x y : M}
(hx : Irreducible x)
:
y โฃ x โ IsUnit y โจ Associated x y
theorem
Irreducible.associated_of_dvd
{M : Type u_1}
[Monoid M]
{p q : M}
(p_irr : Irreducible p)
(q_irr : Irreducible q)
(dvd : p โฃ q)
:
Associated p q
theorem
Irreducible.dvd_irreducible_iff_associated
{M : Type u_1}
[Monoid M]
{p q : M}
(pp : Irreducible p)
(qp : Irreducible q)
:
p โฃ q โ Associated p q
theorem
Prime.associated_of_dvd
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p q : M}
(p_prime : Prime p)
(q_prime : Prime q)
(dvd : p โฃ q)
:
Associated p q
theorem
Prime.dvd_prime_iff_associated
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p q : M}
(pp : Prime p)
(qp : Prime q)
:
p โฃ q โ Associated p q
theorem
Irreducible.isUnit_iff_not_associated_of_dvd
{M : Type u_1}
[Monoid M]
{x y : M}
(hx : Irreducible x)
(hy : y โฃ x)
:
IsUnit y โ ยฌAssociated x y
theorem
Associated.irreducible
{M : Type u_1}
[Monoid M]
{p q : M}
(h : Associated p q)
(hp : Irreducible p)
:
theorem
Associated.irreducible_iff
{M : Type u_1}
[Monoid M]
{p q : M}
(h : Associated p q)
:
Irreducible p โ Irreducible q
theorem
Associated.of_mul_left
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{a b c d : M}
(h : Associated (a * b) (c * d))
(hโ : Associated a c)
(ha : a โ 0)
:
Associated b d
theorem
Associated.of_mul_right
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{a b c d : M}
:
Associated (a * b) (c * d) โ Associated b d โ b โ 0 โ Associated a c
theorem
Associated.of_pow_associated_of_prime
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{pโ pโ : M}
{kโ kโ : โ}
(hpโ : Prime pโ)
(hpโ : Prime pโ)
(hkโ : 0 < kโ)
(h : Associated (pโ ^ kโ) (pโ ^ kโ))
:
Associated pโ pโ
theorem
Associated.of_pow_associated_of_prime'
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{pโ pโ : M}
{kโ kโ : โ}
(hpโ : Prime pโ)
(hpโ : Prime pโ)
(hkโ : 0 < kโ)
(h : Associated (pโ ^ kโ) (pโ ^ kโ))
:
Associated pโ pโ
theorem
Irreducible.isRelPrime_iff_not_dvd
{M : Type u_1}
[Monoid M]
{p n : M}
(hp : Irreducible p)
:
IsRelPrime p n โ ยฌp โฃ n
See also Irreducible.coprime_iff_not_dvd.
theorem
Irreducible.dvd_or_isRelPrime
{M : Type u_1}
[Monoid M]
{p n : M}
(hp : Irreducible p)
:
p โฃ n โจ IsRelPrime p n
theorem
associated_iff_eq
{M : Type u_1}
[Monoid M]
[Subsingleton Mหฃ]
{x y : M}
:
Associated x y โ x = y
theorem
prime_dvd_prime_iff_eq
{M : Type u_2}
[CommMonoidWithZero M]
[IsCancelMulZero M]
[Subsingleton Mหฃ]
{p q : M}
(pp : Prime p)
(qp : Prime q)
:
p โฃ q โ p = q
theorem
eq_of_prime_pow_eq
{R : Type u_2}
[CommMonoidWithZero R]
[IsCancelMulZero R]
[Subsingleton Rหฃ]
{pโ pโ : R}
{kโ kโ : โ}
(hpโ : Prime pโ)
(hpโ : Prime pโ)
(hkโ : 0 < kโ)
(h : pโ ^ kโ = pโ ^ kโ)
:
pโ = pโ
theorem
eq_of_prime_pow_eq'
{R : Type u_2}
[CommMonoidWithZero R]
[IsCancelMulZero R]
[Subsingleton Rหฃ]
{pโ pโ : R}
{kโ kโ : โ}
(hpโ : Prime pโ)
(hpโ : Prime pโ)
(hkโ : 0 < kโ)
(h : pโ ^ kโ = pโ ^ kโ)
:
pโ = pโ
@[reducible, inline]
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 M.
Instances For
@[reducible, inline]
The canonical quotient map from a monoid M into the Associates of M
Instances For
@[implicit_reducible]
theorem
Associates.mk_eq_mk_iff_associated
{M : Type u_1}
[Monoid M]
{a b : M}
:
Associates.mk a = Associates.mk b โ Associated a b
theorem
Associates.quot_mk_eq_mk
{M : Type u_1}
[Monoid M]
(a : M)
:
Quot.mk (โ(Associated.setoid M)) a = Associates.mk a
@[simp]
theorem
Associates.quot_out
{M : Type u_1}
[Monoid M]
(a : Associates M)
:
Associates.mk (Quot.out a) = a
theorem
Associates.mk_quot_out
{M : Type u_1}
[Monoid M]
(a : M)
:
Associated (Quot.out (Associates.mk a)) a
theorem
Associates.forall_associated
{M : Type u_1}
[Monoid M]
{p : Associates M โ Prop}
:
(โ (a : Associates M), p a) โ โ (a : M), p (Associates.mk a)
@[implicit_reducible]
@[simp]
@[simp]
@[implicit_reducible]
theorem
Associates.exists_rep
{M : Type u_1}
[Monoid M]
(a : Associates M)
:
โ (a0 : M), Associates.mk a0 = a
@[implicit_reducible]
instance
Associates.instUniqueOfSubsingleton
{M : Type u_1}
[Monoid M]
[Subsingleton M]
:
Unique (Associates M)
theorem
Associates.mk_injective
{M : Type u_1}
[Monoid M]
[Subsingleton Mหฃ]
:
Function.Injective Associates.mk
@[implicit_reducible]
theorem
Associates.mk_mul_mk
{M : Type u_1}
[CommMonoid M]
{x y : M}
:
Associates.mk x * Associates.mk y = Associates.mk (x * y)
@[implicit_reducible]
@[implicit_reducible]
Associates.mk as a MonoidHom.
Instances For
@[simp]
theorem
Associates.associated_map_mk
{M : Type u_1}
[CommMonoid M]
{f : Associates M โ* M}
(hinv : Function.RightInverse (โf) Associates.mk)
(a : M)
:
Associated a (f (Associates.mk a))
theorem
Associates.mk_pow
{M : Type u_1}
[CommMonoid M]
(a : M)
(n : โ)
:
Associates.mk (a ^ n) = Associates.mk a ^ n
theorem
Associates.dvd_eq_le
{M : Type u_1}
[CommMonoid M]
:
(fun (x1 x2 : Associates M) => x1 โฃ x2) = fun (x1 x2 : Associates M) => x1 โค x2
@[implicit_reducible]
@[simp]
theorem
Associates.isUnit_iff_eq_one
{M : Type u_1}
[CommMonoid M]
(a : Associates M)
:
IsUnit a โ a = 1
theorem
Associates.isUnit_mk
{M : Type u_1}
[CommMonoid M]
{a : M}
:
IsUnit (Associates.mk a) โ IsUnit a
theorem
Associates.mul_mono
{M : Type u_1}
[CommMonoid M]
{a b c d : Associates M}
(hโ : a โค b)
(hโ : c โค d)
:
@[implicit_reducible]
@[simp]
theorem
Associates.mk_dvd_mk
{M : Type u_1}
[CommMonoid M]
{a b : M}
:
Associates.mk a โฃ Associates.mk b โ a โฃ b
theorem
Associates.dvd_of_mk_le_mk
{M : Type u_1}
[CommMonoid M]
{a b : M}
:
Associates.mk a โค Associates.mk b โ a โฃ b
theorem
Associates.mk_le_mk_of_dvd
{M : Type u_1}
[CommMonoid M]
{a b : M}
:
a โฃ b โ Associates.mk a โค Associates.mk b
theorem
Associates.mk_le_mk_iff_dvd
{M : Type u_1}
[CommMonoid M]
{a b : M}
:
Associates.mk a โค Associates.mk b โ a โฃ b
@[simp]
theorem
Associates.isPrimal_mk
{M : Type u_1}
[CommMonoid M]
{a : M}
:
IsPrimal (Associates.mk a) โ IsPrimal a
@[simp]
theorem
Associates.decompositionMonoid_iff
{M : Type u_1}
[CommMonoid M]
:
DecompositionMonoid (Associates M) โ DecompositionMonoid M
@[simp]
theorem
Associates.mk_isRelPrime_iff
{M : Type u_1}
[CommMonoid M]
{a b : M}
:
IsRelPrime (Associates.mk a) (Associates.mk b) โ IsRelPrime a b
@[implicit_reducible]
@[implicit_reducible]
@[simp]
@[simp]
theorem
Associates.mk_eq_zero
{M : Type u_1}
[MonoidWithZero M]
{a : M}
:
Associates.mk a = 0 โ a = 0
@[simp]
theorem
Associates.mk_ne_zero
{M : Type u_1}
[MonoidWithZero M]
{a : M}
:
Associates.mk a โ 0 โ a โ 0
instance
Associates.instNontrivial
{M : Type u_1}
[MonoidWithZero M]
[Nontrivial M]
:
Nontrivial (Associates M)
theorem
Associates.exists_non_zero_rep
{M : Type u_1}
[MonoidWithZero M]
{a : Associates M}
:
a โ 0 โ โ (a0 : M), a0 โ 0 โง Associates.mk a0 = a
@[implicit_reducible]
@[implicit_reducible]
@[simp]
@[implicit_reducible]
@[implicit_reducible]
instance
Associates.instDecidableRelDvd
{M : Type u_1}
[CommMonoidWithZero M]
[DecidableRel fun (x1 x2 : M) => x1 โฃ x2]
:
DecidableRel fun (x1 x2 : Associates M) => x1 โฃ x2
theorem
Associates.Prime.le_or_le
{M : Type u_1}
[CommMonoidWithZero M]
{p : Associates M}
(hp : Prime p)
{a b : Associates M}
(h : p โค a * b)
:
@[simp]
theorem
Associates.prime_mk
{M : Type u_1}
[CommMonoidWithZero M]
{p : M}
:
Prime (Associates.mk p) โ Prime p
@[simp]
theorem
Associates.irreducible_mk
{M : Type u_1}
[CommMonoidWithZero M]
{a : M}
:
Irreducible (Associates.mk a) โ Irreducible a
@[simp]
theorem
Associates.mk_dvdNotUnit_mk_iff
{M : Type u_1}
[CommMonoidWithZero M]
{a b : M}
:
DvdNotUnit (Associates.mk a) (Associates.mk b) โ DvdNotUnit a b
theorem
Associates.dvdNotUnit_of_lt
{M : Type u_1}
[CommMonoidWithZero M]
{a b : Associates M}
(hlt : a < b)
:
DvdNotUnit a b
theorem
Associates.irreducible_iff_prime_iff
{M : Type u_1}
[CommMonoidWithZero M]
:
(โ (a : M), Irreducible a โ Prime a) โ โ (a : Associates M), Irreducible a โ Prime a
@[implicit_reducible]
theorem
associates_irreducible_iff_prime
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
[DecompositionMonoid M]
{p : Associates M}
:
Irreducible p โ Prime p
theorem
Associates.le_of_mul_le_mul_left
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
(a b c : Associates M)
(ha : a โ 0)
:
theorem
Associates.one_or_eq_of_le_of_prime
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p m : Associates M}
(hp : Prime p)
(hle : m โค p)
:
m = 1 โจ m = p
theorem
Associates.dvdNotUnit_iff_lt
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{a b : Associates M}
:
DvdNotUnit a b โ a < b
theorem
Associates.le_one_iff
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p : Associates M}
:
p โค 1 โ p = 1
theorem
dvdNotUnit_of_dvdNotUnit_associated
{M : Type u_1}
[CommMonoidWithZero M]
[Nontrivial M]
{p q r : M}
(h : DvdNotUnit p q)
(h' : Associated q r)
:
DvdNotUnit p r
theorem
isUnit_of_associated_mul
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p b : M}
(h : Associated (p * b) p)
(hp : p โ 0)
:
IsUnit b
theorem
DvdNotUnit.not_associated
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p q : M}
(h : DvdNotUnit p q)
:
ยฌAssociated p q
theorem
dvd_prime_pow
{M : Type u_1}
[CommMonoidWithZero M]
[IsCancelMulZero M]
{p q : M}
(hp : Prime p)
(n : โ)
:
q โฃ p ^ n โ โ i โค n, Associated q (p ^ i)