# Singular

#### 7.10.5.1 nchilb

Procedure from library ncHilb.lib (see ncHilb_lib).

Usage:
nchilb(I, d[, L]), list I, int d, optional list L

Purpose:
compute Hilbert series of a non-commutative algebra

Assume:

Note:
d is an integer for the degree bound (maximal total degree of polynomials of the generating set of the input ideal),
#[]=1, computation for non-finitely generated regular ideals, #[]=2, computation of multi-graded Hilbert series,
#[]=tdeg, for obtaining the truncated Hilbert series up to the total degree tdeg-1 (tdeg should be > 2), and #[]=string(p), to print the details about the orbit and system of equations. Let the orbit is O_I = {T_{w_1}(I),...,T_{w_r}(I)} ($w_i\in W$), where we assume that if T_{w_i}(I)=T_{w_i'}(I)$for some$w'_i\in W$, then$deg(w_i)\leq deg(w'_i)\$.
Then, it prints words description of orbit: w_1,...,w_r. It also prints the maximal degree and the cardinality of \sum_j R(w_i, b_j) corresponding to each w_i, where {b_j} is a basis of I.
Moreover, it also prints the linear system (for the information about adjacency matrix) and its solving time.

Note :
A Groebner basis of two-sided ideal of the input should be given in a special form. This form is a list of modules, where each generator of every module represents a monomial times a coefficient in the free associative algebra. The first entry, in each generator, represents a coefficient and every next entry is a variable.

Ex: module p1=[1,y,z],[-1,z,y], represents the poly y*z-z*y; module p2=[1,x,z,x],[-1,z,x,z], represents the poly x*z*x-z*x*z for more details about the input, see examples.

Example:
 LIB "ncHilb.lib"; ring r=0,(X,Y,Z),dp; module p1 =[1,Y,Z]; //represents the poly Y*Z module p2 =[1,Y,Z,X]; //represents the poly Y*Z*X module p3 =[1,Y,Z,Z,X,Z]; module p4 =[1,Y,Z,Z,Z,X,Z]; module p5 =[1,Y,Z,Z,Z,Z,X,Z]; module p6 =[1,Y,Z,Z,Z,Z,Z,X,Z]; module p7 =[1,Y,Z,Z,Z,Z,Z,Z,X,Z]; module p8 =[1,Y,Z,Z,Z,Z,Z,Z,Z,X,Z]; list l1=list(p1,p2,p3,p4,p5,p6,p7,p8); nchilb(l1,10); ==> ==> maximal length of words = 2 ==> ==> length of the Orbit = 3 ==> ==> ==> Hilbert series: ==> 1/(t2-3t+1) ring r2=0,(x,y,z),dp; module p1=[1,y,z],[-1,z,y]; //y*z-z*y module p2=[1,x,z,x],[-1,z,x,z]; // x*z*x-z*x*z module p3=[1,x,z,z,x,z],[-1,z,x,z,z,x]; // x*z^2*x*z-z*x*z^2*x module p4=[1,x,z,z,z,x,z],[-1,z,x,z,z,x,x]; // x*z^3*x*z-z*x*z^2*x^2 list l2=list(p1,p2,p3,p4); nchilb(l2,6,1); //third argument '1' is for non-finitely generated case ==> ==> maximal length of words = 3 ==> ==> length of the Orbit = 7 ==> ==> ==> Hilbert series: ==> (t3+t2+1)/(2t5-2t4-t3+2t2-3t+1) ring r3=0,(a,b),dp; module p1=[1,a,a,a]; module p2=[1,a,b,b]; module p3=[1,a,a,b]; list l3=list(p1,p2,p3); nchilb(l3,5,2);//third argument '2' is to compute multi-graded HS ==> ==> maximal length of words = 3 ==> ==> length of the Orbit = 5 ==> ==> ==> Hilbert series: ==> (t1^2+t1+1)/(t1*t2^2-t1*t2-t2+1) ring r4=0,(x,y,z),dp; module p1=[1,x,z,y,z,x,z]; module p2=[1,x,z,x]; module p3=[1,x,z,y,z,z,x,z]; module p4=[1,y,z]; module p5=[1,x,z,z,x,z]; list l4=list(p1,p2,p3,p4,p5); nchilb(l4,7,"p"); //third argument "p" is to print the details ==> ==> maximal length of words = 3 ==> ==> length of the Orbit = 6 ==> words description of the Orbit: ==> 1 x y x*z y*z x*z*z ==> ==> maximal degree, #(sum_j R(w,w_j)) ==> NULL ==> 6, 4 ==> 1, 1 ==> 5, 4 ==> 0, 1 ==> 2, 1 ==> ==> linear system: ==> H(1) = (t)*H(2) + (t)*H(3) + (t)*H(1) + 1 ==> H(2) = (t)*H(2) + (t)*H(3) + (t)*H(4) + 1 ==> H(3) = (t)*H(2) + (t)*H(3) + (t)*H(5) + 1 ==> H(4) = (t)*H(5) + (t)*H(3) + (t)*H(6) + 1 ==> H(5) = (t)*H(5) + (t)*H(5) + (t)*H(5) + 0 ==> H(6) = (t)*H(3) + (t)*H(3) + (t)*H(1) + 1 ==> where H(1) represents the series corresp. to input ideal ==> and i^th summand in the rhs of an eqn. is according ==> to the right colon map corresp. to the i^th variable ==> ==> ==> Hilbert series: ==> (t3+t2+1)/(2t5-2t4-t3+2t2-3t+1) // of the orbit and system