This chapter should give you a quick guide to create your first example in homalg.
As the reader might notice, all examples in this manual will be either over ℤ or over one of its residue class rings ℤ/mℤ. There are two reasons for this. The first reason is that GAP does not natively support rings other than ℤ in a sufficient way (--> Rings supported in a sufficient way).
The second and more important reason is to underline the fact the all effective homological constructions that are relevant for Modules have only as much to do with the Gröbnerbasis algorithm as they do with the Hermite algorithm for the ring ℤ; both algorithms are used to effectively solve inhomogeneous linear systems over the respective ring. And Modules is designed to use rings and matrices over these rings together with all their operations as a black box. In other words: Because Modules works for ℤ, it works by its design for all other computable rings.
gap> ExamplesForHomalg();
To quickly create a ring for use with Modules enter
ExamplesForHomalg();
which will load the package ExamplesForHomalg (if installed) and provide a step by step guide to create the ring. For the full core functionality you need to install the packages homalg, HomalgToCAS, IO_ForHomalg, RingsForHomalg, Gauss, and GaussForHomalg. They are part of the homalg project.
The following example is taken from Section 2 of [BR06].
The computation takes place over the residue class ring R=ℤ/2^8ℤ using the generic support for residue class rings provided by the subpackage ResidueClassRingForHomalg of the MatricesForHomalg package. For a native support of the rings R=ℤ/p^nℤ use the GaussForHomalg package.
Here we compute the (infinite) long exact homology sequence of the covariant functor Hom(Hom(-,ℤ/2^7ℤ),ℤ/2^4ℤ) (and its left derived functors) applied to the short exact sequence
0 -> M_=ℤ/2^2ℤ --alpha_1--> M=ℤ/2^5ℤ --alpha_2--> _M=ℤ/2^3ℤ -> 0.
gap> zz := HomalgRingOfIntegers( ); Z gap> Display( zz ); <An internal ring> gap> R := zz / 2^8; Z/( 256 ) gap> Display( R ); <A residue class ring> gap> M := LeftPresentation( [ 2^5 ], R ); <A cyclic left module presented by 1 relation for a cyclic generator> gap> Display( M ); Z/( 256 )/< |[ 32 ]| > gap> _M := LeftPresentation( [ 2^3 ], R ); <A cyclic left module presented by 1 relation for a cyclic generator> gap> Display( _M ); Z/( 256 )/< |[ 8 ]| > gap> alpha2 := HomalgMap( [ 1 ], M, _M ); <A "homomorphism" of left modules> gap> IsMorphism( alpha2 ); true gap> alpha2; <A homomorphism of left modules> gap> Display( alpha2 ); [ [ 1 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix 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 ); <An acyclic complex containing a single morphism of left modules at degrees [ 0 .. 1 ]> gap> Add( seq, alpha1 ); gap> seq; <A sequence containing 2 morphisms of left modules at degrees [ 0 .. 2 ]> gap> IsShortExactSequence( seq ); true gap> seq; <A short exact sequence containing 2 morphisms of left modules at degrees [ 0 .. 2 ]> gap> Display( seq ); ------------------------- at homology degree: 2 Z/( 256 )/< |[ 4 ]| > ------------------------- [ [ 8 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 1 Z/( 256 )/< |[ 32 ]| > ------------------------- [ [ 1 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 0 Z/( 256 )/< |[ 8 ]| > ------------------------- gap> K := LeftPresentation( [ 2^7 ], R ); <A cyclic left module presented by 1 relation for a cyclic generator> gap> L := RightPresentation( [ 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 ); false gap> lehs; <A non-zero left acyclic complex containing 14 morphisms of left modules at degrees [ 0 .. 14 ]> gap> Assert( 0, IsLeftAcyclic( lehs ) ); gap> Display( lehs ); ------------------------- at homology degree: 14 Z/( 256 )/< |[ 4 ]| > ------------------------- [ [ 4 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 13 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 12 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 11 Z/( 256 )/< |[ 4 ]| > ------------------------- [ [ 4 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 10 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 9 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 8 Z/( 256 )/< |[ 4 ]| > ------------------------- [ [ 4 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 7 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 6 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 5 Z/( 256 )/< |[ 4 ]| > ------------------------- [ [ 4 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 4 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 3 Z/( 256 )/< |[ 8 ]| > ------------------------- [ [ 2 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 2 Z/( 256 )/< |[ 4 ]| > ------------------------- [ [ 8 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 1 Z/( 256 )/< |[ 16 ]| > ------------------------- [ [ 1 ] ] modulo [ 256 ] the map is currently represented by the above 1 x 1 matrix ------------v------------ at homology degree: 0 Z/( 256 )/< |[ 8 ]| > -------------------------
generated by GAPDoc2HTML