Opened 14 years ago

Closed 14 years ago

Last modified 14 years ago

#47 closed proposed feature (fixed)

Suggestion for an extension of std's functionality

Reported by: dreyer Owned by: hannes
Priority: trivial Milestone: Release 3-1-0
Component: dontKnow Version:
Keywords: Cc: king@…


From Simon King (Uni Jena):

Up to now, the input of std can be:

  1. std(I), I an ideal
  2. std(I,hv), I a homogeneous ideal, hv == hilb(std(I),1)
  3. std(I,hv,rw), as in 2., but with degree vector rw
  4. {{std(G,p)}}}, G a standard basis, p an additional polynomial (or ideal)

I would like to combine 3. and 4., hence:

  1. std(G,p,hv,rw), G standard basis of a homogeneous ideal, p a homogeneous polynomial, hv == hilb(std(G+p),1,rw) --> Output: Standard basis of G+p

An example is below.

In my application, I frequently have a situation in which 5. would be very useful.

Michael showed me that in principle the functionality is present, but a wrapper was missing, and he introduced me to That enabled me to implement it.

Here I'd just like to ask whether other people agree that the suggested extension of std would be nice to have. It seems that in my applications it improves the computation time, but I have to have a closer look on it.

I'll send my version of to Hans in a separate mail (I guess not everybody on the list wants to receive a long attachment).

Best regards,



> option(redSB);
> ring R = 0, (x,y,z,@t),(dp(3),wp(2));}
> poly f = x2+yz;}
> ideal id = z3+x3,yz2+x2y,y2z+x2z,y3+xy2,xz2+xyz;
> id = std(id);
> ideal id_f = id,f-@t;
> ideal G1=std(id_f);
> ideal G2=std(id,f-@t);

Now the Hilbert functions comes in play. Remark: In my application the Hilbert function is very easy to obtain, I can compute it *without* knowing G1.

> intvec hv = hilb(G1,1,intvec(1,1,1,2));
> ideal G3 = std(id_f,hv,intvec(1,1,1,2));
> ideal G4 = std(id,f-@t,hv,intvec(1,1,1,2));


> matrix(G1) == matrix(G2);
> matrix(G1) == matrix(G3);
> matrix(G1) == matrix(G4);


G1 helps to compute the intersection of id with (f).

Consider all generators of G1 which are divisible by @t, and replace @t with f:

> G4;

Hence, the intersection should be:

> interred(ideal(f^3,z*f^2,y*f+z*f,x*f^2,z^2*f+f^2,x*z*f+f^2));

Yes, it is!

> interred(intersect(id,f));

Change History (5)

comment:1 Changed 14 years ago by dreyer

Cc: king@… added

comment:2 Changed 14 years ago by seelisch

Owner: changed from somebody to hannes
Priority: minortrivial

comment:3 Changed 14 years ago by anonymous

I wonder why this ticket got the assignment 'trivial'.

  1. It would not break existing code, since the old std functionality would be preserved. Only in this sense I would say the change is trivial.
  1. Fom the viewpoint of usability, it is clearly non-trivial. See below.
  1. The implementation requires quite a few changes in As I announced in my original message to singular-team (upon which this ticket is based), I sent my version of to Hannes (this was a few months ago and was based on the cvs version at that time).

Question: In the trac of Sage, one would usually submit a mercurial patch. But Singular uses cvs. Is there something like patches for cvs as well? How to create them?

About usability
I implemented this functionality since it actually helped me in my applications.

If the user has background information (e.g., the Hilbert series or a partial Gröbner basis) that makes a Gröbner basis computation easier then Singular should clearly be able to use as much of this information as possible!

Currently, Singular is able to use only one of the two informations (either Hilbert series or partial Gröbner basis). But is there any reason why it should not use both informations at the same time??

Best regards

Simon King

comment:4 Changed 14 years ago by hannes

Resolution: fixed
Status: newclosed

is now included (inlusive description and fix).

comment:5 Changed 14 years ago by seelisch

Milestone: Release 3-1-0
Note: See TracTickets for help on using tickets.