Abstract Interpretation for Type Checking