MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

efficient programming problem

  • To: mathgroup at
  • Subject: [mg84143] efficient programming problem
  • From: "Michael Weyrauch" <michael.weyrauch at>
  • Date: Tue, 11 Dec 2007 06:12:35 -0500 (EST)


I am generating a sum of a product of "pairs"  using the following rules
(partly stolen from an earlier post of Carl Woll in this group.)

wick[a_, b_] := pair[a, b];

wick[a_, b__] := Sum[Expand[pair[a, {b}[[i]]]*Delete[Unevaluated[wick[b]], i]], {i, Length[{b}]}];

pair[c[_], c[_]] := 0

pair[d[_], d[_]] := 0

So, when I evaluate

wick[c[1], c[2], d[3], d[4]]

I get

pair[c[1], d[4]]*pair[c[2], d[3]] + pair[c[1], d[3]]*pair[c[2], d[4]]

which is the desired sum of product of pairs.

Now, I would like to implement an additional rule which holds for my pairs, namely that it is allowed to interchange the parameters 
(1,2) or (3,4), so that the above sum of pairs simplifies e.g. to

2*pair[c[1], d[4]]*pair[c[2], d[3]]

A more complicated example would be to evaluate

wick[c[1], c[2], d[3], d[4], c[5], c[6], d[7], d[8]]

which produces a sum of 24 products of pairs. Now if I again implement the additional rule that one is allowed to interchange (1,2) 
or (3,4) or (5,6)   ( and so on) one obtains only a sum of 3 products of pairs which reads

4*pair[c[1], d[3]]*pair[c[2], d[4]]*pair[c[5], d[7]]*pair[c[6], d[8]] +

16*pair[c[1], d[7]]*pair[c[2], d[3]]*pair[c[5], d[8]]*pair[d[4], c[6]] +

4*pair[c[1], d[7]]*pair[c[2], d[8]]*pair[d[3], c[5]]*pair[d[4], c[6]]

I am looking for a method which implements this (1,2) (3,4) (5,6)...  interchange symmetry in a memory and time efficient way, so 
that Mathematica directly produces the correctly  "reduced" sum of products of pairs as exemplified above for simple cases.

I have now tried two implementations, but both use too much memory and time (this is relevant of course only for much longer 
examples which contain say 4 times as many c[] and d[] in wick[] than the examples given), since my methods essentially first 
generate the some of all products of pairs generated by the rules given in the beginning of this post and then analyze the sum of 
terms and reduce them according to the additional interchange symmetry.

It would be better if this reduction of terms could be done during the recursive generation of the sum of products of pairs. Ideas 
in this direction would be welcome...

Thanks,   Michael

  • Prev by Date: Re: Monitor bug or feature
  • Next by Date: Re: From 3D to 2D
  • Previous by thread: Re: From 3D to 2D
  • Next by thread: Re: efficient programming problem