Models that realize all types Let us call a theory $T$ good if


*

*it is complete;

*it is formulated in a countable language $L$;

*it has infinite models.


Suppose $T$ is good and $M \models T$, the exercise is to prove

$M$ is $\omega$-saturated iff it is $\omega$-homogeneous and it realizes all types [in $\cup_n S_n(T)$].

Right to left is immediate. We also know that

[*] $M$ is $\omega$-saturated iff it is $\omega$-homogeneous and
  $\omega^+$-universal.

So it suffices to show that realizing all types implies $\omega^+$-universality (maybe using $\omega$-homogeneity). My idea is to utilize the technique of the $\Rightarrow$-direction proof of [*], but adept it to use that $M$ realizes $\cup_n S_n(T)$ instead of $\omega$-saturation. But I am stuck.
I don't know any theorems that describe/involve models that realize all types, except that saturated models realize all types (but that is not very useful here). What do we know about such models, and how can I use that?
 A: The question boils down to showing that an $\omega$-homogeneous model $M$ that realises all the types in $\bigcup_{n <\omega} S_n(T)$ is $\omega^+$-universal, so let's prove that.
Let $A$ be countable and elementarily equivalent to $M$. Enumerate $A$ as $(a_i)_{i < \omega}$, and denote $A_n = \{a_i : i < n\}$ (so this does not include $a_n$). We will build an increasing chain of maps $f_0 \subseteq f_1 \subseteq \ldots$, such that $f_n: A_n \to M$ is a partial elementary embedding for all $n < \omega$.


*

*For $n = 0$ we can just take $f_0$ to be the empty map.

*Suppose we have constructed $f_n: A_n \to M$. Let $p(x_0, \ldots, x_n) = tp(a_0, \ldots, a_n)$. By assumption, there are $b_0, \ldots, b_n$ in $M$ that realise $p(x_0, \ldots, x_n)$. Restricting types, we find
$$
tp(b_0, \ldots, b_{n-1}) = tp(a_0, \ldots, a_{n-1}) = tp(f_n(a_0), \ldots, f_n(a_{n-1})).
$$
So the map $g: \{b_0, \ldots, b_{n-1}\} \to M$ given by $g(b_i) = f_n(a_i)$ is partial elementary. By $\omega$-homogeneity we can extend $g$ to a partial elementary map $g': \{b_0, \ldots, b_n\} \to M$. Then we have that
$$
tp(b_0, \ldots, b_n) = tp(g'(b_0), \ldots, g'(b_n)) = tp(f_n(a_0), \ldots, f_n(a_{n-1}), g'(b_n)).
$$
So now we can extend $f_n: A_n \to M$ to $f_{n+1}: A_{n+1} \to M$ by sending $a_n$ to $g'(b_n)$.


Now we have our chain of partial elementary maps, we can just set $f = \bigcup_{n < \omega} f_n$ to obtain an elementary embedding $f: A \to M$.
