[proofplan]
We compare the derived series of $\mathfrak g$ with its lower central series. The key estimate is that brackets of lower central terms satisfy $[\gamma_a(\mathfrak g), \gamma_b(\mathfrak g)] \subseteq \gamma_{a+b}(\mathfrak g)$, proved by induction from the Jacobi identity. This estimate implies $\mathfrak g^{(r)} \subseteq \gamma_{2^r}(\mathfrak g)$ for every $r \geq 0$. If the lower central series vanishes, then a sufficiently far term of the derived series also vanishes, which is exactly solvability.
[/proofplan]
[step:Define the two descending series and the bracket notation]
For two $k$-linear subspaces $A, B \subseteq \mathfrak g$, define
\begin{align*}
[A,B] := \operatorname{span}_k\{[x,y] : x \in A,\ y \in B\}.
\end{align*}
Define the lower central series $\gamma_m(\mathfrak g)$ by
\begin{align*}
\gamma_1(\mathfrak g) &:= \mathfrak g,\\
\gamma_{m+1}(\mathfrak g) &:= [\mathfrak g,\gamma_m(\mathfrak g)] \qquad \text{for } m \geq 1.
\end{align*}
Define the derived series $\mathfrak g^{(r)}$ by
\begin{align*}
\mathfrak g^{(0)} &:= \mathfrak g,\\
\mathfrak g^{(r+1)} &:= [\mathfrak g^{(r)},\mathfrak g^{(r)}] \qquad \text{for } r \geq 0.
\end{align*}
The Lie algebra $\mathfrak g$ is nilpotent if there exists an integer $N \geq 1$ such that $\gamma_N(\mathfrak g)=0$, and it is solvable if there exists an integer $R \geq 0$ such that $\mathfrak g^{(R)}=0$.
[/step]
[step:Prove that brackets of lower central terms move deeper in the lower central series]
[claim:Lower central bracket estimate]
For all integers $a,b \geq 1$,
\begin{align*}
[\gamma_a(\mathfrak g),\gamma_b(\mathfrak g)] \subseteq \gamma_{a+b}(\mathfrak g).
\end{align*}
[/claim]
[proof]
We prove the claim by induction on the first index $a$, with the assertion for a fixed $a$ required to hold for every integer $b \geq 1$.
For $a=1$ and every $b \geq 1$, the definition of the lower central series gives
\begin{align*}
[\gamma_1(\mathfrak g),\gamma_b(\mathfrak g)]
=
[\mathfrak g,\gamma_b(\mathfrak g)]
=
\gamma_{b+1}(\mathfrak g)
=
\gamma_{1+b}(\mathfrak g).
\end{align*}
Thus the assertion holds for $a=1$.
Assume now that $a \geq 2$ and that, for every integer $c \geq 1$, the containment
\begin{align*}
[\gamma_{a-1}(\mathfrak g),\gamma_c(\mathfrak g)] \subseteq \gamma_{a-1+c}(\mathfrak g)
\end{align*}
has already been proved. Let $b \geq 1$. Since
\begin{align*}
\gamma_a(\mathfrak g)=[\mathfrak g,\gamma_{a-1}(\mathfrak g)],
\end{align*}
it is enough by bilinearity of the Lie bracket to prove that $[[x,u],v] \in \gamma_{a+b}(\mathfrak g)$ for arbitrary elements
\begin{align*}
x \in \mathfrak g,
\qquad
u \in \gamma_{a-1}(\mathfrak g),
\qquad
v \in \gamma_b(\mathfrak g).
\end{align*}
The Jacobi identity gives
\begin{align*}
[[x,u],v]=[x,[u,v]]-[u,[x,v]].
\end{align*}
By the induction hypothesis with $c=b$,
\begin{align*}
[u,v]
\in
[\gamma_{a-1}(\mathfrak g),\gamma_b(\mathfrak g)]
\subseteq
\gamma_{a+b-1}(\mathfrak g),
\end{align*}
and therefore, by the defining recursion for the lower central series,
\begin{align*}
[x,[u,v]]
\in
[\mathfrak g,\gamma_{a+b-1}(\mathfrak g)]
=
\gamma_{a+b}(\mathfrak g).
\end{align*}
Also, because $x \in \mathfrak g=\gamma_1(\mathfrak g)$ and $v \in \gamma_b(\mathfrak g)$,
\begin{align*}
[x,v]
\in
[\gamma_1(\mathfrak g),\gamma_b(\mathfrak g)]
=
\gamma_{b+1}(\mathfrak g).
\end{align*}
Applying the induction hypothesis again, now with $c=b+1$, gives
\begin{align*}
[u,[x,v]]
\in
[\gamma_{a-1}(\mathfrak g),\gamma_{b+1}(\mathfrak g)]
\subseteq
\gamma_{a+b}(\mathfrak g).
\end{align*}
Since $\gamma_{a+b}(\mathfrak g)$ is a $k$-linear subspace, the difference
\begin{align*}
[x,[u,v]]-[u,[x,v]]
\end{align*}
also lies in $\gamma_{a+b}(\mathfrak g)$. Hence $[[x,u],v] \in \gamma_{a+b}(\mathfrak g)$, and the induction step is complete. Therefore the claim holds for all integers $a,b \geq 1$.
[/proof]
[guided]
The point of this estimate is that the lower central index behaves additively under brackets. The induction must be arranged carefully: induction on the total index $a+b$ would be circular, because the Jacobi identity naturally produces the pair $(a-1,b+1)$, which has the same total index. Instead, we induct on the first index $a$, and at each fixed value of $a$ we prove the assertion simultaneously for every $b \geq 1$.
For $a=1$ and any integer $b \geq 1$, the statement is exactly the recursive definition of the lower central series. Since $\gamma_1(\mathfrak g)=\mathfrak g$, we have
\begin{align*}
[\gamma_1(\mathfrak g),\gamma_b(\mathfrak g)]
=
[\mathfrak g,\gamma_b(\mathfrak g)]
=
\gamma_{b+1}(\mathfrak g)
=
\gamma_{1+b}(\mathfrak g).
\end{align*}
Thus the desired containment holds for $a=1$ for every $b$.
Now assume $a \geq 2$ and suppose the estimate is known with first index $a-1$ and arbitrary second index. More explicitly, for every integer $c \geq 1$ we assume
\begin{align*}
[\gamma_{a-1}(\mathfrak g),\gamma_c(\mathfrak g)]
\subseteq
\gamma_{a-1+c}(\mathfrak g).
\end{align*}
We must prove
\begin{align*}
[\gamma_a(\mathfrak g),\gamma_b(\mathfrak g)]
\subseteq
\gamma_{a+b}(\mathfrak g)
\end{align*}
for an arbitrary integer $b \geq 1$.
The definition
\begin{align*}
\gamma_a(\mathfrak g)=[\mathfrak g,\gamma_{a-1}(\mathfrak g)]
\end{align*}
means that every element of $\gamma_a(\mathfrak g)$ is a $k$-linear combination of brackets $[x,u]$ with $x \in \mathfrak g$ and $u \in \gamma_{a-1}(\mathfrak g)$. Since the Lie bracket is bilinear, it is enough to prove the containment for generators of the bracket subspace. So take
\begin{align*}
x \in \mathfrak g,
\qquad
u \in \gamma_{a-1}(\mathfrak g),
\qquad
v \in \gamma_b(\mathfrak g).
\end{align*}
We will prove that $[[x,u],v] \in \gamma_{a+b}(\mathfrak g)$.
The Jacobi identity rewrites this bracket as a difference of two brackets whose depths can be controlled separately:
\begin{align*}
[[x,u],v]=[x,[u,v]]-[u,[x,v]].
\end{align*}
For the first term, apply the induction hypothesis with $c=b$. Since $u \in \gamma_{a-1}(\mathfrak g)$ and $v \in \gamma_b(\mathfrak g)$, we get
\begin{align*}
[u,v]
\in
[\gamma_{a-1}(\mathfrak g),\gamma_b(\mathfrak g)]
\subseteq
\gamma_{a+b-1}(\mathfrak g).
\end{align*}
Bracketing with $x \in \mathfrak g$ then gives, by the recursive definition of the lower central series,
\begin{align*}
[x,[u,v]]
\in
[\mathfrak g,\gamma_{a+b-1}(\mathfrak g)]
=
\gamma_{a+b}(\mathfrak g).
\end{align*}
For the second term, first use the definition of the lower central series to locate the inner bracket:
\begin{align*}
[x,v]
\in
[\gamma_1(\mathfrak g),\gamma_b(\mathfrak g)]
=
[\mathfrak g,\gamma_b(\mathfrak g)]
=
\gamma_{b+1}(\mathfrak g).
\end{align*}
Now apply the same induction hypothesis with $c=b+1$. This is valid because the induction is on the first index $a$, not on the sum $a+b$; the first index has decreased from $a$ to $a-1$. Therefore
\begin{align*}
[u,[x,v]]
\in
[\gamma_{a-1}(\mathfrak g),\gamma_{b+1}(\mathfrak g)]
\subseteq
\gamma_{a+b}(\mathfrak g).
\end{align*}
Both terms in the Jacobi decomposition lie in the $k$-linear subspace $\gamma_{a+b}(\mathfrak g)$, so their difference also lies there:
\begin{align*}
[[x,u],v]
=
[x,[u,v]]-[u,[x,v]]
\in
\gamma_{a+b}(\mathfrak g).
\end{align*}
By bilinearity and the spanning definition of $[\gamma_a(\mathfrak g),\gamma_b(\mathfrak g)]$, every element of that bracket subspace lies in $\gamma_{a+b}(\mathfrak g)$. This completes the induction on $a$ and proves the estimate for all integers $a,b \geq 1$.
[/guided]
[/step]
[step:Embed each derived term into an exponentially deep lower central term]
We prove by induction on $r \geq 0$ that
\begin{align*}
\mathfrak g^{(r)} \subseteq \gamma_{2^r}(\mathfrak g).
\end{align*}
For $r=0$, this is equality:
\begin{align*}
\mathfrak g^{(0)}=\mathfrak g=\gamma_1(\mathfrak g)=\gamma_{2^0}(\mathfrak g).
\end{align*}
Assume that $\mathfrak g^{(r)} \subseteq \gamma_{2^r}(\mathfrak g)$ for some $r \geq 0$. Taking brackets of subspaces preserves inclusion, so
\begin{align*}
\mathfrak g^{(r+1)}
=
[\mathfrak g^{(r)},\mathfrak g^{(r)}]
\subseteq
[\gamma_{2^r}(\mathfrak g),\gamma_{2^r}(\mathfrak g)].
\end{align*}
Applying the lower central bracket estimate with $a=b=2^r$ gives
\begin{align*}
[\gamma_{2^r}(\mathfrak g),\gamma_{2^r}(\mathfrak g)]
\subseteq
\gamma_{2^r+2^r}(\mathfrak g)
=
\gamma_{2^{r+1}}(\mathfrak g).
\end{align*}
Hence
\begin{align*}
\mathfrak g^{(r+1)} \subseteq \gamma_{2^{r+1}}(\mathfrak g).
\end{align*}
The induction is complete.
[guided]
We now compare the two series. The derived series takes brackets of a term with itself, while the lower central series takes brackets with the whole algebra. The lower central bracket estimate shows that self-bracketing a term deep in the lower central series pushes it twice as deep.
We prove
\begin{align*}
\mathfrak g^{(r)} \subseteq \gamma_{2^r}(\mathfrak g)
\end{align*}
for every $r \geq 0$ by induction. For $r=0$, both sides are $\mathfrak g$:
\begin{align*}
\mathfrak g^{(0)}
=
\mathfrak g
=
\gamma_1(\mathfrak g)
=
\gamma_{2^0}(\mathfrak g).
\end{align*}
Assume the containment holds at level $r$. Then every element of $\mathfrak g^{(r)}$ lies in $\gamma_{2^r}(\mathfrak g)$. Since the bracket operation is bilinear, bracketing smaller subspaces gives a smaller bracket subspace:
\begin{align*}
[\mathfrak g^{(r)},\mathfrak g^{(r)}]
\subseteq
[\gamma_{2^r}(\mathfrak g),\gamma_{2^r}(\mathfrak g)].
\end{align*}
Using the definition of the derived series on the left gives
\begin{align*}
\mathfrak g^{(r+1)}
\subseteq
[\gamma_{2^r}(\mathfrak g),\gamma_{2^r}(\mathfrak g)].
\end{align*}
Now apply the lower central bracket estimate with $a=b=2^r$:
\begin{align*}
[\gamma_{2^r}(\mathfrak g),\gamma_{2^r}(\mathfrak g)]
\subseteq
\gamma_{2^r+2^r}(\mathfrak g)
=
\gamma_{2^{r+1}}(\mathfrak g).
\end{align*}
Combining the two containments gives
\begin{align*}
\mathfrak g^{(r+1)} \subseteq \gamma_{2^{r+1}}(\mathfrak g).
\end{align*}
Thus the induction proves the claimed exponential containment for all $r \geq 0$.
[/guided]
[/step]
[step:Show that the lower central series is descending]
We prove by induction on $m \geq 1$ that $\gamma_m(\mathfrak g)$ is an ideal of $\mathfrak g$. The term $\gamma_1(\mathfrak g)=\mathfrak g$ is an ideal of itself. If $\gamma_m(\mathfrak g)$ is an ideal of $\mathfrak g$, then
\begin{align*}
\gamma_{m+1}(\mathfrak g)
=
[\mathfrak g,\gamma_m(\mathfrak g)]
\subseteq
\gamma_m(\mathfrak g).
\end{align*}
Moreover,
\begin{align*}
[\mathfrak g,\gamma_{m+1}(\mathfrak g)]
=
\gamma_{m+2}(\mathfrak g),
\end{align*}
so $\gamma_{m+1}(\mathfrak g)$ is also an ideal of $\mathfrak g$. Hence every $\gamma_m(\mathfrak g)$ is an ideal, and the displayed containment shows that the lower central series is descending:
\begin{align*}
\gamma_{m+1}(\mathfrak g) \subseteq \gamma_m(\mathfrak g)
\qquad\text{for every } m \geq 1.
\end{align*}
[/step]
[step:Use nilpotence to force the derived series to vanish]
Since $\mathfrak g$ is nilpotent, there exists an integer $N \geq 1$ such that
\begin{align*}
\gamma_N(\mathfrak g)=0.
\end{align*}
Choose an integer $R \geq 0$ such that $2^R \geq N$. The lower central series is descending, so
\begin{align*}
\gamma_{2^R}(\mathfrak g) \subseteq \gamma_N(\mathfrak g)=0.
\end{align*}
By the containment proved above,
\begin{align*}
\mathfrak g^{(R)}
\subseteq
\gamma_{2^R}(\mathfrak g)
=
0.
\end{align*}
Therefore $\mathfrak g^{(R)}=0$. Hence the derived series terminates at zero, so $\mathfrak g$ is solvable.
[/step]