# Localized Rings and Their Ideals

Let $R$ be a commutative ring with 1, and let $U \subset R$ be a *multiplicatively closed subset,* that is,

\[s, t \in U \;\Rightarrow \; s\cdot t \in U \;\text{ and }\; 1 \in U.\]

Then we can form the *localization* of $R$ at $U,$ that is, the set

\[ R[U^{-1}] = \left\{ \frac{p}{q} : p,q \in R, \, q \in U \right\},\]

equipped with its standard arithmetic for fractions. See, for instance, David Eisenbud (1995).

In this section, we describe OSCAR functionality for handling localizations of multivariate polynomial rings, as well as localizations of affine algebras, at various types of multiplicatively closed subsets. For the convenience of the developer, in an appendix, we outline a general framework for creating new concrete instances of localized rings in OSCAR, describing relevant abstract types and indicating the functionality to be implemented.

All OSCAR types discussed in this section are parametrized. For simplicity of the presentation, we omit corresponding details.

Most functions for handling localizations of multivariate polynomial rings rely on Gröbner bases. More precisely, if $R$ is a multivariate polynomial ring, Gröbner bases allow one to solve ideal- and module-theoretic questions concerning $R[U^{-1}]$ by computations over $R$.

Recall that in OSCAR, Gröbner bases are implemented for multivariate polynomial rings over fields (exact fields supported by OSCAR) and for multivariate polynomial rings over the integers.

In the local context, following Hironaka and Grauert, it is often common to use the name *standard basis* instead of Gröbner basis. See, for example, Gert-Martin Greuel, Gerhard Pfister (2008).

## Types

All OSCAR types for multiplicatively closed subsets of commutative rings with unit belong to the abstract type `AbsMultSet`

. For multiplicatively closed subsets of multivariate polynomial rings, there are the concrete descendants `MPolyComplementOfKPointIdeal`

, `MPolyComplementOfPrimeIdeal`

, and `MPolyPowersOfElement`

.

The general abstract type for localizations of commutative rings with unit is `AbsLocalizedRing`

. For localizations of multivariate polynomial rings, there is the concrete subtype `MPolyLocalizedRing`

.

## Constructors

### Multiplicatively Closed Subsets

In accordance with the above mentioned types, we have the following constructors for multiplicatively closed subsets of multivariate polynomial rings.

`complement_of_ideal`

— Method`complement_of_ideal(R::MPolyRing, a::Vector)`

Given a polynomial ring $R$, say $R = K[x_1,\dots, x_n]$, and given a vector $a = (a_1, \dots, a_n)$ of $n$ elements of $K$, return the multiplicatively closed subset $R\setminus M$, where $M$ is the maximal ideal

\[M = \langle x_1-a_1,\dots, x_n-a_n\rangle \subset R.\]

`complement_of_ideal(P::MPolyIdeal; check::Bool=false)`

Given a prime ideal $P$ of a polynomial ring $R$, say, return the multiplicatively closed subset $R\setminus P.$

If `check`

is set to `true`

, the function checks whether $P$ is indeed a prime ideal.

This may take some time.

**Examples**

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> U = complement_of_ideal(R, [0, 0 ,0])
complement of maximal ideal corresponding to point with coordinates fmpq[0, 0, 0]
julia> P = ideal(R, [x])
ideal(x)
julia> U = complement_of_ideal(P)
complement of ideal(x)
```

`powers_of_element`

— Method`powers_of_element(f::MPolyElem)`

Given an element `f`

of a polynomial ring, return the multiplicatively closed subset of the polynomial ring which is formed by the powers of `f`

.

**Examples**

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> f = x
x
julia> U = powers_of_element(f)
powers of fmpq_mpoly[x]
```

It is also possible to build products of multiplicatively closed sets already given:

`product`

— Method`product(T::AbsMPolyMultSet, U::AbsMPolyMultSet)`

Return the product of the multiplicative subsets `T`

and `U`

.

Alternatively, write `T*U`

