I was always under the impression that the second definition (the one on the bottom) was the prescribed one for Semantic Security, and that computational indistinguishability was a completely separate thing? I do not understand the necessity or intuition behind the need for a "simulator" as it is called. Can someone shed some light?
The definition of semantic security has its origins in the definition of perfect security, where the adversary's information about the message is the same after seeing the ciphertext. Semantic security is exactly the same thing in a computational setting: the adversary's "practically available" information about the message is the same after seeing the ciphertext.
This is formalised by simplifying the problem: the adversary chooses an "interesting" predicate $f$ on the message space and a way to choose messages such that the predicate holds with probability $1/2$. Then we must prove that the adversary cannot determine the value of the predicate with probability significantly different from $1/2$. (You can define a variant of perfect security in exactly the same way.)
Then it turns out that there is a simpler notion - indistinguishability - that is equivalent to semantic security. This notion is easier to work with, so everyone uses that one, to the extent that semantic security is often identified with indistinguishability.