REDUCE 3.6, 15-Jul-95, patched to 6 Mar 96 ...


% test of DUMMY package version 1.0 running in REDUCE 3.5
% DATE: 15 February 1994
% Authors: A. Dresse <adresse@ulb.ac.be>
%          H. Caprasse <caprasse@vm1.ulg.ac.be>
%
% Case of commuting operator:
%
operator co1,co2;



% declare dummy indices

% first syntax : base <name>
%
dummy_base dv;


dv


% dummy indices are dv1, dv2, dv3, ...

exp := co2(dv2)*co2(dv2)$


c_exp := canonical(exp);


                 2
c_exp := co2(dv1)


exp := dv2*co2(dv2)*co2(dv2)$


c_exp := canonical(exp);


                 2
c_exp := co2(dv1) *dv1


exp := c_exp * co1(dv3);


                        2
exp := co1(dv3)*co2(dv1) *dv1

c_exp := canonical(exp);


                          2
c_exp := co1(dv2)*co2(dv1) *dv1


% aliases for dummy indices
%
dummy_names i,j,k;


t

canonical(c_exp);


             2
co1(j)*co2(i) *i


% remove dummy_names
clear_dummy_names;


t


% Case of anticommuting operators
%
operator ao1, ao2;


anticom ao1, ao2;


% product of anticommuting operators with FREE indices
a_exp := ao1(s1)*ao1(s2) - ao1(s2)*ao1(s1);


a_exp := ao1(s1)*ao1(s2) - ao1(s2)*ao1(s1)

a_exp := canonical(a_exp);


a_exp := 2*ao1(s1)*ao1(s2)


% the indices are summed upon, i.e. are DUMMY indices
a_exp := ao1(dv1)*ao1(dv2)$


canonical(a_exp);


0


a_exp := ao1(dv1)*ao1(dv2) - ao1(dv2)*ao1(dv1);


a_exp := ao1(dv1)*ao1(dv2) - ao1(dv2)*ao1(dv1)

a_exp := canonical(a_exp);


a_exp := 0


a_exp := ao1(dv2,dv3)*ao2(dv1,dv2)$


a_exp := canonical(a_exp);


a_exp := ao1(dv2,dv1)*ao2(dv1,dv3)


a_exp := ao1(dv1)*ao1(dv3)*ao2(dv3)*ao2(dv1)$


a_exp := canonical(a_exp);


a_exp :=  - ao1(dv1)*ao1(dv2)*ao2(dv1)*ao2(dv2)


% Case of non commuting operators
%
operator no1, no2, no3;


noncom no1, no2, no3;



n_exp := no3(dv2)*no2(dv3)*no1(dv1) + no3(dv3)*no2(dv1)*no1(dv2)
         + no3(dv1)*no2(dv2)*no1(dv3);


n_exp := no3(dv1)*no2(dv2)*no1(dv3) + no3(dv2)*no2(dv3)*no1(dv1)

          + no3(dv3)*no2(dv1)*no1(dv2)


n_exp:=canonical n_exp;


n_exp := 3*no3(dv3)*no2(dv2)*no1(dv1)


% Case of mixed commutation properties
% ***
% The example below displays a restriction of the package i.e
% The non commuting operators are ASSUMED to COMMUTE with the
% anticommuting operators.
% ***
exp := co1(dv1)*ao1(dv2,dv1,dv4)*no1(dv1,dv5)*co2(dv3)*ao1(dv1,dv3);


exp := co1(dv1)*co2(dv3)*(ao1(dv2,dv1,dv4)*no1(dv1,dv5)*ao1(dv1,dv3))

canonical(exp);


 - co1(dv1)*co2(dv2)*ao1(dv2,dv1)*ao1(dv4,dv1,dv3)*no1(dv5,dv1)


exp := c_exp * a_exp * no3(dv2)*no2(dv3)*no1(dv1);


                           2
exp :=  - co1(dv2)*co2(dv1) *dv1*ao1(dv1)*ao1(dv2)*ao2(dv1)*ao2(dv2)*no3(dv2)

       *no2(dv3)*no1(dv1)

can_exp := canonical(exp);


                               2
can_exp :=  - co1(dv2)*co2(dv1) *dv1*ao1(dv1)*ao1(dv2)*ao2(dv1)*ao2(dv2)

           *no3(dv2)*no2(dv3)*no1(dv1)