.

**Examples**

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> T = complement_of_ideal(R, [0, 0 ,0])
complement of maximal ideal corresponding to point with coordinates fmpq[0, 0, 0]
julia> f = x
x
julia> U = powers_of_element(f)
powers of fmpq_mpoly[x]
julia> S = product(T, U)
product of the multiplicative sets [complement of maximal ideal corresponding to point with coordinates fmpq[0, 0, 0], powers of fmpq_mpoly[x]]
```

Containment in multiplicatively closed subsets can be checked via the `in`

function as indicated below:

##### Examples

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> S = complement_of_ideal(R, [0, 0 ,0])
complement of maximal ideal corresponding to point with coordinates fmpq[0, 0, 0]
julia> y in S
false
julia> P = ideal(R, [x])
ideal(x)
julia> T = complement_of_ideal(P)
complement of ideal(x)
julia> y in T
true
julia> f = x
x
julia> U = powers_of_element(f)
powers of fmpq_mpoly[x]
julia> x^3 in U
true
julia> (1+y)*x^2 in product(S, U)
true
```

### Localized Rings

`Localization`

— Method`Localization(U::AbsMPolyMultSet)`

Given a multiplicatively closed subset of a multivariate polynomial ring $R$, say, return the localization of $R$ at $U$ together with the localization map from $R$ to $R[U^{-1}]$.

`Localization(R::MPolyRing, U::AbsMPolyMultSet)`

Given a multiplicatively closed subset $U$ of $R$, proceed as above.

**Examples**

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> P = ideal(R, [x])
ideal(x)
julia> U = complement_of_ideal(P)
complement of ideal(x)
julia> Rloc, iota = Localization(R, U);
julia> Rloc
localization of Multivariate Polynomial Ring in x, y, z over Rational Field at the complement of ideal(x)
julia> iota
Map with following data
Domain:
=======
Multivariate Polynomial Ring in x, y, z over Rational Field
Codomain:
=========
localization of Multivariate Polynomial Ring in x, y, z over Rational Field at the complement of ideal(x)
```

## Data associated to Localized Rings

If `Rloc`

is the localization of a multivariate polynomial ring `R`

at a multiplicatively closed subset `U`

of `R`

, then

`base_ring(Rloc)`

refers to`R`

, and`inverted_set(Rloc)`

to`U`

.

###### Examples

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> P = ideal(R, [x])
ideal(x)
julia> U = complement_of_ideal(P)
complement of ideal(x)
julia> Rloc, _ = Localization(U);
julia> R === base_ring(Rloc)
true
julia> U === inverted_set(Rloc)
true
```

## Elements of Localized Rings

### Types

The general abstract type for elements of localizations of commutative rings with unit is `AbsLocalizedRingElem`

. For elements of localizations of multivariate polynomial rings, there is the concrete subtype `MPolyLocalizedRingElem`

.

### Creating Elements of Localized Rings

Elements of a localized multivariate polynomial ring $R[U^{-1}]$ are created as (fractions of) images of elements of $R$ under the localization map or by directly coercing (pairs of) elements of $R$ into fractions.

