As a software developer, the point about distinguishing multi-vectors from operations they may be isomorphic to makes complete sense.<p>I.e. just because two data structures have the same values, and are related, doesn't make them the same thing.<p>A great deal of clarity is had by not treating all two-field structures of real/float x and y, as if they were all points and offsets and vectors, etc. Each of those things is a different type, with different expectations on how it will be legally used, and combined with the others.<p>The fact that two numbers over two dimensions allows for isomorphic relations between them, does not make them the same thing.<p>--<p>This is very similar to how pointers/addresses (1-dimensional objects) are represented by an integer, and so are offsets/sizes. But they are different. Adding two addresses makes no sense. De-referencing an offset makes no sense.<p>There is an isomorphism, between offsets from the zero address and the same numerical addresses, but the distinction between whether you have an offset or address is important if you want your type system to guarantee proper/safe behavior.<p>Conceptually, an address consists of a RAM origin, and an offset. Where as an offset is just an offset.<p>You can add and subtract offsets. You can add and subtract offsets to addresses (i.e. to their offsets). And you can subtract addresses (the RAM origins cancel, leaving an offset).<p>But you can't add two addresses, because adding two origins makes no sense.<p>(Generalizing from adding two values, to multiple additions = multiplication of by indices: multiplying offsets by indices makes sense. Multiplying addresses by offsets or indices does not. Adding and subtracting indices makes sense. Multiplying indices makes sense, but not as an offset (although there is an isomorphism from the number of elements n of an i x j array of objects, it objects have a size of 1.))