Goto Chapter: Top 1 2 Bib Ind

### 1 Quillen-Suslin

The algorithms below can be used to reduce the number of generators of a module over a polynomial ring. In particular, it can be used to find a free basis of a free finitely presented module. The used references are [BLH11], [CLO05], [Fab08], [FQ07], [hpa13], [LW00].

#### 1.1 Tool procedures

##### 1.1-1 SuslinLemma
 ‣ SuslinLemma( f, g, j ) ( operation )

Returns: a homalg ring element

Returns a linear combination of f and g with leading coefficient being the j-th coefficient of g. f has to be monic.

gap> Q := HomalgFieldOfRationalsInSingular( );;
gap> R := ( Q * "x" ) * "y";
Q[x][y]
gap> AssignGeneratorVariables( R );
#I  Assigned the global variables [ x, y ]
gap> f := x^2*y^4+23*x*y^5+y^6+7*x-y^2;;
gap> g := (4*x*y^2+x^2+x^2*y-x*y^3);;
gap> h := y^2 * g;;
gap> G := (4*x*y^2+x^2+2*y-x*y^3);;
gap> SuslinLemma( f, g, 3 );
[ -x^3*y^3-23*x^2*y^4-x*y^5+x^4*y+27*x^3*y^2+93*x^2*y^3+4*x*y^4+x^4+23*x^3*y+
x^2*y^2, 0, x^2+23*x*y+y^2 ]
gap> SuslinLemma( f, g, 2 );
[ x^4*y^2+27*x^3*y^3+93*x^2*y^4+4*x*y^5+x^4*y+23*x^3*y^2+x^2*y^3-x*y^2+7*x^2,
x, x^2*y+23*x*y^2+y^3 ]
gap> SuslinLemma( f, g, 1 );
[ x^4*y^3+23*x^3*y^4+x^2*y^5+x^4*y^2+23*x^3*y^3+x^2*y^4+6*x^2*y-29*x^2,
x*y-4*x, x^2*y^2+23*x*y^3+y^4-1 ]
gap> SuslinLemma( f, g, 0 );
[ x^4*y^3+23*x^3*y^4+x^2*y^5+7*x^2*y^2-7*x^3-29*x^2*y, x*y^2-x^2-4*x*y,
x^2*y^3+23*x*y^4+y^5-y ]
gap> SuslinLemma( f, h, 5 );
[ -x*y^5+x^2*y^3+4*x*y^4+x^2*y^2, 0, 1]
gap> SuslinLemma( f, h, 4 );
[ x^3*y^4+23*x^3*y^3+93*x^2*y^4+4*x*y^5+23*x^3*y^2+x^2*y^3-x*y^2+7*x^2, x,
23*x+y ]
gap> SuslinLemma( f, h, 3 );
[ x^4*y^3+23*x^3*y^4+x^2*y^5+x^4*y^2+23*x^3*y^3+x^2*y^4-x*y^3+7*x^2*y+
4*x*y^2-28*x^2, x*y-4*x, x^2+23*x*y+y^2 ]
gap> SuslinLemma( f, h, 2 );
[ x^4*y^3+23*x^3*y^4+x^2*y^5-x*y^4+8*x^2*y^2+4*x*y^3-7*x^3-28*x^2*y,
x*y^2-x^2-4*x*y, x^2*y+23*x*y^2+y^3 ]
gap> SuslinLemma( f, h, 1 );
[ 0, 0, 0 ]
gap> SuslinLemma( f, h, 0 );
[ 0, 0, 0 ]
gap> SuslinLemma( f, G, 1 );
[ x^4*y^2+23*x^3*y^3+x^2*y^4+2*x^2*y^3+46*x*y^4+2*y^5+7*x^2*y-29*x^2-2*y,
x*y-4*x, x^2*y^2+23*x*y^3+y^4-1 ]


##### 1.1-2 SuslinLemma
 ‣ SuslinLemma( row, pos_f, pos_g, j ) ( operation )

