Quelle chap5_mj.html
Sprache: HTML
|
|
| products/Sources/formale Sprachen/GAP/pkg/matricesforhomalg/doc/chap5_mj.html |
 |
<?xml version= "1.0" encoding= "UTF-8"?>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en">
< head>
< script type= "text/javascript"
src= "https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</ script>
< title>GAP (MatricesForHomalg) - Chapter 5: Matrices</ title>
< meta http-equiv= "content-type" content= "text/html; charset=UTF-8" />
< meta name= "generator" content= "GAPDoc2HTML" />
< link rel= "stylesheet" type= "text/css" href= "manual.css" />
< script src= "manual.js" type= "text/javascript"></ script>
< script type= "text/javascript">overwriteStyle();</ script>
</ head>
< body class= "chap5" onload= "jscontent()">
< div class= "chlinktop">< span class= "chlink1">Goto Chapter: </ span><a href= "chap0_mj.html">Top< /a> <a href="chap1_mj.html">1</a> <a href="chap2_mj.html">2</a> <a href="chap3_mj.html">3</a> <a href="chap4_mj.html">4</a> <a href="chap5_mj.html">5</a> <a href="chap6_mj.html">6</a> <a href="chapA_mj.html">A</a> <a href="chapB_mj.html">B</a> <a href="chapC_mj.html">C</a> <a href="chapD_mj.html">D</a> <a href="chapE_mj.html">E</a> <a href="chapF_mj.html">F</a> <a href="chapBib_mj.html">Bib</a> <a href="chapInd_mj.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap4_mj.html">[Previous Chapter]</a> <a href="chap6_mj.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap5.html">[MathJax off]</a></p>
<p><a id="X812CCAB278643A59" name="X812CCAB278643A59"></a></p>
<div class="ChapSects"><a href="chap5_mj.html#X812CCAB278643A59">5 <span class="Heading">Matrices</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5_mj.html#X78C552687FF14479">5.1 <span class="Heading">Matrices: Category and Representations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7B68E1057F5F011F">5.1-1 IsHomalgMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7FE94FC47F460E35">5.1-2 IsHomalgInternalMatrixRep</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5_mj.html#X7977387186436CDF">5.2 <span class="Heading">Matrices: Constructors</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86D290B084AC6638">5.2-1 HomalgInitialMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7CB77009868D369A">5.2-2 HomalgInitialIdentityMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8309EB7B86953A23">5.2-3 HomalgZeroMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X83266B9D7BE740D8">5.2-4 HomalgIdentityMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D2E3472879E28AB">5.2-5 HomalgVoidMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X864ACCB08094F0B7">5.2-6 HomalgMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8246E1D17F96DAE7">5.2-7 HomalgMatrixListList</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7B127B5584CD012D">5.2-8 HomalgRowVector</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X871AF271843FF2B5">5.2-9 HomalgColumnVector</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X872D39C678D0C4AE">5.2-10 HomalgDiagonalMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X81225377833C4644"><code>5.2-11 \*</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7C4E49D287011DCD">5.2-12 CoercedMatrix</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5_mj.html#X7D92ECFC8030CF40">5.3 <span class="Heading">Matrices: Properties</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X858B5AF57D5BC90A">5.3-1 IsZero</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X814D78347858EC13">5.3-2 IsOne</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7813653578F174AB">5.3-3 IsUnitFree</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8612CB4A82D6D79E">5.3-4 IsPermutationMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7EEE3E9780EBA607">5.3-5 IsSpecialSubidentityMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8672364D79EBCC5D">5.3-6 IsSubidentityMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7EF95CAD78BDE12F">5.3-7 IsLeftRegular</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X87C369D27D6AAF68">5.3-8 IsRightRegular</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X856E1D217A47EE8C">5.3-9 IsInvertibleMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7A4FA27C80BC42D1">5.3-10 IsLeftInvertibleMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7E43FDE57E8449B6">5.3-11 IsRightInvertibleMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7BFC9266823F2C15">5.3-12 IsEmptyMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7EEC8E768178696E">5.3-13 IsDiagonalMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7848E6A0783B7428">5.3-14 IsScalarMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8740E71C799C0BCC">5.3-15 IsUpperTriangularMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X853A5B988306DBFE">5.3-16 IsLowerTriangularMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7976C42B7FA905EC">5.3-17 IsStrictUpperTriangularMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7B0C78AF8056D650">5.3-18 IsStrictLowerTriangularMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X81A2C3F67C99A3C2">5.3-19 IsUpperStairCaseMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7B3A5DE1860373F0">5.3-20 IsLowerStairCaseMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7BAAE75A8660D7A5">5.3-21 IsTriangularMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7F520F89821A8602">5.3-22 IsBasisOfRowsMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D46613983DC5302">5.3-23 IsBasisOfColumnsMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86445AD281024339">5.3-24 IsReducedBasisOfRowsMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7E6BB540865C0344">5.3-25 IsReducedBasisOfColumnsMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7E6E51517822CB3F">5.3-26 IsInitialMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7EE624707ACEC26E">5.3-27 IsInitialIdentityMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X802794217F56DE51">5.3-28 IsVoidMatrix</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5_mj.html#X86F766077C89558F">5.4 <span class="Heading">Matrices: Attributes</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7C72971F7D0CA3C8">5.4-1 NumberRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X847D45BF7F2BC67C">5.4-2 NumberColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X83045F6F82C180E1">5.4-3 DeterminantMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X828225E0857B1FDA">5.4-4 ZeroRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X870D761F7AB96D12">5.4-5 ZeroColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7991ED337C73065A">5.4-6 NonZeroRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7F335DCB7B8781E4">5.4-7 NonZeroColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7B7A073D7E1FAEA4">5.4-8 PositionOfFirstNonZeroEntryPerRow</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X83B389A97A703E42">5.4-9 PositionOfFirstNonZeroEntryPerColumn</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X862841E68674FA2A">5.4-10 RowRankOfMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7C61862E81CABD51">5.4-11 ColumnRankOfMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7EFCE38281AE60F9">5.4-12 LeftInverse</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X87614CA48493B63F">5.4-13 RightInverse</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7809E0507E882674">5.4-14 CoefficientsOfUnreducedNumeratorOfHilbertPoincareSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7938E13A7EF4ADB1">5.4-15 CoefficientsOfNumeratorOfHilbertPoincareSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X781E2CDB8743B1C6">5.4-16 UnreducedNumeratorOfHilbertPoincareSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7C44039382DD5D91">5.4-17 NumeratorOfHilbertPoincareSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7B93B7D082A50E61">5.4-18 HilbertPoincareSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X84299BAB807A1E13">5.4-19 HilbertPolynomial</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7BC36CC67CB09858">5.4-20 AffineDimension</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X87C428A079000336">5.4-21 AffineDegree</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X82A1B55879AB1742">5.4-22 ProjectiveDegree</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X791B772A7E368A88">5.4-23 ConstantTermOfHilbertPolynomialn</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X835972A77F02C5BB">5.4-24 MatrixOfSymbols</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5_mj.html#X80FA5AE87E8591BC">5.5 <span class="Heading">Matrices: Operations and Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X81BBF79C79C3B6DF">5.5-1 HomalgRing</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7FBAA11B8008D936">5.5-2 LeftInverse</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7AAD17D47839BCAE">5.5-3 RightInverse</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7A7E42C179142727">5.5-4 LeftInverseLazy</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7FA3E7617EED7E1E">5.5-5 RightInverseLazy</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X800FA81F7C42BFEA">5.5-6 Involution</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D0D35B582D9C0B0">5.5-7 TransposedMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7CF5CE79796001F6">5.5-8 CertainRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8256AF2A840B19C4">5.5-9 CertainColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D6D0BDF854C9EBC">5.5-10 UnionOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7FF9661D85EC46B1">5.5-11 UnionOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7E61390E79B663E8">5.5-12 ConvertRowToMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X853EA6C87EDDF6EF">5.5-13 ConvertColumnToMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7ED5C86379A647F2">5.5-14 ConvertMatrixToRow</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X84C7C1D07DB6FBAA">5.5-15 ConvertMatrixToColumn</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7C7830BE847D84B4">5.5-16 DiagMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7CDA5D848468A0AA">5.5-17 KroneckerMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7ECF744B7DE82BED">5.5-18 DualKroneckerMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D1A074278B415BE"><code>5.5-19 \*</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X87C773DA85B21ADF"><code>5.5-20 \+</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X784B57617B24208C"><code>5.5-21 \-</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7F5961D78754157B"><code>5.5-22 \*</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7E2074A77AFF518A"><code>5.5-23 \=</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X85887BBB86F0A08B">5.5-24 GetColumnIndependentUnitPositions</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X824AB44184DD63B0">5.5-25 GetRowIndependentUnitPositions</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7A1969A17979FC49">5.5-26 GetUnitPosition</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X781B1C0C80529B09">5.5-27 Eliminate</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X80ADBE0D82CC6E85">5.5-28 BasisOfRowModule</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X868CDA327D6C8DDC">5.5-29 BasisOfColumnModule</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7F851EC7861170D1">5.5-30 DecideZeroRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86C97DBB787BAD6D">5.5-31 DecideZeroColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86ECEA9B7A4AE578">5.5-32 SyzygiesGeneratorsOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86504B757F6DC990">5.5-33 SyzygiesGeneratorsOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X84A93458804F16F6">5.5-34 SyzygiesGeneratorsOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D3FC0CE7B63AAF1">5.5-35 SyzygiesGeneratorsOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X82E0FF517DC38040">5.5-36 ReducedBasisOfRowModule</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X84CED11F7A633BDA">5.5-37 ReducedBasisOfColumnModule</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7DE458D67B9B85BF">5.5-38 ReducedSyzygiesGeneratorsOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8699114D7A865C11">5.5-39 ReducedSyzygiesGeneratorsOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D9DEC6081AF0003">5.5-40 BasisOfRowsCoeff</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7BBC885F7C24DEC2">5.5-41 BasisOfColumnsCoeff</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8513963C84A9F8CB">5.5-42 DecideZeroRowsEffectively</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7A06BF7779830815">5.5-43 DecideZeroColumnsEffectively</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X81ABDA3E7D94C661">5.5-44 BasisOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X83A5B51980FFDE53">5.5-45 BasisOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X85C980288304B4AC">5.5-46 DecideZero</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86C93ABD857447F8">5.5-47 SyzygiesOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X80325CAD7CE56F4F">5.5-48 SyzygiesOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86A798D4850BF9E8">5.5-49 ReducedSyzygiesOfRows</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8766BBD578557D15">5.5-50 ReducedSyzygiesOfColumns</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X850AEC9C7C00AFF5">5.5-51 RightDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7D0EAF527F8514E0">5.5-52 LeftDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7A8546EA87E3AE67">5.5-53 RightDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86CEB1FC7C358777">5.5-54 LeftDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X86DFDD25824E2F35">5.5-55 SafeRightDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X85B64BD47F0379C5">5.5-56 SafeLeftDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7F6BAF8E7F2343EA">5.5-57 UniqueRightDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X8788CB987A8A18A7">5.5-58 UniqueLeftDivide</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X82B2C4987D6D5BD3">5.5-59 GenerateSameRowModule</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X867A947682754A9A">5.5-60 GenerateSameColumnModule</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X81CDBBBE878DC1E5">5.5-61 SimplifyHomalgMatrixByLeftAndRightMultiplicationWithInvertibleMatrices</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X85DA10C07E7E5A3D">5.5-62 SimplifyHomalgMatrixByLeftMultiplicationWithInvertibleMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X79C124318588F37F">5.5-63 SimplifyHomalgMatrixByRightMultiplicationWithInvertibleMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5_mj.html#X7EEFD7887E96714F">5.5-64 CoefficientsWithGivenMonomials</a></span>
</div></div>
</div>
<h3>5 <span class="Heading">Matrices</span></h3>
<p><a id="X78C552687FF14479" name="X78C552687FF14479"></a></p>
<h4>5.1 <span class="Heading">Matrices: Category and Representations</span></h4>
<p><a id="X7B68E1057F5F011F" name="X7B68E1057F5F011F"></a></p>
<h5>5.1-1 IsHomalgMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsHomalgMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>The <strong class="pkg">GAP</strong> category of <strong class="pkg">homalg</strong> matrices.</p>
<div class="example"><pre>
DeclareCategory( "IsHomalgMatrix",
IsMatrixObj and
IsAttributeStoringRep );
</pre></div>
<p><a id="X7FE94FC47F460E35" name="X7FE94FC47F460E35"></a></p>
<h5>5.1-2 IsHomalgInternalMatrixRep</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsHomalgInternalMatrixRep</code>( <var class="Arg">A</var> )</td><td class="tdright">( representation )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>The internal representation of <strong class="pkg">homalg</strong> matrices.</p>
<p>(It is a representation of the <strong class="pkg">GAP</strong> category <code class="func">IsHomalgMatrix</code> (<a href="chap5_mj.html#X7B68E1057F5F011F"><span class="RefLink">5.1-1</span></a>).)</p>
<p><a id="X7977387186436CDF" name="X7977387186436CDF"></a></p>
<h4>5.2 <span class="Heading">Matrices: Constructors</span></h4>
<p><a id="X86D290B084AC6638" name="X86D290B084AC6638"></a></p>
<h5>5.2-1 HomalgInitialMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgInitialMatrix</code>( <var class="Arg">m</var>, <var class="Arg">n</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A mutable unevaluated initial <span class="SimpleMath">\(\textit{m} \times \textit{n}\)</span> <strong class="pkg">homalg</strong> matrix filled with zeros over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var>. This construction is useful in case one wants to define a matrix by assigning its nonzero entries. The property <code class="func">IsInitialMatrix</code> (<a href="chap5_mj.html#X7E6E51517822CB3F"><span class="RefLink">5.3-26</span></a>) is reset as soon as the matrix is evaluated. New computed properties or attributes of the matrix won't be cached, until the matrix is explicitly made immutable using (--> <code class="func">MakeImmutable</code> (<a href="../../../doc/ref/chap12_mj.html#X80CE136D804097C7"><span class="RefLink">Reference 12.6-4</span></a>)).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">z := HomalgInitialMatrix( 2, 3, zz );</span>
<An initial 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasIsZero( z );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZero( z );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">z;</span>
<A 2 x 3 mutable matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasIsZero( z );</span>
false
</pre></div>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n := HomalgInitialMatrix( 2, 3, zz );</span>
<An initial 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">n[ 1, 1 ] := "1";;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">n[ 2, 3 ] := "1";;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">MakeImmutable( n );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( n );</span>
[ [ 1, 0, 0 ],
[ 0, 0, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZero( n );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">n;</span>
<A non-zero 2 x 3 matrix over an internal ring>
</pre></div>
<p><a id="X7CB77009868D369A" name="X7CB77009868D369A"></a></p>
<h5>5.2-2 HomalgInitialIdentityMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgInitialIdentityMatrix</code>( <var class="Arg">m</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A mutable unevaluated initial <span class="SimpleMath">\(\textit{m} \times \textit{m}\)</span> <strong class="pkg">homalg</strong> quadratic matrix with ones on the diagonal over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var>. This construction is useful in case one wants to define an elementary matrix by assigning its off-diagonal nonzero entries. The property <code class="func">IsInitialIdentityMatrix</code> (<a href="chap5_mj.html#X7EE624707ACEC26E"><span class="RefLink">5.3-27</span></a>) is reset as soon as the matrix is evaluated. New computed properties or attributes of the matrix won't be cached, until the matrix is explicitly made immutable using (--> <code class="func">MakeImmutable</code> (<a href="../../../doc/ref/chap12_mj.html#X80CE136D804097C7"><span class="RefLink">Reference 12.6-4</span></a>)).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">id := HomalgInitialIdentityMatrix( 3, zz );</span>
<An initial identity 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasIsOne( id );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsOne( id );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">id;</span>
<A 3 x 3 mutable matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasIsOne( id );</span>
false
</pre></div>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">e := HomalgInitialIdentityMatrix( 3, zz );</span>
<An initial identity 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">e[ 1, 2 ] := "1";;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e[ 2, 1 ] := "-1";;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">MakeImmutable( e );</span>
<A 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( e );</span>
[ [ 1, 1, 0 ],
[ -1, 1, 0 ],
[ 0, 0, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsOne( e );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">e;</span>
<A 3 x 3 matrix over an internal ring>
</pre></div>
<p><a id="X8309EB7B86953A23" name="X8309EB7B86953A23"></a></p>
<h5>5.2-3 HomalgZeroMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgZeroMatrix</code>( <var class="Arg">m</var>, <var class="Arg">n</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>An immutable unevaluated <span class="SimpleMath">\(\textit{m} \times \textit{n}\)</span> <strong class="pkg">homalg</strong> zero matrix over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">z := HomalgZeroMatrix( 2, 3, zz );</span>
<An unevaluated 2 x 3 zero matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( z );</span>
[ [ 0, 0, 0 ],
[ 0, 0, 0 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">z;</span>
<A 2 x 3 zero matrix over an internal ring>
</pre></div>
<p><a id="X83266B9D7BE740D8" name="X83266B9D7BE740D8"></a></p>
<h5>5.2-4 HomalgIdentityMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgIdentityMatrix</code>( <var class="Arg">m</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>An immutable unevaluated <span class="SimpleMath">\(\textit{m} \times \textit{m}\)</span> <strong class="pkg">homalg</strong> identity matrix over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">id := HomalgIdentityMatrix( 3, zz );</span>
<An unevaluated 3 x 3 identity matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( id );</span>
[ [ 1, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">id;</span>
<A 3 x 3 identity matrix over an internal ring>
</pre></div>
<p><a id="X7D2E3472879E28AB" name="X7D2E3472879E28AB"></a></p>
<h5>5.2-5 HomalgVoidMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgVoidMatrix</code>( [<var class="Arg">m</var>, ][<var class="Arg">n</var>, ]<var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A void <span class="SimpleMath">\(\textit{m} \times \textit{n}\)</span> <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X864ACCB08094F0B7" name="X864ACCB08094F0B7"></a></p>
<h5>5.2-6 HomalgMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgMatrix</code>( <var class="Arg">llist</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgMatrix</code>( <var class="Arg">llist</var>, <var class="Arg">m</var>, <var class="Arg">n</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgMatrix</code>( <var class="Arg">list</var>, <var class="Arg">m</var>, <var class="Arg">n</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgMatrix</code>( <var class="Arg">str_llist</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgMatrix</code>( <var class="Arg">str_list</var>, <var class="Arg">m</var>, <var class="Arg">n</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>An immutable evaluated <span class="SimpleMath">\(\textit{m} \times \textit{n}\)</span> <strong class="pkg">homalg</strong> matrix over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ], zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ], 2, 3, zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( [ 1, 2, 3, 4, 5, 6 ], 2, 3, zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( "[ [ 1, 2, 3 ], [ 4, 5, 6 ] ]", zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( "[ [ 1, 2, 3 ], [ 4, 5, 6 ] ]", 2, 3, zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<p>It is nevertheless recommended to use the following form to create <strong class="pkg">homalg</strong> matrices. This form can also be used to define external matrices. Since whitespaces (--> <a href="../../../doc/ref/chap4_mj.html#X7C53CEFC8641B919"><span class="RefLink">Reference: Whitespaces</span></a>) are ignored, they can be used as optical delimiters:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( "[ 1, 2, 3, 4, 5, 6 ]", 2, 3, zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<p>One can split the input string over several lines using the backslash character '\' to end each line</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( "[ \</span>
<span class="GAPprompt">></span> <span class="GAPinput">1, 2, 3, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">4, 5, 6 \</span>
<span class="GAPprompt">></span> <span class="GAPinput">]", 2, 3, zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( m );</span>
[ [ 1, 2, 3 ],
[ 4, 5, 6 ] ]
</pre></div>
<p><a id="X8246E1D17F96DAE7" name="X8246E1D17F96DAE7"></a></p>
<h5>5.2-7 HomalgMatrixListList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgMatrixListList</code>( <var class="Arg">llist</var>, <var class="Arg">m</var>, <var class="Arg">n</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Special case of <code class="func">HomalgMatrix</code> (<a href="chap5_mj.html#X864ACCB08094F0B7"><span class="RefLink">5.2-6</span></a>).</p>
<p><a id="X7B127B5584CD012D" name="X7B127B5584CD012D"></a></p>
<h5>5.2-8 HomalgRowVector</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgRowVector</code>( <var class="Arg">entries</var>, <var class="Arg">nr_cols</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Special case of <code class="func">HomalgMatrix</code> (<a href="chap5_mj.html#X864ACCB08094F0B7"><span class="RefLink">5.2-6</span></a>) for matrices with a single row. <var class="Arg">entries</var> must be a list of ring elements.</p>
<p><a id="X871AF271843FF2B5" name="X871AF271843FF2B5"></a></p>
<h5>5.2-9 HomalgColumnVector</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgColumnVector</code>( <var class="Arg">entries</var>, <var class="Arg">nr_rows</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Special case of <code class="func">HomalgMatrix</code> (<a href="chap5_mj.html#X864ACCB08094F0B7"><span class="RefLink">5.2-6</span></a>) for matrices with a single column. <var class="Arg">entries</var> must be a list of ring elements.</p>
<p><a id="X872D39C678D0C4AE" name="X872D39C678D0C4AE"></a></p>
<h5>5.2-10 HomalgDiagonalMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgDiagonalMatrix</code>( <var class="Arg">diag</var>, <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>An immutable unevaluated diagonal <strong class="pkg">homalg</strong> matrix over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var>. The diagonal consists of the entries of the list <var class="Arg">diag</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">d := HomalgDiagonalMatrix( [ 1, 2, 3 ], zz );</span>
<An unevaluated diagonal 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( d );</span>
[ [ 1, 0, 0 ],
[ 0, 2, 0 ],
[ 0, 0, 3 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">d;</span>
<A diagonal 3 x 3 matrix over an internal ring>
</pre></div>
<p><a id="X81225377833C4644" name="X81225377833C4644"></a></p>
<h5><code>5.2-11 \*</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">R</var>, <var class="Arg">mat</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">mat</var>, <var class="Arg">R</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>An immutable evaluated <strong class="pkg">homalg</strong> matrix over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var> having the same entries as the matrix <var class="Arg">mat</var>. Syntax: <var class="Arg">R</var> <code class="code">*</code> <var class="Arg">mat</var> or <var class="Arg">mat</var> <code class="code">*</code> <var class="Arg">R</var></p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">Z4 := zz / 4;</span>
Z/( 4 )
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( Z4 );</span>
<A residue class ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">d := HomalgDiagonalMatrix( [ 2 .. 4 ], zz );</span>
<An unevaluated diagonal 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">d2 := Z4 * d; ## or d2 := d * Z4;</span>
<A 3 x 3 matrix over a residue class ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( d2 );</span>
[ [ 2, 0, 0 ],
[ 0, 3, 0 ],
[ 0, 0, 4 ] ]
modulo [ 4 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">d;</span>
<A diagonal 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">ZeroRows( d );</span>
[ ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ZeroRows( d2 );</span>
[ 3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">d;</span>
<A non-zero diagonal 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">d2;</span>
<A non-zero 3 x 3 matrix over a residue class ring>
</pre></div>
<p><a id="X7C4E49D287011DCD" name="X7C4E49D287011DCD"></a></p>
<h5>5.2-12 CoercedMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CoercedMatrix</code>( <var class="Arg">ring_from</var>, <var class="Arg">ring_to</var>, <var class="Arg">mat</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CoercedMatrix</code>( <var class="Arg">ring_to</var>, <var class="Arg">mat</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A copy of the <strong class="pkg">homalg</strong> matrix <var class="Arg">mat</var> with <strong class="pkg">homalg</strong> ring <var class="Arg">ring_from</var> in the <strong class="pkg">homalg</strong> ring <var class="Arg">ring_to</var>.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X87BF7FD083D0EE88"><span class="RefLink">C.4-9</span></a>))</p>
<p><a id="X7D92ECFC8030CF40" name="X7D92ECFC8030CF40"></a></p>
<h4>5.3 <span class="Heading">Matrices: Properties</span></h4>
<p><a id="X858B5AF57D5BC90A" name="X858B5AF57D5BC90A"></a></p>
<h5>5.3-1 IsZero</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsZero</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Check if the <strong class="pkg">homalg</strong> matrix <var class="Arg">A</var> is a zero matrix, taking possible ring relations into account.</p>
<p>(for the installed standard method see <code class="func">IsZeroMatrix</code> (<a href="chapB_mj.html#X849BB912798A01EB"><span class="RefLink">B.1-20</span></a>))</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">A := HomalgMatrix( "[ 2 ]", zz );</span>
<A 1 x 1 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Z2 := zz / 2;</span>
Z/( 2 )
<span class="GAPprompt">gap></span> <span class="GAPinput">A := Z2 * A;</span>
<A 1 x 1 matrix over a residue class ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( A );</span>
[ [ 2 ] ]
modulo [ 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZero( A );</span>
true
</pre></div>
<p><a id="X814D78347858EC13" name="X814D78347858EC13"></a></p>
<h5>5.3-2 IsOne</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsOne</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Check if the <strong class="pkg">homalg</strong> matrix <var class="Arg">A</var> is an identity matrix, taking possible ring relations into account.</p>
<p>(for the installed standard method see <code class="func">IsIdentityMatrix</code> (<a href="chapB_mj.html#X80C1856D82172268"><span class="RefLink">B.2-2</span></a>))</p>
<p><a id="X7813653578F174AB" name="X7813653578F174AB"></a></p>
<h5>5.3-3 IsUnitFree</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsUnitFree</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X8612CB4A82D6D79E" name="X8612CB4A82D6D79E"></a></p>
<h5>5.3-4 IsPermutationMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsPermutationMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7EEE3E9780EBA607" name="X7EEE3E9780EBA607"></a></p>
<h5>5.3-5 IsSpecialSubidentityMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSpecialSubidentityMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X8672364D79EBCC5D" name="X8672364D79EBCC5D"></a></p>
<h5>5.3-6 IsSubidentityMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubidentityMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7EF95CAD78BDE12F" name="X7EF95CAD78BDE12F"></a></p>
<h5>5.3-7 IsLeftRegular</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLeftRegular</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X87C369D27D6AAF68" name="X87C369D27D6AAF68"></a></p>
<h5>5.3-8 IsRightRegular</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsRightRegular</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X856E1D217A47EE8C" name="X856E1D217A47EE8C"></a></p>
<h5>5.3-9 IsInvertibleMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsInvertibleMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7A4FA27C80BC42D1" name="X7A4FA27C80BC42D1"></a></p>
<h5>5.3-10 IsLeftInvertibleMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLeftInvertibleMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7E43FDE57E8449B6" name="X7E43FDE57E8449B6"></a></p>
<h5>5.3-11 IsRightInvertibleMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsRightInvertibleMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7BFC9266823F2C15" name="X7BFC9266823F2C15"></a></p>
<h5>5.3-12 IsEmptyMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsEmptyMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7EEC8E768178696E" name="X7EEC8E768178696E"></a></p>
<h5>5.3-13 IsDiagonalMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDiagonalMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Check if the <strong class="pkg">homalg</strong> matrix <var class="Arg">A</var> is a diagonal matrix, taking possible ring relations into account.</p>
<p>(for the installed standard method see <code class="func">IsDiagonalMatrix</code> (<a href="chapB_mj.html#X7B6420E88418316B"><span class="RefLink">B.2-3</span></a>))</p>
<p><a id="X7848E6A0783B7428" name="X7848E6A0783B7428"></a></p>
<h5>5.3-14 IsScalarMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsScalarMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X8740E71C799C0BCC" name="X8740E71C799C0BCC"></a></p>
<h5>5.3-15 IsUpperTriangularMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsUpperTriangularMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X853A5B988306DBFE" name="X853A5B988306DBFE"></a></p>
<h5>5.3-16 IsLowerTriangularMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLowerTriangularMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7976C42B7FA905EC" name="X7976C42B7FA905EC"></a></p>
<h5>5.3-17 IsStrictUpperTriangularMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsStrictUpperTriangularMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7B0C78AF8056D650" name="X7B0C78AF8056D650"></a></p>
<h5>5.3-18 IsStrictLowerTriangularMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsStrictLowerTriangularMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X81A2C3F67C99A3C2" name="X81A2C3F67C99A3C2"></a></p>
<h5>5.3-19 IsUpperStairCaseMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsUpperStairCaseMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7B3A5DE1860373F0" name="X7B3A5DE1860373F0"></a></p>
<h5>5.3-20 IsLowerStairCaseMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLowerStairCaseMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7BAAE75A8660D7A5" name="X7BAAE75A8660D7A5"></a></p>
<h5>5.3-21 IsTriangularMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsTriangularMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7F520F89821A8602" name="X7F520F89821A8602"></a></p>
<h5>5.3-22 IsBasisOfRowsMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsBasisOfRowsMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7D46613983DC5302" name="X7D46613983DC5302"></a></p>
<h5>5.3-23 IsBasisOfColumnsMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsBasisOfColumnsMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X86445AD281024339" name="X86445AD281024339"></a></p>
<h5>5.3-24 IsReducedBasisOfRowsMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsReducedBasisOfRowsMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7E6BB540865C0344" name="X7E6BB540865C0344"></a></p>
<h5>5.3-25 IsReducedBasisOfColumnsMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsReducedBasisOfColumnsMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7E6E51517822CB3F" name="X7E6E51517822CB3F"></a></p>
<h5>5.3-26 IsInitialMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsInitialMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X7EE624707ACEC26E" name="X7EE624707ACEC26E"></a></p>
<h5>5.3-27 IsInitialIdentityMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsInitialIdentityMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X802794217F56DE51" name="X802794217F56DE51"></a></p>
<h5>5.3-28 IsVoidMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsVoidMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X86F766077C89558F" name="X86F766077C89558F"></a></p>
<h4>5.4 <span class="Heading">Matrices: Attributes</span></h4>
<p><a id="X7C72971F7D0CA3C8" name="X7C72971F7D0CA3C8"></a></p>
<h5>5.4-1 NumberRows</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NumberRows</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a nonnegative integer</p>
<p>The number of rows of the matrix <var class="Arg">A</var>.</p>
<p>(for the installed standard method see <code class="func">NumberRows</code> (<a href="chapB_mj.html#X7F4D7FAF821DA1C2"><span class="RefLink">B.1-21</span></a>))</p>
<p><a id="X847D45BF7F2BC67C" name="X847D45BF7F2BC67C"></a></p>
<h5>5.4-2 NumberColumns</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NumberColumns</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a nonnegative integer</p>
<p>The number of columns of the matrix <var class="Arg">A</var>.</p>
<p>(for the installed standard method see <code class="func">NumberColumns</code> (<a href="chapB_mj.html#X7DFA534B7AFA2E17"><span class="RefLink">B.1-22</span></a>))</p>
<p><a id="X83045F6F82C180E1" name="X83045F6F82C180E1"></a></p>
<h5>5.4-3 DeterminantMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DeterminantMat</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a ring element</p>
<p>The determinant of the quadratic matrix <var class="Arg">A</var>.</p>
<p>You can invoke it with <code class="code">Determinant</code>( <var class="Arg">A</var> ).</p>
<p>(for the installed standard method see <code class="func">Determinant</code> (<a href="chapB_mj.html#X80A573257D7F2E1A"><span class="RefLink">B.1-23</span></a>))</p>
<p><a id="X828225E0857B1FDA" name="X828225E0857B1FDA"></a></p>
<h5>5.4-4 ZeroRows</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ZeroRows</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a (possibly empty) list of positive integers</p>
<p>The list of zero rows of the matrix <var class="Arg">A</var>.</p>
<p>(for the installed standard method see <code class="func">ZeroRows</code> (<a href="chapB_mj.html#X872B70367F412945"><span class="RefLink">B.2-4</span></a>))</p>
<p><a id="X870D761F7AB96D12" name="X870D761F7AB96D12"></a></p>
<h5>5.4-5 ZeroColumns</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ZeroColumns</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a (possibly empty) list of positive integers</p>
<p>The list of zero columns of the matrix <var class="Arg">A</var>.</p>
<p>(for the installed standard method see <code class="func">ZeroColumns</code> (<a href="chapB_mj.html#X7A469E6D7EA63BB6"><span class="RefLink">B.2-5</span></a>))</p>
<p><a id="X7991ED337C73065A" name="X7991ED337C73065A"></a></p>
<h5>5.4-6 NonZeroRows</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NonZeroRows</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a (possibly empty) list of positive integers</p>
<p>The list of nonzero rows of the matrix <var class="Arg">A</var>.</p>
<p><a id="X7F335DCB7B8781E4" name="X7F335DCB7B8781E4"></a></p>
<h5>5.4-7 NonZeroColumns</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NonZeroColumns</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a (possibly empty) list of positive integers</p>
<p>The list of nonzero columns of the matrix <var class="Arg">A</var>.</p>
<p><a id="X7B7A073D7E1FAEA4" name="X7B7A073D7E1FAEA4"></a></p>
<h5>5.4-8 PositionOfFirstNonZeroEntryPerRow</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PositionOfFirstNonZeroEntryPerRow</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a list of nonnegative integers</p>
<p>The list of positions of the first nonzero entry per row of the matrix <var class="Arg">A</var>, else zero.</p>
<p><a id="X83B389A97A703E42" name="X83B389A97A703E42"></a></p>
<h5>5.4-9 PositionOfFirstNonZeroEntryPerColumn</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PositionOfFirstNonZeroEntryPerColumn</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a list of nonnegative integers</p>
<p>The list of positions of the first nonzero entry per column of the matrix <var class="Arg">A</var>, else zero.</p>
<p><a id="X862841E68674FA2A" name="X862841E68674FA2A"></a></p>
<h5>5.4-10 RowRankOfMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RowRankOfMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a nonnegative integer</p>
<p>The row rank of the matrix <var class="Arg">A</var>.</p>
<p><a id="X7C61862E81CABD51" name="X7C61862E81CABD51"></a></p>
<h5>5.4-11 ColumnRankOfMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ColumnRankOfMatrix</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a nonnegative integer</p>
<p>The column rank of the matrix <var class="Arg">A</var>.</p>
<p><a id="X7EFCE38281AE60F9" name="X7EFCE38281AE60F9"></a></p>
<h5>5.4-12 LeftInverse</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftInverse</code>( <var class="Arg">M</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A left inverse <span class="SimpleMath">\(C\)</span> of the matrix <var class="Arg">M</var>. If no left inverse exists then <code class="code">false</code> is returned. (--> <code class="func">RightDivide</code> (<a href="chap5_mj.html#X850AEC9C7C00AFF5"><span class="RefLink">5.5-51</span></a>))</p>
<p>(for the installed standard method see <code class="func">LeftInverse</code> (<a href="chap5_mj.html#X7FBAA11B8008D936"><span class="RefLink">5.5-2</span></a>))</p>
<p><a id="X87614CA48493B63F" name="X87614CA48493B63F"></a></p>
<h5>5.4-13 RightInverse</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightInverse</code>( <var class="Arg">M</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A right inverse <span class="SimpleMath">\(C\)</span> of the matrix <var class="Arg">M</var>. If no right inverse exists then <code class="code">false</code> is returned. (--> <code class="func">LeftDivide</code> (<a href="chap5_mj.html#X7D0EAF527F8514E0"><span class="RefLink">5.5-52</span></a>))</p>
<p>(for the installed standard method see <code class="func">RightInverse</code> (<a href="chap5_mj.html#X7AAD17D47839BCAE"><span class="RefLink">5.5-3</span></a>))</p>
<p><a id="X7809E0507E882674" name="X7809E0507E882674"></a></p>
<h5>5.4-14 CoefficientsOfUnreducedNumeratorOfHilbertPoincareSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CoefficientsOfUnreducedNumeratorOfHilbertPoincareSeries</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a list of integers</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X7938E13A7EF4ADB1" name="X7938E13A7EF4ADB1"></a></p>
<h5>5.4-15 CoefficientsOfNumeratorOfHilbertPoincareSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CoefficientsOfNumeratorOfHilbertPoincareSeries</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a list of integers</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X781E2CDB8743B1C6" name="X781E2CDB8743B1C6"></a></p>
<h5>5.4-16 UnreducedNumeratorOfHilbertPoincareSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnreducedNumeratorOfHilbertPoincareSeries</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a univariate polynomial with rational coefficients</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X7C44039382DD5D91" name="X7C44039382DD5D91"></a></p>
<h5>5.4-17 NumeratorOfHilbertPoincareSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NumeratorOfHilbertPoincareSeries</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a univariate polynomial with rational coefficients</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X7B93B7D082A50E61" name="X7B93B7D082A50E61"></a></p>
<h5>5.4-18 HilbertPoincareSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HilbertPoincareSeries</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a univariate rational function with rational coefficients</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X84299BAB807A1E13" name="X84299BAB807A1E13"></a></p>
<h5>5.4-19 HilbertPolynomial</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HilbertPolynomial</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a univariate polynomial with rational coefficients</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X7BC36CC67CB09858" name="X7BC36CC67CB09858"></a></p>
<h5>5.4-20 AffineDimension</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AffineDimension</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: an integer</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X87C428A079000336" name="X87C428A079000336"></a></p>
<h5>5.4-21 AffineDegree</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AffineDegree</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a nonnegative integer</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X82A1B55879AB1742" name="X82A1B55879AB1742"></a></p>
<h5>5.4-22 ProjectiveDegree</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ProjectiveDegree</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a nonnegative integer</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X791B772A7E368A88" name="X791B772A7E368A88"></a></p>
<h5>5.4-23 ConstantTermOfHilbertPolynomialn</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConstantTermOfHilbertPolynomialn</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: an integer</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix (row convention).</p>
<p><a id="X835972A77F02C5BB" name="X835972A77F02C5BB"></a></p>
<h5>5.4-24 MatrixOfSymbols</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MatrixOfSymbols</code>( <var class="Arg">A</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: an integer</p>
<p><var class="Arg">A</var> is a <strong class="pkg">homalg</strong> matrix.</p>
<p><a id="X80FA5AE87E8591BC" name="X80FA5AE87E8591BC"></a></p>
<h4>5.5 <span class="Heading">Matrices: Operations and Functions</span></h4>
<p><a id="X81BBF79C79C3B6DF" name="X81BBF79C79C3B6DF"></a></p>
<h5>5.5-1 HomalgRing</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgRing</code>( <var class="Arg">mat</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> ring</p>
<p>The <strong class="pkg">homalg</strong> ring of the <strong class="pkg">homalg</strong> matrix <var class="Arg">mat</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">d := HomalgDiagonalMatrix( [ 2 .. 4 ], zz );</span>
<An unevaluated diagonal 3 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">R := HomalgRing( d );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( R, zz );</span>
true
</pre></div>
<p><a id="X7FBAA11B8008D936" name="X7FBAA11B8008D936"></a></p>
<h5>5.5-2 LeftInverse</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftInverse</code>( <var class="Arg">RI</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix or fail</p>
<p>The left inverse of the matrix <var class="Arg">RI</var>. The lazy version of this operation is <code class="func">LeftInverseLazy</code> (<a href="chap5_mj.html#X7A7E42C179142727"><span class="RefLink">5.5-4</span></a>). (--> <code class="func">RightDivide</code> (<a href="chap5_mj.html#X850AEC9C7C00AFF5"><span class="RefLink">5.5-51</span></a>))</p>
<div class="example"><pre>
InstallMethod( LeftInverse,
"for homalg matrices",
[ IsHomalgMatrix ],
function( RI )
local Id, LI;
Id := HomalgIdentityMatrix( NumberColumns( RI ), HomalgRing( RI ) );
LI := RightDivide( Id, RI ); ## ( cf. [BR08, Subsection 3.1.3] )
## CAUTION: for the following SetXXX RightDivide is assumed
## NOT to be lazy evaluated!!!
SetIsLeftInvertibleMatrix( RI, IsHomalgMatrix( LI ) );
if IsBool( LI ) then
return fail;
fi;
if HasIsInvertibleMatrix( RI ) and IsInvertibleMatrix( RI ) then
SetIsInvertibleMatrix( LI, true );
else
SetIsRightInvertibleMatrix( LI, true );
fi;
SetRightInverse( LI, RI );
SetNumberColumns( LI, NumberRows( RI ) );
if NumberRows( RI ) = NumberColumns( RI ) then
## a left inverse of a ring element is unique
## and coincides with the right inverse
SetRightInverse( RI, LI );
SetLeftInverse( LI, RI );
fi;
return LI;
end );
</pre></div>
<p><a id="X7AAD17D47839BCAE" name="X7AAD17D47839BCAE"></a></p>
<h5>5.5-3 RightInverse</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightInverse</code>( <var class="Arg">LI</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix or fail</p>
<p>The right inverse of the matrix <var class="Arg">LI</var>. The lazy version of this operation is <code class="func">RightInverseLazy</code> (<a href="chap5_mj.html#X7FA3E7617EED7E1E"><span class="RefLink">5.5-5</span></a>). (--> <code class="func">LeftDivide</code> (<a href="chap5_mj.html#X7D0EAF527F8514E0"><span class="RefLink">5.5-52</span></a>))</p>
<div class="example"><pre>
InstallMethod( RightInverse,
"for homalg matrices",
[ IsHomalgMatrix ],
function( LI )
local Id, RI;
Id := HomalgIdentityMatrix( NumberRows( LI ), HomalgRing( LI ) );
RI := LeftDivide( LI, Id ); ## ( cf. [BR08, Subsection 3.1.3] )
## CAUTION: for the following SetXXX LeftDivide is assumed
## NOT to be lazy evaluated!!!
SetIsRightInvertibleMatrix( LI, IsHomalgMatrix( RI ) );
if IsBool( RI ) then
return fail;
fi;
if HasIsInvertibleMatrix( LI ) and IsInvertibleMatrix( LI ) then
SetIsInvertibleMatrix( RI, true );
else
SetIsLeftInvertibleMatrix( RI, true );
fi;
SetLeftInverse( RI, LI );
SetNumberRows( RI, NumberColumns( LI ) );
if NumberRows( LI ) = NumberColumns( LI ) then
## a right inverse of a ring element is unique
## and coincides with the left inverse
SetLeftInverse( LI, RI );
SetRightInverse( RI, LI );
fi;
return RI;
end );
</pre></div>
<p><a id="X7A7E42C179142727" name="X7A7E42C179142727"></a></p>
<h5>5.5-4 LeftInverseLazy</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftInverseLazy</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A lazy evaluated left inverse <span class="SimpleMath">\(C\)</span> of the matrix <var class="Arg">M</var>. If no left inverse exists then <code class="code">Eval</code>( <var class="Arg">C</var> ) will issue an error.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X8362669D87FD667B"><span class="RefLink">C.4-5</span></a>))</p>
<p><a id="X7FA3E7617EED7E1E" name="X7FA3E7617EED7E1E"></a></p>
<h5>5.5-5 RightInverseLazy</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightInverseLazy</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>A lazy evaluated right inverse <span class="SimpleMath">\(C\)</span> of the matrix <var class="Arg">M</var>. If no right inverse exists then <code class="code">Eval</code>( <var class="Arg">C</var> ) will issue an error.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X84D72DF482F70AD5"><span class="RefLink">C.4-6</span></a>))</p>
<p><a id="X800FA81F7C42BFEA" name="X800FA81F7C42BFEA"></a></p>
<h5>5.5-6 Involution</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Involution</code>( <var class="Arg">M</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The twisted transpose of the <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>. If the underlying ring is commutative, the twist is the identity.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X7928991E8768FA72"><span class="RefLink">C.4-7</span></a>))</p>
<p><a id="X7D0D35B582D9C0B0" name="X7D0D35B582D9C0B0"></a></p>
<h5>5.5-7 TransposedMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TransposedMatrix</code>( <var class="Arg">M</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The transpose of the <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X78D5359480EFC5AC"><span class="RefLink">C.4-8</span></a>))</p>
<p><a id="X7CF5CE79796001F6" name="X7CF5CE79796001F6"></a></p>
<h5>5.5-8 CertainRows</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CertainRows</code>( <var class="Arg">M</var>, <var class="Arg">plist</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The matrix of which the <span class="SimpleMath">\(i\)</span>-th row is the <span class="SimpleMath">\(k\)</span>-th row of the <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>, where <span class="SimpleMath">\(k=\)</span><var class="Arg">plist</var><span class="SimpleMath">\([i]\)</span>.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X852DCBD57A742FA5"><span class="RefLink">C.4-10</span></a>))</p>
<p><a id="X8256AF2A840B19C4" name="X8256AF2A840B19C4"></a></p>
<h5>5.5-9 CertainColumns</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CertainColumns</code>( <var class="Arg">M</var>, <var class="Arg">plist</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The matrix of which the <span class="SimpleMath">\(j\)</span>-th column is the <span class="SimpleMath">\(l\)</span>-th column of the <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>, where <span class="SimpleMath">\(l=\)</span><var class="Arg">plist</var><span class="SimpleMath">\([j]\)</span>.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X835F6F2E7D590F3D"><span class="RefLink">C.4-11</span></a>))</p>
<p><a id="X7D6D0BDF854C9EBC" name="X7D6D0BDF854C9EBC"></a></p>
<h5>5.5-10 UnionOfRows</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnionOfRows</code>( [<var class="Arg">R</var>, <var class="Arg">nr_cols</var>, ]<var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Stack the <strong class="pkg">homalg</strong> matrices in the list <var class="Arg">L</var>. The entries of <var class="Arg">L</var> must be matrices over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var> with <var class="Arg">nr_cols</var> columns. If <var class="Arg">L</var> is non-empty, <var class="Arg">R</var> and <var class="Arg">nr_cols</var> can be omitted.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X7F35A61C8522A1B0"><span class="RefLink">C.4-12</span></a>))</p>
<p><a id="X7FF9661D85EC46B1" name="X7FF9661D85EC46B1"></a></p>
<h5>5.5-11 UnionOfColumns</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnionOfColumns</code>( [<var class="Arg">R</var>, <var class="Arg">nr_rows</var>, ]<var class="Arg">L</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Augment the <strong class="pkg">homalg</strong> matrices in the list <var class="Arg">L</var>. The entries of <var class="Arg">L</var> must be matrices over the <strong class="pkg">homalg</strong> ring <var class="Arg">R</var> with <var class="Arg">nr_rows</var> rows. If <var class="Arg">L</var> is non-empty, <var class="Arg">R</var> and <var class="Arg">nr_rows</var> can be omitted.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X7EDE6095820F8128"><span class="RefLink">C.4-13</span></a>))</p>
<p><a id="X7E61390E79B663E8" name="X7E61390E79B663E8"></a></p>
<h5>5.5-12 ConvertRowToMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConvertRowToMatrix</code>( <var class="Arg">M</var>, <var class="Arg">r</var>, <var class="Arg">c</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Fold the row <var class="Arg">M</var> to an <var class="Arg">r</var>x<var class="Arg">c</var>-matrix.</p>
<p><a id="X853EA6C87EDDF6EF" name="X853EA6C87EDDF6EF"></a></p>
<h5>5.5-13 ConvertColumnToMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConvertColumnToMatrix</code>( <var class="Arg">M</var>, <var class="Arg">r</var>, <var class="Arg">c</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Fold the column <var class="Arg">M</var> to an <var class="Arg">r</var>x<var class="Arg">c</var>-matrix.</p>
<p><a id="X7ED5C86379A647F2" name="X7ED5C86379A647F2"></a></p>
<h5>5.5-14 ConvertMatrixToRow</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConvertMatrixToRow</code>( <var class="Arg">M</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Unfold the matrix <var class="Arg">M</var> row-wise into a row.</p>
<p><a id="X84C7C1D07DB6FBAA" name="X84C7C1D07DB6FBAA"></a></p>
<h5>5.5-15 ConvertMatrixToColumn</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConvertMatrixToColumn</code>( <var class="Arg">M</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Unfold the matrix <var class="Arg">M</var> column-wise into a column.</p>
<p><a id="X7C7830BE847D84B4" name="X7C7830BE847D84B4"></a></p>
<h5>5.5-16 DiagMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DiagMat</code>( [<var class="Arg">R</var>, ]<var class="Arg">list</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Build the block diagonal matrix out of the <strong class="pkg">homalg</strong> matrices listed in <var class="Arg">list</var>. If <var class="Arg">list</var> is non-empty, <var class="Arg">R</var> can be omitted.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X7FD68F43831046B6"><span class="RefLink">C.4-14</span></a>))</p>
<p><a id="X7CDA5D848468A0AA" name="X7CDA5D848468A0AA"></a></p>
<h5>5.5-17 KroneckerMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KroneckerMat</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The Kronecker (or tensor) product of the two <strong class="pkg">homalg</strong> matrices <var class="Arg">A</var> and <var class="Arg">B</var>.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X84F45FB4854A079C"><span class="RefLink">C.4-15</span></a>))</p>
<p><a id="X7ECF744B7DE82BED" name="X7ECF744B7DE82BED"></a></p>
<h5>5.5-18 DualKroneckerMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DualKroneckerMat</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The dual Kronecker product of the two <strong class="pkg">homalg</strong> matrices <var class="Arg">A</var> and <var class="Arg">B</var>.</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X78ADE5C879583E7B"><span class="RefLink">C.4-16</span></a>))</p>
<p><a id="X7D1A074278B415BE" name="X7D1A074278B415BE"></a></p>
<h5><code>5.5-19 \*</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">a</var>, <var class="Arg">A</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The product of the ring element <var class="Arg">a</var> with the <strong class="pkg">homalg</strong> matrix <var class="Arg">A</var> (enter: <var class="Arg">a</var> <code class="code">*</code> <var class="Arg">A</var>;).</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X7B68797C7EA79B10"><span class="RefLink">C.4-17</span></a>))</p>
<p><a id="X87C773DA85B21ADF" name="X87C773DA85B21ADF"></a></p>
<h5><code>5.5-20 \+</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \+</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The sum of the two <strong class="pkg">homalg</strong> matrices <var class="Arg">A</var> and <var class="Arg">B</var> (enter: <var class="Arg">A</var> <code class="code">+</code> <var class="Arg">B</var>;).</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X85971C16868BD83C"><span class="RefLink">C.4-18</span></a>))</p>
<p><a id="X784B57617B24208C" name="X784B57617B24208C"></a></p>
<h5><code>5.5-21 \-</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \-</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The difference of the two <strong class="pkg">homalg</strong> matrices <var class="Arg">A</var> and <var class="Arg">B</var> (enter: <var class="Arg">A</var> <code class="code">-</code> <var class="Arg">B</var>;).</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X86F848318791595C"><span class="RefLink">C.4-19</span></a>))</p>
<p><a id="X7F5961D78754157B" name="X7F5961D78754157B"></a></p>
<h5><code>5.5-22 \*</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>The matrix product of the two <strong class="pkg">homalg</strong> matrices <var class="Arg">A</var> and <var class="Arg">B</var> (enter: <var class="Arg">A</var> <code class="code">*</code> <var class="Arg">B</var>;).</p>
<p>(for the installed standard method see <code class="func">Eval</code> (<a href="chapC_mj.html#X7F7682FC86F602C2"><span class="RefLink">C.4-20</span></a>))</p>
<p><a id="X7E2074A77AFF518A" name="X7E2074A77AFF518A"></a></p>
<h5><code>5.5-23 \=</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \=</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Check if the <strong class="pkg">homalg</strong> matrices <var class="Arg">A</var> and <var class="Arg">B</var> are equal (enter: <var class="Arg">A</var> <code class="code">=</code> <var class="Arg">B</var>;), taking possible ring relations into account.</p>
<p>(for the installed standard method see <code class="func">AreEqualMatrices</code> (<a href="chapB_mj.html#X7871FE5478BFC167"><span class="RefLink">B.2-1</span></a>))</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">A := HomalgMatrix( "[ 1 ]", zz );</span>
<A 1 x 1 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := HomalgMatrix( "[ 3 ]", zz );</span>
<A 1 x 1 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Z2 := zz / 2;</span>
Z/( 2 )
<span class="GAPprompt">gap></span> <span class="GAPinput">A := Z2 * A;</span>
<A 1 x 1 matrix over a residue class ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := Z2 * B;</span>
<A 1 x 1 matrix over a residue class ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( A );</span>
[ [ 1 ] ]
modulo [ 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( B );</span>
[ [ 3 ] ]
modulo [ 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">A = B;</span>
true
</pre></div>
<p><a id="X85887BBB86F0A08B" name="X85887BBB86F0A08B"></a></p>
<h5>5.5-24 GetColumnIndependentUnitPositions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GetColumnIndependentUnitPositions</code>( <var class="Arg">A</var>, <var class="Arg">poslist</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a (possibly empty) list of pairs of positive integers</p>
<p>The list of column independet unit position of the matrix <var class="Arg">A</var>. We say that a unit <var class="Arg">A</var><span class="SimpleMath">\([i,k]\)</span> is column independet from the unit <var class="Arg">A</var><span class="SimpleMath">\([l,j]\)</span> if <span class="SimpleMath">\(i>l\)</span> and <var class="Arg">A</var><span class="SimpleMath">\([l,k]=0\)</span>. The rows are scanned from top to bottom and within each row the columns are scanned from right to left searching for new units, column independent from the preceding ones. If <var class="Arg">A</var><span class="SimpleMath">\([i,k]\)</span> is a new column independent unit then <span class="SimpleMath">\([i,k]\)</span> is added to the output list. If <var class="Arg">A</var> has no units the empty list is returned.</p>
<p>(for the installed standard method see <code class="func">GetColumnIndependentUnitPositions</code> (<a href="chapB_mj.html#X7BCBACDB79C96FBF"><span class="RefLink">B.2-6</span></a>))</p>
<p><a id="X824AB44184DD63B0" name="X824AB44184DD63B0"></a></p>
<h5>5.5-25 GetRowIndependentUnitPositions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GetRowIndependentUnitPositions</code>( <var class="Arg">A</var>, <var class="Arg">poslist</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a (possibly empty) list of pairs of positive integers</p>
<p>The list of row independet unit position of the matrix <var class="Arg">A</var>. We say that a unit <var class="Arg">A</var><span class="SimpleMath">\([k,j]\)</span> is row independet from the unit <var class="Arg">A</var><span class="SimpleMath">\([i,l]\)</span> if <span class="SimpleMath">\(j>l\)</span> and <var class="Arg">A</var><span class="SimpleMath">\([k,l]=0\)</span>. The columns are scanned from left to right and within each column the rows are scanned from bottom to top searching for new units, row independent from the preceding ones. If <var class="Arg">A</var><span class="SimpleMath">\([k,j]\)</span> is a new row independent unit then <span class="SimpleMath">\([j,k]\)</span> (yes <span class="SimpleMath">\([j,k]\)</span>) is added to the output list. If <var class="Arg">A</var> has no units the empty list is returned.</p>
<p>(for the installed standard method see <code class="func">GetRowIndependentUnitPositions</code> (<a href="chapB_mj.html#X855C57B6822E7A98"><span class="RefLink">B.2-7</span></a>))</p>
<p><a id="X7A1969A17979FC49" name="X7A1969A17979FC49"></a></p>
<h5>5.5-26 GetUnitPosition</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GetUnitPosition</code>( <var class="Arg">A</var>, <var class="Arg">poslist</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a (possibly empty) list of pairs of positive integers</p>
<p>The position <span class="SimpleMath">\([i,j]\)</span> of the first unit <var class="Arg">A</var><span class="SimpleMath">\([i,j]\)</span> in the matrix <var class="Arg">A</var>, where the rows are scanned from top to bottom and within each row the columns are scanned from left to right. If <var class="Arg">A</var><span class="SimpleMath">\([i,j]\)</span> is the first occurrence of a unit then the position pair <span class="SimpleMath">\([i,j]\)</span> is returned. Otherwise <code class="code">fail</code> is returned.</p>
<p>(for the installed standard method see <code class="func">GetUnitPosition</code> (<a href="chapB_mj.html#X876495AA79063CDE"><span class="RefLink">B.2-8</span></a>))</p>
<p><a id="X781B1C0C80529B09" name="X781B1C0C80529B09"></a></p>
<h5>5.5-27 Eliminate</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Eliminate</code>( <var class="Arg">rel</var>, <var class="Arg">indets</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Eliminate the independents <var class="Arg">indets</var> from the matrix (or list of ring elements) <var class="Arg">rel</var>, i.e. compute a generating set of the ideal defined as the intersection of the ideal generated by the entries of the list <var class="Arg">rel</var> with the subring generated by all indeterminates except those in <var class="Arg">indets</var>. by the list of indeterminates <var class="Arg">indets</var>.</p>
<p><a id="X80ADBE0D82CC6E85" name="X80ADBE0D82CC6E85"></a></p>
<h5>5.5-28 BasisOfRowModule</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfRowModule</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Let <span class="SimpleMath">\(R\)</span> be the ring over which <var class="Arg">M</var> is defined (<span class="SimpleMath">\(R:=\)</span><code class="code">HomalgRing</code>( <var class="Arg">M</var> )) and <span class="SimpleMath">\(S\)</span> be the row span of <var class="Arg">M</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free left module <span class="SimpleMath">\(R^{(1 \times NumberColumns( \textit{M} ))}\)</span> spanned by the rows of <var class="Arg">M</var>. A solution to the <q>submodule membership problem</q> is an algorithm which can decide if an element <span class="SimpleMath">\(m\)</span> in <span class="SimpleMath">\(R^{(1 \times NumberColumns( \textit{M} ))}\)</span> is contained in <span class="SimpleMath">\(S\)</span> or not. And exactly like the Gaussian (resp. Hermite) normal form when <span class="SimpleMath">\(R\)</span> is a field (resp. principal ideal ring), the row span of the resulting matrix <span class="SimpleMath">\(B\)</span> coincides with the row span <span class="SimpleMath">\(S\)</span> of <var class="Arg">M</var>, and computing <span class="SimpleMath">\(B\)</span> is typically the first step of such an algorithm. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>
<p><a id="X868CDA327D6C8DDC" name="X868CDA327D6C8DDC"></a></p>
<h5>5.5-29 BasisOfColumnModule</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfColumnModule</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Let <span class="SimpleMath">\(R\)</span> be the ring over which <var class="Arg">M</var> is defined (<span class="SimpleMath">\(R:=\)</span><code class="code">HomalgRing</code>( <var class="Arg">M</var> )) and <span class="SimpleMath">\(S\)</span> be the column span of <var class="Arg">M</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free right module <span class="SimpleMath">\(R^{(NumberRows( \textit{M} ) \times 1)}\)</span> spanned by the columns of <var class="Arg">M</var>. A solution to the <q>submodule membership problem</q> is an algorithm which can decide if an element <span class="SimpleMath">\(m\)</span> in <span class="SimpleMath">\(R^{(NumberRows( \textit{M} ) \times 1)}\)</span> is contained in <span class="SimpleMath">\(S\)</span> or not. And exactly like the Gaussian (resp. Hermite) normal form when <span class="SimpleMath">\(R\)</span> is a field (resp. principal ideal ring), the column span of the resulting matrix <span class="SimpleMath">\(B\)</span> coincides with the column span <span class="SimpleMath">\(S\)</span> of <var class="Arg">M</var>, and computing <span class="SimpleMath">\(B\)</span> is typically the first step of such an algorithm. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>
<p><a id="X7F851EC7861170D1" name="X7F851EC7861170D1"></a></p>
<h5>5.5-30 DecideZeroRows</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZeroRows</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Let <var class="Arg">A</var> and <var class="Arg">B</var> be matrices having the same number of columns and defined over the same ring <span class="SimpleMath">\(R\)</span> (<span class="SimpleMath">\(:=\)</span><code class="code">HomalgRing</code>( <var class="Arg">A</var> )) and <span class="SimpleMath">\(S\)</span> be the row span of <var class="Arg">B</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free left module <span class="SimpleMath">\(R^{(1 \times NumberColumns( \textit{B} ))}\)</span> spanned by the rows of <var class="Arg">B</var>. The result is a matrix <span class="SimpleMath">\(C\)</span> having the same shape as <var class="Arg">A</var>, for which the <span class="SimpleMath">\(i\)</span>-th row <span class="SimpleMath">\(\textit{C}^i\)</span> is equivalent to the <span class="SimpleMath">\(i\)</span>-th row <span class="SimpleMath">\(\textit{A}^i\)</span> of <var class="Arg">A</var> modulo <span class="SimpleMath">\(S\)</span>, i.e. <span class="SimpleMath">\(\textit{C}^i-\textit{A}^i\)</span> is an element of the row span <span class="SimpleMath">\(S\)</span> of <var class="Arg">B</var>. Moreover, the row <span class="SimpleMath">\(\textit{C}^i\)</span> is zero, if and only if the row <span class="SimpleMath">\(\textit{A}^i\)</span> is an element of <span class="SimpleMath">\(S\)</span>. So <code class="code">DecideZeroRows</code> decides which rows of <var class="Arg">A</var> are zero modulo the rows of <var class="Arg">B</var>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>
<p><a id="X86C97DBB787BAD6D" name="X86C97DBB787BAD6D"></a></p>
<h5>5.5-31 DecideZeroColumns</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZeroColumns</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>
<p>Let <var class="Arg">A</var> and <var class="Arg">B</var> be matrices having the same number of rows and defined over the same ring <span class="SimpleMath">\(R\)</span> (<span class="SimpleMath">\(:=\)</span><code class="code">HomalgRing</code>( <var class="Arg">A</var> )) and <span class="SimpleMath">\(S\)</span> be the column span of <var class="Arg">B</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free right module <span class="SimpleMath">\(R^{(NumberRows( \textit{B} ) \times 1)}\)</span> spanned by the columns of <var class="Arg">B</var>. The result is a matrix <span class="SimpleMath">\(C\)</span> having the same shape as <var class="Arg">A</var>, for which the < | |