The ground ring used in this example is \(F_3[x,y]\). We want to see, how the different rings in this package can be used to localize at different points and how the results differ.
gap> LoadPackage("RingsForHomalg");; gap> F3xy := HomalgRingOfIntegersInSingular(3) * "x,y";; gap> x1 := HomalgRingElement( "x+2", F3xy );; gap> y0 := HomalgRingElement( "y", F3xy );; gap> LoadPackage("LocalizeRingForHomalg");; gap> R00 := LocalizeAtZero( F3xy );; gap> R10 := LocalizeAt( F3xy, [ x1, y0 ] );; gap> RMora := LocalizePolynomialRingAtZeroWithMora( F3xy );; gap> M := HomalgMatrix( "[\ > y^3+2*y^2+x+x^2+2*x*y+y^4+x*y^2, \ > x*y^3+2*x^2*y+y^3+y^2+x+2*y+x^2, \ > x^2*y^2+2*x^3+x^2*y+y^3+2*x^2+2*x*y+y^2+2*y\ > ]", 1, 3, F3xy );; gap> LoadPackage( "Modules" );; gap> I := RightPresentation( M );; gap> M00 := HomalgLocalMatrix( M, R00 );; gap> M10 := HomalgLocalMatrix( M, R10 );; gap> MMora := HomalgLocalMatrix( M, RMora );; gap> I00 := RightPresentation( M00 );; gap> I10 := RightPresentation( M10 );; gap> IMora := RightPresentation( MMora );;
This ring is able to compute a standard basis of the module.
gap> Display( IMora ); GF(3)[x,y]_< x, y >/< (x+x^2-x*y-y^2+x*y^2+y^3+y^4)/1, (x-y+x^2+y^2-x^2*y+y^3+\ x*y^3)/1, (-y-x^2-x*y+y^2-x^3+x^2*y+y^3+x^2*y^2)/1 > gap> ByASmallerPresentation( IMora ); <A cyclic torsion right module on a cyclic generator satisfying 2 relations> gap> Display( IMora ); GF(3)[x,y]_< x, y >/< x/1, y/1 >
This ring recognizes, that the module is not zero, but is not able to find better generators.
gap> Display( I00 ); GF(3)[x,y]_< x, y >/< (y^4+x*y^2+y^3+x^2-x*y-y^2+x)/1, (x*y^3-x^2*y+y^3+x^2+y^\ 2+x-y)/1, (x^2*y^2-x^3+x^2*y+y^3-x^2-x*y+y^2-y)/1 > gap> ByASmallerPresentation( I00 ); <A cyclic right module on a cyclic generator satisfying 3 relations> gap> Display( I00 ); GF(3)[x,y]_< x, y >/< (y^4+x*y^2+y^3+x^2-x*y-y^2+x)/1, (x*y^3-x^2*y+y^3+x^2+y^\ 2+x-y)/1, (x^2*y^2-x^3+x^2*y+y^3-x^2-x*y+y^2-y)/1 >
We are able to change the ring, to compute a nicer basis.
gap> I00ToMora := RMora * I00; <A cyclic right module on a cyclic generator satisfying 3 relations> gap> Display( I00ToMora ); GF(3)[x,y]_< x, y >/< (x+x^2-x*y-y^2+x*y^2+y^3+y^4)/1, (x-y+x^2+y^2-x^2*y+y^3+\ x*y^3)/1, (-y-x^2-x*y+y^2-x^3+x^2*y+y^3+x^2*y^2)/1 > gap> ByASmallerPresentation( I00ToMora ); <A cyclic torsion right module on a cyclic generator satisfying 2 relations> gap> Display( I00ToMora ); GF(3)[x,y]_< x, y >/< x/1, y/1 >
We are able to find out, that this module is actually zero.
gap> Display( I10 ); GF(3)[x,y]_< x-1, y >/< (y^4+x*y^2+y^3+x^2-x*y-y^2+x)/1, (x*y^3-x^2*y+y^3+x^2+\ y^2+x-y)/1, (x^2*y^2-x^3+x^2*y+y^3-x^2-x*y+y^2-y)/1 > gap> ByASmallerPresentation( I10 ); <A zero right module> gap> Display( I10 ); 0
The following example is taken from Section 2 of [BR06].
The computation takes place over the local ring \(R=ℤ_{\langle 2\rangle}\) (i.e. ℤ localized at the maximal ideal generated by \(2\)).
Here we compute the (infinite) long exact homology sequence of the covariant functor \(Hom(Hom(-,R/2^7R),R/2^4R)\) (and its left derived functors) applied to the short exact sequence
\(0 -> M_=R/2^2R --alpha_1--> M=R/2^5R --alpha_2--> \_M=R/2^3R -> 0\).
gap> LoadPackage( "LocalizeRingForHomalg" );; gap> GlobalR := HomalgRingOfIntegersInExternalGAP( ); Z gap> Display( GlobalR ); <An external ring residing in the CAS GAP> gap> LoadPackage( "RingsForHomalg" );; gap> R := LocalizeAt( GlobalR , [ 2 ] ); Z_< 2 > gap> Display( R ); <A local ring> gap> M := LeftPresentation( HomalgMatrix( [ 2^5 ], R ) ); <A cyclic left module presented by 1 relation for a cyclic generator> gap> _M := LeftPresentation( HomalgMatrix( [ 2^3 ], R ) ); <A cyclic left module presented by 1 relation for a cyclic generator> gap> alpha2 := HomalgMap( HomalgMatrix( [ 1 ], R ), M, _M ); <A "homomorphism" of left modules> gap> M_ := Kernel( alpha2 ); <A cyclic left module presented by yet unknown relations for a cyclic generato\ r> gap> alpha1 := KernelEmb( alpha2 ); <A monomorphism of left modules> gap> seq := HomalgComplex( alpha2 ); <A "complex" containing a single morphism of left modules at degrees [ 0 .. 1 ]> gap> Add( seq, alpha1 ); gap> IsShortExactSequence( seq ); true gap> K := LeftPresentation( HomalgMatrix( [ 2^7 ], R ) ); <A cyclic left module presented by 1 relation for a cyclic generator> gap> L := RightPresentation( HomalgMatrix( [ 2^4 ], R ) ); <A cyclic right module on a cyclic generator satisfying 1 relation> gap> triangle := LHomHom( 4, seq, K, L, "t" ); <An exact triangle containing 3 morphisms of left complexes at degrees [ 1, 2, 3, 1 ]> gap> lehs := LongSequence( triangle ); <A sequence containing 14 morphisms of left modules at degrees [ 0 .. 14 ]> gap> ByASmallerPresentation( lehs ); <A non-zero sequence containing 14 morphisms of left modules at degrees [ 0 .. 14 ]> gap> IsExactSequence( lehs ); true
We want to show, how localization can work together with residue class rings.
gap> LoadPackage( "RingsForHomalg", ">= 2020.04.17" );; gap> Qxy := HomalgFieldOfRationalsInDefaultCAS( ) * "x,y"; Q[x,y] gap> wmat := HomalgMatrix( > "[ y^3-y^2 , x^3-x^2 , y^3+y^2 , x^3+x^2 ]", > 2, 2, Qxy ); <A 2 x 2 matrix over an external ring> gap> ec := HomalgRingElement( "-x^3-x^2+2*y^2", Qxy ); -x^3-x^2+2*y^2
Compute globally:
gap> LoadPackage( "Modules" );; gap> W := LeftPresentation( wmat ); <A left module presented by 2 relations for 2 generators> gap> Res := Resolution( 2 , W ); <A right acyclic complex containing 2 morphisms of left modules at degrees [ 0 .. 2 ]> gap> Display( Res ); ------------------------- at homology degree: 2 0 ------------------------- (an empty 0 x 2 matrix) the map is currently represented by the above 0 x 2 matrix ------------v------------ at homology degree: 1 Q[x,y]^(1 x 2) ------------------------- y^2, x^2, x*y^2-y^3,0 the map is currently represented by the above 2 x 2 matrix ------------v------------ at homology degree: 0 Q[x,y]^(1 x 2) -------------------------
Try a localization of a residue class ring:
gap> R1 := Qxy / ec; Q[x,y]/( -x^3-x^2+2*y^2 ) gap> Display( R1 ); <A residue class ring> gap> wmat1 := R1 * wmat; <A 2 x 2 matrix over a residue class ring> gap> LoadPackage( "LocalizeRingForHomalg" );; gap> R10 := LocalizeAt( R1 , > [ HomalgRingElement( "x", R1 ), > HomalgRingElement( "y", R1 ) ] > ); Q[x,y]/( x^3+x^2-2*y^2 )_< |[ x ]|, |[ y ]| > gap> Display( R10 ); <A local ring> gap> wmat10 := HomalgLocalMatrix( wmat, R10 ); <A 2 x 2 matrix over a local ring> gap> W10 := LeftPresentation( wmat10 ); <A left module presented by 2 relations for 2 generators> gap> Res10 := Resolution( 2 , W10 ); <A right acyclic complex containing 2 morphisms of left modules at degrees [ 0 .. 2 ]> gap> Display( Res10 ); ------------------------- at homology degree: 2 0 ------------------------- (an empty 0 x 2 matrix) the map is currently represented by the above 0 x 2 matrix ------------v------------ at homology degree: 1 Q[x,y]/( x^3+x^2-2*y^2 )_< |[ x ]|, |[ y ]| >^(1 x 2) ------------------------- x*y^2+y^2,2*y^2, y^2, y^4-2*y^3+2*y^2 modulo [ x^3+x^2-2*y^2 ] / |[ 1 ]| the map is currently represented by the above 2 x 2 matrix ------------v------------ at homology degree: 0 Q[x,y]/( x^3+x^2-2*y^2 )_< |[ x ]|, |[ y ]| >^(1 x 2) -------------------------
Try a residue class ring of a localization:
gap> R0 := LocalizeAtZero( Qxy ); Q[x,y]_< x, y > gap> Display( R0 ); <A local ring> gap> wmat0 := R0 * wmat; <A 2 x 2 matrix over a local ring> gap> R01 := R0 / ( ec / R0 ); Q[x,y]_< x, y >/( (-x^3-x^2+2*y^2)/1 ) gap> Display( R01 ); <A residue class ring> gap> wmat01 := R01 * wmat0; <A 2 x 2 matrix over a residue class ring> gap> W01 := LeftPresentation( wmat01 ); <A left module presented by 2 relations for 2 generators> gap> Res01 := Resolution( 2 , W01 ); <A right acyclic complex containing 2 morphisms of left modules at degrees [ 0 .. 2 ]> gap> Display( Res01 ); ------------------------- at homology degree: 2 0 ------------------------- (an empty 0 x 2 matrix) the map is currently represented by the above 0 x 2 matrix ------------v------------ at homology degree: 1 Q[x,y]_< x, y >/( (x^3+x^2-2*y^2)/1 )^(1 x 2) ------------------------- y^3+y^2,2*y^2, 0, x*y^2-y^3 / 1 modulo [ (x^3+x^2-2*y^2)/1 ] the map is currently represented by the above 2 x 2 matrix ------------v------------ at homology degree: 0 Q[x,y]_< x, y >/( (x^3+x^2-2*y^2)/1 )^(1 x 2) -------------------------
We want to check Serre's intersection formula \(i(I_1, I_2; 0)=\sum_i(-1)^i length(Tor^{R_0}_i(R_0/I_1,R_0/I_2))\) on an easy affine example.
gap> LoadPackage( "RingsForHomalg" );; gap> R := HomalgFieldOfRationalsInSingular() * "w,x,y,z";; gap> LoadPackage( "LocalizeRingForHomalg" );; gap> R0 := LocalizePolynomialRingAtZeroWithMora( R );; gap> M1 := HomalgMatrix( "[\ > (w-x^2)*y, \ > (w-x^2)*z, \ > (x-w^2)*y, \ > (x-w^2)*z \ > ]", 4, 1, R );; gap> M2 := HomalgMatrix( "[\ > (w-x^2)-y, \ > (x-w^2)-z \ > ]", 2, 1, R );; gap> LoadPackage( "Modules" );; gap> RmodI1 := LeftPresentation( M1 );; gap> RmodI2 := LeftPresentation( M2 );; gap> T:=Tor( RmodI1, RmodI2 ); <A graded homology object consisting of 4 left modules at degrees [ 0 .. 3 ]> gap> List( ObjectsOfComplex( T ), AffineDegree ); [ 12, 4, 0, 0 ]
We read, that the intersection multiplicity is 12-4=8 globally.
gap> M10 := R0 * M1; <A 4 x 1 matrix over a local (Mora) ring> gap> M20 := R0 * M2; <A 2 x 1 matrix over a local (Mora) ring> gap> R0modI10 := LeftPresentation( M10 );; gap> R0modI20 := LeftPresentation( M20 );; gap> T0 := Tor( R0modI10, R0modI20 ); <A graded homology object consisting of 4 left modules at degrees [ 0 .. 3 ]> gap> List( ObjectsOfComplex( T0 ), AffineDegree ); [ 3, 1, 0, 0 ]
The intersection multiplicity at zero is 3-1=2.
generated by GAPDoc2HTML