Changeset e2f3ad in git


Ignore:
Timestamp:
Aug 18, 2022, 1:44:44 PM (21 months ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
d0731c963230ccafabf460a89208f06831979612
Parents:
cd8a89918073438ccbaf9e823dda24cf8ab16709
Message:
add minimalGenerators to sagbi.lib
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/sagbi.lib

    rcd8a899 re2f3ad  
    12551255  setring DI; algDep;
    12561256*/
     1257
     1258proc minimalGenerators(ideal a, list #)
     1259"USAGE: minimalGenerators(id[,w]); id ideal, w: weight vector.
     1260RETURN: ideal (list of minimal generators of the subalgebra a)
     1261EXAMPLE: example minimalGenerators; shows an example"
     1262{
     1263  if(!homog(a))
     1264  {
     1265    ERROR("generators must be homogeneous");
     1266  }
     1267  ring br=basering;
     1268  intvec w;
     1269  if (size(#)==0) { w=1:nvars(basering); }
     1270  else            { w=#[1]; }
     1271  int elems=size(a);
     1272  int j; ideal ad; poly p; ideal sb; ideal mingen; ideal h;
     1273  for (int d=0;elems>0;d++)
     1274  {
     1275    ad=jet(jet(a,d,w),-d,-w); // degree d part of a
     1276    if (size(ad)>0)
     1277    {
     1278      "sagbi for deg ",d-1;sb;
     1279      "testing deg ",d;
     1280      "ad=",ad;
     1281      for(j=1;j<=ncols(ad);j++) // 2.1
     1282      {
     1283        if (ad[j]!=0)
     1284        {
     1285          p=sagbiReduce(ad[j],sb);
     1286          "reduced:",p;
     1287          if(p==0) { a[j]=0; "a[",j,"] not needed"; }
     1288          else
     1289          {"min gen",j," = ",p;
     1290            sb=sb,p;
     1291            mingen=mingen,p;
     1292          }
     1293          elems--;
     1294        }
     1295      }
     1296    }
     1297    h=relations_apply(sb,a); // 2.3
     1298    h=jet(jet(h,d+1,w),-d-1,w); // deg d+1 part
     1299    "rel. in deg ",d+1," =",h;
     1300    for(j=1;j<=ncols(h);j++) // 2.4
     1301    {
     1302      h[j]=sagbiReduce(h[j],sb);
     1303    }
     1304    sb=sb,h; // 2.5
     1305    sb=simplify(sb,2); // 2.6
     1306  }
     1307  "sb=",sb;
     1308  return(simplify(a,2));
     1309}
     1310example
     1311{
     1312  "EXAMPLE:";echo=2;
     1313  ring r= 0,(a0,a1,a2),dp;
     1314  ideal A=a0,a1*a2-a0*a1+a0*a2,a1^2-a2^2+a0*a1,a1^3-a0*a2^2;
     1315  A=A,A[1]*A[4]+A[2]*A[3];
     1316  minimalGenerators(A);
     1317}
     1318
     1319proc relations_apply(ideal s, ideal a)
     1320{
     1321  ideal ls=lead(s);
     1322  // new vars, #=ncols(s)
     1323  ring savering=basering;
     1324  ring d1=0,(y(1..ncols(a))),dp;
     1325  def e1=d1+savering;
     1326  setring e1;
     1327  ideal ls=imap(savering,ls);
     1328  poly m=1;
     1329  for(int i=1;i<=nvars(savering);i++)
     1330  { m=m*var(i+nvars(d1)); }
     1331  for(i=1;i<=ncols(ls);i++)
     1332  {
     1333    if (ls[i]!=0)
     1334    {
     1335      ls[i]=ls[i]-y(i);
     1336    }
     1337  }
     1338  ls=eliminate(ls,m); // eliminate original vars from ls
     1339  "orig rel:",ls;
     1340  // apply the relations
     1341  setring savering;
     1342  // image of map;
     1343  ideal im;
     1344  im[nvars(savering)]=0;
     1345  im=im,a;
     1346  // map:
     1347  map f=e1,im;
     1348  // apply relations
     1349  ideal rel=f(ls);
     1350  "Relations:",rel;
     1351  return(rel);
     1352}
     1353
Note: See TracChangeset for help on using the changeset viewer.