Returns: a list

Returns a list of 5 objects: [ row * T, T, TI, pos_h, bj ].
T is a square transformation matrix which transforms pos_h-th entry of the row to the linear combination of the monic entry $$f$$ and $$g$$ (at pos_f and pos_g-th positions, respectively) with leading coefficient being the j-th coefficient bj of $$g$$ and TI is the inverse matrix of T.
$$f$$ has to be monic and bj is a unit.
The corresponding method should make use of the three argument SuslinLemma (1.1-1).

InstallMethod( SuslinLemma,
"for a homalg matrix and three integers",
[ IsHomalgMatrix, IsInt, IsInt, IsInt ],
<P/>
function( row, pos_f, pos_g, j )
local c, bool_inv, f, g, bj, pos_h, h, deg_h, e, af, ag, lc, a, R, T, TI;
<P/>
Info( InfoQuillenSuslin, 4, "Entering SuslinLemma for row" );
<P/>
if not NrRows( row ) = 1 then
Error( "Number of rows should be 1\n" );
fi;
<P/>
c := NrColumns( row );
<P/>
if c < 3 then
Error( "the row has less than three columns\n" );
fi;
<P/>
if HasIsRightInvertibleMatrix( row ) then
bool_inv := IsRightInvertibleMatrix( row );
fi;
<P/>
f := row[ 1, pos_f ];
g := row[ 1, pos_g ];
<P/>
bj := CoefficientOfUnivariatePolynomial( g, j );
<P/>
Assert( 4, IsUnit( bj ) ); ## in the local base ring
<P/>
pos_h := First( [ 1 .. c ], i -> not i in [ pos_f, pos_g ] );
h := row[ 1, pos_h ];
<P/>
deg_h := Degree( h );
<P/>
Assert( 0, deg_h < Degree( f ) and not IsMonic( h ) );
<P/>
e := SuslinLemma( f, g, j );
<P/>
af := e[2];
ag := e[3];
e := e[1];
<P/>
Assert( 4, LeadingCoefficient( e ) = bj );
<P/>
if deg_h < Degree( f ) - 1 then
a := bj^-1;
else
a := ( 1 - lc ) * bj^-1;
fi;
<P/>
R := HomalgRing( row );
T := HomalgInitialIdentityMatrix( c, R );
TI := HomalgInitialIdentityMatrix( c, R );
<P/>
T[ pos_f, pos_h ] := a * af;
T[ pos_g, pos_h ] := a * ag;
<P/>
TI[ pos_f, pos_h ] := -a * af;
TI[ pos_g, pos_h ] := -a * ag;
<P/>
MakeImmutable( T );
MakeImmutable( TI );
<P/>
Assert( 4, IsOne( T * TI ) );
<P/>
row := row * T;
<P/>
if IsBound( bool_inv ) then
## We cannot algorithmically verify the line below.
## TODO: should become obsolete with ToDo-lists in MatricesForHomalg.
SetIsRightInvertibleMatrix( row, bool_inv );
fi;
<P/>
Info( InfoQuillenSuslin, 4, "Leaving SuslinLemma for row" );
<P/>
return [ row, T, TI, pos_h, bj ];
<P/>
end );


Continuing of the previous example:

