Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 4183461[1X3 [33X[0;0YWatch and Influence the Communication[133X[101X234[1X3.1 [33X[0;0YFunctions[133X[101X56[1X3.1-1 homalgIOMode[101X78[29X[2XhomalgIOMode[102X( [3Xstr[103X[, [3Xstr2[103X[, [3Xstr3[103X]] ) [32X function910[33X[0;0YThis function sets different modes which influence how much of the11communication becomes visible. Handling the string [3Xstr[103X is [13Xnot[113X12case-sensitive. [10XhomalgIOMode[110X invokes the global function [10XhomalgMode[110X defined13in the [5Xhomalg[105X package with an [21Xappropriate[121X argument (see code below).14Alternatively, if a second or more strings are given, then [10XhomalgMode[110X is15invoked with the remaining strings [3Xstr2[103X, [3Xstr3[103X, ... at the end. In16particular, you can use [10XhomalgIOMode[110X( [3Xstr[103X, "" ) to reset the effect of17invoking [10XhomalgMode[110X.[133X1819[3Xstr[103X │ [3Xstr[103X (long form) │ mode description20────┼─────────────────┼───────────────────────────────────────────────────────────────────21│ │22"" │ "" │ the default mode, i.e. the communication protocol won't be visible23│ │ ([10XhomalgIOMode[110X( ) is a short form for [10XhomalgIOMode[110X( "" ))24│ │25"a" │ "all" │ combine the modes "debug" and "file"26│ │27"b" │ "basic" │ the same as "picto" + [10XhomalgMode[110X( "basic" )28│ │29"d" │ "debug" │ view the complete communication protocol30│ │31"f" │ "file" │ dump the communication protocol into a file with the name32│ │ [10XConcatenation[110X( "commands_file_of_", CAS, "_with_PID_", PID )33│ │34"p" │ "picto" │ view the abbreviated communication protocol35│ │ using the preassigned pictograms36│ │37────┴─────────────────┴───────────────────────────────────────────────────────────────────3839[33X[0;0YAll modes other than the "default"-mode only set their specific values and40leave the other values untouched, which allows combining them to some41extent. This also means that in order to get from one mode to a new mode42(without the aim to combine them) one needs to reset to the "default"-mode43first.[133X44[33X[0;0Y[13XCaution[113X:[133X4546[30X [33X[0;6YIn case you choose one of the modes "file" or "all" you might want to47set the global variable [10XHOMALG_IO.DoNotDeleteTemporaryFiles[110X := [10Xtrue[110X;48this is only important if during the computations some matrices get49converted via files (using [10XConvertHomalgMatrixViaFile[110X), as reading50these files will be part of the protocol![133X5152[30X [33X[0;6YIt makes sense for the dumped communication protocol to be53(re)executed with the respective external system, only in case the54latter is deterministic (i.e. same-input-same-output).[133X5556[4X[32X Code [32X[104X57[4XInstallGlobalFunction( homalgIOMode,[104X58[4X function( arg )[104X59[4X local nargs, mode, s;[104X60[4X [104X61[4X nargs := Length( arg );[104X62[4X [104X63[4X if nargs = 0 or ( IsString( arg[1] ) and arg[1] = "" ) then[104X64[4X mode := "default";[104X65[4X elif IsString( arg[1] ) then ## now we know, the string is not empty[104X66[4X s := arg[1];[104X67[4X if LowercaseString( s{[1]} ) = "a" then[104X68[4X mode := "all";[104X69[4X elif LowercaseString( s{[1]} ) = "b" then[104X70[4X mode := "basic";[104X71[4X elif LowercaseString( s{[1]} ) = "d" then[104X72[4X mode := "debug";[104X73[4X elif LowercaseString( s{[1]} ) = "f" then[104X74[4X mode := "file";[104X75[4X elif LowercaseString( s{[1]} ) = "p" then[104X76[4X mode := "picto";[104X77[4X else[104X78[4X mode := "";[104X79[4X fi;[104X80[4X else[104X81[4X Error( "the first argument must be a string\n" );[104X82[4X fi;[104X83[4X [104X84[4X if mode = "default" then[104X85[4X ## reset to the default values[104X86[4X HOMALG_IO.color_display := false;[104X87[4X HOMALG_IO.show_banners := true;[104X88[4X HOMALG_IO.save_CAS_commands_to_file := false;[104X89[4X HOMALG_IO.DoNotDeleteTemporaryFiles := false;[104X90[4X HOMALG_IO.SaveHomalgMaximumBackStream := false;[104X91[4X HOMALG_IO.InformAboutCASystemsWithoutActiveRings := true;[104X92[4X SetInfoLevel( InfoHomalgToCAS, 1 );[104X93[4X homalgMode( );[104X94[4X elif mode = "all" then[104X95[4X homalgIOMode( "debug" );[104X96[4X homalgIOMode( "file" );[104X97[4X elif mode = "basic" then[104X98[4X HOMALG_IO.color_display := true;[104X99[4X HOMALG_IO.show_banners := true;[104X100[4X SetInfoLevel( InfoHomalgToCAS, 4 );[104X101[4X homalgMode( "basic" ); ## use homalgIOMode( "basic", "" ) to reset[104X102[4X elif mode = "debug" then[104X103[4X HOMALG_IO.color_display := true;[104X104[4X HOMALG_IO.show_banners := true;[104X105[4X SetInfoLevel( InfoHomalgToCAS, 8 );[104X106[4X homalgMode( "debug" ); ## use homalgIOMode( "debug", "" ) to reset[104X107[4X elif mode = "file" then[104X108[4X HOMALG_IO.save_CAS_commands_to_file := true;[104X109[4X elif mode = "picto" then[104X110[4X HOMALG_IO.color_display := true;[104X111[4X HOMALG_IO.show_banners := true;[104X112[4X SetInfoLevel( InfoHomalgToCAS, 4 );[104X113[4X homalgMode( "logic" ); ## use homalgIOMode( "picto", "" ) to reset[104X114[4X fi;[104X115[4X [104X116[4X if nargs > 1 and IsString( arg[2] ) then[104X117[4X CallFuncList( homalgMode, arg{[ 2 .. nargs ]} );[104X118[4X fi;[104X119[4X [104X120[4Xend );[104X121[4X[32X[104X122123[33X[0;0YThis is the part of the global function [10XhomalgSendBlocking[110X that controls the124visibility of the communication.[133X125126[4X[32X Code [32X[104X127[4Xio_info_level := InfoLevel( InfoHomalgToCAS );[104X128[4X[104X129[4Xif not IsBound( pictogram ) then[104X130[4X pictogram := HOMALG_IO.Pictograms.unknown;[104X131[4X picto := pictogram;[104X132[4Xelif io_info_level >= 3 then[104X133[4X picto := pictogram;[104X134[4X ## add colors to the pictograms[104X135[4X if pictogram = HOMALG_IO.Pictograms.ReducedEchelonForm and[104X136[4X IsBound( HOMALG_MATRICES.color_BOE ) then[104X137[4X pictogram := Concatenation( HOMALG_MATRICES.color_BOE, pictogram, "\033[0m" );[104X138[4X elif pictogram = HOMALG_IO.Pictograms.BasisOfModule and[104X139[4X IsBound( HOMALG_MATRICES.color_BOB ) then[104X140[4X pictogram := Concatenation( HOMALG_MATRICES.color_BOB, pictogram, "\033[0m" );[104X141[4X elif pictogram = HOMALG_IO.Pictograms.DecideZero and[104X142[4X IsBound( HOMALG_MATRICES.color_BOD ) then[104X143[4X pictogram := Concatenation( HOMALG_MATRICES.color_BOD, pictogram, "\033[0m" );[104X144[4X elif pictogram = HOMALG_IO.Pictograms.SyzygiesGenerators and[104X145[4X IsBound( HOMALG_MATRICES.color_BOH ) then[104X146[4X pictogram := Concatenation( HOMALG_MATRICES.color_BOH, pictogram, "\033[0m" );[104X147[4X elif pictogram = HOMALG_IO.Pictograms.BasisCoeff and[104X148[4X IsBound( HOMALG_MATRICES.color_BOC ) then[104X149[4X pictogram := Concatenation( HOMALG_MATRICES.color_BOC, pictogram, "\033[0m" );[104X150[4X elif pictogram = HOMALG_IO.Pictograms.DecideZeroEffectively and[104X151[4X IsBound( HOMALG_MATRICES.color_BOP ) then[104X152[4X pictogram := Concatenation( HOMALG_MATRICES.color_BOP, pictogram, "\033[0m" );[104X153[4X elif need_output or need_display then[104X154[4X pictogram := Concatenation( HOMALG_IO.Pictograms.color_need_output,[104X155[4X pictogram, "\033[0m" );[104X156[4X else[104X157[4X pictogram := Concatenation( HOMALG_IO.Pictograms.color_need_command,[104X158[4X pictogram, "\033[0m" );[104X159[4X fi;[104X160[4Xelse[104X161[4X picto := pictogram;[104X162[4Xfi;[104X163[4X[104X164[4Xif io_info_level >= 3 then[104X165[4X if ( io_info_level >= 7 and not need_display ) or io_info_level >= 8 then[104X166[4X ## print the pictogram, the prompt of the external system,[104X167[4X ## and the sent command[104X168[4X Info( InfoHomalgToCAS, 7, pictogram, " ", stream.prompt,[104X169[4X L{[ 1 .. Length( L ) - 1 ]} );[104X170[4X elif io_info_level >= 4 then[104X171[4X ## print the pictogram and the prompt of the external system[104X172[4X Info( InfoHomalgToCAS, 4, pictogram, " ", stream.prompt, "..." );[104X173[4X else[104X174[4X ## print the pictogram only[104X175[4X Info( InfoHomalgToCAS, 3, pictogram );[104X176[4X fi;[104X177[4X [104X178[4Xfi;[104X179[4X[32X[104X180181182[1X3.2 [33X[0;0YThe Pictograms[133X[101X183184[1X3.2-1 HOMALG_IO.Pictograms[101X185186[29X[2XHOMALG_IO.Pictograms[102X[32X global variable187188[33X[0;0YThe record of pictograms is a component of the record [10XHOMALG_IO[110X.[133X189190[4X[32X Code [32X[104X191[4XPictograms := rec([104X192[4X [104X193[4X ##[104X194[4X ## colors:[104X195[4X ##[104X196[4X [104X197[4X ## pictogram color of a "need_command" or assignment operation:[104X198[4X color_need_command := "\033[1;33;44m",[104X199[4X [104X200[4X ## pictogram color of a "need_output" or "need_display" operation:[104X201[4X color_need_output := "\033[1;34;43m",[104X202[4X [104X203[4X ##[104X204[4X ## good morning computer algebra system:[104X205[4X ##[104X206[4X [104X207[4X ## initialize:[104X208[4X initialize := "ini",[104X209[4X [104X210[4X ## define macros:[104X211[4X define := "def",[104X212[4X [104X213[4X ## get time:[104X214[4X time := ":ms",[104X215[4X [104X216[4X ## memory usage:[104X217[4X memory := "mem",[104X218[4X [104X219[4X ## unknown:[104X220[4X unknown := "???",[104X221[4X [104X222[4X ##[104X223[4X ## external garbage collection:[104X224[4X ##[104X225[4X [104X226[4X ## delete a variable:[104X227[4X delete := "xxx",[104X228[4X [104X229[4X ## delete serveral variables:[104X230[4X multiple_delete := "XXX",[104X231[4X [104X232[4X ## trigger the garbage collector:[104X233[4X garbage_collector := "grb",[104X234[4X [104X235[4X ##[104X236[4X ## create lists:[104X237[4X ##[104X238[4X [104X239[4X ## define a list:[104X240[4X CreateList := "lst",[104X241[4X [104X242[4X ##[104X243[4X ## create rings:[104X244[4X ##[104X245[4X [104X246[4X ## define a ring:[104X247[4X CreateHomalgRing := "R:=",[104X248[4X [104X249[4X ## get the names of the "variables" defining the ring:[104X250[4X variables := "var",[104X251[4X [104X252[4X ## define zero:[104X253[4X Zero := "0:=",[104X254[4X [104X255[4X ## define one:[104X256[4X One := "1:=",[104X257[4X [104X258[4X ## define minus one:[104X259[4X MinusOne := "-:=",[104X260[4X [104X261[4X ##[104X262[4X ## mandatory ring operations:[104X263[4X ##[104X264[4X [104X265[4X ## get the name of an element:[104X266[4X ## (important if the CAS pretty-prints ring elements,[104X267[4X ## we need names that can be used as input!)[104X268[4X ## (install a method instead of a homalgTable entry)[104X269[4X homalgSetName := "\"a\"",[104X270[4X [104X271[4X ## a = 0 ?[104X272[4X IsZero := "a=0",[104X273[4X [104X274[4X ## a = 1 ?[104X275[4X IsOne := "a=1",[104X276[4X [104X277[4X ## substract two ring elements[104X278[4X ## (needed by SimplerEquivalentMatrix in case[104X279[4X ## CopyRow/ColumnToIdentityMatrix are not defined):[104X280[4X Minus := "a-b",[104X281[4X [104X282[4X ## divide the element a by the unit u[104X283[4X ## (needed by SimplerEquivalentMatrix in case[104X284[4X ## DivideEntryByUnit is not defined):[104X285[4X DivideByUnit := "a/u",[104X286[4X [104X287[4X ## important ring operations:[104X288[4X ## (important for performance since existing[104X289[4X ## fallback methods cause a lot of traffic):[104X290[4X [104X291[4X ## is u a unit?[104X292[4X ## (mainly needed by the fallback methods for matrices, see below):[104X293[4X IsUnit := "?/u",[104X294[4X [104X295[4X ##[104X296[4X ## optional ring operations:[104X297[4X ##[104X298[4X [104X299[4X ## copy an element:[104X300[4X CopyElement := "a>a",[104X301[4X [104X302[4X ## add two ring elements:[104X303[4X Sum := "a+b",[104X304[4X [104X305[4X ## multiply two ring elements:[104X306[4X Product := "a*b",[104X307[4X [104X308[4X ## the (greatest) common divisor:[104X309[4X Gcd := "gcd",[104X310[4X [104X311[4X ## cancel the (greatest) common divisor:[104X312[4X CancelGcd := "ccd",[104X313[4X [104X314[4X ## random polynomial:[104X315[4X RandomPol := "rpl",[104X316[4X [104X317[4X ## numerator:[104X318[4X Numerator := "num",[104X319[4X [104X320[4X ## denominator:[104X321[4X Denominator := "den",[104X322[4X [104X323[4X ## evaluate polynomial:[104X324[4X Evaluate := "evl",[104X325[4X [104X326[4X ## degree of a multivariate polynomial[104X327[4X DegreeOfRingElement := "deg",[104X328[4X [104X329[4X ## is irreducible:[104X330[4X IsIrreducible := "irr",[104X331[4X [104X332[4X ##[104X333[4X ## create matrices:[104X334[4X ##[104X335[4X [104X336[4X ## define a matrix:[104X337[4X HomalgMatrix := "A:=",[104X338[4X [104X339[4X ## copy a matrix:[104X340[4X CopyMatrix := "A>A",[104X341[4X [104X342[4X ## load a matrix from file:[104X343[4X LoadHomalgMatrixFromFile := "A<<",[104X344[4X [104X345[4X ## save a matrix to file:[104X346[4X SaveHomalgMatrixToFile := "A>>",[104X347[4X [104X348[4X ## get a matrix entry as a string:[104X349[4X MatElm := "<ij",[104X350[4X [104X351[4X ## set a matrix entry from a string:[104X352[4X SetMatElm := ">ij",[104X353[4X [104X354[4X ## add to a matrix entry from a string:[104X355[4X AddToMatElm := "+ij",[104X356[4X [104X357[4X ## get a list of the matrix entries as a string:[104X358[4X GetListOfHomalgMatrixAsString := "\"A\"",[104X359[4X [104X360[4X ## get a listlist of the matrix entries as a string:[104X361[4X GetListListOfHomalgMatrixAsString := "\"A\"",[104X362[4X [104X363[4X ## get a "sparse" list of the matrix entries as a string:[104X364[4X GetSparseListOfHomalgMatrixAsString := ".A.",[104X365[4X [104X366[4X ## assign a "sparse" list of matrix entries to a variable:[104X367[4X sparse := "spr",[104X368[4X [104X369[4X ## list of assumed inequalities:[104X370[4X Inequalities := "<>0",[104X371[4X [104X372[4X ## list of assumed inequalities:[104X373[4X MaximalIndependentSet := "idp",[104X374[4X [104X375[4X ##[104X376[4X ## mandatory matrix operations:[104X377[4X ##[104X378[4X [104X379[4X ## test if a matrix is the zero matrix:[104X380[4X ## CAUTION: the external system must be able to check[104X381[4X ## if the matrix is zero modulo possible ring relations[104X382[4X ## only known to the external system![104X383[4X IsZeroMatrix := "A=0",[104X384[4X [104X385[4X ## number of rows:[104X386[4X NrRows := "#==",[104X387[4X [104X388[4X ## number of columns:[104X389[4X NrColumns := "#||",[104X390[4X [104X391[4X ## determinant of a matrix over a (commutative) ring:[104X392[4X Determinant := "det",[104X393[4X [104X394[4X ## create a zero matrix:[104X395[4X ZeroMatrix := "(0)",[104X396[4X [104X397[4X ## create a initial zero matrix:[104X398[4X InitialMatrix := "[0]",[104X399[4X [104X400[4X ## create an identity matrix:[104X401[4X IdentityMatrix := "(1)",[104X402[4X [104X403[4X ## create an initial identity matrix:[104X404[4X InitialIdentityMatrix := "[1]",[104X405[4X [104X406[4X ## "transpose" a matrix (with "the" involution of the ring):[104X407[4X Involution := "A^*",[104X408[4X [104X409[4X ## get certain rows of a matrix:[104X410[4X CertainRows := "===",[104X411[4X [104X412[4X ## get certain columns of a matrix:[104X413[4X CertainColumns := "|||",[104X414[4X [104X415[4X ## stack to matrices vertically:[104X416[4X UnionOfRows := "A_B",[104X417[4X [104X418[4X ## glue to matrices horizontally:[104X419[4X UnionOfColumns := "A|B",[104X420[4X [104X421[4X ## create a block diagonal matrix:[104X422[4X DiagMat := "A\\B",[104X423[4X [104X424[4X ## the Kronecker (tensor) product of two matrices:[104X425[4X KroneckerMat := "AoB",[104X426[4X [104X427[4X ## multiply a ring element with a matrix:[104X428[4X MulMat := "a*A",[104X429[4X [104X430[4X ## multiply a matrix with a ring element:[104X431[4X MulMatRight := "A*a",[104X432[4X [104X433[4X ## add two matrices:[104X434[4X AddMat := "A+B",[104X435[4X [104X436[4X ## substract two matrices:[104X437[4X SubMat := "A-B",[104X438[4X [104X439[4X ## multiply two matrices:[104X440[4X Compose := "A*B",[104X441[4X [104X442[4X ## pullback a matrix by a ring map:[104X443[4X Pullback := "pbk",[104X444[4X [104X445[4X ##[104X446[4X ## important matrix operations:[104X447[4X ## (important for performance since existing[104X448[4X ## fallback methods cause a lot of traffic):[104X449[4X ##[104X450[4X [104X451[4X ## test if two matrices are equal:[104X452[4X ## CAUTION: the external system must be able to check[104X453[4X ## equality of the two matrices modulo possible ring relations[104X454[4X ## only known to the external system![104X455[4X AreEqualMatrices := "A=B",[104X456[4X [104X457[4X ## test if a matrix is the identity matrix:[104X458[4X IsIdentityMatrix := "A=1",[104X459[4X [104X460[4X ## test if a matrix is diagonal (needed by the display method):[104X461[4X IsDiagonalMatrix := "A=\\",[104X462[4X [104X463[4X ## get the positions of the zero rows:[104X464[4X ZeroRows := "0==",[104X465[4X [104X466[4X ## get the positions of the zero columns:[104X467[4X ZeroColumns := "0||",[104X468[4X [104X469[4X ## get "column-independent" unit positions[104X470[4X ## (needed by ReducedBasisOfModule):[104X471[4X GetColumnIndependentUnitPositions := "ciu",[104X472[4X [104X473[4X ## get "row-independent" unit positions[104X474[4X ## (needed by ReducedBasisOfModule):[104X475[4X GetRowIndependentUnitPositions := "riu",[104X476[4X [104X477[4X ## get the position of the "first" unit in the matrix[104X478[4X ## (needed by SimplerEquivalentMatrix):[104X479[4X GetUnitPosition := "gup",[104X480[4X [104X481[4X ## position of the first non-zero entry per row[104X482[4X PositionOfFirstNonZeroEntryPerRow := "fnr",[104X483[4X [104X484[4X ## position of the first non-zero entry per column[104X485[4X PositionOfFirstNonZeroEntryPerColumn := "fnc",[104X486[4X [104X487[4X ## indicator matrix of non-zero entries[104X488[4X IndicatorMatrixOfNonZeroEntries := "<>0",[104X489[4X [104X490[4X ## transposed matrix:[104X491[4X TransposedMatrix := "^tr",[104X492[4X [104X493[4X ## divide an entry of a matrix by a unit[104X494[4X ## (needed by SimplerEquivalentMatrix in case[104X495[4X ## DivideRow/ColumnByUnit are not defined):[104X496[4X DivideEntryByUnit := "ij/",[104X497[4X [104X498[4X ## divide a row by a unit[104X499[4X ## (needed by SimplerEquivalentMatrix):[104X500[4X DivideRowByUnit := "-/u",[104X501[4X [104X502[4X ## divide a column by a unit[104X503[4X ## (needed by SimplerEquivalentMatrix):[104X504[4X DivideColumnByUnit := "|/u",[104X505[4X [104X506[4X ## divide a row by a unit[104X507[4X ## (needed by SimplerEquivalentMatrix):[104X508[4X CopyRowToIdentityMatrix := "->-",[104X509[4X [104X510[4X ## divide a column by a unit[104X511[4X ## (needed by SimplerEquivalentMatrix):[104X512[4X CopyColumnToIdentityMatrix := "|>|",[104X513[4X [104X514[4X ## set a column (except a certain row) to zero[104X515[4X ## (needed by SimplerEquivalentMatrix):[104X516[4X SetColumnToZero := "|=0",[104X517[4X [104X518[4X ## get the positions of the rows with a single one[104X519[4X ## (needed by SimplerEquivalentMatrix):[104X520[4X GetCleanRowsPositions := "crp",[104X521[4X [104X522[4X ## convert a single row matrix into a matrix[104X523[4X ## with specified number of rows/columns[104X524[4X ## (needed by the display methods for homomorphisms):[104X525[4X ConvertRowToMatrix := "-%A",[104X526[4X [104X527[4X ## convert a single column matrix into a matrix[104X528[4X ## with specified number of rows/columns[104X529[4X ## (needed by the display methods for homomorphisms):[104X530[4X ConvertColumnToMatrix := "|%A",[104X531[4X [104X532[4X ## convert a matrix into a single row matrix:[104X533[4X ConvertMatrixToRow := "A%-",[104X534[4X [104X535[4X ## convert a matrix into a single column matrix:[104X536[4X ConvertMatrixToColumn := "A%|",[104X537[4X [104X538[4X ##[104X539[4X ## basic matrix operations:[104X540[4X ##[104X541[4X [104X542[4X ## compute a (r)educed (e)chelon (f)orm:[104X543[4X ReducedEchelonForm := "ref",[104X544[4X [104X545[4X ## compute a "(bas)is" of a given set of module elements:[104X546[4X BasisOfModule := "bas",[104X547[4X [104X548[4X ## compute a reduced "(Bas)is" of a given set of module elements:[104X549[4X ReducedBasisOfModule := "Bas",[104X550[4X [104X551[4X ## (d)e(c)ide the ideal/submodule membership problem,[104X552[4X ## i.e. if an element is (0) modulo the ideal/submodule:[104X553[4X DecideZero := "dc0",[104X554[4X [104X555[4X ## compute a generating set of (syz)ygies:[104X556[4X SyzygiesGenerators := "syz",[104X557[4X [104X558[4X ## compute a generating set of reduced (Syz)ygies:[104X559[4X ReducedSyzygiesGenerators := "Syz",[104X560[4X [104X561[4X ## compute a (R)educed (E)chelon (F)orm[104X562[4X ## together with the matrix of coefficients:[104X563[4X ReducedEchelonFormC := "REF",[104X564[4X [104X565[4X ## compute a "(BAS)is" of a given set of module elements[104X566[4X ## together with the matrix of coefficients:[104X567[4X BasisCoeff := "BAS",[104X568[4X [104X569[4X ## (D)e(C)ide the ideal/submodule membership problem,[104X570[4X ## i.e. write an element effectively as (0) modulo the ideal/submodule:[104X571[4X DecideZeroEffectively := "DC0",[104X572[4X [104X573[4X ##[104X574[4X ## optional matrix operations:[104X575[4X ##[104X576[4X [104X577[4X ## Hilbert-Poincare series of a module:[104X578[4X HilbertPoincareSeries := "HPs",[104X579[4X [104X580[4X ## Hilbert polynomial of a module:[104X581[4X HilbertPolynomial := "Hil",[104X582[4X [104X583[4X ## affine dimension of a module:[104X584[4X AffineDimension := "dim",[104X585[4X [104X586[4X ## affine degree of a module:[104X587[4X AffineDegree := "adg",[104X588[4X [104X589[4X ## the constant term of the hilbert polynomial:[104X590[4X ConstantTermOfHilbertPolynomial := "P_0",[104X591[4X [104X592[4X ## primary decomposition:[104X593[4X PrimaryDecomposition := "YxZ",[104X594[4X [104X595[4X ## eliminate variables:[104X596[4X Eliminate := "eli",[104X597[4X [104X598[4X ## leading module:[104X599[4X LeadingModule := "led",[104X600[4X [104X601[4X ## the i-th monomial matrix[104X602[4X MonomialMatrix := "mon",[104X603[4X [104X604[4X ## matrix of symbols:[104X605[4X MatrixOfSymbols := "smb",[104X606[4X [104X607[4X ## leading module:[104X608[4X ## coefficients:[104X609[4X Coefficients := "cfs",[104X610[4X [104X611[4X ##[104X612[4X ## optional module operations:[104X613[4X ##[104X614[4X [104X615[4X ## compute a better equivalent matrix[104X616[4X ## (field -> row+col Gauss, PIR -> Smith, Dedekind domain -> Krull, etc ...):[104X617[4X BestBasis := "(\\)",[104X618[4X [104X619[4X ## compute elementary divisors:[104X620[4X ElementaryDivisors := "div",[104X621[4X [104X622[4X ##[104X623[4X ## for the eye:[104X624[4X ##[104X625[4X [104X626[4X ## display objects:[104X627[4X Display := "dsp",[104X628[4X [104X629[4X ## the LaTeX code of the mathematical entity:[104X630[4X homalgLaTeX := "TeX",[104X631[4X [104X632[4X)[104X633[4X[32X[104X634635636637