принцип лисков говорит что при подстановке А на Б поведение не должно меняться. ПРоблема в том, что для тайпклассов это тривиально, потому что Б не может переопределять поведение А никак
Смотри, есть концепт ShapeWithArea, если концепт Shape. Любое требование концепта Shape верно для ShapeWithArea, перед нами наследование. Если рассматривать Shape и ShapeWithArea как предикаты, получается ShapeWithArea<T> -> Shape<T> (импликация)