gap> row := HomalgMatrix( [ h, G, f, g + h ], 1, 4, R );;
gap> sus := SuslinLemma( row, 3, 2, 1 );
[ <An unevaluated 1 x 4 matrix over an external ring>,
<A 4 x 4 matrix over an external ring>, <A 4 x 4 matrix over an external ring>,
1, 2 ]
gap> EntriesOfHomalgMatrix( sus[1] );
[ 1/2*x^5*y^2+23/2*x^4*y^3+1/2*x^3*y^4+1/2*x^4*y^2+25/2*x^3*y^3+47/2*x^2*y^4+
2*x^2*y^3+27*x*y^4+y^5+7/2*x^3*y+x^2*y^2-29/2*x^3+7/2*x^2*y-29/2*x^2-x*y-y,
-x*y^3+4*x*y^2+x^2+2*y, x^2*y^4+23*x*y^5+y^6-y^2+7*x, -x*y^5+x^2*y^3+4*x*y^4+
x^2*y^2-x*y^3+x^2*y+4*x*y^2+x^2 ]
gap> EntriesOfHomalgMatrix( sus[2] );
[ 1, 0, 0, 0, 1/2*x^3*y^2+23/2*x^2*y^3+1/2*x*y^4+1/2*x^2*y^2+23/2*x*y^3+
1/2*y^4-1/2*x-1/2, 1, 0, 0, 1/2*x^2*y-2*x^2+1/2*x*y-2*x, 0, 1, 0, 0, 0, 0, 1 ]
gap> EntriesOfHomalgMatrix( sus[3] );
[ 1, 0, 0, 0, -1/2*x^3*y^2-23/2*x^2*y^3-1/2*x*y^4-1/2*x^2*y^2-23/2*x*y^3-1/2*y^4+
1/2*x+1/2, 1, 0, 0, -1/2*x^2*y+2*x^2-1/2*x*y+2*x, 0, 1, 0, 0, 0, 0, 1 ]


##### 1.1-3 Horrocks
 ‣ Horrocks( row, o ) ( operation )

Returns: a list

Returns a list of two matrices: [ T, TI ].
T is a square transformation matrix which transforms row to unit row. TI is the inverse matrix of T.
row is a unimodular matrix with at least 3 entries in which the o-th entry is monic.

gap> Q := HomalgFieldOfRationalsInSingular( );;
gap> R := ( Q * "x" ) * "y";
Q[x][y]
gap> row := HomalgMatrix( "[ x^2, y+1/2, x^5*y^2+y ]", 1, 3, R );
<A 1 x 3 matrix over an external ring>
gap> IsRightInvertibleMatrix( row );
true
gap> m1 := AMaximalIdealContaining( ZeroLeftSubmodule( BaseRing( R ) ) );;
gap> m1 := EntriesOfHomalgMatrix( MatrixOfSubobjectGenerators( m1 ) );;
gap> S1 := LocalizeBaseRingAtPrime( R, m1 );
( Q[x]_< x > )[y]
gap> row1 := S1 * row;
<A 1 x 3 matrix over a (fake) local ring>
gap> IsRightInvertibleMatrix( row1 );
true
gap> H1 := Horrocks( row1, 2 );
[ <An unevaluated 3 x 3 matrix over a (fake) local ring>,
<An unevaluated 3 x 3 matrix over a (fake) local ring> ]
gap> EntriesOfHomalgMatrix( H1[1] );
[ 1, -y-1/2, (-x^5+2)/4, (4*x^7-4*x^5)/(x^5-2)*y+(-2*x^2+2),
(-4*x^7+4*x^5)/(x^5-2)*y^2+(-4*x^2+4)/(x^5-2)*y+(x^2),
(-x^7)*y+(x^7-2*x^2)/2, (-4*x^2+4)/(x^5-2),
(4*x^2-4)/(x^5-2)*y+(2*x^2-2)/(x^5-2), (x^2) ]
gap> EntriesOfHomalgMatrix( H1[2] );
[ (x^2), y+1/2, (x^5)*y^2+y, 0, 1, (x^5)*y+(-x^5+2)/2,
(4*x^2-4)/(x^5-2), 0, 1 ]
gap> Delta1 := Denominator( H1[1] ) / BaseRing( R );
x^5-2
gap> m2 := AMaximalIdealContaining( LeftSubmodule( [ Delta1 ] ) );;
gap> m2 := EntriesOfHomalgMatrix( MatrixOfSubobjectGenerators( m2 ) );;
gap> S2 := LocalizeBaseRingAtPrime( R, m2 );
( Q[x]_< x^5-2 > )[y]
gap> row2 := S2 * row;;
gap> IsRightInvertibleMatrix( row2 );
true
gap> H2 := Horrocks( row2, 2 );
[ <An unevaluated 3 x 3 matrix over a (fake) local ring>,
<An unevaluated 3 x 3 matrix over a (fake) local ring> ]
gap> EntriesOfHomalgMatrix( H2[1] );
[ (x^5-2)/4, (x^5-6)/(4*x^2)*y+(x^5-6)/(8*x^2), (-x^5+6)/(4*x^2),
(x^7)*y+(-x^7+2*x^2)/2, (x^5)*y^2+y+(-x^5+6)/4, (-x^5)*y+(x^5-2)/2,
(-x^2), -y-1/2, 1 ]
gap> EntriesOfHomalgMatrix( H2[2] );
[ 1, 0, (x^5-6)/(4*x^2), 0, 1, (x^5)*y+(-x^5+2)/2, (x^2), y+1/2,
(x^5)*y^2+y ]
gap> Delta2 := Denominator( H2[1] ) / BaseRing( R );
4*x^2
gap> I := LeftSubmodule( [ Delta1, Delta2 ] );;
gap> IsOne( I );
true


