Need Help Understanding Protocols and Generics

The problem is that in both (2left) and (2right), the context has Q.id, P.id, P witness, and the fact that self conforms to P and Q. So why does y.id refers to Q.id, but self.id within y refers to P witness.id. It’d be fine if both prints P, or both print Q, but that’s not the case.

As is, there is something difference between the two, there must be, but both the conformance information, and implementation availability are the same, which is a problem. The only difference I can see now is the fact that I’m calling one inside a Self method, and another is outside, but that’s hardly a justification.

I could explain away why (2right) is P or why (2left) is Q, the problem now is that there’s nothing preventing me from applying (2right) explanation to (2left), and vice versa.