# Invariants of Linearly Reductive Groups

In this section, with notation as in the introduction to this chapter, $G$ will be a *linearly algebraic group* over an algebraically closed field $K$, $\rho: G \to \text{GL}(V)\cong \text{GL}_n(K)$ will be a *rational* representation of $G$, and $G$ will act on $K[V]\cong K[x_1, \dots, x_n]$ by linear substitution: If $\rho(\pi) = (a_{i, j})$, then

\[(f \;\! . \;\! \pi) (x_1, \dots, x_n) = f\bigl(\sum_j a_{1, j}x_j, \dots, \sum_j a_{n, j}x_j\bigr).\]

- The definition of linear reductivity guarantees the existence of a Reynolds operator $\mathcal R: K[V] \to K[V]$.
- By Hilbert's celebrated finiteness theorem, $K[V]^G$ is finitely generated as a $K$-algebra.
- By a result of Hochster and Roberts, $K[V]^G$ is Cohen-Macaulay.

In cases where the Reynold's operator is explicitly known, generators of invariant rings of linearly reductive groups can be found in two steps using Derksen's algorithm, see [Der99] :

- First, compute generators of Hilbert's null-cone ideal.
- Then, apply the Reynold's operator to these generators.

## Creating Invariant Rings

### How Linearly Reductive Groups and Their Representations are Given

For the computation of invariant rings in the above setting, there is no need to deal with explicit elements of $G$ or with its group structure. The implementation of Derksen's algorithm in OSCAR can handle situations where both $G$ and the representation $\rho$ are defined over an exact subfield $k$ of $K$ which is supported by OSCAR:

- $G$ is specified as an affine algebraic variety by polynomials with coefficients in $k$;
- $\rho: G \to \text{GL}(V) \cong \text{GL}_n(K)$ is specified by an $n\times n$ matrix whose entries are polynomials in the same variables as those specifying $G$, with coefficients in $k$.

Proceeding as above is not a problem: Derksen's algorithms relies on Gröbner bases techniques and means to compute Reynolds operators. It does, thus, not change the initial ground field $k$. That is, all computations are performed over $k$ and computations over any extension field of $k$ would lead to the same results.

In OSCAR, the basic set-up for a linearly reductive group in the context of Derksen's algorithm is provided by the function `linearly_reductive_group`

. At current state, this only supports rational actions of the special linear group (in characteristic zero). For the action of this group by linear substitution on, say, $n$-ary forms of degree $d$, an explicit Reynolds operator is given by Cayley's Omega-process. We show this at work later in this section.

`linearly_reductive_group`

— Method`linearly_reductive_group(sym::Symbol, m::Int, K::Field)`

Return the linearly reductive group indicated by `sym`

.

Currently, the supported options for `sym`

are:

`:SL`

, corresponding to the special linear group (of degree $m$ over the field $K$).

**Examples**

```
julia> G = linearly_reductive_group(:SL, 2, QQ)
Reductive group SL2
over QQ
julia> group_ideal(G)
Ideal generated by
z[1, 1]*z[2, 2] - z[2, 1]*z[1, 2] - 1
```

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

`linearly_reductive_group`

— Method`linearly_reductive_group(sym::Symbol, m::Int, R::MPolyRing)`

Return the linearly reductive group indicated by `sym`

.

Currently, the supported options for `sym`

are:

`:SL`

, corresponding to the special linear group (of degree $m$ over the base field $K$ of $R$, where $R$ is the polynomial ring in which the defining ideal of SL$(m, K)$ lives).

**Examples**

```
julia> S, z = polynomial_ring(QQ, "c"=> (1:2, 1:2));
julia> G = linearly_reductive_group(:SL,2,S)
Reductive group SL2
over QQ
julia> group_ideal(G)
Ideal generated by
c[1, 1]*c[2, 2] - c[2, 1]*c[1, 2] - 1
```

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

`representation_on_forms`

— Method`representation_on_forms(G::LinearlyReductiveGroup, d::Int)`

If `G`

is the special linear group acting by linear substitution on, say, `n`

-ary forms of degree `d`

, return the corresponding representation.