% Case of internal symmetries of operators
%
operator as1, as2;


antisymmetric as1, as2;


clear_dummy_base ;


t

dummy_base s;


s

% First a non trivial expression:

asc_exp:=as1(s1,s2)*as1(s1,s3)*as1(s3,s4)*co1(s3)*co1(s4)+
        2*as1(s1,s2)*as1(s1,s3)*as1(s3,s4)*co1(s2)*co1(s4)$



canonical asc_exp;


 - as1(s1,s2)*as1(s1,s3)*as1(s3,s4)*co1(s3)*co1(s4)

% Second simple illustrative examples:

clear_dummy_base;


t

dummy_base dv;


dv


exp1 := ao1(dv1)*ao1(dv2)$


canonical(exp1);


0


exp2 := as1(dv1,dv2)$


canonical(exp2);


0


canonical(exp1*exp2);


 - as1(dv1,dv2)*ao1(dv1)*ao1(dv2)


canonical(as1(dv1,dv2)*as2(dv2,dv1));


 - as1(dv1,dv2)*as2(dv1,dv2)


operator ss1, ss2;


symmetric ss1, ss2;



exp := ss1(dv1,dv2)*ss2(dv1,dv2) - ss1(dv2,dv3)*ss2(dv2,dv3);


exp := ss1(dv1,dv2)*ss2(dv1,dv2) - ss1(dv2,dv3)*ss2(dv2,dv3)

canonical(exp);


0


exp := as1(dv1,dv2)*as1(dv3,dv4)*as1(dv1,dv4);


exp := as1(dv1,dv2)*as1(dv1,dv4)*as1(dv3,dv4)

canonical(exp);


0

% Indeed the result is equal to half the sum given below:
%
exp + sub(dv2 = dv3, dv3 = dv2, dv1 = dv4, dv4 = dv1, exp);


0


exp1 := as2(dv3,dv2)*as1(dv3,dv4)*as1(dv1,dv2)*as1(dv1,dv4);


exp1 :=  - as1(dv1,dv2)*as1(dv1,dv4)*as1(dv3,dv4)*as2(dv2,dv3)

canonical(exp1);


as1(dv1,dv2)*as1(dv1,dv3)*as1(dv3,dv4)*as2(dv2,dv4)


exp2 := as2(dv1,dv4)*as1(dv1,dv3)*as1(dv2,dv4)*as1(dv2,dv3);


exp2 := as1(dv1,dv3)*as1(dv2,dv3)*as1(dv2,dv4)*as2(dv1,dv4)

canonical(exp2);


as1(dv1,dv2)*as1(dv1,dv3)*as1(dv3,dv4)*as2(dv2,dv4)


canonical(exp1-exp2);


0


% Indeed:
%
exp2 - sub(dv1 = dv3, dv2 = dv1, dv3 = dv4, dv4 = dv2, exp1);


0


% Declare the internal symmetry properties of the Riemann tensor
%
operator r;


symtree (r, {!+, {!-, 1, 2}, {!-, 3, 4}});



canonical( r(x,y,z,t) );


 - r(t,z,x,y)

canonical( r(x,y,t,z) );


r(t,z,x,y)

canonical( r(t,z,y,x) );


 - r(t,z,x,y)


exp := r(dv1, dv2, dv3, dv4) * r(dv2, dv1, dv4, dv3)$


canonical(exp);


                  2
r(dv4,dv3,dv2,dv1)


exp := r(dv1, dv2, dv3, dv4) * r(dv1, dv3, dv2, dv4)$


canonical(exp);


r(dv4,dv2,dv3,dv1)*r(dv4,dv3,dv2,dv1)


dummy_names i,j,k,l;


t

canonical(exp);


r(l,j,k,i)*r(l,k,j,i)


exp := r(i,j,k,l)*ao1(i,j)*ao1(k,l);


exp := r(i,j,k,l)*ao1(i,j)*ao1(k,l)

canonical(exp);


0


exp := r(k,i,l,j)*as1(k,i)*as1(k,j);


exp := as1(i,k)*as1(j,k)*r(k,i,l,j)

canonical(exp);


 - as1(i,j)*as1(i,k)*r(l,j,k,i)


clear_dummy_names;


t
 clear_dummy_base;


t


exp := co1(dv3)$


c_exp := canonical(exp);


c_exp := co1(dv3)


end;
(TIME:  dummy 420 420)
