\begin{frame}{Concatenation} \begin{goal}{Theorem} If $L_1$ and $L_2$ are recursively enumerable languages, then so is \begin{talign} L_1L_2 \end{talign} \end{goal} \pause \begin{block}{} Let $M_1$ and $M_2$ be Turing machines such that \begin{talign} L(M_1) = L_1 && L(M_2) = L_2 \end{talign} \pause A split of a word $w$ is a pair $(w_1,w_2)$ such that $w = w_1 w_2$. \medskip\pause We call the split good if $M_1$ accepts $w_1$ and $M_2$ accepts $w_2$. \medskip\pause Create a Turing machine $N$ that \begin{itemize} \item computes all splits of the input word $w$ \item checks \emph{all splits in parallel} whether they are good \item accepts the input $w$ as soon as a good split is found \end{itemize} Then $L(N) = L_1 L_2$. \end{block} \end{frame}