Semantic subtyping for non-strict languages