# mathlib3documentation

ring_theory.ore_localization.basic

# Localization over right Ore sets. #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines the localization of a monoid over a right Ore set and proves its universal mapping property. It then extends the definition and its properties first to semirings and then to rings. We show that in the case of a commutative monoid this definition coincides with the common monoid localization. Finally we show that in a ring without zero divisors, taking the Ore localization at R - {0} results in a division ring.

## Notations #

Introduces the notation R[S⁻¹] for the Ore localization of a monoid R at a right Ore subset S. Also defines a new heterogeneos division notation r /ₒ s for a numerator r : R and a denominator s : S.

## Tags #

localization, Ore, non-commutative

def ore_localization.ore_eqv (R : Type u_1) [monoid R] (S : submonoid R)  :

The setoid on R × S used for the Ore localization.

Equations
def ore_localization (R : Type u_1) [monoid R] (S : submonoid R)  :
Type u_1

The ore localization of a monoid and a submonoid fulfilling the ore condition.

Equations
Instances for ore_localization
def ore_localization.ore_div {R : Type u_1} [monoid R] {S : submonoid R} (r : R) (s : S) :

The division in the ore localization R[S⁻¹], as a fraction of an element of R and S.

Equations
@[protected]
theorem ore_localization.ind {R : Type u_1} [monoid R] {S : submonoid R} {β : R[S⁻¹] Prop} (c : (r : R) (s : S), β (r /ₒ s)) (q : R[S⁻¹]) :
β q
theorem ore_localization.ore_div_eq_iff {R : Type u_1} [monoid R] {S : submonoid R} {r₁ r₂ : R} {s₁ s₂ : S} :
r₁ /ₒ s₁ = r₂ /ₒ s₂ (u : S) (v : R), r₂ * u = r₁ * v s₂ * u = s₁ * v
@[protected]
theorem ore_localization.expand {R : Type u_1} [monoid R] {S : submonoid R} (r : R) (s : S) (t : R) (hst : s * t S) :
r /ₒ s = r * t /ₒ s * t, hst⟩

A fraction r /ₒ s is equal to its expansion by an arbitrary factor t if s * t ∈ S.

@[protected]
theorem ore_localization.expand' {R : Type u_1} [monoid R] {S : submonoid R} (r : R) (s s' : S) :
r /ₒ s = r * s' /ₒ (s * s')

A fraction is equal to its expansion by an factor from s.

@[protected]
theorem ore_localization.eq_of_num_factor_eq {R : Type u_1} [monoid R] {S : submonoid R} {r r' r₁ r₂ : R} {s t : S} (h : r * t = r' * t) :
r₁ * r * r₂ /ₒ s = r₁ * r' * r₂ /ₒ s

Fractions which differ by a factor of the numerator can be proven equal if those factors expand to equal elements of R.

def ore_localization.lift_expand {R : Type u_1} [monoid R] {S : submonoid R} {C : Sort u_2} (P : R S C) (hP : (r t : R) (s : S) (ht : s * t S), P r s = P (r * t) s * t, ht⟩) :

A function or predicate over R and S can be lifted to R[S⁻¹] if it is invariant under expansion on the right.

Equations
@[simp]
theorem ore_localization.lift_expand_of {R : Type u_1} [monoid R] {S : submonoid R} {C : Sort u_2} {P : R S C} {hP : (r t : R) (s : S) (ht : s * t S), P r s = P (r * t) s * t, ht⟩} (r : R) (s : S) :
(r /ₒ s) = P r s
def ore_localization.lift₂_expand {R : Type u_1} [monoid R] {S : submonoid R} {C : Sort u_2} (P : R S R S C) (hP : (r₁ t₁ : R) (s₁ : S) (ht₁ : s₁ * t₁ S) (r₂ t₂ : R) (s₂ : S) (ht₂ : s₂ * t₂ S), P r₁ s₁ r₂ s₂ = P (r₁ * t₁) s₁ * t₁, ht₁⟩ (r₂ * t₂) s₂ * t₂, ht₂⟩) :

A version of lift_expand used to simultaneously lift functions with two arguments in R[S⁻¹].

