[GiNaC-list] Question (Generic Clifford Algebra)
Javier Ros Ganuza
jros at unavarra.es
Tue Jun 21 16:16:10 CEST 2005
Thanks again, Vladimir.
On Sun, 2005-06-19 at 01:10 +0100, Vladimir V Kisil wrote:
> Dear Javier,
>
> At the moment Clifford algebras in GiNaC are suppossed to be
> independent unless
> they are defined throught the same metric and representation label (in this
> case they are exactly coinsiding). Thus if you take a product of
> e~i*E~j (for a
> Clifford units e_j and E_j from different definitions) it could not be
> simplified to anything shorter. If one need some relations between elements of
> the basis e~i and E~j, I see two possibilities:
OK, but if I'm not wrong, at the example, the units for vector1 and
vector2, are defined throught the same metric and representation label
(default=0 I suposse, nevertheless I made some trials especifiying
diferent labels; 0 or 1) and no simplification is made.
I was hopping simplifications of the kind
2*[[a1],[b1],[c1]].rho*e~rho+e~rho*[[a2],[b2],[c2]].rho->[[2*a1+a2],
[2*b1+b2],[2*c1+c2]].rho*e~rho
2*[[a1],[b1],[c1]].rho*ONE*[[a2],[b2],[c2]].rho*e~rho~rho->2*a1*a2+2*b1*b2+2*c1*c2
[[0],[1],[0]].rho*e~rho+e~rho*[[1],[0],[0]].rho -> [[1],[1],
[0]].rho*e~rho
because all the vectors share the same metric.
Untill now, I've only realized that
ex M = diag_matrix(lst(1, -1, 0, s));
ex e = clifford_unit(nu, M, 1);
ex vector1=lst_to_clifford(lst(1, 2, 3, 4), nu, M, 1);
ex vector2=lst_to_clifford(lst(4, 2, 3, 4), nu, M, 1);
is different of
ex vector1=lst_to_clifford(lst(1, 2, 3, 4), nu, e, 1);
ex vector2=lst_to_clifford(lst(4, 2, 3, 4), nu, e, 1);
This one compiles, but gives error in
ex list = clifford_to_lst(vector1+vector2, e);
The first one produces
ex list = clifford_to_lst(vector1+vector2, e);
cout << list << endl;
{5,4,6,8}
So, it seems some simplifications are being trigered,
nevertheless
cout << simplify_indexed(vector1+vector2,1) << endl;
or
cout << vector1+vector2 << endl;
give
[[1],[2],[3],[4]].nu*e~nu+[[4],[2],[3],[4]].nu*e~nu
Obvious simplifications being not trigered.
cout << exapand_dummy_sum(vector1+vector2) << endl;
or
cout << expand_dummy_sum(vector1+vector2) << endl;
do not compile on my
GiNaC-1.3.1-1
GiNaC-devel-1.3.1-1
Fedora C3 system.
Is there somemething specific to do in order to get the simplifications
done.
The rest of your mail is very interesting, but I think I should cope
with reduction of expresions in order to go to the next step.
If I can't simplify the Clifford class is not going to do
what I'm need.
Am I missing some documentation?, is there some working example
in order to play around it?.
Thanks a lot
Javier Ros
> 1. Some additional procedures which can reduce different basis to the common
> ground. For example you can define something like (very schematic, sorry):
>
> matrix transf_matrix(3, 3) = [some elements here];
>
> basis1 = clifford_unit(mu, metric);
> vector1 = lst_to_clifford(lst(a1, b1, c1), rho, e);
>
> ex basis2 = indexed(transf_matrix, nu, mu.toggle_variance())*e;
> vector2 = indexed(matrix(3,1, lst(a2,b2,c2)), nu.toggle_variance())*basis2;
> ...
>
> [Sometimes the function exapand_dummy_sum() can be of use here]
>
> 2. Implementation of different Clifford units, which are linear combination of
> each other, in the core GiNaC procedures. This will need some more thinking
> about a careful design and should be probably moved to ginac-dev mailing list.
>
> I will be glad to assit you in the future development.
>
> Best wishes,
> Vladimir
> Quoting Javier Ros Ganuza <jros at unavarra.es>:
>
> > Following Vladimir's :) instructions...
> >
> > I implemented it, but I've found a problem with the output, probably due
> > to my lack of knowledge :(.
> >
> > For reference the listing is
> >
> > ---
> > //c++ clifford.cc -o clifford -lcln -lginac
> >
> > #include <iostream>
> > using namespace std;
> >
> > #include <ginac/ginac.h>
> > using namespace GiNaC;
> >
> > int main()
> > {
> >
> > varidx nu(symbol("nu", "\\nu"), 3), mu(symbol("mu", "\\mu"), 3), xi
> > (symbol("xi", "\\xi"), 3), rho(symbol("rho", "\\rho"),3);
> >
> > ex basis1 = clifford_unit(mu, diag_matrix(lst(1, 1, 1)));
> > ex basis2 = clifford_unit(nu, diag_matrix(lst(1, 1, 1)));
> >
> > symbol a1("a1"),a2("a2"),b1("b1"),b2("b2"),c1("c1"),c2("c2");
> >
> > ex vector1 = lst_to_clifford(lst(a1,b1,c1), rho, basis1);
> > ex vector2 = lst_to_clifford(lst(a2,b2,c2), rho, basis1);
> >
> > cout << 2*vector1+vector2 << endl;
> >
> > cout << 2*vector1*vector2 << endl;
> >
> > cout << lst_to_clifford(lst(1, 0, 0), rho, basis1) + lst_to_clifford(lst
> > (0, 1, 0), rho, basis1) << endl;
> >
> > return 0;
> > }
> >
> > ---
> >
> > And the output
> >
> > $ ./clifford
> > 2*[[a1],[b1],[c1]].rho*e~rho+e~rho*[[a2],[b2],[c2]].rho
> > 2*[[a1],[b1],[c1]].rho*ONE*[[a2],[b2],[c2]].rho*e~rho~rho
> > [[0],[1],[0]].rho*e~rho+e~rho*[[1],[0],[0]].rho
> >
> >
> > As it can be see the elements, [[a1],[b1],[c1]].rho, seem indivisible.
> > There are not trivial groupings being made, like,
> >
> > [[0],[1],[0]].rho*e~rho+e~rho*[[1],[0],[0]].rho -> [[1],[1],
> > [0]].rho*e~rho
> >
> > I tried to simplify_indexed but the result keeps the same.
> >
> > Also at the tutorial, when dealing with generic clifford algebras,
> > refered Ginac output for elements of a Clifford Algebra are reflected as
> >
> > v~0 e.0 + v~1 e.1 + ... + v~n e.n
> >
> > so exhibiting that they are some how divisible.
> >
> > Also covariant and contravariant indexes are interchanged in comparison
> > with the tutorial.
> >
> >
> > Any clues???.
> >
> > Thanks for your help
> >
> > Javier Ros
> >
> >
> > _______________________________________________
> > GiNaC-list mailing list
> > GiNaC-list at ginac.de
> > http://thep.physik.uni-mainz.de/mailman/listinfo/ginac-list
> >
> >
>
>
>
> --
> Vladimir V. Kisil email: kisilv at maths.leeds.ac.uk
>
>
More information about the GiNaC-list
mailing list