Semantic subtyping_ Dealing set-theoretically with function, union, intersection, and negation types