Duality in nonlinear programming