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
.
References #
- https://ncatlab.org/nlab/show/Ore+localization
- Zoran Škoda, Noncommutative localization in noncommutative geometry
Tags #
localization, Ore, non-commutative
The setoid on R × S
used for the Ore localization.
The ore localization of a monoid and a submonoid fulfilling the ore condition.
Equations
- R[S⁻¹] = quotient (ore_localization.ore_eqv R S)
Instances for ore_localization
- ore_localization.has_mul
- ore_localization.has_one
- ore_localization.inhabited
- ore_localization.monoid
- ore_localization.comm_monoid
- ore_localization.has_add
- ore_localization.has_zero
- ore_localization.add_comm_monoid
- ore_localization.semiring
- ore_localization.has_neg
- ore_localization.ring
- ore_localization.nontrivial
- ore_localization.has_inv
- ore_localization.division_ring
Fractions which differ by a factor of the numerator can be proven equal if
those factors expand to equal elements of R
.
A function or predicate over R
and S
can be lifted to R[S⁻¹]
if it is invariant
under expansion on the right.
Equations
- ore_localization.lift_expand P hP = quotient.lift (λ (p : R × ↥S), P p.fst p.snd) _
A version of lift_expand
used to simultaneously lift functions with two arguments
in ``R[S⁻¹]`.
Equations
- ore_localization.lift₂_expand P hP = ore_localization.lift_expand (λ (r₁ : R) (s₁ : ↥S), ore_localization.lift_expand (P r₁ s₁) _) _
The multiplication on the Ore localization of monoids.
Equations
- ore_localization.mul = ore_localization.lift₂_expand mul' ore_localization.mul._proof_1
Equations
- ore_localization.has_mul = {mul := ore_localization.mul _inst_2}
A characterization lemma for the multiplication on the Ore localization, allowing for a choice of Ore numerator and Ore denominator.
Another characterization lemma for the multiplication on the Ore localizaion delivering Ore witnesses and conditions bundled in a sigma type.
Equations
- ore_localization.ore_div_mul_char' r₁ r₂ s₁ s₂ = ⟨ore_localization.ore_num r₂ s₁, ⟨ore_localization.ore_denom r₂ s₁, _⟩⟩
Equations
- ore_localization.has_one = {one := 1 /ₒ 1}
Equations
Equations
- ore_localization.monoid = {mul := has_mul.mul ore_localization.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, npow := npow_rec (mul_one_class.to_has_mul R[S⁻¹]), npow_zero' := _, npow_succ' := _}
The multiplicative homomorphism from R
to R[S⁻¹]
, mapping r : R
to the
fraction r /ₒ 1
.
The universal lift from a morphism R →* T
, which maps elements of S
to units of T
,
to a morphism R[S⁻¹] →* T
.
The universal morphism universal_mul_hom
is unique.
Equations
- ore_localization.comm_monoid = {mul := monoid.mul ore_localization.monoid, mul_assoc := _, one := monoid.one ore_localization.monoid, one_mul := _, mul_one := _, npow := monoid.npow ore_localization.monoid, npow_zero' := _, npow_succ' := _, mul_comm := _}
The morphism numerator_hom
is a monoid localization map in the case of commutative R
.
Equations
- ore_localization.localization_map R S = {to_monoid_hom := {to_fun := ⇑ore_localization.numerator_hom, map_one' := _, map_mul' := _}, map_units' := _, surj' := _, eq_iff_exists' := _}
If R
is commutative, Ore localization and monoid localization are isomorphic.
Equations
- ore_localization.has_add = {add := add _inst_2}
A characterization of the addition on the Ore localizaion, allowing for arbitrary Ore numerator and Ore denominator.
Another characterization of the addition on the Ore localization, bundling up all witnesses and conditions into a sigma type.
Equations
- ore_localization.ore_div_add_char' r r' s s' = ⟨ore_localization.ore_num ↑s s', ⟨ore_localization.ore_denom ↑s s', _⟩⟩
Equations
- ore_localization.has_zero = {zero := zero _inst_2}
Equations
- ore_localization.add_comm_monoid = {add := has_add.add ore_localization.has_add, add_assoc := _, zero := zero _inst_2, zero_add := _, add_zero := _, nsmul := add_monoid.nsmul._default zero has_add.add ore_localization.zero_add ore_localization.add_comm_monoid._proof_2, nsmul_zero' := _, nsmul_succ' := _, add_comm := _}
Equations
- ore_localization.semiring = {add := add_comm_monoid.add ore_localization.add_comm_monoid, add_assoc := _, zero := add_comm_monoid.zero ore_localization.add_comm_monoid, zero_add := _, add_zero := _, nsmul := add_comm_monoid.nsmul ore_localization.add_comm_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := monoid.mul ore_localization.monoid, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := monoid.one ore_localization.monoid, one_mul := _, mul_one := _, nat_cast := non_assoc_semiring.nat_cast._default monoid.one add_comm_monoid.add ore_localization.semiring._proof_10 add_comm_monoid.zero ore_localization.semiring._proof_11 ore_localization.semiring._proof_12 add_comm_monoid.nsmul ore_localization.semiring._proof_13 ore_localization.semiring._proof_14, nat_cast_zero := _, nat_cast_succ := _, npow := monoid.npow ore_localization.monoid, npow_zero' := _, npow_succ' := _}
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
- ore_localization.universal_hom f fS hf = {to_fun := (ore_localization.universal_mul_hom f.to_monoid_hom fS hf).to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
Negation on the Ore localization is defined via negation on the numerator.
Equations
- ore_localization.neg = ore_localization.lift_expand (λ (r : R) (s : ↥S), -r /ₒ s) ore_localization.neg._proof_1
Equations
- ore_localization.has_neg = {neg := ore_localization.neg _inst_2}
Equations
- ore_localization.ring = {add := semiring.add ore_localization.semiring, add_assoc := _, zero := semiring.zero ore_localization.semiring, zero_add := _, add_zero := _, nsmul := semiring.nsmul ore_localization.semiring, nsmul_zero' := _, nsmul_succ' := _, neg := has_neg.neg ore_localization.has_neg, sub := add_comm_group_with_one.sub._default semiring.add ore_localization.ring._proof_6 semiring.zero ore_localization.ring._proof_7 ore_localization.ring._proof_8 semiring.nsmul ore_localization.ring._proof_9 ore_localization.ring._proof_10 has_neg.neg, sub_eq_add_neg := _, zsmul := add_comm_group_with_one.zsmul._default semiring.add ore_localization.ring._proof_12 semiring.zero ore_localization.ring._proof_13 ore_localization.ring._proof_14 semiring.nsmul ore_localization.ring._proof_15 ore_localization.ring._proof_16 has_neg.neg, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := add_comm_group_with_one.int_cast._default semiring.nat_cast semiring.add ore_localization.ring._proof_21 semiring.zero ore_localization.ring._proof_22 ore_localization.ring._proof_23 semiring.nsmul ore_localization.ring._proof_24 ore_localization.ring._proof_25 semiring.one ore_localization.ring._proof_26 ore_localization.ring._proof_27 has_neg.neg (add_comm_group_with_one.sub._default semiring.add ore_localization.ring._proof_6 semiring.zero ore_localization.ring._proof_7 ore_localization.ring._proof_8 semiring.nsmul ore_localization.ring._proof_9 ore_localization.ring._proof_10 has_neg.neg) ore_localization.ring._proof_28 (add_comm_group_with_one.zsmul._default semiring.add ore_localization.ring._proof_12 semiring.zero ore_localization.ring._proof_13 ore_localization.ring._proof_14 semiring.nsmul ore_localization.ring._proof_15 ore_localization.ring._proof_16 has_neg.neg) ore_localization.ring._proof_29 ore_localization.ring._proof_30 ore_localization.ring._proof_31 ore_localization.add_left_neg, nat_cast := semiring.nat_cast ore_localization.semiring, one := semiring.one ore_localization.semiring, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := semiring.mul ore_localization.semiring, mul_assoc := _, one_mul := _, mul_one := _, npow := semiring.npow ore_localization.semiring, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _}
The inversion of Ore fractions for a ring without zero divisors, satisying 0⁻¹ = 0
and
(r /ₒ r')⁻¹ = r' /ₒ r
for r ≠ 0
.
Equations
- ore_localization.inv = ore_localization.lift_expand (λ (r : R) (s : ↥(non_zero_divisors R)), dite (r = 0) (λ (hr : r = 0), 0) (λ (hr : ¬r = 0), ↑s /ₒ ⟨r, _⟩)) ore_localization.inv._proof_2
Equations
- ore_localization.has_inv = {inv := ore_localization.inv _inst_4}
Equations
- ore_localization.division_ring = {add := ring.add ore_localization.ring, add_assoc := _, zero := ring.zero ore_localization.ring, zero_add := _, add_zero := _, nsmul := ring.nsmul ore_localization.ring, nsmul_zero' := _, nsmul_succ' := _, neg := ring.neg ore_localization.ring, sub := ring.sub ore_localization.ring, sub_eq_add_neg := _, zsmul := ring.zsmul ore_localization.ring, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := ring.int_cast ore_localization.ring, nat_cast := ring.nat_cast ore_localization.ring, one := ring.one ore_localization.ring, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := ring.mul ore_localization.ring, mul_assoc := _, one_mul := _, mul_one := _, npow := ring.npow ore_localization.ring, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, inv := has_inv.inv ore_localization.has_inv, div := div_inv_monoid.div._default ring.mul ore_localization.division_ring._proof_23 ring.one ore_localization.division_ring._proof_24 ore_localization.division_ring._proof_25 ring.npow ore_localization.division_ring._proof_26 ore_localization.division_ring._proof_27 has_inv.inv, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default ring.mul ore_localization.division_ring._proof_29 ring.one ore_localization.division_ring._proof_30 ore_localization.division_ring._proof_31 ring.npow ore_localization.division_ring._proof_32 ore_localization.division_ring._proof_33 has_inv.inv, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, rat_cast := rat.cast_rec (div_inv_monoid.to_has_inv R[(non_zero_divisors R)⁻¹]), mul_inv_cancel := _, inv_zero := _, rat_cast_mk := _, qsmul := qsmul_rec rat.cast_rec (distrib.to_has_mul R[(non_zero_divisors R)⁻¹]), qsmul_eq_mul' := _}