# Building Block Matrices

## `HorizontalJoin(A, B): MtrxSprs, MtrxSprs -> MtrxSprs`

Given a sparse matrix $A$ with $r$ rows and $c$ columns, and a sparse matrix $B$ with $r$ rows and $d$ columns, both over the same coefficient ring $R$, return the sparse matrix over $R$ with $r$ rows and $(c+d)$ columns obtained by joining $A$ and $B$ horizontally (placing $B$ to the right of $A$).

## `VerticalJoin(A, B): MtrxSprs, MtrxSprs -> MtrxSprs`

Given a sparse matrix $A$ with $r$ rows and $c$ columns, and a sparse matrix $B$ with $s$ rows and $c$ columns, both over the same coefficient ring $R$, return the sparse matrix with $(r+s)$ rows and $c$ columns over $R$ obtained by joining $A$ and $B$ vertically (placing $B$ underneath $A$).

## `DiagonalJoin(A, B): MtrxSprs, MtrxSprs -> MtrxSprs`

Given matrices $A$ with $a$ rows and $b$ columns and $B$ with $c$ rows and $d$ columns, both over the same coefficient ring $R$, return the sparse matrix with $(a+c)$ rows and $(b+d)$ columns over $R$ obtained by joining $A$ and $B$ diagonally (placing $B$ diagonally to the right of and underneath $A$, with zero blocks above and below the diagonal).
