Invariants of Tori

In this section, with notation as in the introduction to this chapter, $T = (K^{\ast})^m$ will be a torus of rank $m$ over an algebraically closed field $K$, acting diagonally on $V$. As for linearly reductive groups, $T$ and its representation are defined over a subfield $k$ of $K$ supported by OSCAR, and all computations are performed over $k$.

In principle, invariants of diagonal torus actions can be computed with Derksen's algorithm from the previous section. OSCAR instead uses Algorithm 4.3.1 in [DK15], which relies on polyhedral geometry and, as the authors put it, "is simpler and more efficient".

Creating Invariant Rings

How Tori and Their Representations are Given

torus_group — Method
torus_group(k::Field, m::Int)

Return the torus $(K^{\ast})^m$ defined over k, where $K$ is an algebraic closure of k.

Note

In the context of computing invariant rings, there is no need to deal with the group structure of a torus: The torus $(K^{\ast})^m$ is specified by just giving $k$ and $m$.

Examples

julia> T = torus_group(QQ,2)
Torus of rank 2
  defined over QQ
Experimental

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

source
rank — Method
rank(T::TorusGroup)

Return the rank of T.

Examples

julia> T = torus_group(QQ,2);

julia> rank(T)
2
Experimental

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

source
base_ring — Method
base_ring(T::TorusGroup)

Return the field over which T is defined.

Examples

julia> T = torus_group(QQ,2);

julia> base_ring(T)
Rational field
Experimental

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

source
representation_from_weights — Method
representation_from_weights(T::TorusGroup, W::Union{ZZMatrix, Matrix{<:IntegerUnion}, Vector{<:IntegerUnion}})

Return the diagonal action of T with weights given by W.

The matrix W has one row for each coordinate of the vector space on which T acts, and $m$ = rank(T) columns: if the $i$-th row is $(w_1, \dots, w_m)$, then $t = (t_1, \dots, t_m) \in T$ multiplies the $i$-th coordinate by $t_1^{w_1} \cdots t_m^{w_m}$. If $m = 1$, then W may also be a vector.

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1])
Representation
  of torus of rank 2 defined over QQ
  with weights Vector{ZZRingElem}[[-1, 1], [-1, 1], [2, -2], [0, -1]]
Experimental

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

source
weights — Method
weights(r::RepresentationTorusGroup)

Return the weights of r, one for each coordinate of the vector space on which the torus acts diagonally.

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> weights(r)
4-element Vector{Vector{ZZRingElem}}:
 [-1, 1]
 [-1, 1]
 [2, -2]
 [0, -1]
Experimental

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

source
group — Method
group(r::RepresentationTorusGroup)

Return the torus group represented by r.

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> group(r)
Torus of rank 2
  defined over QQ
Experimental

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

source

If r is a representation of a torus on $V$, then degree(r) and vector_space_dim(r) refer to the dimension $n$ of $V$.

Constructor for Invariant Rings

invariant_ring — Method
invariant_ring(r::RepresentationTorusGroup)

Return the invariant ring of the torus group represented by r.

Note

The creation of invariant rings is lazy in the sense that no explicit computations are done until specifically invoked (for example, by the fundamental_invariants function).

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> RT = invariant_ring(r)
Invariant ring
  of graded multivariate polynomial ring in 4 variables over QQ
  under group action of torus of rank 2 defined over QQ
Experimental

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

source

Basic Data Associated to Invariant Rings

If RT is the invariant ring $k[x_1, \dots, x_n]^T$ of a torus $T$, then

  • group(RT) refers to $T$,
  • coefficient_ring(RT) to $k$, and
  • polynomial_ring(RT) to $k[x_1, \dots, x_n]$.

The Reynolds Operator

reynolds_operator — Method
reynolds_operator(RT::TorGroupInvarRing, f::MPolyRingElem)

Return the image of f under the Reynolds operator corresponding to RT.

This is the projection onto the invariant polynomials: it keeps the terms of f whose monomial $x^a$ has weight $\sum_i a_i w_i = 0$, where $w_i$ is the weight of $x_i$, and drops the others.

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> RT = invariant_ring(r);

julia> X = gens(polynomial_ring(RT));

julia> reynolds_operator(RT, (X[1] + X[2] + X[3] + X[4])^3)
3*X[1]^2*X[3] + 6*X[1]*X[2]*X[3] + 3*X[2]^2*X[3]
Experimental

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

