I haven't been following this carefully, but as mentioned elsewhere
in this thread, maybe you can use Maxima's defstruct to get what you want.
defstruct allows you to bundle things together.
defstruct (trank (U1, L1, UU2, LL2, UL2, LU2));
mytrank : new (trank);
mytrank at U1 : <some matrix thing here>;
mytrank at LU2 : <some other matrix thing>;
foo (x) := x at LU2 - x at UL2; /* or some other operation */
foo (mytrank);
=> <difference mytrank at LU2 - mytrank at UL2>
Sorry, defstruct isn't documented; I guess you can blame me for that.
It is really pretty simple-minded -- like C structs, if you're familiar
with that, and not like C++ or Java classes.
HTH, Robert Dodier