/* * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED * All rights reserved. * * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited, * non-exclusive and royalty-free license to use, copy, modify and * redistribute, solely for non-commercial and non-profit purposes, the * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and * conditions of this Agreement. For the avoidance of doubt, you acquire * only a limited right to use the SOFTWARE hereunder, and FLL or any * third party developer retains all rights, including but not limited to * copyrights, in and to the SOFTWARE. * * (1) FLL does not grant you a license in any way for commercial * purposes. You may use the SOFTWARE only for non-commercial and * non-profit purposes only, such as academic, research and internal * business use. * (2) The SOFTWARE is protected by the Copyright Law of Japan and * international copyright treaties. If you make copies of the SOFTWARE, * with or without modification, as permitted hereunder, you shall affix * to all such copies of the SOFTWARE the above copyright notice. * (3) An explicit reference to this SOFTWARE and its copyright owner * shall be made on your publication or presentation in any form of the * results obtained by use of the SOFTWARE. * (4) In the event that you modify the SOFTWARE, you shall notify FLL by * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification * for such modification or the source code of the modified part of the * SOFTWARE. * * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES' * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY. * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * * $OpenXM: OpenXM_contrib2/asir2000/lib/bfct,v 1.4 2000/12/08 08:26:09 noro Exp $ */ /* requires 'primdec' */ /* annihilating ideal of F^s ? */ def ann(F) { V = vars(F); W = append([y1,y2,t],V); N = length(V); B = [1-y1*y2,t-y1*F]; for ( I = N-1, DV = []; I >= 0; I-- ) DV = cons(strtov("d"+rtostr(V[I])),DV); DW = append([dy1,dy2,dt],DV); for ( I = 0; I < N; I++ ) { B = cons(DV[I]+y1*diff(F,V[I])*dt,B); } dp_nelim(2); G0 = dp_weyl_gr_main(B,append(W,DW),0,0,6); G1 = []; for ( T = G0; T != []; T = cdr(T) ) { E = car(T); VL = vars(E); if ( !member(y1,VL) && !member(y2,VL) ) G1 = cons(E,G1); } G2 = map(subst,G1,dt,1); G3 = map(b_subst,G2,t); G4 = map(subst,G3,t,-1-s); return G4; } /* b-function of F ? */ def bfct(F) { G4 = ann(F); V = vars(F); N = length(V); for ( I = N-1, DV = []; I >= 0; I-- ) DV = cons(strtov("d"+rtostr(V[I])),DV); N1 = 2*(N+1); M = newmat(N1+1,N1); for ( J = N+1; J < N1; J++ ) M[0][J] = 1; for ( J = 0; J < N+1; J++ ) M[1][J] = 1; #if 0 for ( I = 0; I < N+1; I++ ) M[I+2][N-I] = -1; for ( I = 0; I < N; I++ ) M[I+2+N+1][N1-1-I] = -1; #elif 1 for ( I = 0; I < N1-1; I++ ) M[I+2][N1-I-1] = 1; #else for ( I = 0; I < N1-1; I++ ) M[I+2][I] = 1; #endif V1 = cons(s,V); DV1 = cons(ds,DV); G5 = dp_weyl_gr_main(cons(F,G4),append(V1,DV1),0,0,M); for ( T = G5, G6 = []; T != []; T = cdr(T) ) { E = car(T); if ( intersection(vars(E),DV1) == [] ) G6 = cons(E,G6); } G6_0 = remove_zero(map(z_subst,G6,V)); F0 = flatmf(cdr(fctr(dp_gr_main(G6_0,[s],0,0,0)[0]))); for ( T = F0, BF = []; T != []; T = cdr(T) ) { FI = car(T); for ( J = 1; ; J++ ) { S = map(srem,map(z_subst,idealquo(G6,[FI^J],V1,0),V),FI); for ( ; S != [] && !car(S); S = cdr(S) ); if ( S != [] ) break; } BF = cons([FI,J],BF); } return BF; } def remove_zero(L) { for ( R = []; L != []; L = cdr(L) ) if ( car(L) ) R = cons(car(L),R); return R; } def z_subst(F,V) { for ( ; V != []; V = cdr(V) ) F = subst(F,car(V),0); return F; } def flatmf(L) { for ( S = []; L != []; L = cdr(L) ) if ( type(F=car(car(L))) != NUM ) S = append(S,[F]); return S; } def member(A,L) { for ( ; L != []; L = cdr(L) ) if ( A == car(L) ) return 1; return 0; } def intersection(A,B) { for ( L = []; A != []; A = cdr(A) ) if ( member(car(A),B) ) L = cons(car(A),L); return L; } def b_subst(F,V) { D = deg(F,V); C = newvect(D+1); for ( I = D; I >= 0; I-- ) C[I] = coef(F,I,V); for ( I = 0, R = 0; I <= D; I++ ) if ( C[I] ) R += C[I]*v_factorial(V,I); return R; } def v_factorial(V,N) { for ( J = N-1, R = 1; J >= 0; J-- ) R *= V-J; return R; } end$