##### Examples

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> P = ideal(R, [x])
ideal(x)
julia> U = complement_of_ideal(P)
complement of ideal(x)
julia> Rloc, iota = Localization(U);
julia> f = iota(x)
x//1
julia> f == Rloc(x)
true
julia> g = Rloc(y, z)
y//z
julia> f+g
(x*z + y)//z
julia> f*g
(x*y)//z
```

### Data Associated to Elements of Localized Rings

Given an element `f`

of a localized multivariate ring polynomial `Rloc`

,

`parent(f)`

refers to`Rloc`

,`numerator(f)`

to the numerator of the internal representative of`f`

, and`denominator(f)`

to the denominator of the internal representative of`f`

.

##### Examples

```
julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])
julia> P = ideal(R, [x])
ideal(x)
julia> U = complement_of_ideal(P)
complement of ideal(x)
julia> Rloc, iota = Localization(U);
julia> f = iota(x)//iota(y)
x//y
julia> parent(f)
localization of Multivariate Polynomial Ring in x, y, z over Rational Field at the complement of ideal(x)
julia> g = iota(y)//iota(z)
y//z
julia> numerator(f*g)
x
julia> denominator(f*g)
z
```

## Homomorphisms from Localized Rings

Let $R[U^{-1}]$ be the localization of a multivariate polynomial ring $R$ at a multiplicatively closed subset `U`

of $R$. Then, by the universal property of localization, each homomorphism from $R[U^{-1}]$ to a commutative ring $S$ with unit is determined as the extension of a ring homomorphism $R \to S$ sending elements of $U$ to units in $S$. In OSCAR, such homomorphisms are of type `MPolyLocalizedRingHom`

. They are created using the following constructor:

`hom`

— Method`hom(Rloc::MPolyLocalizedRing, S::Ring, phi::Map)`

Given a localized ring `Rloc`

of type `MPolyLocalizedRing`

, say `Rloc`

is the localization of the multivariate polynomial ring `R`

at the multiplicatively closed subset `U`

of `R`

, and given a homomorphism `phi`

from `R`

to `S`

sending elements of `U`

to units in `S`

, return the homomorphism from `Rloc`

to `S`

whose composition with the localization map is `phi`

.

`hom(Rloc::MPolyLocalizedRing, S::Ring, images::Vector)`

Given a localized ring `Rloc`

with notation as above, and given a vector `images`

of `nvars`

elements of `S`

, let `phi`

be the homomorphism from `R`

to `S`

which is defined by the entries of `images`

, and proceed as above.

Since most multiplicative sets are infinite, the extra condition on `phi`

is typically not checked by this constructor.

**Examples**

```
julia> R, (x,) = PolynomialRing(QQ, ["x"])
(Multivariate Polynomial Ring in x over Rational Field, fmpq_mpoly[x])
julia> U = powers_of_element(x)
powers of fmpq_mpoly[x]
julia> Rloc, iota = Localization(R, U);
julia> Sprime, (X, Y) = PolynomialRing(QQ, ["X", "Y"])
(Multivariate Polynomial Ring in X, Y over Rational Field, fmpq_mpoly[X, Y])
julia> S, p = quo(Sprime, ideal(Sprime, [X*Y-1]))
(Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1), Map from
Multivariate Polynomial Ring in X, Y over Rational Field to Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1) defined by a julia-function with inverse)
julia> PHI = hom(Rloc, S, [p(X)])
morphism from the localized ring localization of Multivariate Polynomial Ring in x over Rational Field at the powers of fmpq_mpoly[x] to Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1)
julia> PHI(iota(x))
X
julia> is_unit(PHI(iota(x)))
true
```

Given a ring homomorphism `PHI`

from `Rloc`

to `S`

as above, `domain(PHI)`

and `codomain(PHI)`

refer to `Rloc`

and `S`

, respectively. Moreover, the composition of `PHI`

with the localization map is recovered as follows:

`restricted_map`

— Method`restricted_map(PHI::MPolyLocalizedRingHom)`

Given a ring homomorphism `PHI`

from a localized multivariate polynomial ring, return the composition of `PHI`

with the localization map.

**Examples**

```
julia> R, (x,) = PolynomialRing(QQ, ["x"])
(Multivariate Polynomial Ring in x over Rational Field, fmpq_mpoly[x])
julia> U = powers_of_element(x)
powers of fmpq_mpoly[x]
julia> Rloc, iota = Localization(R, U);
julia> Sprime, (X, Y) = PolynomialRing(QQ, ["X", "Y"])
(Multivariate Polynomial Ring in X, Y over Rational Field, fmpq_mpoly[X, Y])
julia> S, p = quo(Sprime, ideal(Sprime, [X*Y-1]))
(Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1), Map from
Multivariate Polynomial Ring in X, Y over Rational Field to Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1) defined by a julia-function with inverse)
julia> PHI = hom(Rloc, S, [p(X)])
morphism from the localized ring localization of Multivariate Polynomial Ring in x over Rational Field at the powers of fmpq_mpoly[x] to Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1)
julia> phi = restricted_map(PHI)
Map with following data
Domain:
=======
Multivariate Polynomial Ring in x over Rational Field
Codomain:
=========
Quotient of Multivariate Polynomial Ring in X, Y over Rational Field by ideal(X*Y - 1)
```

## Ideals in Localized Rings

### Types

Ideals in localized rings are of concrete type `MPolyLocalizedIdeal`

.

### Constructors

Given a localization `Rloc`

of a multivariate polynomial ring `R`

, and given a vector `V`

of elements of `Rloc`

(of `R`

), the ideal of `Rloc`

which is generated by (the images) of the entries of `V`

is created by entering `ideal(Rloc, V)`

.

### Data Associated to Ideals

If `I`

is an ideal of a localized multivariate polynomial ring `Rloc`

, then

`base_ring(I)`

refers to`Rloc`

,`gens(I)`

to the generators of`I`

,`ngens(I)`

to the number of these generators, and`gen(I, k)`

as well as`I[k]`

to the`k`

-th such generator.

### Operations on Ideals

If `I`

, `J`

are ideals of a localized multivariate polynomial ring `Rloc`

, then

`I^k`

refers to the`k`

-th power of`I`

,`I+J`

,`I*J`

, and`intersect(I, J)`

to the sum, product, and intersection of`I`

and`J`

, and`quotient(I, J)`

as well as`I:J`

to the ideal quotient of`I`

by`J`

.

### Tests on Ideals

The usual tests `f in J`

, `issubset(I, J)`

, and `I == J`

are available.

### Saturation

If $Rloc$ is the localization of a multivariate polynomial ring $R$ at a multplicative subset $U$ of $R$, then the ideal theory of $Rloc$ is a simplified version of the ideal theory of $R$ (see, for instance, David Eisenbud (1995)). In particular, each ideal $I$ of $Rloc$ is the extension $J\cdot Rloc$ of an ideal $J$ of $R$. The ideal

\[\{f\in R \mid uf\in J \text{ for some } u\in U\}\]

is independent of the choice of $J$ and is the largest ideal of $R$ which extends to $I$. It is, thus, the contraction of $I$ to $R$, that is, the preimage of $I$ under the localization map. We call this ideal the *saturation of $I$ over $R$*. In OSCAR, it is obtained as follows:

`saturated_ideal`

— Method`saturated_ideal(I::MPolyLocalizedIdeal)`

Given an ideal `I`

of a localization, say, `Rloc`

of a multivariate polynomial ring, say, `R`

, return the largest ideal of `R`

whose extension to `Rloc`

is `I`

. This is the preimage of `I`

under the localization map.

The function does not necessarily return a minimal set of generators for the resulting ideal.

**Examples**

```
julia> R, (x,) = PolynomialRing(QQ, ["x"])
(Multivariate Polynomial Ring in x over Rational Field, fmpq_mpoly[x])
julia> U = powers_of_element(x)
powers of fmpq_mpoly[x]
julia> Rloc, iota = Localization(R, U);
julia> I = ideal(Rloc, [x+x^2])
ideal in localization of Multivariate Polynomial Ring in x over Rational Field at the powers of fmpq_mpoly[x] generated by the elements (x^2 + x)//1
julia> saturated_ideal(I)
ideal(x + 1)
julia> U = complement_of_ideal(R, [0])
complement of maximal ideal corresponding to point with coordinates fmpq[0]
julia> Rloc, iota = Localization(R, U);
julia> I = ideal(Rloc, [x+x^2])
ideal in localization of Multivariate Polynomial Ring in x over Rational Field at the complement of maximal ideal corresponding to point with coordinates fmpq[0] generated by the elements (x^2 + x)//1
julia> saturated_ideal(I)
ideal(x)
```