Equations
@[simp]
theorem ore_localization.lift₂_expand_of {R : Type u_1} [monoid R] {S : submonoid R} {C : Sort u_2} {P : R S R S C} {hP : (r₁ t₁ : R) (s₁ : S) (ht₁ : s₁ * t₁ S) (r₂ t₂ : R) (s₂ : S) (ht₂ : s₂ * t₂ S), P r₁ s₁ r₂ s₂ = P (r₁ * t₁) s₁ * t₁, ht₁⟩ (r₂ * t₂) s₂ * t₂, ht₂⟩} (r₁ : R) (s₁ : S) (r₂ : R) (s₂ : S) :
(r₁ /ₒ s₁) (r₂ /ₒ s₂) = P r₁ s₁ r₂ s₂
@[protected]
def ore_localization.mul {R : Type u_1} [monoid R] {S : submonoid R}  :

The multiplication on the Ore localization of monoids.

Equations
@[protected, instance]
def ore_localization.has_mul {R : Type u_1} [monoid R] {S : submonoid R}  :
Equations
theorem ore_localization.ore_div_mul_ore_div {R : Type u_1} [monoid R] {S : submonoid R} {r₁ r₂ : R} {s₁ s₂ : S} :
r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r₁ * /ₒ (s₂ *
theorem ore_localization.ore_div_mul_char {R : Type u_1} [monoid R] {S : submonoid R} (r₁ r₂ : R) (s₁ s₂ : S) (r' : R) (s' : S) (huv : r₂ * s' = s₁ * r') :
r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r₁ * r' /ₒ (s₂ * s')

A characterization lemma for the multiplication on the Ore localization, allowing for a choice of Ore numerator and Ore denominator.

