Here is a proof that I learned from the "Notes and References" section at the end of chapter 12 of Numerical Optimization by Nocedal and Wright. The book attributes the proof to R. Byrd. It is quite similar to the proof outlined by gerw, but not as short. This proof does not explicitly invoke Caratheodory's theorem, but it uses the same trick that is used to prove Caratheodory's theorem.
First I'll give a simple proof for the special case where $A$ has full column rank. Let $y^*$ be a limit point of $\Omega = \{ Ax \mid x \geq 0, x \in \mathbb R^n \}$ and let $(y_i)_{i=1}^\infty$ be a sequence of points in $\Omega$ converging to $y^*$. For each $i$, there exists $x_i \geq 0$ such that
$$
y_i = A x_i.
$$
Let $L$ be a left inverse for $A$, and notice that $x_i = L y_i \to L y^* = x^*$
as $i \to \infty$, where we have defined $x^* = L y^*$. Clearly $x^* \geq 0$ and $A x^* = y^*$. This shows that $y^* \in \Omega$. So $\Omega$ is closed.
The proof for this special case gives us a clue about how to handle the general case, which we now attempt. In this section we no longer assume that $A$ has full column rank.
Again suppose that $y^*$ is a limit point of $\Omega$ and let $(y_i)_{i=1}^\infty$ be a sequence of points in $\Omega$ converging to $y^*$. For each $i$, there exists a vector $x_i \geq 0$ such that $y_i = A x_i$. Fact: We can write $y_i = \tilde A_i \tilde x_i$, where $\tilde A_i$ is a matrix with full column rank that is obtained by deleting some columns of $A$, and $\tilde x_i \geq 0$. We'll prove this fact later. For now, we proceed by noticing that there are only finitely many possibilities for the matrix $\tilde A_i$, so at least one of these possibilities must occur infinitely often.
Thus, the sequence $(y_i)_{i=1}^\infty$ has a subsequence $(y_{i_k})_{k=1}^\infty$ such that the matrices $\tilde A_{i_1},\tilde A_{i_2},\ldots$ are all identical. Let $\tilde A = \tilde A_{i_1}$, so that
$$
y_{i_k} = \tilde A \tilde x_{i_k}
$$
for all $k$.
We are almost done. Let $L$ be a left inverse for $\tilde A$,
and notice that
$$
\tilde x_{i_k} = L y_{i_k} \to L y^* = \tilde x^* \text{ as } k \to \infty,
$$
where we have defined $\tilde x^* = L y^*$.
Clearly, $\tilde x^* \geq 0$ and $y^* = \tilde A \tilde x^*$.
Insert zeros into $\tilde x^*$ as needed to obtain a vector
$x^* \geq 0$ satisfying
$$
y^* = A x^*.
$$
This shows that $y^* \in \Omega$.
We are now done with the proof, except that we have not yet proved the fact mentioned above. We do this next.
Delete as many columns of $A$ as possible subject to the restriction that $y_i$ must be a conical combination of the columns of the resulting matrix, which we shall call $\tilde A_i$. There exists a vector $\tilde x_i \geq 0$ such that $y_i = \tilde A_i \tilde x_i$. Clearly each component of $\tilde x_i$ is positive; otherwise, we did not delete as many columns of $A$ as possible. Suppose (for a contradiction) that $\tilde A_i$ has a nonzero null vector $w$. Starting at $t = 0$ adjust the value of $t$ slowly until one (or at least one) of the components of $\tilde x_i + t w$ is equal to $0$, then stop. Then $\tilde A_i (\tilde x_i + t w) = y_i$ and $\tilde x_i + t w \geq 0$. It would be possible to delete a column of $\tilde A_i$ (corresponding to a zero component of $\tilde x_i + t w$) and still have $y_i$ be a conical combination of the reduced matrix. That is a contradiction. This shows that $\tilde A_i$ has full column rank.
Comments:
- This theorem would be trivial if it were true that linear transformations map closed sets to closed sets. Unfortunately, that is false. But in the case where $A$ has linearly independent columns, you can show (very easily) that the function $x \mapsto Ax$ is a homeomorphism between $\mathbb R^n$ and $R(A)$, which means that $A$ really does map closed sets to closed sets. So, that case is easy.