Ok, then I tried an intersection type and it helps.
scala> trait X[T <: X[T, U], U <: Z[T, U]]
| trait Y[T <: X[T, U], U <: Z[T, U] & Y[T, U]]
| trait Z[T <: X[T, U], U <: Z[T, U]] extends Y[T, U]
// defined trait X
// defined trait Y
// defined trait Z