A similar problem was discussed in this topic: Smart casts and nullability in single-threaded contexts.
It was a heated discussion, but with no result other than the issue in the tracker KT-20294, where all that was restated again, and a proof-of-concept fork of the compiler supporting @AssumeMultiThreadSafe
annotation to mark var properties that can be smartcasted.