Transpose is written as a computational, not a mathematical function. It
"cheats" by returning a noun form in some cases, but since there is no
simplifying function defined on the noun form, this doesn't work very well:
transpose(transpose(x)) => x Looks like it works!
subst(transpose(y),x,transpose(x)) => transpose(transpose(y))
Oops, it doesn't really; it's cheating.
The suggested change doesn't work unless the expression is reevaluated
(which it is not in the above example), which it shouldn't have to be. The
correct fix is to rewrite transpose as a simplifying function. Same thing
for determinant.
-s