Detecting Determinate Computations by a Bottom-up Abstract Interpretation