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)