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 x → P x) → (∀ (a p : α), a ≠ 0 → prime p → P a → P (p * a)) → P a

theorem unique_factorization_domain.​unique {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {f g : multiset α} :
(∀ (x : α), x ∈ f → irreducible x) → (∀ (x : α), x ∈ g → irreducible x) → associated f.prod g.prod → multiset.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 ≤ b → a.prod ≤ b.prod

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

theorem associates.​prod_le_prod_iff_le {α : Type u_1} [integral_domain α] [unique_factorization_domain α] {p q : multiset (associates α)} :
(∀ (a : associates α), a ∈ p → irreducible a) → (∀ (a : associates α), a ∈ q → irreducible a) → (p.prod ≤ q.prod ↔ p ≤ q)

def associates.​factors' {α : Type u_1} [integral_domain α] [unique_factorization_domain α] (a : α) :
a ≠ 0 → multiset {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 ≤ b → a.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 ∣ a → d ∣ b → ¬prime d) {d : R} :
d ∣ a → d ∣ b → is_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 ∣ a → d ∣ c → ¬prime d) → a ∣ b * c → a ∣ 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 ∣ a → d ∣ b → ¬prime d) → a ∣ b * c → a ∣ 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)