Solution (source code)

= Solution

An <inverse matrix> exists only if the <lower triangular matrix> has no zero <diagonal entries>; this necessary assumption is implicit in the request for $L^{-1}$. Partition
$$
L=\begin{pmatrix}a&0\\b&C\end{pmatrix}.
$$
Writing its inverse in the same block form and multiplying gives the <recursive inverse of a lower triangular matrix>:
$$
\boxed{L^{-1}=\begin{pmatrix}a^{-1}&0\\-C^{-1}b/a&C^{-1}\end{pmatrix}.}
$$
Indeed the lower-left block of the product is $b/a-C(C^{-1}b/a)=0$, and the diagonal blocks are identities. This gives an implementation with no call to `solve`:

``
ltinv <- function(L) {
  n <- nrow(L)
  if (n == 1L) return(matrix(1 / L[1L, 1L], 1L, 1L))
  j <- 2L:n
  Cinv <- ltinv(L[j, j, drop = FALSE])
  B <- matrix(0, n, n)
  B[1L, 1L] <- 1 / L[1L, 1L]
  B[j, j] <- Cinv
  B[j, 1L] <- -as.vector(Cinv %*% L[j, 1L, drop = FALSE]) / L[1L, 1L]
  B
}
``

The preserved <matrix> dimensions also handle $n=2$. A <mathematical induction> using the block identity proves that every returned <matrix> is the desired inverse. Applied to the <Cholesky decomposition> from (a), all <diagonal entries> are positive, so all divisions are valid.