Почему mutable не подтип immutable и наоборот?
Why isn't mutable a subtype of immutable, or vice versa?
В статье разбирается, почему изменяемые и неизменяемые структуры данных не могут быть подтипами друг друга. Принцип подстановки Лисков требует, чтобы подтип поддерживал все контракты супертипа, включая гарантию неизменности. Изменяемая пара не может использоваться там, где ожидается неизменяемая, так как её содержимое может измениться, что нарушает хеширование и другие гарантии. Решение — отдельные типы и ad hoc полиморфизм через классы типов или интерфейсы.
Принцип подстановки распространяется не только на набор операций (методов), которые предоставляет тип, но и на неявный контракт, который с этими операциями связан.