Nonlinear Programming: Theory and Algorithms