Why do we have two theorems when one implies the other? Why do we have two theorems one for the density of $C^{\infty}_c(\mathbb{R}^n)$ in $L^p(\mathbb{R}^n)$ and one for the density of $C^{\infty}_c(\Omega)$ in $L^p(\Omega)$? with $\Omega$ an open subset of $\mathbb{R}^n$.
Why not just the second one?
I was asked by the prof what is the difference between the density of $C(\Omega)$ and $C(\mathbb{R}^n)$ but all I found when checking the demonstrations is that we take $\Omega \neq \mathbb{R}^n$ when giving the proof for the second theorem because for $\Omega = \mathbb{R}^n$ we already have the first theorem.
 A: It may be helpful to think of a theorem not just as an expression of mathematical truth, but also as a tool that one mathematician or group of mathematicians have developed for use by others. It is like an API in a software library, that other authors/programmers can invoke when they have a need for it, without having to understand the low-level details of how the API does what it advertises itself as doing.
To continue this analogy, a well-designed API will often offer ways of doing things at several levels of generality, one that can be used in simple/common cases, and another (or several other ones) that’s used more rarely and supplies more arguments/parameters, more customizability options, handles difficult edge cases better, etc. The more advanced API call does everything that the simple one does and more. But learning how to use it involves more effort on the part of the programmer, so in practice most programmers will rely on the simpler method (often labeled a “convenience method/function”).
The same goes for theorems. Mathematicians sometimes need to “invoke” Euclid’s theorem on the infinitude of primes as part of a proof. Should we force all of them to learn about a much stronger fact, the prime number theorem, or one of the even stronger results that have been proved about the distribution of prime numbers? No, it’s much more convenient to keep Euclid’s theorem around as a “convenience method”. Even in your functional analysis example, I’m pretty sure the first theorem about $\mathbb{R}^n$ is useful (in the sense of being invoked as part of an argument) often enough to justify “having” it, even though in a formal sense it is superseded by the second one.
A: In an answer to another question, I suggested a rule that a result is uninteresting "if it can be trivially derived from simpler results". In this case, while the theorem with $\Omega = \mathbb{R}^n$ can indeed be trivially derived from the general theorem, presumably the latter is not simpler than the former.
A: Sometimes it makes a lot of sense to state two different theorems even if one is a special case if the other, e.g. when the special case has a considerably simpler proof (some things hold in Banach spaces and, consequently, in Hilbert spaces as well, but in Hilbert spaces the proof may much simpler, e.g. proving that the unit ball is weakly sequentially compact).
Also, there may be historic reasons. Finally, I have a vague feeling that a "theorem" is more than just the statement of the assertion. The same theorem may come in different versions, sometimes equivalent, sometimes slightly different, but they all present a general more abstract idea.
A: Some mathematicians seem to agree with you, and strive only to state and prove the most general versions of their theorems. I've had co-authors express that view. And I've sometimes had referee reports on my papers state this philosophical perspective explicitly, objecting to a warm-up theorem that I stated and proved early in the paper, even though later I proved harder, more general results. Earlier in my career, against my own judgement I would dutifully remove the objectionable warm-up presentations (and I did so even in what became one my most highly cited papers), but no longer.
I strongly disagree with the objection. I don't agree that one should seek to present only the most general forms of one's theorems. Rather, there is a definite value in proving easier or more concrete results first, even when one intends to move on to prove more encompassing results later. Indeed, I would say that often the main value of a theorem is concentrated in an easier, less general principal case.
The simpler results often aid in mathematical insight. Unencumbered with unnecessary generality or abstraction, they are often simply easier to understand, yet still illustrate the main idea clearly. Removing even a small generalization, such as restricting to $n=2$ or simplifying from an arbritrary real-like space $\Omega$ to the reals $\mathbb{R}$, can dramatically improve understanding, especially on your reader's first engagement with your argument. The reason is that every generalization, even very small ones, contributes yet another layer of difficulty and abstraction, contributing to the cognitive load that can make a difficult proof impenetrable.
On the first pass, it can often be best to focus on a simple, main case, which highlights the core ideas without unnecessary distractions. Once one has mastered such a case, then one has often thereby developed a familiarity of understanding of the core idea or technique of the argument, a framework of understanding capable of supporting a deeper understanding of the more general result. Having the easy case first makes the difficult case much easier to master. Indeed, often the key ideas of an argument have only to do with the special case in the first instance, and the generalizing steps are routine — all the more reason to omit them at first.
So this is not just for pedagogy, although certainly students new to a topic will appreciate mastering the easier versions of a theorem first. My point is that the practice is also important for experts, at every level of expertise. One gains ultimately a deeper understanding of the general result, when one sees how the core ideas and methods generalize those in a simpler case.
The same goes for mathematics talks. At conferences or seminars, please consider begining your talk with an easier special case that illustrates the theme or methods of your more general, advanced results. Your audience will definitely appreciate it.
So I have no problem with having two theorems, one of them implying the other, and I would find that to be a very sound way of proceeding in mathematics.
A: Another example illustrates a reason for this...
Rolle's Theorem and The Mean Value Theorem in elementary differential calculus courses.
Of course Rolle is an immediate corollary of MVT.  But the proof is divided into  Rolle as a first step, and then MVT proved using Rolle.
(Dividing the proof this way is not related to what Michel Rolle actually proved, by the way.)  I think the primary reason for dividing the proof this way is so that the structure of the proof can be understood by students with little or no experience writing proofs.
