always get a canonical form (guess if necessary)