##### 1.1-4 Patch
 ‣ Patch( row, Vs, VIs ) ( operation )

Returns: a homalg matrix

Returns a square matrix V over a univariate polynomial ring $$R=B[y]$$ over a (polynomial) base ring $$B$$, such that row*V is equal to row with $$y$$ set to $$0$$.
The arguments Vs and VIs are lists of matrices obtained from Horrocks over a localization of $$R$$ defined by various maximal ideals of $$B$$.
VIs$$[j]$$ is the inverse of Vs$$[j]$$. The denominators of Vs$$[j]$$ must generate the unit ideal of $$B$$.

gap> V := Patch( row, [ H1[1], H2[1] ], [ H1[2], H2[2] ] );
<A 3 x 3 matrix over an external ring>
gap> EntriesOfHomalgMatrix( V );
[ 1, 1/8*x^8*y+1/2*x^5*y-3/4*x^3*y-y,
-1/16*x^13*y-1/4*x^10*y+1/2*x^8*y+x^5*y-3/4*x^3*y-y, 0,
1/2*x^10*y^2-1/4*x^10*y+2*x^7*y^2-x^7*y-2*x^5*y^2+3/2*x^5*y+2*x^2*y-\
2*y+1,
-1/4*x^15*y^2+1/8*x^15*y-x^12*y^2+1/2*x^12*y+3/2*x^10*y^2-x^10*y+2*x\
^7*y^2-2*x^7*y-2*x^5*y^2+3/2*x^5*y+2*x^2*y-2*y, 0,
-1/2*x^5*y-2*x^2*y+2*y, 1/4*x^10*y+x^7*y-3/2*x^5*y-2*x^2*y+2*y+1 ]
gap> EntriesOfHomalgMatrix( row * V );
[ x^2, 1/2, 0 ]
gap> y := RelativeIndeterminatesOfPolynomialRing( R )[1];;
gap> row * V = Value( row, y, Zero( y ) );
true


#### 1.2 Main procedures

##### 1.2-1 QuillenSuslinUnipotent
 ‣ QuillenSuslinUnipotent( mat ) ( operation )

Returns: a list of two homalg matrices

Compute for the $$r \times c$$-matrix mat a square matrix $$V$$ such that mat $$* V$$ is a lower unipotent matrix.

##### 1.2-2 QuillenSuslin
 ‣ QuillenSuslin( mat ) ( operation )

Returns: a homalg matrix

For the given $$r \times c$$-matrix mat, compute a square matrix $$V$$ such that mat $$* V$$ is equal to the first $$r$$ rows of the $$c \times c$$ identity matrix.

Goto Chapter: Top 1 2 Bib Ind

generated by GAPDoc2HTML