Documentation

Mathlib.RingTheory.Localization.Basic

Localizations of commutative rings #

We characterize the localization of a commutative ring R at a submonoid M up to isomorphism; that is, a commutative ring S is the localization of R at M iff we can find a ring homomorphism f : R →+* S satisfying 3 properties:

  1. For all y ∈ M, f y is a unit;
  2. For all z : S, there exists (x, y) : R × M such that z * f y = f x;
  3. For all x, y : R, f x = f y iff there exists c ∈ M such that x * c = y * c.

In the following, let R, P be commutative rings, S, Q be R- and P-algebras and M, T be submonoids of R and P respectively, e.g.:

variable (R S P Q : Type*) [CommRing R] [CommRing S] [CommRing P] [CommRing Q]
variable [Algebra R S] [Algebra P Q] (M : Submonoid R) (T : Submonoid P)

Main definitions #

Main results #

Implementation notes #

In maths it is natural to reason up to isomorphism, but in Lean we cannot naturally rewrite one structure with an isomorphic one; one way around this is to isolate a predicate characterizing a structure up to isomorphism, and reason about things that satisfy the predicate.

A previous version of this file used a fully bundled type of ring localization maps, then used a type synonym f.codomain for f : LocalizationMap M S to instantiate the R-algebra structure on S. This results in defining ad-hoc copies for everything already defined on S. By making IsLocalization a predicate on the algebraMap R S, we can ensure the localization map commutes nicely with other algebraMaps.

To prove most lemmas about a localization map algebraMap R S in this file we invoke the corresponding proof for the underlying CommMonoid localization map IsLocalization.toLocalizationMap M S, which can be found in GroupTheory.MonoidLocalization and the namespace Submonoid.LocalizationMap.

To reason about the localization as a quotient type, use mk_eq_of_mk' and associated lemmas. These show the quotient map mk : R → M → Localization M equals the surjection LocalizationMap.mk' induced by the map algebraMap : R →+* Localization M. The lemma mk_eq_of_mk' hence gives you access to the results in the rest of the file, which are about the LocalizationMap.mk' induced by any localization map.

The proof that "a CommRing K which is the localization of an integral domain R at R \ {0} is a field" is a def rather than an instance, so if you want to reason about a field of fractions K, assume [Field K] instead of just [CommRing K].

Tags #

localization, ring localization, commutative ring localization, characteristic predicate, commutative ring, field of fractions

class IsLocalization {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] :

The typeclass IsLocalization (M : Submonoid R) S where S is an R-algebra expresses that S is isomorphic to the localization of R at M.

