How to prove semi-decidable = verifiable?
Its obvious why a semi-decidable language is verifiable ($w$ would be the machine's computation history on $x$). Now, we will show the other way:

Let $V(x,w)$ be a verifier for $L$. Define $M(x)$ as the following algorithm:


Let $S$ be an empty array (of turing machine emulations)
For every $w\in\Sigma^*:$


Add a new emulation of $V(x,w)$ to $S$.
For every emulation $E\in S:$


Compute one step for $E$. If, $E$ accepted, then accept.




This algorithm is correct, since if $x\in L$ then there is some $w\in\Sigma^*$ with $V(x,w)=True$ and therefore the algorithm will accept.

If the algorithm accepted, then there must be some $w\in\Sigma^*$ where $V(x,w)=True$ and thus $x\in L$ by definition