In accordance with classical papers, an $n$-ary form of degree $d$ in $K[x_1, \dots, x_n]$ is written as a $K$-linear combination of the $K$-basis with elements $\binom{n}{I}x^I$. Here, $I = (i_1, \dots, i_n)\in\mathbb Z_{\geq 0}^n$ with $i_1+\dots +i_n =d$.

**Examples**

```
julia> G = linearly_reductive_group(:SL, 2, QQ);
julia> r = representation_on_forms(G, 2)
Representation of SL2
on symmetric forms of degree 2
julia> representation_matrix(r)
[ z[1, 1]^2 2*z[1, 1]*z[2, 1] z[2, 1]^2]
[z[1, 1]*z[1, 2] z[1, 1]*z[2, 2] + z[2, 1]*z[1, 2] z[2, 1]*z[2, 2]]
[ z[1, 2]^2 2*z[1, 2]*z[2, 2] z[2, 2]^2]
```

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

### Constructors for Invariant Rings

`invariant_ring`

— Method`invariant_ring(r::RepresentationLinearlyReductiveGroup)`

Return the invariant ring under the action defined by the representation `r`

on an implicitly generated polynomial ring of appropriate dimension.

**Examples**

```
julia> G = linearly_reductive_group(:SL, 2, QQ);
julia> r = representation_on_forms(G, 2);
julia> RG = invariant_ring(r)
Invariant Ring of
graded multivariate polynomial ring in 3 variables over QQ
under group action of SL2
```

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

`invariant_ring`

— Method`invariant_ring(R::MPolyDecRing, r::RepresentationLinearlyReductiveGroup)`

Return the invariant subring of `R`

under the action induced by the representation of `r`

on `R`

.

**Examples**

```
julia> G = linearly_reductive_group(:SL, 3, QQ);
julia> r = representation_on_forms(G, 3);
julia> S, x = graded_polynomial_ring(QQ, "x" => 1:10);
julia> RG = invariant_ring(S, r)
Invariant Ring of
graded multivariate polynomial ring in 10 variables over QQ
under group action of SL3
```

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

### The Reynolds Operator

`reynolds_operator`

— Method`reynolds_operator(RG::RedGroupInvarRing, f::MPolyRingElem)`

Return the image of `f`

under the Reynolds operator corresponding to `RG`

.

**Examples**

```
julia> G = linearly_reductive_group(:SL, 3, QQ);
julia> r = representation_on_forms(G, 3);
julia> S, x = graded_polynomial_ring(QQ, "x" => 1:10);
julia> RG = invariant_ring(S, r);
julia> 75*reynolds_operator(RG, x[5]^4)
x[1]*x[4]*x[8]*x[10] - x[1]*x[4]*x[9]^2 - x[1]*x[5]*x[7]*x[10] + x[1]*x[5]*x[8]*x[9] + x[1]*x[6]*x[7]*x[9] - x[1]*x[6]*x[8]^2 - x[2]^2*x[8]*x[10] + x[2]^2*x[9]^2 + x[2]*x[3]*x[7]*x[10] - x[2]*x[3]*x[8]*x[9] + x[2]*x[4]*x[5]*x[10] - x[2]*x[4]*x[6]*x[9] - 2*x[2]*x[5]^2*x[9] + 3*x[2]*x[5]*x[6]*x[8] - x[2]*x[6]^2*x[7] - x[3]^2*x[7]*x[9] + x[3]^2*x[8]^2 - x[3]*x[4]^2*x[10] + 3*x[3]*x[4]*x[5]*x[9] - x[3]*x[4]*x[6]*x[8] - 2*x[3]*x[5]^2*x[8] + x[3]*x[5]*x[6]*x[7] + x[4]^2*x[6]^2 - 2*x[4]*x[5]^2*x[6] + x[5]^4
```

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

## Fundamental Systems of Invariants

`fundamental_invariants`

— Method`fundamental_invariants(RG::RedGroupInvarRing)`

Return a system of fundamental invariants for `RG`

.

**Examples**

```
julia> G = linearly_reductive_group(:SL, 2, QQ);
julia> r = representation_on_forms(G, 2);
julia> RG = invariant_ring(r);
julia> fundamental_invariants(RG)
1-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
-X[1]*X[3] + X[2]^2
```

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