input_case nil$ % Calculation of one-loop integrals d:=4-2*E$ vecdim d; operator G0; % G0(n) = gamma(1+n*E) % Gamma function procedure G1(x); begin scalar y; y:=sub(E=0,x); return if fixp(y) then if y>1 then (x-1)*G1(x-1) else if y<1 then G1(x+1)/x else if x=1 then 1 else G0((x-y)/E) else if fixp(2*y) then pi^(1/2)*2^(1-2*x)*G1(2*x)/G1(x+1/2) else gamma(x) end$ operator ex; % exponent for all x,y let ex(x)*ex(y)=ex(x+y); let ex(0)=1; % One-loop integral procedure loop(n,m,a); i*(-1)^(n+m)*a^(2+m-n-E)/(4*pi)^2*ex(gam*E) *G1(2+m-E)/G1(2-E)*G1(n-m-2+E)/G1(n)$ % Examples I10:=loop(1,0,a); I20:=loop(2,0,a); I30:=loop(3,0,a); I31:=loop(3,1,a); load_package specfn$ {zeta(2),zeta(4),zeta(6)}; procedure lnG(x); % log(gamma(1+x)) begin scalar s,u,n; s:=-gam*x; u:=-x; n:=2; while (u:=-u*x) neq 0 do << s:=s+zeta(n)/n*u; n:=n+1 >>; return s end$ procedure ex0(x); % exp(x) begin scalar s,u,n; s:=1; u:=1; n:=1; while (u:=u*x/n) neq 0 do << s:=s+u; n:=n+1 >>; return s end$ procedure binom(x,n); % (1+x)^n begin scalar s,u,i,j; s:=1; u:=1; i:=n; j:=1; while (u:=u*x*i/j) neq 0 do << s:=s+u; i:=i-1; j:=j+1 >>; return s end$ procedure dummy(x); x$ procedure exe(x); % expansion in E begin scalar xn,xd,n; xn:=num(x); xd:=den(x); n:=0; while sub(E=0,xd)=0 do << xd:=xd/E; n:=n+1 >>; weight E=1; wtlevel n; for all x!! let G0(x!!)=ex(lnG(x!!*E)); for all x!! let x!!^E=ex(log(x!!)*E); for all x!!,n!! let x!!^(n!!*E)=ex(n!!*log(x!!)*E); xn:=xn; xd:=xd; for all x!! clear G0(x!!),x!!^E; for all x!!,n!! clear x!!^(n!!*E); for all x!! let ex(x!!)=ex0(x!!); xn:=xn; xd:=xd; for all x!! clear ex(x!!); clear E; xn:=xn/sub(E=0,xd); xd:=xd/sub(E=0,xd); weight E=1; xn:=dummy(xn*binom(xd-1,-1)); clear E; return xn/E^n end$ % Examples exe(I10); exe(I20); exe(I30); exe(I31); r:=int(log(1+s*x*(1-x)),x); rr:=sub(x=1,r)-sub(x=0,r); % Unfortunately, REDUCE chooses a wrong branch. % The correct one is let atan((2*s*x-s)/(sqrt(s)*sqrt(-s-4)))=sqrt(s+4)/sqrt(-s-4)/2 *log((sqrt(s)*sqrt(s+4)+2*s*x-s)/(sqrt(s)*sqrt(s+4)-2*s*x+s)); R:=r; clear atan((2*s*x-s)/(sqrt(s)*sqrt(-s-4))); df(R,x); % check let log((sqrt(s)*sqrt(s+4)-s)/(sqrt(s)*sqrt(s+4)+s))= -log((sqrt(s)*sqrt(s+4)+s)/(sqrt(s)*sqrt(s+4)-s)); RR:=sub(x=1,R)-sub(x=0,R); % correct definite integral clear log((sqrt(s)*sqrt(s+4)-s)/(sqrt(s)*sqrt(s+4)+s)); % it can also be obtained from rr let atan(s/(sqrt(s)*sqrt(-s-4)))=sqrt(s+4)/sqrt(-s-4)/2 *log((sqrt(s)*sqrt(s+4)+s)/(sqrt(s)*sqrt(s+4)-s)); Rr:=rr$ clear atan(s/(sqrt(s)*sqrt(-s-4))); Rr-RR; % check end;