source

The Null Cone

null_cone_ideal — Method
null_cone_ideal(RG::RedGroupInvarRing)

Return Hilbert's ideal, the ideal of polynomial_ring(RG) generated by the invariants of positive degree.

Its zero set is the null cone, the set of all $v \in V$ such that the closure of the orbit $G v$ contains $0$. The generators are computed as in Derksen's algorithm [Der99] and need not be invariants.

Examples

For binary quartics, the second generator is not invariant:

julia> G = linearly_reductive_group(:SL, 2, QQ);

julia> RG = invariant_ring(representation_on_forms(G, 4));

julia> null_cone_ideal(RG)
Ideal generated by
  X[1]*X[5] - 4*X[2]*X[4] + 3*X[3]^2
  4*X[1]*X[3]*X[5] - 3*X[1]*X[4]^2 - 3*X[2]^2*X[5] + 2*X[2]*X[3]*X[4]
Experimental

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

source
null_cone_ideal(RT::TorGroupInvarRing)

Return Hilbert's ideal, the ideal of polynomial_ring(RT) generated by the invariants of positive degree.

Its zero set is the null cone, the set of all $v \in V$ such that the closure of the orbit $T v$ contains $0$. The generators are the fundamental invariants of RT.

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> RT = invariant_ring(r);

julia> null_cone_ideal(RT)
Ideal generated by
  X[1]^2*X[3]
  X[1]*X[2]*X[3]
  X[2]^2*X[3]
Experimental

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

source

Fundamental Systems of Invariants

fundamental_invariants — Method
fundamental_invariants(RT::TorGroupInvarRing)

Return a system of fundamental invariants for RT.

Examples

julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> RT = invariant_ring(r);

julia> fundamental_invariants(RT)
3-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
 X[1]^2*X[3]
 X[1]*X[2]*X[3]
 X[2]^2*X[3]
Experimental

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

source

Invariant Rings as Affine Algebras

affine_algebra — Method
affine_algebra(RG::RedGroupInvarRing)
affine_algebra(RG::TorGroupInvarRing)

Return the invariant ring RG as an affine algebra (this amounts to compute the algebra syzygies among the fundamental invariants of RG).

In addition, if A is this algebra, and R is the polynomial ring of which RG is a subalgebra, return the inclusion homomorphism A $\hookrightarrow$ R whose image is RG.

Examples

julia> G = linearly_reductive_group(:SL, 2, QQ);

julia> r = representation_on_forms(G, 2);

julia> S, x = graded_polynomial_ring(QQ, :x => 1:3);

julia> RG = invariant_ring(S, r);

julia> A, AtoS = affine_algebra(RG)
(Quotient of multivariate polynomial ring by ideal (0), Hom: A -> S)
julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> RT = invariant_ring(r);

julia> fundamental_invariants(RT)
3-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
 X[1]^2*X[3]
 X[1]*X[2]*X[3]
 X[2]^2*X[3]

julia> affine_algebra(RT)
(Quotient of multivariate polynomial ring by ideal (-t[1]*t[3] + t[2]^2), Hom: quotient of multivariate polynomial ring -> graded multivariate polynomial ring)
Experimental

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

source

The Hilbert Series

hilbert_series — Method
hilbert_series(RG::RedGroupInvarRing)
hilbert_series(RG::TorGroupInvarRing)

Return the Hilbert series of RG as hilbert_series does for the graded affine algebra returned by affine_algebra(RG): a pair $(p, q)$ of univariate polynomials such that $p/q$ is the Hilbert series, where $q = (1-t^{d_1}) \cdots (1-t^{d_s})$ and $d_1, \dots, d_s$ are the degrees of the fundamental invariants.

Examples

julia> G = linearly_reductive_group(:SL, 2, QQ);

julia> RG = invariant_ring(representation_on_forms(G, 4));

julia> hilbert_series(RG)
(1, (-t^2 + 1)^1*(-t^3 + 1)^1)
julia> T = torus_group(QQ,2);

julia> r = representation_from_weights(T, [-1 1; -1 1; 2 -2; 0 -1]);

julia> RT = invariant_ring(r);

julia> hilbert_series(RT)
(-t^6 + 1, (-t^3 + 1)^3)
Experimental

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

source