Simply put, non-erased runtimes, like CLR, impose their type system on the language. So if something
Type1 is Type2
is true at runtime, it should be true at compile type. E.g. with CLR we cannot practically implement Kotlin type system and still be interoperable with non-Kotlin code.