Some results on optimality and duality for mathematical programming involving semi-differentiable functions