Need Help Understanding Protocols and Generics

Continuing my quest to better comprehend the mechanics of protocol conformance behavior (in hope of documenting it), I'm wondering if someone could shed light on (1) the specifics of instantiation of protocol witness tables and (2) their subsequent use. To provide context, @Joe_Groff wrote, recently in another thread:

Swift does overload resolution to pick the most specialized implementation that applies at a use site . Once it picks one, it doesn't change that based on parameters to the use site. ... For protocol conformances, the use site is the point at which the conformance is declared, on the type or extension declaration.

In the context of the example upon which this thread is based, looking at Y's protocol conformances, we have the following use sites for protocols P and Q:

struct Y<T> {}
extension Y: P {}
extension Y: Q where T: Equatable {}

(Question A) Is that actually two protocol use sites? In other words, is the conformance to P a separate use site from the conditional conformance to Q?

(Question B) Is a single protocol witness table instantiated, or is it two tables, one for P and one for P with conditional Q?

(Question C) Approaching questions A and B from a different angle--the context provided by the Type Metadata document--are Protocol Metadata records generated as part of the declaration of a protocol or as part of the declaration of a type that uses the protocol? I think it is the former. If I'm correct, then, turning to the Generic Argument Vector part of that document, I understand that that metadata is created at the time that generic type Y is declared, with references to the applicable protocol witness tables. But, then, I wonder about extensions of Y that conform Y to protocols. Do those extensions result in the generation of a new set of Generic Argument Vector metadata that replaces the one created with the initial declaration of Y?

Then, we have the use sites for the generic type Y:

let y = Y<Int>()

(Question D) At this stage, it becomes knowable that, since Int conforms to Equatable, all instances of Y<Int> conform to Q. Does the compiler do anything with that knowledge in terms of protocol conformance? Is a Protocol Conformance Record generated that is specific to Y<Int>?

Then, we have the first use site for the instance y of type Y<Int>:

print(y.id, y.id2)

I'll hold questions about that usage pending a solidification of my understanding of the subject matter, above.

I cannot imagine that you would have the free time available to address these questions, but just in case you might: @Joe_Groff and @Nevin and @jrose.