[step:Use primitivity to connect arbitrary cylinders after all large shifts]
Assume that $M$ is primitive. Let $U,V \subset \Sigma_M$ be nonempty open sets. Since cylinder sets form a basis for the [product topology](/page/Product%20Topology) on $\Sigma_M$, choose admissible words
\begin{align*}
u=(u_0,\dots,u_r) \in \{1,\dots,m\}^{r+1}
\end{align*}
and
\begin{align*}
v=(v_0,\dots,v_s) \in \{1,\dots,m\}^{s+1}
\end{align*}
such that the cylinders $[u_0\cdots u_r]$ and $[v_0\cdots v_s]$ are nonempty and satisfy
\begin{align*}
[u_0\cdots u_r] \subset U, \qquad [v_0\cdots v_s] \subset V.
\end{align*}
By primitivity, there exists $N_0 \in \mathbb{N}$ such that $(M^\ell)_{u_r v_0}>0$ for every $\ell \geq N_0$. Fix $n \geq r+N_0$. Define $\ell := n-r$. Then $\ell \geq N_0$, so the previous step gives an admissible word
\begin{align*}
(b_0,\dots,b_\ell) \in \{1,\dots,m\}^{\ell+1}
\end{align*}
with $b_0=u_r$ and $b_\ell=v_0$.
Define a sequence $x \in \{1,\dots,m\}^{\mathbb{N}_0}$ by first prescribing
\begin{align*}
(x_0,\dots,x_r) := (u_0,\dots,u_r),
\end{align*}
then
\begin{align*}
(x_{r+q}) := b_q \quad \text{for } q \in \{1,\dots,\ell\},
\end{align*}
and finally
\begin{align*}
(x_{n+q}) := v_q \quad \text{for } q \in \{1,\dots,s\}.
\end{align*}
If more symbols are needed after time $n+s$, choose any tail extending the nonempty cylinder $[v_0\cdots v_s]$; this is possible because that cylinder is nonempty. All adjacent transitions in the prescribed sequence are admissible: the word $u$ is admissible, the bridge $b$ is admissible, and the word $v$ is admissible. Hence $x \in \Sigma_M$.
By construction $x \in [u_0\cdots u_r] \subset U$ and $\sigma^n x \in [v_0\cdots v_s] \subset V$. Therefore
\begin{align*}
U \cap \sigma^{-n}(V) \neq \varnothing
\end{align*}
for every $n \geq r+N_0$. This is precisely topological mixing.
[/step]