For my own use, I am attempting to port Joe Riel’s glyph package for geometric algebra into a module more compatible with recent versions of Maple. To this end, I have been testing individual procedures extracted from the package into Maple 2016, both to understand the algorithms and to check for glitches caused by the code running in more current Maple 2016. The procedure for carrying out the exterior multiplication of blades does not seem to work reliably, and I haven’t the necessary knowledge of Maple language to determine whether this is due to an error on my part or a feature of Maple V that no longer works. I have attached a worksheet,tablemultiplyexample.mw, that includes the procedures necessary for the multiplication routine to work, but I can’t get any consistency in the results. Can anyone advise me what is the problem?
As I understand the routine, setup defines a anti-symmetric root blade table with an indexing function that precludes assignment to the table. Clifford blades are then represented as indexed variables using the root table. The process is as follows see worksheet for actual code):
initialize := proc ()
global _e, tableroot;
tableroot := table(antisymmetric, blade);
tableroot := 1;
_e := tableroot;
#The index function `blade` is as follows:
`index/blade` := proc (Indices, tableau)
if nargs = 2 then if Indices =  then 1
else tableau[op(checkindices(Indices))] end if
elif Indices =  then tableau[Indices] := 1
else ERROR("cannot assign to a blade", Indices) end if
#Exterior multiplication is performed by the following routine.
b_exteriorp := proc (u, v)
if u = 1 or v = 1 then u*v
else _e[op(u), op(v)] end if
As near as I understand, the procedure joins the lists representing the two input blade into a single list that is processed by the antisymmetric indexing function and outputs the indexes as the product blade. I don’t understand how the case of duplicate indexes (which should return 0) is supposed to be handled by the procedure. What the procedure usually returns is simply the appended list of the two blades without modification by the indexing function.
Can anyone give me a hint about how to fix this procedure?