Duality of linear programming