Proof related to the compostion of limits: am I proving it correctly? Let $(X,d_{X})$, $(Y,d_{Y})$, $(Z,d_{Z})$ be metric spaces, and let $x_{0}\in X$, $y_{0}\in Y$ and $z_{0}\in Z$. Let $f:X\rightarrow Y$ and $g:Y\rightarrow Z$ be functions, and let $E$ be a set. If we have $\displaystyle\lim_{x\rightarrow x_{0};x\in E}f(x) = y_{0}$ and $\displaystyle\lim_{y\rightarrow y_{0};y\in f(E)}g(y) = z_{0}$, conclude that $\displaystyle\lim_{x\rightarrow x_{0};x\in E}(g\circ f)(x) = z_{0}$.
MY ATTEMPT
According to the definition of limit, for every $\varepsilon > 0$, there is a $\delta_{1} > 0$ such that for every $y\in f(E)$ we have that
\begin{align*}
d_{Y}(y,y_{0}) < \delta_{1} \Rightarrow d_{Z}(g(y)),z_{0}) < \varepsilon
\end{align*}
Simlarly, for every $\delta_{1} > 0$ there is a $\delta > 0$ such that for every $x\in E$ one has that
\begin{align*}
d_{X}(x,x_{0}) < \delta \Rightarrow d_{Y}(f(x),y_{0}) < \delta_{1}
\end{align*}
Since $y\in f(E)$, we can assume that $y = f(x_{0})$ where $x_{0}\in E$.
Gathering both results, we conclude that for every $\varepsilon > 0$, there is a $\delta > 0$ such that whenever $x\in E$ it results that
\begin{align*}
d_{X}(x,x_{0}) < \delta \Rightarrow d_{Y}(f(x_{0}),y_{0}) < \delta_{1} \Rightarrow d_{Z}(g(f(x_{0})),z_{0}) < \varepsilon
\end{align*}
that is to say, $(g\circ f)(x)$ approaches $z_{0}$ as $x$ approaches $x_{0}$.
I am mainly interested at knowing if I am writing rigorously and properly the proposed statement.
Can someone tell me so? 
 A: The idea is correct. The wording is a little problematic. It doesn't flow well from premise to conclusion. I suggest a rewording such as this:

Let $\epsilon > 0$. Because $\displaystyle\lim_{f(E)\ni y \to y_0} g(y) = z_0$, there is a $\delta_1 > 0$ such that for all $y \in f(E)$, $$d_Y(y, y_0) < \delta_1 \implies d_Z(g(y), z_0) < \epsilon.$$
Because $\displaystyle\lim_{E\ni x \to x_0} f(x) = y_0$, there is $\delta > 0$ such that for all $x \in E$, $$d_X(x,x_0) < \delta \implies d_Y(f(x), y_0) < \delta_1.$$
So for all $x \in E, d_X(x,x_0) < \delta \implies d_Y(f(x), y_0) < \delta_1 \implies d_Z(g(f(x)),z_0) < \epsilon$.
Hence $$\lim_{E\ni x \to x_0}f\circ g(x) = z_0.$$


*

*Since we are trying to prove for all $\epsilon > 0, \exists \delta > 0$ such that $d_X(x,x_0) < \delta \implies d_Z(g(f(x)),z_0) < \epsilon$, this proof starts out by introducing a fixed-but-arbitrary $\epsilon$. Now I have it as an established value and can work with it without quantifying. Everywhere $\epsilon$ occurs afterwards, it has this same fixed value. Yet, because $\epsilon$ is arbitrary (up to the $>0$ condition), the same argument works for all values. Therefore this is sufficient to show it holds "for all $\epsilon$". This allows a much less clumsy wording than you gave.

*You can generally expect your audience to be familiar with the definition of the limit, so you don't need to point out that is what you are applying. I have chosen here to indicate which limit is being expanded to its definition each time. If you are a little more confident of your audience's comprehension, that could be left out as obvious. (But "obvious" is a relative term - a little bit more mature, and the entire proof is "obvious". So tread very carefully with that concept. It is better to be too thorough than it is to be too brief.)

*Similarly, once I introduce $\delta_1$, it becomes a fixed value, so I can reference it in the second limit.

*You handwave how the two limit definitions combine, not explaining it. It is pretty obvious, but again, that is a relative term. As this is the key to the result, I think it needs to be explained at least a little. By using $\delta_1$ as the "epsilon" of the second limit, it becomes explicit how these two limits are merged.

These are suggestions, not requirements. Everyone has their own proof style. I do think you handwaved too much on combining the results, but otherwise, you could phrase it differently from me and still be fine.
