eval_when([translate,batch,loadfile], apply('array,['[sum1,sum2,sum3,dr,sr2,y],30]), mf(e)::=buildq([e],mode_identity(fixnum,e)), mdf(e)::=buildq([e],mode_declare(e,fixnum))); define_variable(z,'z,any); sum1[k]:=(mdf(k), block([n:mf(k/2),be,s:0],mdf([n,be]), for al:1 thru n-1 do (mdf(al), be:n-al, s:s+arrayapply('y,[2*al])*arrayapply('y,[2*be])),s)); sum2[k]:=(mdf(k), block([n:mf(k/2),del,s:0],mdf([n,del]), for al:0 thru n do (mdf(al), for be:0 thru n-al do (mdf(be), for gam:0 thru n-al-be do (mdf(gam), del:n-al-be-gam, ( /* check that at least 2 indices are nonzero...must fail when at least three are 0. there are 4 cases when three indices are 0...and they are test for explicitly... the test that all four indices = 0 is redundent. */ if (al+be+del)*(al+be+gam)*(be+gam+del)*(al+gam+del)=0 then done else ( if al+be+gam+del#n then done else ( s:s+arrayapply('y,[2*al])*arrayapply('y,[2*be])* arrayapply('y,[2*gam])*arrayapply('y,[2*del]))))))),s)); sum3[k]:=(mdf(k), block([n:mf(k/2),be,s:0],mdf([n,be]), for al:1 thru n-2 do (mdf(al), be:n-1-al, ( s:s+funmake('e,[0,z])*arrayapply('y,[2*al])*arrayapply('y,[2*be])+ 3/4*arrayapply('dr,[2*al])*arrayapply('dr,[2*be])- 1/4*(arrayapply('y,[2*al])*arrayapply('dr2,[2*be])+ arrayapply('dr2,[2*al])*arrayapply('y,[2*be])))),s)); dr[n]:=(mdf(n),diff(arrayapply('y,[n]),z)); dr2[n]:=(mdf(n),diff(arrayapply('dr,[n]),z)); y[n]:=(mdf(n),ratsimp(funmake('e,[0,z])*arrayapply('y,[n-2])- 1/4*arrayapply('dr2,[n-2])+ 1/2*arrayapply('sum1,[n])-1/2*arrayapply('sum2,[n])+ 1/2*arrayapply('sum3,[n])));