what is canonical form in linear programming