`GetSymbol()` on an `ITupleType` with named elements returns the bare `ValueTuple<...>` symbol, without the names. ``` IType: (int Count, string Name) symbol: (int, string) ``` The code model keeps the names on the `TupleType` itself, beside the symbol it wraps, so anything that reaches through to the symbol loses them. Roslyn can represent them: `Compilation.CreateTupleTypeSymbol` accepts element names, and a tuple read from source has them on its symbol. The consequence is that the same tuple is not equal to itself across the two representations, which is how this was found: resolving a tuple identifier through the resolver of symbols yields a named tuple, and through the resolver of the code model a tuple whose symbol is unnamed. Test: `CodeModelConsistencyTests.TheTwoResolversResolveAnIdentifierToTheSameType`. — Claude for @gfraiteur