def ore_localization.ore_div_mul_char' {R : Type u_1} [monoid R] {S : submonoid R} (r₁ r₂ : R) (s₁ s₂ : S) :
Σ' (r' : R) (s' : S), r₂ * s' = s₁ * r' r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r₁ * r' /ₒ (s₂ * s')

Another characterization lemma for the multiplication on the Ore localizaion delivering Ore witnesses and conditions bundled in a sigma type.

Equations
@[protected, instance]
def ore_localization.has_one {R : Type u_1} [monoid R] {S : submonoid R}  :
Equations
@[protected]
theorem ore_localization.one_def {R : Type u_1} [monoid R] {S : submonoid R}  :
1 = 1 /ₒ 1
@[protected, instance]
def ore_localization.inhabited {R : Type u_1} [monoid R] {S : submonoid R}  :
Equations
@[protected, simp]
theorem ore_localization.div_eq_one' {R : Type u_1} [monoid R] {S : submonoid R} {r : R} (hr : r S) :
r /ₒ r, hr⟩ = 1
@[protected, simp]
theorem ore_localization.div_eq_one {R : Type u_1} [monoid R] {S : submonoid R} {s : S} :
s /ₒ s = 1
@[protected]
theorem ore_localization.one_mul {R : Type u_1} [monoid R] {S : submonoid R} (x : R[S⁻¹]) :
1 * x = x
@[protected]
theorem ore_localization.mul_one {R : Type u_1} [monoid R] {S : submonoid R} (x : R[S⁻¹]) :
x * 1 = x
@[protected]
theorem ore_localization.mul_assoc {R : Type u_1} [monoid R] {S : submonoid R} (x y z : R[S⁻¹]) :
x * y * z = x * (y * z)
@[protected, instance]
def ore_localization.monoid {R : Type u_1} [monoid R] {S : submonoid R}  :
Equations
@[protected]
theorem ore_localization.mul_inv {R : Type u_1} [monoid R] {S : submonoid R} (s s' : S) :
s /ₒ s' * (s' /ₒ s) = 1
@[protected, simp]
theorem ore_localization.mul_one_div {R : Type u_1} [monoid R] {S : submonoid R} {r : R} {s t : S} :
r /ₒ s * (1 /ₒ t) = r /ₒ (t * s)
@[protected, simp]
theorem ore_localization.mul_cancel {R : Type u_1} [monoid R] {S : submonoid R} {r : R} {s t : S} :
r /ₒ s * (s /ₒ t) = r /ₒ t
@[protected, simp]
theorem ore_localization.mul_cancel' {R : Type u_1} [monoid R] {S : submonoid R} {r₁ r₂ : R} {s t : S} :
r₁ /ₒ s * (s * r₂ /ₒ t) = r₁ * r₂ /ₒ t
@[simp]
theorem ore_localization.div_one_mul {R : Type u_1} [monoid R] {S : submonoid R} {p r : R} {s : S} :
r /ₒ 1 * (p /ₒ s) = r * p /ₒ s
def ore_localization.numerator_unit {R : Type u_1} [monoid R] {S : submonoid R} (s : S) :

The fraction s /ₒ 1 as a unit in R[S⁻¹], where s : S.

Equations
def ore_localization.numerator_hom {R : Type u_1} [monoid R] {S : submonoid R}  :

The multiplicative homomorphism from R to R[S⁻¹], mapping r : R to the fraction r /ₒ 1.

Equations
theorem ore_localization.numerator_hom_apply {R : Type u_1} [monoid R] {S : submonoid R} {r : R} :
theorem ore_localization.numerator_is_unit {R : Type u_1} [monoid R] {S : submonoid R} (s : S) :
def ore_localization.universal_mul_hom {R : Type u_1} [monoid R] {S : submonoid R} {T : Type u_2} [monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) :

The universal lift from a morphism R →* T, which maps elements of S to units of T, to a morphism R[S⁻¹] →* T.

Equations
theorem ore_localization.universal_mul_hom_apply {R : Type u_1} [monoid R] {S : submonoid R} {T : Type u_2} [monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) {r : R} {s : S} :
hf) (r /ₒ s) = f r * (fS s)⁻¹
theorem ore_localization.universal_mul_hom_commutes {R : Type u_1} [monoid R] {S : submonoid R} {T : Type u_2} [monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) {r : R} :
= f r
theorem ore_localization.universal_mul_hom_unique {R : Type u_1} [monoid R] {S : submonoid R} {T : Type u_2} [monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) (φ : R[S⁻¹] →* T) (huniv : (r : R), = f r) :
φ =

The universal morphism universal_mul_hom is unique.

theorem ore_localization.ore_div_mul_ore_div_comm {R : Type u_1} [comm_monoid R] {S : submonoid R} {r₁ r₂ : R} {s₁ s₂ : S} :
r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r₁ * r₂ /ₒ (s₁ * s₂)
@[protected, instance]
def ore_localization.comm_monoid {R : Type u_1} [comm_monoid R] {S : submonoid R}  :
Equations
@[protected]

The morphism numerator_hom is a monoid localization map in the case of commutative R.

Equations
@[protected]
noncomputable def ore_localization.equiv_monoid_localization (R : Type u_1) [comm_monoid R] (S : submonoid R)  :

If R is commutative, Ore localization and monoid localization are isomorphic.

Equations
@[protected, instance]
def ore_localization.has_add {R : Type u_1} [semiring R] {S : submonoid R}  :
Equations
theorem ore_localization.ore_div_add_ore_div {R : Type u_1} [semiring R] {S : submonoid R} {r r' : R} {s s' : S} :
r /ₒ s + r' /ₒ s' = (r * + r' * /ₒ (s *
theorem ore_localization.ore_div_add_char {R : Type u_1} [semiring R] {S : submonoid R} {r r' : R} (s s' : S) (rb : R) (sb : S) (h : s * sb = s' * rb) :
r /ₒ s + r' /ₒ s' = (r * sb + r' * rb) /ₒ (s * sb)

A characterization of the addition on the Ore localizaion, allowing for arbitrary Ore numerator and Ore denominator.

def ore_localization.ore_div_add_char' {R : Type u_1} [semiring R] {S : submonoid R} (r r' : R) (s s' : S) :
Σ' (r'' : R) (s'' : S), s * s'' = s' * r'' r /ₒ s + r' /ₒ s' = (r * s'' + r' * r'') /ₒ (s * s'')

Another characterization of the addition on the Ore localization, bundling up all witnesses and conditions into a sigma type.

Equations
@[simp]
theorem ore_localization.add_ore_div {R : Type u_1} [semiring R] {S : submonoid R} {r r' : R} {s : S} :
r /ₒ s + r' /ₒ s = (r + r') /ₒ s
@[protected]
theorem ore_localization.add_assoc {R : Type u_1} [semiring R] {S : submonoid R} (x y z : R[S⁻¹]) :
x + y + z = x + (y + z)
@[protected, instance]
def ore_localization.has_zero {R : Type u_1} [semiring R] {S : submonoid R}  :
Equations
@[protected]
theorem ore_localization.zero_def {R : Type u_1} [semiring R] {S : submonoid R}  :
0 = 0 /ₒ 1
@[simp]
theorem ore_localization.zero_div_eq_zero {R : Type u_1} [semiring R] {S : submonoid R} (s : S) :
0 /ₒ s = 0
@[protected]
theorem ore_localization.zero_add {R : Type u_1} [semiring R] {S : submonoid R} (x : R[S⁻¹]) :
0 + x = x
@[protected]
theorem ore_localization.add_comm {R : Type u_1} [semiring R] {S : submonoid R} (x y : R[S⁻¹]) :
x + y = y + x
@[protected, instance]
Equations
@[protected]
theorem ore_localization.zero_mul {R : Type u_1} [semiring R] {S : submonoid R} (x : R[S⁻¹]) :
0 * x = 0
@[protected]
theorem ore_localization.mul_zero {R : Type u_1} [semiring R] {S : submonoid R} (x : R[S⁻¹]) :
x * 0 = 0
@[protected]
theorem ore_localization.left_distrib {R : Type u_1} [semiring R] {S : submonoid R} (x y z : R[S⁻¹]) :
x * (y + z) = x * y + x * z
theorem ore_localization.right_distrib {R : Type u_1} [semiring R] {S : submonoid R} (x y z : R[S⁻¹]) :
(x + y) * z = x * z + y * z
@[protected, instance]
def ore_localization.semiring {R : Type u_1} [semiring R] {S : submonoid R}  :
Equations
def ore_localization.universal_hom {R : Type u_1} [semiring R] {S : submonoid R} {T : Type u_2} [semiring T] (f : R →+* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) :

The universal lift from a ring homomorphism f : R →+* T, which maps elements in S to units of T, to a ring homomorphism R[S⁻¹] →+* T. This extends the construction on monoids.

Equations
theorem ore_localization.universal_hom_apply {R : Type u_1} [semiring R] {S : submonoid R} {T : Type u_2} [semiring T] (f : R →+* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) {r : R} {s : S} :
hf) (r /ₒ s) = f r * (fS s)⁻¹
theorem ore_localization.universal_hom_commutes {R : Type u_1} [semiring R] {S : submonoid R} {T : Type u_2} [semiring T] (f : R →+* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) {r : R} :
= f r
theorem ore_localization.universal_hom_unique {R : Type u_1} [semiring R] {S : submonoid R} {T : Type u_2} [semiring T] (f : R →+* T) (fS : S →* Tˣ) (hf : (s : S), f s = (fS s)) (φ : R[S⁻¹] →+* T) (huniv : (r : R), = f r) :
φ =
@[protected]
def ore_localization.neg {R : Type u_1} [ring R] {S : submonoid R}  :

Negation on the Ore localization is defined via negation on the numerator.

Equations
@[protected, instance]
def ore_localization.has_neg {R : Type u_1} [ring R] {S : submonoid R}  :
Equations
@[protected, simp]
theorem ore_localization.neg_def {R : Type u_1} [ring R] {S : submonoid R} (r : R) (s : S) :
-(r /ₒ s) = -r /ₒ s
@[protected]
theorem ore_localization.add_left_neg {R : Type u_1} [ring R] {S : submonoid R} (x : R[S⁻¹]) :
-x + x = 0
@[protected, instance]
def ore_localization.ring {R : Type u_1} [ring R] {S : submonoid R}  :
Equations
theorem ore_localization.numerator_hom_inj {R : Type u_1} [ring R] {S : submonoid R} (hS : S ) :
@[protected, instance]
def ore_localization.nontrivial {R : Type u_1} [ring R] [nontrivial R]  :
@[protected]
noncomputable def ore_localization.inv {R : Type u_1} [ring R] [nontrivial R]  :

The inversion of Ore fractions for a ring without zero divisors, satisying 0⁻¹ = 0 and (r /ₒ r')⁻¹ = r' /ₒ r for r ≠ 0`.

Equations
@[protected, instance]
noncomputable def ore_localization.has_inv {R : Type u_1} [ring R] [nontrivial R]  :
Equations
@[protected]
theorem ore_localization.inv_def {R : Type u_1} [ring R] [nontrivial R] {r : R} {s : } :
(r /ₒ s)⁻¹ = dite (r = 0) (λ (hr : r = 0), 0) (λ (hr : ¬r = 0), s /ₒ r, _⟩)
@[protected]
theorem ore_localization.mul_inv_cancel {R : Type u_1} [ring R] [nontrivial R] (x : R[⁻¹]) (h : x 0) :
x * x⁻¹ = 1
@[protected]
theorem ore_localization.inv_zero {R : Type u_1} [ring R] [nontrivial R]  :
0⁻¹ = 0
@[protected, instance]
noncomputable def ore_localization.division_ring {R : Type u_1} [ring R] [nontrivial R]  :
Equations