Dear Martin,
sorry fro being quiet, but I have currently other errands with higher priority.
Furthermorer I am not a FriCAS expert (at all or) on things like precedence.
> Then all I have to do is find a suitable symbol for the contraction
> product.
I can possibly help on that one. In differential geometry the canonical name for
a contraction by an element 'a' is i_{a} (subscript, with script 'i).
Note that the
contraction _always_ depends on the choice (!) of a dual isomorphism which
cannot be done uniquely. Most people though use the identification V=V* by
defining the canonical dual basis {e*_i}_i wrt to the canonical
basis {e_i}_i of V
such that e*_i(e_j) = \delta_{i,j} (Kronnecker \delta}. In that case
the dependence
of the 'bilinear form' (that is dual isomorphism followed by
evaluation) is usually
suppressed. However, this choice has geometric implications [in
projective geometry]
which one might or not might want to make.
If you want to have the choice of such a dual isomorphism to be free, then your
action (contraction, this is not a product, its not monoidal) become
parametrized by
a bilinear (symmetric) form. You will need this for dealing with
Clifford algebras in
arbitrary bases, when the quadratic form is not necessarily diagonalized by the
generators of the algebra [as in your very first example with the
rotated basis].
The contraction i(B)_{a}(v) would therefore have the signature:
i(B) : /\V x /\V --> /\V
i : /\V x /\V x B --> /\V where B : V x V ---> k is the bilinear
(polar) form of the quadratic
form.
In maple you can pass such parameters as indices to functions, in
FriCAS you might possibly want to have a function which sets locally
in the domain the bilinear form.
[Ralf I know this is wrong, but.....]
Note:
* The wedge product is associative
* the meet product is associative
* the Clifford product is associative
* the left/right contractions are not associative, but derivations
(a in V , u,v in /\V, Chevalley eq ii) of one of my previous mails)
i_a (u/\v) = i_a(u)/\v + (-1)^|u| u/\(i_a(v)) [left contraction]
(u/\v) j_a = u/\((v) j_a) + (-1)^|v| ((u) j_a)/\v [right contraction]
Rafal and I have used 'L' and 'J' as symbols for left and right contractions
when nothing other was available, its pretty close to typing in ascii _| |_
and has the advantage to be schort [Ralf I know that upper case letters should
not be used in FriCAS as names for function...]
For the reasons described above, I do not see a necessity to have an infix form
for the left/right contraction, since it does not really make sense, so I would
propose you use:
lc for left contraction (or even leftContrac) and
rc (or even rightContract) for the right contraction.
What I really would like to have (and that's not your problem at all)
is a graded
super module, generated by an ordered graded super set of 'letters' (elements),
that is the module would be spanned by generators 'a_i which have additional
information:
* Z_2 grade (even or odd)
* Z degree
like
OGSS := Record(s: OrderedSet, z2: FiniteField(2), z: Integer)
and the Grassmann algebra would be over ordered such sequences
GRMOD := Vector OGSS as basis monoms
(Note that the case all letters are even, and of degree 1 gives a
polynomial algebra,
while the case all letters are even and one has one letter in each
degree would
lead to the ring of symmetric functions, while the case all letters
are odd of
degree one leads to the Grassmann algebra...., such a thing
available would allow
to write code for all this objects in a single domain ;-))
So just go ahead to implement a plain Grassmann algebra, and I surely can help
with the code for a contraction.
Ciao
BF.
--
% PD Dr Bertfried Fauser
% Research Fellow, School of Computer Science, Univ. of Birmingham
% Honorary Associate, University of Tasmania
% Privat Docent: University of Konstanz, Physics Dept
<
http://www.uni-konstanz.de>
% contact |-> URL :
http://clifford.physik.uni-konstanz.de/~fauser/
% Phone :
+49 1520 9874517