Conforms to 2 protocols at the same time (where each protocol has a variable to other protocol inside)

You must fulfill the requirements of the protocol with the exact type that’s required:

protocol Q { }
protocol QQ: Q { }

protocol P { var q: Q { get } }
struct S: P { var q: QQ } // error: type ‘S’ does not conform to protocol ‘P’