mathlib documentation

ring_theory.​unique_factorization_domain

ring_theory.​unique_factorization_domain

@[class]
structure unique_factorization_domain (α : Type u_2) [integral_domain α] :
Type u_2

Unique factorization domains.

In a unique factorization domain each element (except zero) is uniquely represented as a multiset of irreducible factors. Uniqueness is only up to associated elements.

This is equivalent to defining a unique factorization domain as a domain in which each element (except zero) is non-uniquely represented as a multiset of prime factors. This definition is used.

To define a UFD using the traditional definition in terms of multisets of irreducible factors, use the definition of_unique_irreducible_factorization

theorem unique_factorization_domain.​induction_on_prime {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {P : α → Prop} (a : α) :
P 0(∀ (x : α), is_unit xP x)(∀ (a p : α), a 0prime pP aP (p * a))P a

theorem unique_factorization_domain.​unique {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {f g : multiset α} :
(∀ (x : α), x firreducible x)(∀ (x : α), x girreducible x)associated f.prod g.prodmultiset.rel associated f g

structure unique_irreducible_factorization (α : Type u_2) [integral_domain α] :
Type u_2

def associates.​factor_set (α : Type u) [integral_domain α] :
Type u

factor_set α representation elements of unique factorization domain as multisets.

multiset α produced by factors are only unique up to associated elements, while the multisets in factor_set α are unqiue by equality and restricted to irreducible elements. This gives us a representation of each element as a unique multisets (or the added ⊤ for 0), which has a complete lattice struture. Infimum is the greatest common divisor and supremum is the least common multiple.

Equations
theorem associates.​factor_set.​coe_add {α : Type u_1} [integral_domain α] {a b : multiset {a // irreducible a}} :
(a + b) = a + b

@[simp]
theorem associates.​prod_top {α : Type u_1} [integral_domain α] :

@[simp]
theorem associates.​prod_coe {α : Type u_1} [integral_domain α] {s : multiset {a // irreducible a}} :

@[simp]
theorem associates.​prod_add {α : Type u_1} [integral_domain α] (a b : associates.factor_set α) :
(a + b).prod = a.prod * b.prod

theorem associates.​prod_mono {α : Type u_1} [integral_domain α] {a b : associates.factor_set α} :
a ba.prod b.prod

theorem associates.​unique' {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {p q : multiset (associates α)} :
(∀ (a : associates α), a pirreducible a)(∀ (a : associates α), a qirreducible a)p.prod = q.prodp = q

theorem associates.​prod_le_prod_iff_le {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {p q : multiset (associates α)} :
(∀ (a : associates α), a pirreducible a)(∀ (a : associates α), a qirreducible a)(p.prod q.prod p q)

def associates.​factors' {α : Type u_1} [integral_domain α] [unique_factorization_domain α] (a : α) :
a 0multiset {a // irreducible a}

Equations
theorem associates.​factors'_cong {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {a b : α} (ha : a 0) (hb : b 0) :

Equations
@[simp]

@[simp]
theorem associates.​factors_mk {α : Type u_1} [integral_domain α] [unique_factorization_domain α] [dec : decidable_eq (associates α)] (a : α) (h : a 0) :

@[simp]
theorem associates.​factors_mul {α : Type u_1} [integral_domain α] [unique_factorization_domain α] [dec : decidable_eq (associates α)] (a b : associates α) :

theorem associates.​factors_mono {α : Type u_1} [integral_domain α] [unique_factorization_domain α] [dec : decidable_eq (associates α)] {a b : associates α} :
a ba.factors b.factors

@[instance]

Equations
@[instance]

Equations
theorem associates.​sup_mul_inf {α : Type u_1} [integral_domain α] [unique_factorization_domain α] [dec : decidable_eq (associates α)] (a b : associates α) :
(a b) * (a b) = a * b

to_gcd_monoid constructs a GCD monoid out of a normalization on a unique factorization domain.

Equations
theorem unique_factorization_domain.​no_factors_of_no_prime_factors {R : Type u_2} [integral_domain R] [unique_factorization_domain R] {a b : R} (ha : a 0) (h : ∀ {d : R}, d ad b¬prime d) {d : R} :
d ad bis_unit d

theorem unique_factorization_domain.​dvd_of_dvd_mul_left_of_no_prime_factors {R : Type u_2} [integral_domain R] [unique_factorization_domain R] {a b c : R} :
a 0(∀ {d : R}, d ad c¬prime d)a b * ca b

Euclid's lemma: if a ∣ b * c and a and c have no common prime factors, a ∣ b. Compare is_coprime.dvd_of_dvd_mul_left.

theorem unique_factorization_domain.​dvd_of_dvd_mul_right_of_no_prime_factors {R : Type u_2} [integral_domain R] [unique_factorization_domain R] {a b c : R} :
a 0(∀ {d : R}, d ad b¬prime d)a b * ca c

Euclid's lemma: if a ∣ b * c and a and b have no common prime factors, a ∣ c. Compare is_coprime.dvd_of_dvd_mul_right.

theorem unique_factorization_domain.​exists_reduced_factors {R : Type u_2} [integral_domain R] [unique_factorization_domain R] (a : R) (H : a 0) (b : R) :
∃ (a' b' c' : R), (∀ {d : R}, d a'd b'is_unit d) c' * a' = a c' * b' = b

If a ≠ 0, b are elements of a unique factorization domain, then dividing out their common factor c' gives a' and b' with no factors in common.

theorem unique_factorization_domain.​exists_reduced_factors' {R : Type u_2} [integral_domain R] [unique_factorization_domain R] (a b : R) :
b 0(∃ (a' b' c' : R), (∀ {d : R}, d a'd b'is_unit d) c' * a' = a c' * b' = b)