Depends. You can also see a tuple as an reference to an implicit record that is automatically type compatible to tuples that have the same declaration. Add in some rtti for iteration purposes, interface style refcounting maybe.
That is the big question, if partial assignment is possible, then they would not need the same declaration.
var t: tuple of (integer, string, boolean);
var x: tuple of (integer, string);
x := t;
copies the first 2 values.
But even if they have the same declaration, this leaves questions.
Because if you changed the declaration of one, then all the assignments in your code would break. So why have such an assignment compatibility? What would be the benefit? What do you get out of having 2 separate declarations, if you can only change them together.
All you have is an alias. And that you can already to
type TFoo = TBar;
Ok, granted, you gain the ability to use unnamed types
function foo: record a, b : integer end;
For that a modifier for records could be added, so they would be assignment compatible (the modifier would be assumed automatically, for function results with inline declared record as above)
var x: compatible record a,b: integer end;
x := foo();
P.s. reading my own example, I would really always want a name for my record types. Just so, I do not need to repeat the declaration.