1) Начните с
E extends D[E]
2) Расширение подразумевает подтип в Scala, поэтому
E <: D[E]
3) Из-за определения «класс D [T <: D [T]]» требование к T для любого D [T] состоит в том, что T <: D [T]. Шаг 2 сказал, что E должен иметь возможность быть подключенным к T, чтобы он лучше соответствовал этому требованию. Подставляя E для T, мы получаем требование, что </p>
E <: D[E]
Мы уже показали E <: D [E] в шаге 2. Мы закончили. </p>