+All algebras have a "matrix representation" of their elements. This is
+the original, ambient representation of the elements as either column
+(n-by-1) or square (n-by-n) matrices. For example, the elements of the
+Jordan spin algebra are column vectors, and the elements of real
+symmetric matrix algebra are... real symmetric matrices.
+
+The CombinatorialFreeModule class actually supports such an
+alternative representation of its generators since it subclasses
+IndexedGenerators. However, using matrices as the index set turns out
+to be ugly: printing the generators, and especially printing an
+algebra element as a sum of said generators comes out wonky, since
+the matrices require more than one line. For example,
+
+ sage: A = matrix(QQ,[[1,2],[3,4]])
+ sage: B = matrix(QQ,[[5,6],[7,8]])
+ sage: A.set_immutable()
+ sage: B.set_immutable()
+ sage: M = CombinatorialFreeModule(QQ,[A,B],bracket=False,prefix="")
+ sage: 2*M(A) + 3*M(B)
+ 2*[1 2]
+ [3 4] + 3*[5 6]
+ [7 8]
+
+And things only get worse if you leave the prefix in there to
+distinguish between e.g. the super- and sub-algebra elements
+corresponding to the same matrix. Thus, we store out own copy
+of the matrix generators, and have our own set of methods for
+accessing them.
+
+Why allow matrix representations for all algebras, rather than just
+the matrix algebras?