Occurrence typing, which allows the type system to ascribe more precise types based on whether a predicate check succeeds or fails. It is also called flow sensitive typing or flow typing.