Instances
    theorem IsLocalization.map_units {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (y : { x // x M }) :
    IsUnit (↑(algebraMap R S) y)

    Everything in the image of algebraMap is a unit

    theorem IsLocalization.surj {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) :
    x, z * ↑(algebraMap R S) x.snd = ↑(algebraMap R S) x.fst

    the algebraMap is surjective

    theorem IsLocalization.eq_iff_exists {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : R} :
    ↑(algebraMap R S) x = ↑(algebraMap R S) y c, c * x = c * y

    The kernel of algebraMap is the annihilator of M

    theorem IsLocalization.of_le {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (N : Submonoid R) (h₁ : M N) (h₂ : ∀ (r : R), r NIsUnit (↑(algebraMap R S) r)) :
    @[simp]
    theorem IsLocalization.toLocalizationWithZeroMap_toFun {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (a : R) :
    OneHom.toFun ((IsLocalization.toLocalizationWithZeroMap M S).toLocalizationMap.toMonoidHom) a = ↑(algebraMap R S) a

    IsLocalization.toLocalizationWithZeroMap M S shows S is the monoid localization of R at M.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[inline, reducible]

      IsLocalization.toLocalizationMap M S shows S is the monoid localization of R at M.

      Equations
      Instances For
        noncomputable def IsLocalization.sec {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) :
        R × { x // x M }

        Given a localization map f : M →* N, a section function sending z : N to some (x, y) : M × S such that f x * (f y)⁻¹ = z.

        Equations
        Instances For
          theorem IsLocalization.sec_spec {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) :
          z * ↑(algebraMap R S) (IsLocalization.sec M z).snd = ↑(algebraMap R S) (IsLocalization.sec M z).fst

          Given z : S, IsLocalization.sec M z is defined to be a pair (x, y) : R × M such that z * f y = f x (so this lemma is true by definition).

          theorem IsLocalization.sec_spec' {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) :
          ↑(algebraMap R S) (IsLocalization.sec M z).fst = ↑(algebraMap R S) (IsLocalization.sec M z).snd * z

          Given z : S, IsLocalization.sec M z is defined to be a pair (x, y) : R × M such that z * f y = f x, so this lemma is just an application of S's commutativity.

          theorem IsLocalization.map_right_cancel {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : R} {c : { x // x M }} (h : ↑(algebraMap R S) (c * x) = ↑(algebraMap R S) (c * y)) :
          ↑(algebraMap R S) x = ↑(algebraMap R S) y
          theorem IsLocalization.map_left_cancel {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : R} {c : { x // x M }} (h : ↑(algebraMap R S) (x * c) = ↑(algebraMap R S) (y * c)) :
          ↑(algebraMap R S) x = ↑(algebraMap R S) y
          theorem IsLocalization.eq_zero_of_fst_eq_zero {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {z : S} {x : R} {y : { x // x M }} (h : z * ↑(algebraMap R S) y = ↑(algebraMap R S) x) (hx : x = 0) :
          z = 0
          theorem IsLocalization.map_eq_zero_iff {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (r : R) :
          ↑(algebraMap R S) r = 0 m, m * r = 0
          noncomputable def IsLocalization.mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
          S

          IsLocalization.mk' S is the surjection sending (x, y) : R × M to f x * (f y)⁻¹.

          Equations
          Instances For
            @[simp]
            theorem IsLocalization.mk'_sec {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) :
            theorem IsLocalization.mk'_mul {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x₁ : R) (x₂ : R) (y₁ : { x // x M }) (y₂ : { x // x M }) :
            IsLocalization.mk' S (x₁ * x₂) (y₁ * y₂) = IsLocalization.mk' S x₁ y₁ * IsLocalization.mk' S x₂ y₂
            theorem IsLocalization.mk'_one {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) :
            @[simp]
            theorem IsLocalization.mk'_spec {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
            IsLocalization.mk' S x y * ↑(algebraMap R S) y = ↑(algebraMap R S) x
            @[simp]
            theorem IsLocalization.mk'_spec' {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
            ↑(algebraMap R S) y * IsLocalization.mk' S x y = ↑(algebraMap R S) x
            @[simp]
            theorem IsLocalization.mk'_spec_mk {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : R) (hy : y M) :
            IsLocalization.mk' S x { val := y, property := hy } * ↑(algebraMap R S) y = ↑(algebraMap R S) x
            @[simp]
            theorem IsLocalization.mk'_spec'_mk {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : R) (hy : y M) :
            ↑(algebraMap R S) y * IsLocalization.mk' S x { val := y, property := hy } = ↑(algebraMap R S) x
            theorem IsLocalization.eq_mk'_iff_mul_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : { x // x M }} {z : S} :
            z = IsLocalization.mk' S x y z * ↑(algebraMap R S) y = ↑(algebraMap R S) x
            theorem IsLocalization.mk'_eq_iff_eq_mul {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : { x // x M }} {z : S} :
            IsLocalization.mk' S x y = z ↑(algebraMap R S) x = z * ↑(algebraMap R S) y
            theorem IsLocalization.mk'_add_eq_iff_add_mul_eq_mul {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : { x // x M }} {z₁ : S} {z₂ : S} :
            IsLocalization.mk' S x y + z₁ = z₂ ↑(algebraMap R S) x + z₁ * ↑(algebraMap R S) y = z₂ * ↑(algebraMap R S) y
            theorem IsLocalization.mk'_surjective {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) :
            x y, IsLocalization.mk' S x y = z
            noncomputable def IsLocalization.fintype' {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] [Fintype R] :

            The localization of a Fintype is a Fintype. Cannot be an instance.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              def IsLocalization.uniqueOfZeroMem {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (h : 0 M) :

              Localizing at a submonoid with 0 inside it leads to the trivial ring.

              Equations
              Instances For
                theorem IsLocalization.mk'_eq_iff_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x₁ : R} {x₂ : R} {y₁ : { x // x M }} {y₂ : { x // x M }} :
                IsLocalization.mk' S x₁ y₁ = IsLocalization.mk' S x₂ y₂ ↑(algebraMap R S) (y₂ * x₁) = ↑(algebraMap R S) (y₁ * x₂)
                theorem IsLocalization.mk'_eq_iff_eq' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x₁ : R} {x₂ : R} {y₁ : { x // x M }} {y₂ : { x // x M }} :
                IsLocalization.mk' S x₁ y₁ = IsLocalization.mk' S x₂ y₂ ↑(algebraMap R S) (x₁ * y₂) = ↑(algebraMap R S) (x₂ * y₁)
                theorem IsLocalization.mk'_mem_iff {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : { x // x M }} {I : Ideal S} :
                IsLocalization.mk' S x y I ↑(algebraMap R S) x I
                theorem IsLocalization.eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {a₁ : R} {b₁ : R} {a₂ : { x // x M }} {b₂ : { x // x M }} :
                IsLocalization.mk' S a₁ a₂ = IsLocalization.mk' S b₁ b₂ c, c * (b₂ * a₁) = c * (a₂ * b₁)
                theorem IsLocalization.mk'_eq_zero_iff {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (s : { x // x M }) :
                IsLocalization.mk' S x s = 0 m, m * x = 0
                @[simp]
                theorem IsLocalization.mk'_zero {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (s : { x // x M }) :
                theorem IsLocalization.ne_zero_of_mk'_ne_zero {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} {y : { x // x M }} (hxy : IsLocalization.mk' S x y 0) :
                x 0
                theorem IsLocalization.eq_iff_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] [Algebra R P] [IsLocalization M P] {x : R} {y : R} :
                ↑(algebraMap R S) x = ↑(algebraMap R S) y ↑(algebraMap R P) x = ↑(algebraMap R P) y
                theorem IsLocalization.mk'_eq_iff_mk'_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] [Algebra R P] [IsLocalization M P] {x₁ : R} {x₂ : R} {y₁ : { x // x M }} {y₂ : { x // x M }} :
                IsLocalization.mk' S x₁ y₁ = IsLocalization.mk' S x₂ y₂ IsLocalization.mk' P x₁ y₁ = IsLocalization.mk' P x₂ y₂
                theorem IsLocalization.mk'_eq_of_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {a₁ : R} {b₁ : R} {a₂ : { x // x M }} {b₂ : { x // x M }} (H : a₂ * b₁ = b₂ * a₁) :
                IsLocalization.mk' S a₁ a₂ = IsLocalization.mk' S b₁ b₂
                theorem IsLocalization.mk'_eq_of_eq' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {a₁ : R} {b₁ : R} {a₂ : { x // x M }} {b₂ : { x // x M }} (H : b₁ * a₂ = a₁ * b₂) :
                IsLocalization.mk' S a₁ a₂ = IsLocalization.mk' S b₁ b₂
                @[simp]
                theorem IsLocalization.mk'_self {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : R} (hx : x M) :
                IsLocalization.mk' S x { val := x, property := hx } = 1
                @[simp]
                theorem IsLocalization.mk'_self' {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : { x // x M }} :
                IsLocalization.mk' S (x) x = 1
                theorem IsLocalization.mk'_self'' {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] {x : { x // x M }} :
                IsLocalization.mk' S (x) x = 1
                theorem IsLocalization.mul_mk'_eq_mk'_of_mul {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : R) (z : { x // x M }) :
                theorem IsLocalization.mk'_eq_mul_mk'_one {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                @[simp]
                theorem IsLocalization.mk'_mul_cancel_left {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                IsLocalization.mk' S (y * x) y = ↑(algebraMap R S) x
                theorem IsLocalization.mk'_mul_cancel_right {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                IsLocalization.mk' S (x * y) y = ↑(algebraMap R S) x
                @[simp]
                theorem IsLocalization.mk'_mul_mk'_eq_one {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : { x // x M }) (y : { x // x M }) :
                IsLocalization.mk' S (x) y * IsLocalization.mk' S (y) x = 1
                theorem IsLocalization.mk'_mul_mk'_eq_one' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) (h : x M) :
                IsLocalization.mk' S x y * IsLocalization.mk' S y { val := x, property := h } = 1
                theorem IsLocalization.smul_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : R) (m : { x // x M }) :
                @[simp]
                theorem IsLocalization.smul_mk'_one {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (m : { x // x M }) :
                @[simp]
                theorem IsLocalization.smul_mk'_self {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {m : { x // x M }} {r : R} :
                m IsLocalization.mk' S r m = ↑(algebraMap R S) r
                theorem IsLocalization.isUnit_comp {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] (j : S →+* P) (y : { x // x M }) :
                IsUnit (↑(RingHom.comp j (algebraMap R S)) y)
                theorem IsLocalization.eq_of_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) {x : R} {y : R} (h : ↑(algebraMap R S) x = ↑(algebraMap R S) y) :
                g x = g y

                Given a localization map f : R →+* S for a submonoid M ⊆ R and a map of CommSemirings g : R →+* P such that g(M) ⊆ Units P, f x = f y → g x = g y for all x y : R.

                theorem IsLocalization.mk'_add {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x₁ : R) (x₂ : R) (y₁ : { x // x M }) (y₂ : { x // x M }) :
                IsLocalization.mk' S (x₁ * y₂ + x₂ * y₁) (y₁ * y₂) = IsLocalization.mk' S x₁ y₁ + IsLocalization.mk' S x₂ y₂
                theorem IsLocalization.mul_add_inv_left {R : Type u_1} [CommSemiring R] {M : Submonoid R} {P : Type u_3} [CommSemiring P] {g : R →+* P} (h : ∀ (y : { x // x M }), IsUnit (g y)) (y : { x // x M }) (w : P) (z₁ : P) (z₂ : P) :
                w * (↑(IsUnit.liftRight (MonoidHom.restrict (g) M) h) y)⁻¹ + z₁ = z₂ w + g y * z₁ = g y * z₂
                theorem IsLocalization.lift_spec_mul_add {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) (z : S) (w : (fun x => P) z) (w' : (fun x => P) z) (v : (fun x => P) z) :
                noncomputable def IsLocalization.lift {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) :
                S →+* P

                Given a localization map f : R →+* S for a submonoid M ⊆ R and a map of CommSemirings g : R →+* P such that g y is invertible for all y : M, the homomorphism induced from S to P sending z : S to g x * (g y)⁻¹, where (x, y) : R × M are such that z = f x * (f y)⁻¹.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem IsLocalization.lift_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) (x : R) (y : { x // x M }) :
                  ↑(IsLocalization.lift hg) (IsLocalization.mk' S x y) = g x * (↑(IsUnit.liftRight (MonoidHom.restrict (g) M) hg) y)⁻¹

                  Given a localization map f : R →+* S for a submonoid M ⊆ R and a map of CommSemirings g : R →* P such that g y is invertible for all y : M, the homomorphism induced from S to P maps f x * (f y)⁻¹ to g x * (g y)⁻¹ for all x : R, y ∈ M.

                  theorem IsLocalization.lift_mk'_spec {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) (x : R) (v : P) (y : { x // x M }) :
                  ↑(IsLocalization.lift hg) (IsLocalization.mk' S x y) = v g x = g y * v
                  @[simp]
                  theorem IsLocalization.lift_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) (x : R) :
                  ↑(IsLocalization.lift hg) (↑(algebraMap R S) x) = g x
                  theorem IsLocalization.lift_eq_iff {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) {x : R × { x // x M }} {y : R × { x // x M }} :
                  ↑(IsLocalization.lift hg) (IsLocalization.mk' S x.fst x.snd) = ↑(IsLocalization.lift hg) (IsLocalization.mk' S y.fst y.snd) g (x.fst * y.snd) = g (y.fst * x.snd)
                  @[simp]
                  theorem IsLocalization.lift_comp {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) :
                  @[simp]
                  theorem IsLocalization.lift_of_comp {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] (j : S →+* P) :
                  IsLocalization.lift (_ : ∀ (y : { x // x M }), IsUnit (↑(RingHom.comp j (algebraMap R S)) y)) = j
                  theorem IsLocalization.monoidHom_ext {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] ⦃j : S →* P ⦃k : S →* P (h : MonoidHom.comp j ↑(algebraMap R S) = MonoidHom.comp k ↑(algebraMap R S)) :
                  j = k

                  See note [partially-applied ext lemmas]

                  theorem IsLocalization.ringHom_ext {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] ⦃j : S →+* P ⦃k : S →+* P (h : RingHom.comp j (algebraMap R S) = RingHom.comp k (algebraMap R S)) :
                  j = k

                  See note [partially-applied ext lemmas]

                  theorem IsLocalization.ext {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] (j : SP) (k : SP) (hj1 : j 1 = 1) (hk1 : k 1 = 1) (hjm : ∀ (a b : S), j (a * b) = j a * j b) (hkm : ∀ (a b : S), k (a * b) = k a * k b) (h : ∀ (a : R), j (↑(algebraMap R S) a) = k (↑(algebraMap R S) a)) :
                  j = k

                  To show j and k agree on the whole localization, it suffices to show they agree on the image of the base ring, if they preserve 1 and *.

                  theorem IsLocalization.lift_unique {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) {j : S →+* P} (hj : ∀ (x : R), j (↑(algebraMap R S) x) = g x) :
                  @[simp]
                  theorem IsLocalization.lift_id {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : S) :
                  ↑(IsLocalization.lift (_ : ∀ (y : { x // x M }), IsUnit (↑(algebraMap R S) y))) x = x
                  theorem IsLocalization.lift_surjective_iff {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) :
                  Function.Surjective ↑(IsLocalization.lift hg) ∀ (v : P), x, v * g x.snd = g x.fst
                  theorem IsLocalization.lift_injective_iff {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} (hg : ∀ (y : { x // x M }), IsUnit (g y)) :
                  Function.Injective ↑(IsLocalization.lift hg) ∀ (x y : R), ↑(algebraMap R S) x = ↑(algebraMap R S) y g x = g y
                  noncomputable def IsLocalization.map {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {T : Submonoid P} (Q : Type u_4) [CommSemiring Q] [Algebra P Q] [IsLocalization T Q] (g : R →+* P) (hy : M Submonoid.comap g T) :
                  S →+* Q

                  Map a homomorphism g : R →+* P to S →+* Q, where S and Q are localizations of R and P at M and T respectively, such that g(M) ⊆ T.

                  We send z : S to algebraMap P Q (g x) * (algebraMap P Q (g y))⁻¹, where (x, y) : R × M are such that z = f x * (f y)⁻¹.

                  Equations
                  Instances For
                    @[simp]
                    theorem IsLocalization.map_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] (x : R) :
                    ↑(IsLocalization.map Q g hy) (↑(algebraMap R S) x) = ↑(algebraMap P Q) (g x)
                    @[simp]
                    theorem IsLocalization.map_comp {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] :
                    theorem IsLocalization.map_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] (x : R) (y : { x // x M }) :
                    ↑(IsLocalization.map Q g hy) (IsLocalization.mk' S x y) = IsLocalization.mk' Q (g x) { val := g y, property := hy y (_ : y M) }
                    @[simp]
                    theorem IsLocalization.map_id_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {Q : Type u_5} [CommSemiring Q] [Algebra R Q] [IsLocalization M Q] (x : R) (y : { x // x M }) :
                    @[simp]
                    theorem IsLocalization.map_id {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] (z : S) (h : optParam (M Submonoid.comap (RingHom.id R) M) (_ : M M)) :
                    theorem IsLocalization.map_unique {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] (j : S →+* Q) (hj : ∀ (x : R), j (↑(algebraMap R S) x) = ↑(algebraMap P Q) (g x)) :
                    theorem IsLocalization.map_comp_map {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] {A : Type u_5} [CommSemiring A] {U : Submonoid A} {W : Type u_6} [CommSemiring W] [Algebra A W] [IsLocalization U W] {l : P →+* A} (hl : T Submonoid.comap l U) :
                    RingHom.comp (IsLocalization.map W l hl) (IsLocalization.map Q g hy) = IsLocalization.map W (RingHom.comp l g) fun x hx => hl (g x) (hy x hx)

                    If CommSemiring homs g : R →+* P, l : P →+* A induce maps of localizations, the composition of the induced maps equals the map of localizations induced by l ∘ g.

                    theorem IsLocalization.map_map {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] {A : Type u_5} [CommSemiring A] {U : Submonoid A} {W : Type u_6} [CommSemiring W] [Algebra A W] [IsLocalization U W] {l : P →+* A} (hl : T Submonoid.comap l U) (x : S) :
                    ↑(IsLocalization.map W l hl) (↑(IsLocalization.map Q g hy) x) = ↑(IsLocalization.map W (RingHom.comp l g) fun x hx => hl (g x) (hy x hx)) x

                    If CommSemiring homs g : R →+* P, l : P →+* A induce maps of localizations, the composition of the induced maps equals the map of localizations induced by l ∘ g.

                    theorem IsLocalization.map_smul {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {g : R →+* P} {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] (hy : M Submonoid.comap g T) [Algebra P Q] [IsLocalization T Q] (x : S) (z : R) :
                    ↑(IsLocalization.map Q g hy) (z x) = g z ↑(IsLocalization.map Q g hy) x
                    @[simp]
                    @[simp]
                    theorem IsLocalization.ringEquivOfRingEquiv_apply {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {T : Submonoid P} (Q : Type u_4) [CommSemiring Q] [Algebra P Q] [IsLocalization T Q] (h : R ≃+* P) (H : Submonoid.map (RingEquiv.toMonoidHom h) M = T) (a : S) :
                    ↑(IsLocalization.ringEquivOfRingEquiv S Q h H) a = ↑(IsLocalization.map Q h (_ : M Submonoid.comap (h) T)) a
                    noncomputable def IsLocalization.ringEquivOfRingEquiv {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {T : Submonoid P} (Q : Type u_4) [CommSemiring Q] [Algebra P Q] [IsLocalization T Q] (h : R ≃+* P) (H : Submonoid.map (RingEquiv.toMonoidHom h) M = T) :
                    S ≃+* Q

                    If S, Q are localizations of R and P at submonoids M, T respectively, an isomorphism j : R ≃+* P such that j(M) = T induces an isomorphism of localizations S ≃+* Q.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem IsLocalization.ringEquivOfRingEquiv_eq {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] [Algebra P Q] [IsLocalization T Q] {j : R ≃+* P} (H : Submonoid.map (RingEquiv.toMonoidHom j) M = T) (x : R) :
                      ↑(IsLocalization.ringEquivOfRingEquiv S Q j H) (↑(algebraMap R S) x) = ↑(algebraMap P Q) (j x)
                      theorem IsLocalization.ringEquivOfRingEquiv_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [IsLocalization M S] {T : Submonoid P} {Q : Type u_4} [CommSemiring Q] [Algebra P Q] [IsLocalization T Q] {j : R ≃+* P} (H : Submonoid.map (RingEquiv.toMonoidHom j) M = T) (x : R) (y : { x // x M }) :
                      ↑(IsLocalization.ringEquivOfRingEquiv S Q j H) (IsLocalization.mk' S x y) = IsLocalization.mk' Q (j x) { val := j y, property := (_ : j y T) }
                      @[simp]
                      theorem IsLocalization.algEquiv_apply {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (Q : Type u_4) [CommSemiring Q] [Algebra R Q] [IsLocalization M Q] (a : S) :
                      @[simp]
                      theorem IsLocalization.algEquiv_symm_apply {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (Q : Type u_4) [CommSemiring Q] [Algebra R Q] [IsLocalization M Q] (a : Q) :
                      noncomputable def IsLocalization.algEquiv {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (Q : Type u_4) [CommSemiring Q] [Algebra R Q] [IsLocalization M Q] :

                      If S, Q are localizations of R at the submonoid M respectively, there is an isomorphism of localizations S ≃ₐ[R] Q.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem IsLocalization.algEquiv_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {Q : Type u_4} [CommSemiring Q] [Algebra R Q] [IsLocalization M Q] (x : R) (y : { x // x M }) :
                        theorem IsLocalization.algEquiv_symm_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_2} [CommSemiring S] [Algebra R S] [IsLocalization M S] {Q : Type u_4} [CommSemiring Q] [Algebra R Q] [IsLocalization M Q] (x : R) (y : { x // x M }) :
                        theorem IsLocalization.isLocalization_of_algEquiv {R : Type u_1} [CommSemiring R] (M : Submonoid R) {S : Type u_2} [CommSemiring S] [Algebra R S] {P : Type u_3} [CommSemiring P] [Algebra R P] [IsLocalization M S] (h : S ≃ₐ[R] P) :

                        Constructing a localization at a given submonoid #

                        Equations
                        @[irreducible]

                        Addition in a ring localization is defined as ⟨a, b⟩ + ⟨c, d⟩ = ⟨b * c + d * a, b * d⟩.

                        Should not be confused with AddLocalization.add, which is defined as ⟨a, b⟩ + ⟨c, d⟩ = ⟨a + c, b + d⟩.

                        Equations
                        Instances For
                          theorem Localization.add_def {R : Type u_4} [CommSemiring R] {M : Submonoid R} (z : Localization M) (w : Localization M) :
                          Localization.add z w = Localization.liftOn₂ z w (fun a b c d => Localization.mk (b * c + d * a) (b * d)) (_ : ∀ {a a' : R} {b b' : { x // x M }} {c c' : R} {d d' : { x // x M }}, ↑(Localization.r M) (a, b) (a', b')↑(Localization.r M) (c, d) (c', d')Localization.mk (b * c + d * a) (b * d) = Localization.mk (b' * c' + d' * a') (b' * d'))
                          Equations
                          • Localization.instAddLocalizationToCommMonoid = { add := Localization.add }
                          theorem Localization.add_mk {R : Type u_1} [CommSemiring R] {M : Submonoid R} (a : R) (b : { x // x M }) (c : R) (d : { x // x M }) :
                          Localization.mk a b + Localization.mk c d = Localization.mk (b * c + d * a) (b * d)
                          theorem Localization.add_mk_self {R : Type u_1} [CommSemiring R] {M : Submonoid R} (a : R) (b : { x // x M }) (c : R) :
                          Equations
                          • Localization.instCommSemiringLocalizationToCommMonoid = let src := let_fun this := inferInstance; this; CommSemiring.mk (_ : ∀ (a b : Localization M), a * b = b * a)
                          @[simp]
                          theorem Localization.mkAddMonoidHom_apply {R : Type u_1} [CommSemiring R] {M : Submonoid R} (b : { x // x M }) (a : R) :
                          def Localization.mkAddMonoidHom {R : Type u_1} [CommSemiring R] {M : Submonoid R} (b : { x // x M }) :

                          For any given denominator b : M, the map a ↦ a / b is an AddMonoidHom from R to Localization M

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem Localization.mk_sum {R : Type u_1} [CommSemiring R] {M : Submonoid R} {ι : Type u_4} (f : ιR) (s : Finset ι) (b : { x // x M }) :
                            Localization.mk (Finset.sum s fun i => f i) b = Finset.sum s fun i => Localization.mk (f i) b
                            theorem Localization.mk_list_sum {R : Type u_1} [CommSemiring R] {M : Submonoid R} (l : List R) (b : { x // x M }) :
                            theorem Localization.mk_multiset_sum {R : Type u_1} [CommSemiring R] {M : Submonoid R} (l : Multiset R) (b : { x // x M }) :
                            instance Localization.algebra {R : Type u_1} [CommSemiring R] {M : Submonoid R} {S : Type u_4} [CommSemiring S] [Algebra S R] :
                            Equations
                            • One or more equations did not get rendered due to their size.
                            theorem Localization.mk_eq_mk'_apply {R : Type u_1} [CommSemiring R] {M : Submonoid R} (x : R) (y : { x // x M }) :
                            theorem Localization.mk_eq_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} :
                            Localization.mk = IsLocalization.mk' (Localization M)
                            theorem Localization.mk_algebraMap {R : Type u_1} [CommSemiring R] {M : Submonoid R} {A : Type u_4} [CommSemiring A] [Algebra A R] (m : A) :
                            Localization.mk (↑(algebraMap A R) m) 1 = ↑(algebraMap A (Localization M)) m
                            theorem Localization.mk_nat_cast {R : Type u_1} [CommSemiring R] {M : Submonoid R} (m : ) :
                            Localization.mk (m) 1 = m
                            @[simp]
                            noncomputable def Localization.algEquiv {R : Type u_1} [CommSemiring R] (M : Submonoid R) (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] :

                            The localization of R at M as a quotient type is isomorphic to any other localization.

                            Equations
                            Instances For
                              noncomputable def IsLocalization.unique (R : Type u_4) (Rₘ : Type u_5) [CommSemiring R] [CommSemiring Rₘ] (M : Submonoid R) [Subsingleton R] [Algebra R Rₘ] [IsLocalization M Rₘ] :
                              Unique Rₘ

                              The localization of a singleton is a singleton. Cannot be an instance due to metavariables.

                              Equations
                              Instances For
                                theorem Localization.algEquiv_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                                theorem Localization.algEquiv_symm_mk' {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                                theorem Localization.algEquiv_mk {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                                theorem Localization.algEquiv_symm_mk {R : Type u_1} [CommSemiring R] {M : Submonoid R} (S : Type u_2) [CommSemiring S] [Algebra R S] [IsLocalization M S] (x : R) (y : { x // x M }) :
                                theorem Localization.neg_def {R : Type u_4} [CommRing R] {M : Submonoid R} (z : Localization M) :
                                Localization.neg z = Localization.liftOn z (fun a b => Localization.mk (-a) b) (_ : ∀ {a b : R} {c d : { x // x M }}, ↑(Localization.r M) (a, c) (b, d)Localization.mk (-a) c = Localization.mk (-b) d)
                                @[irreducible]
                                def Localization.neg {R : Type u_4} [CommRing R] {M : Submonoid R} (z : Localization M) :

                                Negation in a ring localization is defined as -⟨a, b⟩ = ⟨-a, b⟩.

                                Equations
                                Instances For
                                  Equations
                                  • Localization.instNegLocalizationToCommMonoid = { neg := Localization.neg }
                                  theorem Localization.neg_mk {R : Type u_1} [CommRing R] {M : Submonoid R} (a : R) (b : { x // x M }) :
                                  Equations
                                  theorem Localization.sub_mk {R : Type u_1} [CommRing R] {M : Submonoid R} (a : R) (c : R) (b : { x // x M }) (d : { x // x M }) :
                                  Localization.mk a b - Localization.mk c d = Localization.mk (d * a - b * c) (b * d)
                                  theorem Localization.mk_int_cast {R : Type u_1} [CommRing R] {M : Submonoid R} (m : ) :
                                  Localization.mk (m) 1 = m
                                  theorem IsLocalization.to_map_eq_zero_iff {R : Type u_1} [CommRing R] {M : Submonoid R} (S : Type u_2) [CommRing S] [Algebra R S] [IsLocalization M S] {x : R} (hM : M nonZeroDivisors R) :
                                  ↑(algebraMap R S) x = 0 x = 0
                                  theorem IsLocalization.injective {R : Type u_1} [CommRing R] {M : Submonoid R} (S : Type u_2) [CommRing S] [Algebra R S] [IsLocalization M S] (hM : M nonZeroDivisors R) :
                                  theorem IsLocalization.to_map_ne_zero_of_mem_nonZeroDivisors {R : Type u_1} [CommRing R] {M : Submonoid R} (S : Type u_2) [CommRing S] [Algebra R S] [IsLocalization M S] [Nontrivial R] (hM : M nonZeroDivisors R) {x : R} (hx : x nonZeroDivisors R) :
                                  ↑(algebraMap R S) x 0
                                  theorem IsLocalization.sec_snd_ne_zero {R : Type u_1} [CommRing R] {M : Submonoid R} {S : Type u_2} [CommRing S] [Algebra R S] [IsLocalization M S] [Nontrivial R] (hM : M nonZeroDivisors R) (x : S) :
                                  (IsLocalization.sec M x).snd 0
                                  theorem IsLocalization.sec_fst_ne_zero {R : Type u_1} [CommRing R] {M : Submonoid R} {S : Type u_2} [CommRing S] [Algebra R S] [IsLocalization M S] [Nontrivial R] [NoZeroDivisors S] (hM : M nonZeroDivisors R) {x : S} (hx : x 0) :
                                  theorem IsLocalization.map_injective_of_injective {R : Type u_1} [CommRing R] (M : Submonoid R) (S : Type u_2) [CommRing S] [Algebra R S] {P : Type u_3} [CommRing P] [IsLocalization M S] (Q : Type u_5) [CommRing Q] {g : R →+* P} [Algebra P Q] (hg : Function.Injective g) [i : IsLocalization (Submonoid.map g M) Q] :

                                  Injectivity of a map descends to the map induced on localizations.

                                  @[reducible]

                                  A CommRing S which is the localization of a ring R without zero divisors at a subset of non-zero elements does not have zero divisors. See note [reducible non-instances].

                                  @[reducible]

                                  A CommRing S which is the localization of an integral domain R at a subset of non-zero elements is an integral domain. See note [reducible non-instances].

                                  @[reducible]

                                  The localization of an integral domain to a set of non-zero elements is an integral domain. See note [reducible non-instances].

                                  theorem IsField.localization_map_bijective {R : Type u_4} {Rₘ : Type u_5} [CommRing R] [CommRing Rₘ] {M : Submonoid R} (hM : ¬0 M) (hR : IsField R) [Algebra R Rₘ] [IsLocalization M Rₘ] :

                                  If R is a field, then localizing at a submonoid not containing 0 adds no new elements.

                                  theorem Field.localization_map_bijective {K : Type u_4} {Kₘ : Type u_5} [Field K] [CommRing Kₘ] {M : Submonoid K} (hM : ¬0 M) [Algebra K Kₘ] [IsLocalization M Kₘ] :

                                  If R is a field, then localizing at a submonoid not containing 0 adds no new elements.

                                  noncomputable def localizationAlgebra {R : Type u_1} [CommRing R] (M : Submonoid R) (S : Type u_2) [CommRing S] [Algebra R S] {Rₘ : Type u_4} {Sₘ : Type u_5} [CommRing Rₘ] [CommRing Sₘ] [Algebra R Rₘ] [IsLocalization M Rₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] :
                                  Algebra Rₘ Sₘ

                                  Definition of the natural algebra induced by the localization of an algebra. Given an algebra R → S, a submonoid R of M, and a localization Rₘ for M, let Sₘ be the localization of S to the image of M under algebraMap R S. Then this is the natural algebra structure on Rₘ → Sₘ, such that the entire square commutes, where localization_map.map_comp gives the commutativity of the underlying maps.

                                  This instance can be helpful if you define Sₘ := Localization (Algebra.algebraMapSubmonoid S M), however we will instead use the hypotheses [Algebra Rₘ Sₘ] [IsScalarTower R Rₘ Sₘ] in lemmas since the algebra structure may arise in different ways.

                                  Equations
                                  Instances For
                                    theorem IsLocalization.map_units_map_submonoid {R : Type u_1} [CommRing R] {M : Submonoid R} (S : Type u_2) [CommRing S] [Algebra R S] (Sₘ : Type u_5) [CommRing Sₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] [Algebra R Sₘ] [IsScalarTower R S Sₘ] (y : { x // x M }) :
                                    IsUnit (↑(algebraMap R Sₘ) y)
                                    @[simp]
                                    theorem IsLocalization.algebraMap_mk' {R : Type u_1} [CommRing R] {M : Submonoid R} (S : Type u_2) [CommRing S] [Algebra R S] (Rₘ : Type u_4) (Sₘ : Type u_5) [CommRing Rₘ] [CommRing Sₘ] [Algebra R Rₘ] [IsLocalization M Rₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] [Algebra Rₘ Sₘ] [Algebra R Sₘ] [IsScalarTower R Rₘ Sₘ] [IsScalarTower R S Sₘ] (x : R) (y : { x // x M }) :
                                    ↑(algebraMap Rₘ Sₘ) (IsLocalization.mk' Rₘ x y) = IsLocalization.mk' Sₘ (↑(algebraMap R S) x) { val := ↑(algebraMap R S) y, property := (_ : ↑(algebraMap R S) y Algebra.algebraMapSubmonoid S M) }
                                    theorem IsLocalization.algebraMap_eq_map_map_submonoid {R : Type u_1} [CommRing R] (M : Submonoid R) (S : Type u_2) [CommRing S] [Algebra R S] (Rₘ : Type u_4) (Sₘ : Type u_5) [CommRing Rₘ] [CommRing Sₘ] [Algebra R Rₘ] [IsLocalization M Rₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] [Algebra Rₘ Sₘ] [Algebra R Sₘ] [IsScalarTower R Rₘ Sₘ] [IsScalarTower R S Sₘ] :

                                    If the square below commutes, the bottom map is uniquely specified:

                                    R  →  S
                                    ↓     ↓
                                    Rₘ → Sₘ
                                    
                                    theorem IsLocalization.algebraMap_apply_eq_map_map_submonoid {R : Type u_1} [CommRing R] (M : Submonoid R) (S : Type u_2) [CommRing S] [Algebra R S] (Rₘ : Type u_4) (Sₘ : Type u_5) [CommRing Rₘ] [CommRing Sₘ] [Algebra R Rₘ] [IsLocalization M Rₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] [Algebra Rₘ Sₘ] [Algebra R Sₘ] [IsScalarTower R Rₘ Sₘ] [IsScalarTower R S Sₘ] (x : Rₘ) :

                                    If the square below commutes, the bottom map is uniquely specified:

                                    R  →  S
                                    ↓     ↓
                                    Rₘ → Sₘ
                                    
                                    theorem IsLocalization.lift_algebraMap_eq_algebraMap {R : Type u_1} [CommRing R] (M : Submonoid R) (S : Type u_2) [CommRing S] [Algebra R S] (Rₘ : Type u_4) (Sₘ : Type u_5) [CommRing Rₘ] [CommRing Sₘ] [Algebra R Rₘ] [IsLocalization M Rₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] [Algebra Rₘ Sₘ] [Algebra R Sₘ] [IsScalarTower R Rₘ Sₘ] [IsScalarTower R S Sₘ] :
                                    IsLocalization.lift (_ : ∀ (y : { x // x M }), IsUnit (↑(algebraMap R Sₘ) y)) = algebraMap Rₘ Sₘ
                                    theorem localizationAlgebra_injective {R : Type u_1} [CommRing R] {M : Submonoid R} {S : Type u_2} [CommRing S] [Algebra R S] (Rₘ : Type u_4) (Sₘ : Type u_5) [CommRing Rₘ] [CommRing Sₘ] [Algebra R Rₘ] [IsLocalization M Rₘ] [Algebra S Sₘ] [i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ] (hRS : Function.Injective ↑(algebraMap R S)) :

                                    Injectivity of the underlying algebraMap descends to the algebra induced by localization.