Using Linear Constraints for Logic Program Termination Analysis