[step:Prove sufficiency for convex problems]Assume now that $f_0,f_1,\dots,f_m$ are convex on $X$ and $h_1,\dots,h_p$ are affine on $X$. Let $x^* \in X$ be primal feasible, and suppose there exist $\lambda^* \in \mathbb{R}^m_+$ and $\nu^* \in \mathbb{R}^p$ satisfying complementary slackness and normal-cone stationarity.
Define $\Phi: X \to \mathbb{R}$ by
\begin{align*}
\Phi:x \mapsto L(x,\lambda^*,\nu^*).
\end{align*}
Because $f_0,f_1,\dots,f_m$ are convex, $\lambda_i^* \geq 0$ for every $i$, and $h_1,\dots,h_p$ are affine, the function $\Phi$ is convex on $X$. The stationarity condition says that there exists $w^* \in N_X(x^*)$ such that
\begin{align*}
\nabla \Phi(x^*)+w^*=0.
\end{align*}
Thus $w^*=-\nabla \Phi(x^*)$. Since $w^* \in N_X(x^*)$, for every $x \in X$,
\begin{align*}
w^*\cdot(x-x^*) \leq 0.
\end{align*}
Equivalently,
\begin{align*}
\nabla \Phi(x^*)\cdot(x-x^*) \geq 0.
\end{align*}
Convexity of $\Phi$ gives the first-order convexity inequality
\begin{align*}
\Phi(x) \geq \Phi(x^*)+\nabla \Phi(x^*)\cdot(x-x^*) \text{ for every } x \in X.
\end{align*}
Therefore
\begin{align*}
\Phi(x) \geq \Phi(x^*) \text{ for every } x \in X.
\end{align*}
Now let $x \in X$ be any primal feasible point. Since $\lambda_i^* \geq 0$ and $f_i(x) \leq 0$,
\begin{align*}
\sum_{i=1}^m \lambda_i^* f_i(x) \leq 0.
\end{align*}
Since $h_j(x)=0$ for every $j$,
\begin{align*}
L(x,\lambda^*,\nu^*) \leq f_0(x).
\end{align*}
At $x^*$, complementary slackness and equality feasibility give
\begin{align*}
L(x^*,\lambda^*,\nu^*)=f_0(x^*).
\end{align*}
Combining these inequalities,
\begin{align*}
f_0(x) \geq L(x,\lambda^*,\nu^*) \geq L(x^*,\lambda^*,\nu^*)=f_0(x^*).
\end{align*}
Thus $f_0(x) \geq f_0(x^*)$ for every primal feasible $x \in X$, so $x^*$ is a primal optimum.[/step]