my class A { method foo { 'yes' } } my class B { method foo { 'yes' } } my class C is A is B { method foo { callsame } } my class D is A { method foo { 'no' } } my class E is C is D { method foo { callsame } } L(A) := [A] L(B) := [B] L(C) := [C] + merge(L(A), L(B), [A, B]) = [C] + merge([A], [B], [A, B]) = [C, A] + merge([B], [B]) = [C, A, B] L(D) := [D] + merge(L(A), [A]) = [D] + merge([A], [A]) = [D, A] L(E) := [E] + merge(L(C),L(D), [C, D]) = [E] + merge([C, A, B], [D, A], [C, D]) = [E, C] + merge([A, B], [D, A], [D]) = [E, C, D] + merge([A, B], [A]) = [E, C, D, A] + merge([B]) = [E, C, D, A, B]