# GR-Algebras: Quotients of PBW-Algebras

In analogy to the affine algebras section in the commutative algebra chapter, we describe OSCAR functionality for dealing with quotients of PBW-algebras modulo two-sided ideals.

Quotients of PBW-algebras modulo two-sided ideals are also known as *GR-algebras* (here, *GR* stands for *Gröbner-Ready*; see [Lev05]).

## Types

GR-algebras are modeled by objects of type `PBWAlgQuo{T, S} <: NCRing`

, their elements are objects of type `PBWAlgQuoElem{T, S} <: NCRingElem`

. Here, `T`

is the element type of the field over which the GR-algebra is defined (the type `S`

is added for internal use).

## Constructors

`quo`

— Method`quo(A::PBWAlgRing, I::PBWAlgIdeal)`

Given a two-sided ideal `I`

of `A`

, create the quotient algebra $A/I$ and return the new algebra together with the quotient map $A\to A/I$.

**Examples**

```
julia> R, (x, y, z) = QQ["x", "y", "z"];
julia> L = [-x*y, -x*z, -y*z];
julia> REL = strictly_upper_triangular_matrix(L);
julia> A, (x, y, z) = pbw_algebra(R, REL, deglex(gens(R)))
(PBW-algebra over Rational field in x, y, z with relations y*x = -x*y, z*x = -x*z, z*y = -y*z, PBWAlgElem{QQFieldElem, Singular.n_Q}[x, y, z])
julia> I = two_sided_ideal(A, [x^2, y^2, z^2])
two_sided_ideal(x^2, y^2, z^2)
julia> Q, q = quo(A, I);
julia> Q
(PBW-algebra over Rational field in x, y, z with relations y*x = -x*y, z*x = -x*z, z*y = -y*z)/two_sided_ideal(x^2, y^2, z^2)
julia> q
Map defined by a julia-function with inverse
from pBW-algebra over Rational field in x, y, z with relations y*x = -x*y, z*x = -x*z, z*y = -y*z
to (PBW-algebra over Rational field in x, y, z with relations y*x = -x*y, z*x = -x*z, z*y = -y*z)/two_sided_ideal(x^2, y^2, z^2)
```

The example above, shows one way of constructing the exterior algebra on the variables `x`

, `y`

, `z`

over $\mathbb Q$. For reasons of efficiency, it is recommended to use the built-in constructor `exterior_algebra`

when working with exterior algebras in OSCAR.

### Exterior Algebras

The *$n$-th exterior algebra over a field $K$* is the quotient of the PBW-algebra

\[A=K \langle e_1,\dots, e_n \mid e_i e_j = - e_j e_i \ \text { for }\ i\neq j\rangle\]

modulo the two-sided ideal

\[\langle e_1^2,\dots, e_n^2\rangle.\]

`exterior_algebra`

— Function```
exterior_algebra(K::Field, numVars::Int)
exterior_algebra(K::Field, listOfVarNames::AbstractVector{<:VarName})
```

The *first form* returns an exterior algebra with coefficient field `K`

and `numVars`

variables: `numVars`

must be positive, and the variables are called `e1, e2, ...`

.

The *second form* returns an exterior algebra with coefficient field `K`

, and variables named as specified in `listOfVarNames`

(which must be non-empty).

NOTE: Creating an `exterior_algebra`

with many variables will create an object occupying a lot of memory (probably cubic in `numVars`

).

**Examples**

```
julia> ExtAlg, (e1,e2) = exterior_algebra(QQ, 2);
julia> e2*e1
-e1*e2
julia> (e1+e2)^2 # result is automatically reduced!
0
julia> ExtAlg, (x,y) = exterior_algebra(QQ, ["x","y"]);
julia> y*x
-x*y
```

This function is part of the experimental code in Oscar. Please read here for more details.

## Data Associated to Affine GR-Algebras

### Basic Data

If `Q=A/I`

is the quotient ring of a PBW-algebra `A`

modulo a two-sided ideal `I`

of `A`

, then

`base_ring(Q)`

refers to`A`

,`modulus(Q)`

to`I`

,`gens(Q)`

to the generators of`Q`

,`number_of_generators(Q)`

/`ngens(Q)`

to the number of these generators, and`gen(Q, i)`

as well as`Q[i]`

to the`i`

-th such generator.

###### Examples

```
julia> R, (x, y, z) = QQ["x", "y", "z"];
julia> L = [-x*y, -x*z, -y*z];
julia> REL = strictly_upper_triangular_matrix(L);
julia> A, (x, y, z) = pbw_algebra(R, REL, deglex(gens(R)));
julia> I = two_sided_ideal(A, [x^2, y^2, z^2]);
julia> Q, q = quo(A, I);
julia> base_ring(Q)
PBW-algebra over Rational field in x, y, z with relations y*x = -x*y, z*x = -x*z, z*y = -y*z
julia> modulus(Q)
two_sided_ideal(x^2, y^2, z^2)
julia> gens(Q)
3-element Vector{PBWAlgQuoElem{QQFieldElem, Singular.n_Q}}:
x
y
z
julia> number_of_generators(Q)
3
julia> gen(Q, 2)
y
```

## Elements of GR-Algebras

### Types

The OSCAR type for elements of quotient rings of multivariate polynomial rings PBW-algebras is of parametrized form `PBWAlgQuoElem{T, S}`

, where `T`

is the element type of the field over which the GR-algebra is defined (the type `S`

is added for internal use).

### Creating Elements of GR-Algebras

Elements of a GR-algebra $Q = A/I$ are created as images of elements of $A$ under the projection map or by directly coercing elements of $A$ into $Q$. The function `simplify`

reduces a given element with regard to the modulus $I$.

###### Examples

```
julia> R, (x, y, z) = QQ["x", "y", "z"];
julia> L = [-x*y, -x*z, -y*z];
julia> REL = strictly_upper_triangular_matrix(L);
julia> A, (x, y, z) = pbw_algebra(R, REL, deglex(gens(R)));
julia> I = two_sided_ideal(A, [x^2, y^2, z^2]);
julia> Q, q = quo(A, I);
julia> f = q(y*x+z^2)
-x*y + z^2
julia> typeof(f)
PBWAlgQuoElem{QQFieldElem, Singular.n_Q}
julia> simplify(f);
julia> f
-x*y
julia> g = Q(y*x+x^2)
x^2 - x*y
julia> f == g
true
```

### Data associated to Elements of GR-Algebras

Given an element `f`

of an affine GR-algebra `Q`

,

`parent(f)`

refers to`Q`

.