(bf.sm1 Version Sep 26, 1995) message
( Computing b-function by the algorithm by Oaku. Type in demo1 to see a demo.)
message
%%%% demo1 can be used as a template to compute the b-function of your own
%%%% polynomial.
/demo1 {
%%% Give your variables. s is used for FW-filtration.
[(s,t,x,y) ring_of_differential_operators
%%% Give the weight vector here.
[[(s) 1] [(Dx) 1 (Dy) 1 (x) 1 (y) 1]] weight_vector 0 ] define_ring
%%% Give the generators. t - s f(x), Dx + s Df/Dx Dt
[( t- s x^2 + s y^3).
( Dx + 2 s x Dt).
( Dy - 3 s y^2 Dt).
] /ff set
%%%%%%%%%%% Don't touch. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ff print
( are generators.) message ( ) message
ff {[[(h). (1).]] replace} map {homogenize} map /ff set
(Computing groebner basis) message
{[ff] groebner 0 get /ans set } timer
( ) message
ans fw_principal /ans0 set
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Give variables to eliminate
ans0 [(Dx) (Dy) (x) (y) ] eliminatev
/ans1 set
(The answer [ans1] is ) message
ans1 print ( ) message
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% demo2 : degree 26. Time = 355s + 60s
/demo2 {
%%% Give your variables. s is used for FW-filtration.
[(s,t,x,y,z) ring_of_differential_operators
%%% Give the weight vector here.
[[(s) 1] [(Dx) 1 (Dy) 1 (Dz) 1 (x) 1 (y) 1 (z) 1 ]] weight_vector
0 ] define_ring
%%% Give the generators. t - s f(x), Dx + s Df/Dx Dt
[( t - s (-x^2 z^2 + x^4 + y^4)).
( Dx + s (-2 x z^2 + 4 x^3) Dt ).
( Dy + s (4 y^3 ) Dt ).
( Dz + s (-2 x^2 z) Dt).
] /ff set
%%%%%%%%%%% Don't touch. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ff print
( are generators.) message ( ) message
ff {[[(h). (1).]] replace} map {homogenize} map /ff set
(Computing groebner basis) message
{[ff] groebner 0 get /ans set } timer
( ) message
ans fw_principal /ans0 set
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Give variables to eliminate
ans0 [(Dx) (Dy) (Dz) (x) (y) (z) ] eliminatev
/ans1 set
(The answer [ans1] is ) message
ans1 print ( ) message
} def
/bf3_0 {
%%% Give your variables. s is used for FW-filtration.
[(s,t,x,y,z) ring_of_differential_operators
%%% Give the weight vector here.
[[(s) 1] [(Dx) 1 (Dy) 1 (Dz) 1 (x) 1 (y) 1 (z) 1 ]] weight_vector
0 ] define_ring
/s (s). def /x (x). def /y (y). def /z (z). def
/Dx (Dx). def /Dy (Dy). def /Dz (Dz). def
/t (t). def /Dt (Dt). def /h (h). def
} def
%%% Give the generators. t - s f(x), Dx + s Df/Dx Dt as ff
/bf3_1 {
/ff set
%%%%%%%%%%% Don't touch. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ff print
( are generators.) message ( ) message
ff {[[(h). (1).]] replace} map {homogenize} map /ff set
(Computing groebner basis) message
{[ff] groebner 0 get /ans set } timer
( ) message
ans fw_principal /ans0 set
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Give variables to eliminate
ans0 [(Dx) (Dy) (Dz) (x) (y) (z) ] eliminatev
/ans1 set
(The answer [ans1] is ) message
ans1 print ( ) message
ans1
} def
%% [ ] {outputans1} map ;
/outputans1 {
(t.t) (a) file /fd set
(string) data_conversion /tmp0 set
fd tmp0 writestring
fd ( ,) writestring
fd 10 (string) data_conversion writestring
fd closefile
} def
/fw_principal {
{[[(h). (1).]] replace} map {(s). coefficients 1 get 0 get} map
} def
%%%%%%%%%%%%%%%%%%%%%
% [g1 g2 g3 ...] var eliminate0
/eliminate0 {
/arg2 set /arg1 set
[/gb /degs /ans /n /var] pushVariables
[
/gb arg1 def
/var arg2 def
/degs gb {var . degree} map def
/ans [
0 1 << gb length 1 sub >> {
/n set
<< degs n get >> 0 eq
{ gb n get /ff set
ff (0). eq
{ }
{ ff } ifelse
}
{ } ifelse
} for
] def
/arg1 ans def
] pop
popVariables
arg1
} def