[step:Verify agreement on valid program indices]
Let $e \in \mathbb N$ satisfy $\operatorname{Valid}_k(e)=1$, and let $(x_1,\dots,x_k) \in \mathbb N^k$. By construction, $M_k$ begins from the same initial configuration as the program coded by $e$ on input $(x_1,\dots,x_k)$. The recursive definition
\begin{align*}
c_{t+1}=\operatorname{Step}(e,c_t)
\end{align*}
uses exactly the decoded transition rule of that program. Therefore, for every $t \in \mathbb N \cup \{0\}$, the configuration code $c_t$ is the code of the configuration reached by the coded program after $t$ computation steps.
If the coded program halts after $t$ steps with output $y \in \mathbb N$, then $c_t$ is a halting configuration whose decoded output is $y$, so $M_k$ halts with output $y$. Hence
\begin{align*}
U_k(e,x_1,\dots,x_k)=y=\varphi_{e,k}(x_1,\dots,x_k).
\end{align*}
If the coded program does not halt on $(x_1,\dots,x_k)$, then no $c_t$ is a halting configuration. The simulator therefore never reaches its output instruction, so $U_k(e,x_1,\dots,x_k)$ is undefined. Thus
\begin{align*}
U_k(e,x_1,\dots,x_k) \simeq \varphi_{e,k}(x_1,\dots,x_k)
\end{align*}
for every valid $k$-ary program index $e$.
[/step]