At this point, calling it by its correct name (Sum Types) would leave them looking stupid for not using the correct name (Product Types) for their “records”
> not using the correct name (Product Types) for their “records”
There is no single "correct name" as there is no single "problem domain" that covers the algebra of type theory, and the pragmatics of programming in engineering, along with other areas.
both tuples and record (structs) are product types. tuples are "untagged", records/structs are "tagged" (the members have names).
sum types also have tagged and untagged variants. the untagged variants are less useful (more cumbersome) in case of sum types and hence often are not implemented in languages.
C# tuple field names are an interesting case, spiritually similar to this proposal's ad hoc unions: persisted in compiled output via attributes, respected by the compiler even across assembly boundaries, but not actually part of the resulting CLR type. So, e.g., if
var p = (x: 1, y: 2);
var q = (u: 1, y: 2);
var f = ((int x, int y) a) => a.x + a.y;
CS1061: '(int u, int v)' does not contain a definition for 'x' and no accessible extension method 'x' accepting a first argument of type '(int u, int v)' could be found (are you missing a using directive or an assembly reference?)
and if
dynamic d = q;
then
var s = d.u;
compiles, but throws
RuntimeBinderException: 'System.ValueTuple<int,int>' does not contain a definition for 'u'