Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/matricesforhomalg/doc/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 7.8.2025 mit Größe 139 kB image not shown  

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</strongring <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 <span class="SimpleMath">\(i\)</span>-th column <span class="SimpleMath">\(\textit{C}_i\)</span> is equivalent to the <span class="SimpleMath">\(i\)</span>-th column <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 column span <span class="SimpleMath">\(S\)</span> of <var class="Arg">B</var>. Moreover, the column <span class="SimpleMath">\(\textit{C}_i\)</span> is zero, if and only if the column <span class="SimpleMath">\(\textit{A}_i\)</span> is an element of <span class="SimpleMath">\(S\)</span>. So <code class="code">DecideZeroColumns</code> decides which columns of <var class="Arg">A</var> are zero modulo the columns of <var class="Arg">B</var>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X86ECEA9B7A4AE578" name="X86ECEA9B7A4AE578"></a></p>

<h5>5.5-32 SyzygiesGeneratorsOfRows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesGeneratorsOfRows</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> )). The matrix of row syzygies <code class="code">SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var> ) is a matrix whose rows span the left kernel 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 NumberRows( \textit{M} ))}\)</span> consisting of all rows <span class="SimpleMath">\(X\)</span> satisfying <span class="SimpleMath">\(X\textit{M}=0\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X86504B757F6DC990" name="X86504B757F6DC990"></a></p>

<h5>5.5-33 SyzygiesGeneratorsOfColumns</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesGeneratorsOfColumns</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> )). The matrix of column syzygies <code class="code">SyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var> ) is a matrix whose columns span the right kernel of <var class="Arg">M</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free right module <span class="SimpleMath">\(R^{(NumberColumns( \textit{M} ) \times 1)}\)</span> consisting of all columns <span class="SimpleMath">\(X\)</span> satisfying <span class="SimpleMath">\(\textit{M}X=0\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X84A93458804F16F6" name="X84A93458804F16F6"></a></p>

<h5>5.5-34 SyzygiesGeneratorsOfRows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var>, <var class="Arg">M2</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> )). The matrix of <em>relative</em> row syzygies <code class="code">SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> ) is a matrix whose rows span the left kernel of <var class="Arg">M</var> modulo <var class="Arg">M2</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free left module <span class="SimpleMath">\(R^{(1 \times NumberRows( \textit{M} ))}\)</span> consisting of all rows <span class="SimpleMath">\(X\)</span> satisfying <span class="SimpleMath">\(X\textit{M}+Y\textit{M2}=0\)</span> for some row <span class="SimpleMath">\(Y \in R^{(1 \times NumberRows( \textit{M2} ))}\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X7D3FC0CE7B63AAF1" name="X7D3FC0CE7B63AAF1"></a></p>

<h5>5.5-35 SyzygiesGeneratorsOfColumns</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var>, <var class="Arg">M2</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> )). The matrix of <em>relative</em> column syzygies <code class="code">SyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> ) is a matrix whose columns span the right kernel of <var class="Arg">M</var> modulo <var class="Arg">M2</var>, i.e. the <span class="SimpleMath">\(R\)</span>-submodule of the free right module <span class="SimpleMath">\(R^{(NumberColumns( \textit{M} ) \times 1)}\)</span> consisting of all columns <span class="SimpleMath">\(X\)</span> satisfying <span class="SimpleMath">\(\textit{M}X+\textit{M2}Y=0\)</span> for some column <span class="SimpleMath">\(Y \in R^{(NumberColumns( \textit{M2} ) \times 1)}\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X82E0FF517DC38040" name="X82E0FF517DC38040"></a></p>

<h5>5.5-36 ReducedBasisOfRowModule</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedBasisOfRowModule</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>Like <code class="code">BasisOfRowModule</code>( <var class="Arg">M</var> ) but where the matrix <code class="code">SyzygiesGeneratorsOfRows</code>( <code class="code">ReducedBasisOfRowModule</code>( <var class="Arg">M</var> ) ) contains no units. This can easily be achieved starting from <span class="SimpleMath">\(B:=\)</span><code class="code">BasisOfRowModule</code>( <var class="Arg">M</var> ) (and using <code class="func">GetColumnIndependentUnitPositions</code> (<a href="chap5_mj.html#X85887BBB86F0A08B"><span class="RefLink">5.5-24</span></a>) applied to the matrix of row syzygies of <span class="SimpleMath">\(B\)</span>, etc). (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X84CED11F7A633BDA" name="X84CED11F7A633BDA"></a></p>

<h5>5.5-37 ReducedBasisOfColumnModule</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedBasisOfColumnModule</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>Like <code class="code">BasisOfColumnModule</code>( <var class="Arg">M</var> ) but where the matrix <code class="code">SyzygiesGeneratorsOfColumns</code>( <code class="code">ReducedBasisOfColumnModule</code>( <var class="Arg">M</var> ) ) contains no units. This can easily be achieved starting from <span class="SimpleMath">\(B:=\)</span><code class="code">BasisOfColumnModule</code>( <var class="Arg">M</var> ) (and using <code class="func">GetRowIndependentUnitPositions</code> (<a href="chap5_mj.html#X824AB44184DD63B0"><span class="RefLink">5.5-25</span></a>) applied to the matrix of column syzygies of <span class="SimpleMath">\(B\)</span>, etc.). (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X7DE458D67B9B85BF" name="X7DE458D67B9B85BF"></a></p>

<h5>5.5-38 ReducedSyzygiesGeneratorsOfRows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedSyzygiesGeneratorsOfRows</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>Like <code class="code">SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var> ) but where the matrix <code class="code">SyzygiesGeneratorsOfRows</code>( <code class="code">ReducedSyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var> ) ) contains no units. This can easily be achieved starting from <span class="SimpleMath">\(C:=\)</span><code class="code">SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var> ) (and using <code class="func">GetColumnIndependentUnitPositions</code> (<a href="chap5_mj.html#X85887BBB86F0A08B"><span class="RefLink">5.5-24</span></a>) applied to the matrix of row syzygies of <span class="SimpleMath">\(C\)</span>, etc.). (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X8699114D7A865C11" name="X8699114D7A865C11"></a></p>

<h5>5.5-39 ReducedSyzygiesGeneratorsOfColumns</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedSyzygiesGeneratorsOfColumns</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>Like <code class="code">SyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var> ) but where the matrix <code class="code">SyzygiesGeneratorsOfColumns</code>( <code class="code">ReducedSyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var> ) ) contains no units. This can easily be achieved starting from <span class="SimpleMath">\(C:=\)</span><code class="code">SyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var> ) (and using <code class="func">GetRowIndependentUnitPositions</code> (<a href="chap5_mj.html#X824AB44184DD63B0"><span class="RefLink">5.5-25</span></a>) applied to the matrix of column syzygies of <span class="SimpleMath">\(C\)</span>, etc.). (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X7D9DEC6081AF0003" name="X7D9DEC6081AF0003"></a></p>

<h5>5.5-40 BasisOfRowsCoeff</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfRowsCoeff</code>( <var class="Arg">M</var>, <var class="Arg">T</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Returns <span class="SimpleMath">\(B:=\)</span><code class="code">BasisOfRowModule</code>( <var class="Arg">M</var> ) and assigns the <em>void</em> matrix <var class="Arg">T</var> (--> <code class="func">HomalgVoidMatrix</code> (<a href="chap5_mj.html#X7D2E3472879E28AB"><span class="RefLink">5.2-5</span></a>)) such that <span class="SimpleMath">\(B = \textit{T} \textit{M}\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X7BBC885F7C24DEC2" name="X7BBC885F7C24DEC2"></a></p>

<h5>5.5-41 BasisOfColumnsCoeff</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfColumnsCoeff</code>( <var class="Arg">M</var>, <var class="Arg">T</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Returns <span class="SimpleMath">\(B:=\)</span><code class="code">BasisOfRowModule</code>( <var class="Arg">M</var> ) and assigns the <em>void</em> matrix <var class="Arg">T</var> (--> <code class="func">HomalgVoidMatrix</code> (<a href="chap5_mj.html#X7D2E3472879E28AB"><span class="RefLink">5.2-5</span></a>)) such that <span class="SimpleMath">\(B = \textit{M} \textit{T}\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X8513963C84A9F8CB" name="X8513963C84A9F8CB"></a></p>

<h5>5.5-42 DecideZeroRowsEffectively</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZeroRowsEffectively</code>( <var class="Arg">A</var>, <var class="Arg">B</var>, <var class="Arg">T</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Returns <span class="SimpleMath">\(M:=\)</span><code class="code">DecideZeroRows</code>( <var class="Arg">A</var>, <var class="Arg">B</var> ) and assigns the <em>void</em> matrix <var class="Arg">T</var> (--> <code class="func">HomalgVoidMatrix</code> (<a href="chap5_mj.html#X7D2E3472879E28AB"><span class="RefLink">5.2-5</span></a>)) such that <span class="SimpleMath">\(M = \textit{A} + \textit{T}\textit{B}\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X7A06BF7779830815" name="X7A06BF7779830815"></a></p>

<h5>5.5-43 DecideZeroColumnsEffectively</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZeroColumnsEffectively</code>( <var class="Arg">A</var>, <var class="Arg">B</var>, <var class="Arg">T</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Returns <span class="SimpleMath">\(M:=\)</span><code class="code">DecideZeroColumns</code>( <var class="Arg">A</var>, <var class="Arg">B</var> ) and assigns the <em>void</em> matrix <var class="Arg">T</var> (--> <code class="func">HomalgVoidMatrix</code> (<a href="chap5_mj.html#X7D2E3472879E28AB"><span class="RefLink">5.2-5</span></a>)) such that <span class="SimpleMath">\(M = \textit{A} + \textit{B}\textit{T}\)</span>. (--> Appendix <a href="chapA_mj.html#X7CB422647C7DD289"><span class="RefLink">A</span></a>)</p>

<p><a id="X81ABDA3E7D94C661" name="X81ABDA3E7D94C661"></a></p>

<h5>5.5-44 BasisOfRows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfRows</code>( <var class="Arg">M</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">‣ BasisOfRows</code>( <var class="Arg">M</var>, <var class="Arg">T</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>With one argument it is a synonym of <code class="func">BasisOfRowModule</code> (<a href="chap5_mj.html#X80ADBE0D82CC6E85"><span class="RefLink">5.5-28</span></a>). with two arguments it is a synonym of <code class="func">BasisOfRowsCoeff</code> (<a href="chap5_mj.html#X7D9DEC6081AF0003"><span class="RefLink">5.5-40</span></a>).</p>

<p><a id="X83A5B51980FFDE53" name="X83A5B51980FFDE53"></a></p>

<h5>5.5-45 BasisOfColumns</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfColumns</code>( <var class="Arg">M</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">‣ BasisOfColumns</code>( <var class="Arg">M</var>, <var class="Arg">T</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>With one argument it is a synonym of <code class="func">BasisOfColumnModule</code> (<a href="chap5_mj.html#X868CDA327D6C8DDC"><span class="RefLink">5.5-29</span></a>). with two arguments it is a synonym of <code class="func">BasisOfColumnsCoeff</code> (<a href="chap5_mj.html#X7BBC885F7C24DEC2"><span class="RefLink">5.5-41</span></a>).</p>

<p><a id="X85C980288304B4AC" name="X85C980288304B4AC"></a></p>

<h5>5.5-46 DecideZero</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZero</code>( <var class="Arg">mat</var>, <var class="Arg">rel</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>


<div class="example"><pre>
InstallMethod( DecideZero,
        "for sets of ring relations",
        [ IsHomalgMatrix, IsHomalgRingRelations ],
        
  function( mat, rel )
    
    return DecideZero( mat,  MatrixOfRelations( rel ) );
    
end );
</pre></div>

<p><a id="X86C93ABD857447F8" name="X86C93ABD857447F8"></a></p>

<h5>5.5-47 SyzygiesOfRows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesOfRows</code>( <var class="Arg">M</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">‣ SyzygiesOfRows</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>With one argument it is a synonym of <code class="func">SyzygiesGeneratorsOfRows</code> (<a href="chap5_mj.html#X86ECEA9B7A4AE578"><span class="RefLink">5.5-32</span></a>). with two arguments it is a synonym of <code class="func">SyzygiesGeneratorsOfRows</code> (<a href="chap5_mj.html#X84A93458804F16F6"><span class="RefLink">5.5-34</span></a>).</p>

<p><a id="X80325CAD7CE56F4F" name="X80325CAD7CE56F4F"></a></p>

<h5>5.5-48 SyzygiesOfColumns</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesOfColumns</code>( <var class="Arg">M</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">‣ SyzygiesOfColumns</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>With one argument it is a synonym of <code class="func">SyzygiesGeneratorsOfColumns</code> (<a href="chap5_mj.html#X86504B757F6DC990"><span class="RefLink">5.5-33</span></a>). with two arguments it is a synonym of <code class="func">SyzygiesGeneratorsOfColumns</code> (<a href="chap5_mj.html#X7D3FC0CE7B63AAF1"><span class="RefLink">5.5-35</span></a>).</p>

<p><a id="X86A798D4850BF9E8" name="X86A798D4850BF9E8"></a></p>

<h5>5.5-49 ReducedSyzygiesOfRows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedSyzygiesOfRows</code>( <var class="Arg">M</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">‣ ReducedSyzygiesOfRows</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>With one argument it is a synonym of <code class="func">ReducedSyzygiesGeneratorsOfRows</code> (<a href="chap5_mj.html#X7DE458D67B9B85BF"><span class="RefLink">5.5-38</span></a>). With two arguments it calls <code class="code">ReducedBasisOfRowModule</code>( <code class="code">SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> ) ). (--> <code class="func">ReducedBasisOfRowModule</code> (<a href="chap5_mj.html#X82E0FF517DC38040"><span class="RefLink">5.5-36</span></a>) and <code class="func">SyzygiesGeneratorsOfRows</code> (<a href="chap5_mj.html#X84A93458804F16F6"><span class="RefLink">5.5-34</span></a>))</p>

<p><a id="X8766BBD578557D15" name="X8766BBD578557D15"></a></p>

<h5>5.5-50 ReducedSyzygiesOfColumns</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedSyzygiesOfColumns</code>( <var class="Arg">M</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">‣ ReducedSyzygiesOfColumns</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>With one argument it is a synonym of <code class="func">ReducedSyzygiesGeneratorsOfColumns</code> (<a href="chap5_mj.html#X8699114D7A865C11"><span class="RefLink">5.5-39</span></a>). With two arguments it calls <code class="code">ReducedBasisOfColumnModule</code>( <code class="code">SyzygiesGeneratorsOfColumns</code>( <var class="Arg">M</var>, <var class="Arg">M2</var> ) ). (--> <code class="func">ReducedBasisOfColumnModule</code> (<a href="chap5_mj.html#X84CED11F7A633BDA"><span class="RefLink">5.5-37</span></a>) and <code class="func">SyzygiesGeneratorsOfColumns</code> (<a href="chap5_mj.html#X7D3FC0CE7B63AAF1"><span class="RefLink">5.5-35</span></a>))</p>

<p><a id="X850AEC9C7C00AFF5" name="X850AEC9C7C00AFF5"></a></p>

<h5>5.5-51 RightDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightDivide</code>( <var class="Arg">B</var>, <var class="Arg">A</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix or fail</p>

<p>Let <var class="Arg">B</var> and <var class="Arg">A</var> be matrices having the same number of columns and defined over the same ring. The matrix <code class="code">RightDivide</code>( <var class="Arg">B</var>, <var class="Arg">A</var> ) is a particular solution of the inhomogeneous (one sided) linear system of equations <span class="SimpleMath">\(X\textit{A}=\textit{B}\)</span> in case it is solvable. Otherwise <code class="code">fail</code> is returned. The name <code class="code">RightDivide</code> suggests <q><span class="SimpleMath">\(X=\textit{B}\textit{A}^{-1}\)</span></q>. This generalizes <code class="func">LeftInverse</code> (<a href="chap5_mj.html#X7FBAA11B8008D936"><span class="RefLink">5.5-2</span></a>) for which <var class="Arg">B</var> becomes the identity matrix. (--> <code class="func">SyzygiesGeneratorsOfRows</code> (<a href="chap5_mj.html#X86ECEA9B7A4AE578"><span class="RefLink">5.5-32</span></a>))</p>

<p><a id="X7D0EAF527F8514E0" name="X7D0EAF527F8514E0"></a></p>

<h5>5.5-52 LeftDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftDivide</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 or fail</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. The matrix <code class="code">LeftDivide</code>( <var class="Arg">A</var>, <var class="Arg">B</var> ) is a particular solution of the inhomogeneous (one sided) linear system of equations <span class="SimpleMath">\(\textit{A}X=\textit{B}\)</span> in case it is solvable. Otherwise <code class="code">fail</code> is returned. The name <code class="code">LeftDivide</code> suggests <q><span class="SimpleMath">\(X=\textit{A}^{-1}\textit{B}\)</span></q>. This generalizes <code class="func">RightInverse</code> (<a href="chap5_mj.html#X7AAD17D47839BCAE"><span class="RefLink">5.5-3</span></a>) for which <var class="Arg">B</var> becomes the identity matrix. (--> <code class="func">SyzygiesGeneratorsOfColumns</code> (<a href="chap5_mj.html#X86504B757F6DC990"><span class="RefLink">5.5-33</span></a>))</p>

<p><a id="X7A8546EA87E3AE67" name="X7A8546EA87E3AE67"></a></p>

<h5>5.5-53 RightDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightDivide</code>( <var class="Arg">B</var>, <var class="Arg">A</var>, <var class="Arg">L</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix or fail</p>

<p>Let <var class="Arg">B</var>, <var class="Arg">A</var> and <var class="Arg">L</var> be matrices having the same number of columns and defined over the same ring. The matrix <code class="code">RightDivide</code>( <var class="Arg">B</var>, <var class="Arg">A</var>, <var class="Arg">L</var> ) is a particular solution of the inhomogeneous (one sided) linear system of equations <span class="SimpleMath">\(X\textit{A}+Y\textit{L}=\textit{B}\)</span> in case it is solvable (for some <span class="SimpleMath">\(Y\)</span> which is forgotten). Otherwise <code class="code">fail</code> is returned. The name <code class="code">RightDivide</code> suggests <q><span class="SimpleMath">\(X=\textit{B}\textit{A}^{-1}\)</span> modulo <var class="Arg">L</var></q>. (Cf. <a href="chapBib_mj.html#biBBR">[BR08, Subsection 3.1.1]</a>)</p>


<div class="example"><pre>
InstallMethod( RightDivide,
        "for homalg matrices",
        [ IsHomalgMatrix, IsHomalgMatrix, IsHomalgMatrix ],
        
  function( B, A, L ) ## CAUTION: Do not use lazy evaluation here!!!
    local R, BL, ZA, AL, ZB, T, B_;
    
    R := HomalgRing( B );
    
    BL := BasisOfRows( L );
    
    ## first reduce A modulo L
    ZA := DecideZeroRows( A, BL );
    
    AL := UnionOfRows( ZA, BL );
    
    ## also reduce B modulo L
    ZB := DecideZeroRows( B, BL );
    
    ## B_ = ZB + T * AL
    T := HomalgVoidMatrix( R );
    B_ := DecideZeroRowsEffectively( ZB, AL, T );
    
    ## if B_ does not vanish
    if not IsZero( B_ ) then
        return fail;
    fi;
    
    T := CertainColumns( T, [ 1 .. NumberRows( A ) ] );
    
    ## check assertion
    Assert( 5, IsZero( DecideZeroRows( B + T * A, BL ) ) );
    
    return -T;
    
end );
</pre></div>

<p><a id="X86CEB1FC7C358777" name="X86CEB1FC7C358777"></a></p>

<h5>5.5-54 LeftDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftDivide</code>( <var class="Arg">A</var>, <var class="Arg">B</var>, <var class="Arg">L</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix or fail</p>

<p>Let <var class="Arg">A</var>, <var class="Arg">B</var> and <var class="Arg">L</var> be matrices having the same number of columns and defined over the same ring. The matrix <code class="code">LeftDivide</code>( <var class="Arg">A</var>, <var class="Arg">B</var>, <var class="Arg">L</var> ) is a particular solution of the inhomogeneous (one sided) linear system of equations <span class="SimpleMath">\(\textit{A}X+\textit{L}Y=\textit{B}\)</span> in case it is solvable (for some <span class="SimpleMath">\(Y\)</span> which is forgotten). Otherwise <code class="code">fail</code> is returned. The name <code class="code">LeftDivide</code> suggests <q><span class="SimpleMath">\(X=\textit{A}^{-1}\textit{B}\)</span> modulo <var class="Arg">L</var></q>. (Cf. <a href="chapBib_mj.html#biBBR">[BR08, Subsection 3.1.1]</a>)</p>


<div class="example"><pre>
InstallMethod( LeftDivide,
        "for homalg matrices",
        [ IsHomalgMatrix, IsHomalgMatrix, IsHomalgMatrix ],
        
  function( A, B, L ) ## CAUTION: Do not use lazy evaluation here!!!
    local R, BL, ZA, AL, ZB, T, B_;
    
    R := HomalgRing( B );
    
    BL := BasisOfColumns( L );
    
    ## first reduce A modulo L
    ZA := DecideZeroColumns( A, BL );
    
    AL := UnionOfColumns( ZA, BL );
    
    ## also reduce B modulo L
    ZB := DecideZeroColumns( B, BL );
    
    ## B_ = ZB + AL * T
    T := HomalgVoidMatrix( R );
    B_ := DecideZeroColumnsEffectively( ZB, AL, T );
    
    ## if B_ does not vanish
    if not IsZero( B_ ) then
        return fail;
    fi;
    
    T := CertainRows( T, [ 1 .. NumberColumns( A ) ] );
    
    ## check assertion
    Assert( 5, IsZero( DecideZeroColumns( B + A * T, BL ) ) );
    
    return -T;
    
end );
</pre></div>

<p><a id="X86DFDD25824E2F35" name="X86DFDD25824E2F35"></a></p>

<h5>5.5-55 SafeRightDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SafeRightDivide</code>( <var class="Arg">B</var>, <var class="Arg">A</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Same as <code class="func">RightDivide</code> (<a href="chap5_mj.html#X850AEC9C7C00AFF5"><span class="RefLink">5.5-51</span></a>), but asserts that the result is not <code class="code">fail</code>.</p>

<p><a id="X85B64BD47F0379C5" name="X85B64BD47F0379C5"></a></p>

<h5>5.5-56 SafeLeftDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SafeLeftDivide</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>Same as <code class="func">LeftDivide</code> (<a href="chap5_mj.html#X7D0EAF527F8514E0"><span class="RefLink">5.5-52</span></a>), but asserts that the result is not <code class="code">fail</code>.</p>

<p><a id="X7F6BAF8E7F2343EA" name="X7F6BAF8E7F2343EA"></a></p>

<h5>5.5-57 UniqueRightDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UniqueRightDivide</code>( <var class="Arg">B</var>, <var class="Arg">A</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Same as <code class="func">SafeRightDivide</code> (<a href="chap5_mj.html#X86DFDD25824E2F35"><span class="RefLink">5.5-55</span></a>), but asserts at assertion level 5 that the solution is unique.</p>

<p><a id="X8788CB987A8A18A7" name="X8788CB987A8A18A7"></a></p>

<h5>5.5-58 UniqueLeftDivide</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UniqueLeftDivide</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>Same as <code class="func">SafeLeftDivide</code> (<a href="chap5_mj.html#X85B64BD47F0379C5"><span class="RefLink">5.5-56</span></a>), but asserts at assertion level 5 that the solution is unique.</p>

<p><a id="X82B2C4987D6D5BD3" name="X82B2C4987D6D5BD3"></a></p>

<h5>5.5-59 GenerateSameRowModule</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GenerateSameRowModule</code>( <var class="Arg">M</var>, <var class="Arg">N</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 row span of <var class="Arg">M</var> and of <var class="Arg">N</var> are identical or not (--> <code class="func">RightDivide</code> (<a href="chap5_mj.html#X850AEC9C7C00AFF5"><span class="RefLink">5.5-51</span></a>)).</p>

<p><a id="X867A947682754A9A" name="X867A947682754A9A"></a></p>

<h5>5.5-60 GenerateSameColumnModule</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GenerateSameColumnModule</code>( <var class="Arg">M</var>, <var class="Arg">N</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 column span of <var class="Arg">M</var> and of <var class="Arg">N</var> are identical or not (--> <code class="func">LeftDivide</code> (<a href="chap5_mj.html#X7D0EAF527F8514E0"><span class="RefLink">5.5-52</span></a>)).</p>

<p><a id="X81CDBBBE878DC1E5" name="X81CDBBBE878DC1E5"></a></p>

<h5>5.5-61 SimplifyHomalgMatrixByLeftAndRightMultiplicationWithInvertibleMatrices</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SimplifyHomalgMatrixByLeftAndRightMultiplicationWithInvertibleMatrices</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a list of 5 <strong class="pkg">homalg</strong> matrices</p>

<p>The input is a <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>. The output is a 5-tuple of <strong class="pkg">homalg</strong> matrices <var class="Arg">S</var>, <var class="Arg">U</var>, <var class="Arg">V</var>, <var class="Arg">UI</var>, <var class="Arg">VI</var>, such that <var class="Arg"> U M V = S</var>. Moreover, <var class="Arg">U</var> and <var class="Arg">V</var> are invertible with inverses <var class="Arg">UI</var>, <var class="Arg">VI</var>, respectively. The idea is that the matrix <var class="Arg">S</var> should look "simpler" than <var class="Arg">M</var>.</p>

<p><a id="X85DA10C07E7E5A3D" name="X85DA10C07E7E5A3D"></a></p>

<h5>5.5-62 SimplifyHomalgMatrixByLeftMultiplicationWithInvertibleMatrix</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SimplifyHomalgMatrixByLeftMultiplicationWithInvertibleMatrix</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a list of 3 <strong class="pkg">homalg</strong> matrices</p>

<p>The input is a <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>. The output is a 3-tuple of <strong class="pkg">homalg</strong> matrices <var class="Arg">S</var>, <var class="Arg">T</var>, <var class="Arg">TI</var> such that <var class="Arg"> T M = S</var>. Moreover, <var class="Arg">T</var> is invertible with inverse <var class="Arg">TI</var>. The idea is that the matrix <var class="Arg">S</var> should look "simpler" than <var class="Arg">M</var>.</p>

<p><a id="X79C124318588F37F" name="X79C124318588F37F"></a></p>

<h5>5.5-63 SimplifyHomalgMatrixByRightMultiplicationWithInvertibleMatrix</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SimplifyHomalgMatrixByRightMultiplicationWithInvertibleMatrix</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a list of 3 <strong class="pkg">homalg</strong> matrices</p>

<p>The input is a <strong class="pkg">homalg</strong> matrix <var class="Arg">M</var>. The output is a 3-tuple of <strong class="pkg">homalg</strong> matrices <var class="Arg">S</var>, <var class="Arg">T</var>, <var class="Arg">TI</var> such that <var class="Arg"> M T = S</var>. Moreover, <var class="Arg">T</var> is invertible with inverse <var class="Arg">TI</var>. The idea is that the matrix <var class="Arg">S</var> should look "simpler" than <var class="Arg">M</var>.</p>

<p><a id="X7EEFD7887E96714F" name="X7EEFD7887E96714F"></a></p>

<h5>5.5-64 CoefficientsWithGivenMonomials</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CoefficientsWithGivenMonomials</code>( <var class="Arg">M</var>, <var class="Arg">monomials</var)</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> matrix</p>

<p>Let <code class="code">R := HomalgRing(</code><var class="Arg">M</var><code class="code">)</code>. <code class="code">monomials</code> must be a <strong class="pkg">homalg</strong> matrix with the same number of columns as <code class="code">M</code> consisting of monomials of <code class="code">R</code>. This method computes a <strong class="pkg">homalg</strong> matrix <code class="code">coeffs</code> (with entries in the coefficients ring of <code class="code">R</code>, yet still considered as elements of <code class="code">R</code>) such that <code class="code">M = coeffs * monomials</code>. If no such matrix exists, the behavior is undefined. If the first argument is a <strong class="pkg">homalg</strong> ring element, it is viewed as a <strong class="pkg">homalg</strong> matrix with a single entry. If the second argument is a list of monomials, it is viewed as a column matrix with the list elements as entries.</p>


<div class="chlinkprevnextbot"> <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>


<div class="chlinkbot"><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>

<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>

Messung V0.5 in Prozent
C=100 H=100 G=100

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.49Angebot  (Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-04-26) ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.