lift.cc
Go to the documentation of this file.
2 
3 #include <witness.h>
4 
5 /***
6  * Suppose r and s are the same ring but with two adjacent orderings,
7  * w is a weight vector in the relative interior of their common facet.
8  * Given a standard basis of an ideal I with respect to the ordering of r,
9  * a standard basis of its w-initial ideal inI with respect to
10  * the ordering of s, computes a standard basis of I with respect to
11  * the ordering of s.
12  **/
13 // ideal lift(const ideal I, const ring r, const ideal inI, const ring s)
14 // {
15 // nMapFunc identity = n_SetMap(r->cf,s->cf);
16 // int k = IDELEMS(I); ideal Is = idInit(k);
17 // for (int i=0; i<k; i++)
18 // Is->m[i] = p_PermPoly(I->m[i],NULL,r,s,identity,NULL,0);
19 // ideal J = idInit(k);
20 // for (int i=0; i<k; i++)
21 // J->m[i] = witness(inI->m[i],Is,inI,s);
22 // id_Delete(&Is,s);
23 // return J;
24 // }
25 
26 ideal lift(const ideal J, const ring r, const ideal inI, const ring s)
27 {
28  nMapFunc identity = n_SetMap(s->cf,r->cf);
29  int k = IDELEMS(inI); ideal inIr = idInit(k);
30  for (int i=0; i<k; i++)
31  {
32  if(inI->m[i]!=NULL)
33  {
34  inIr->m[i] = p_PermPoly(inI->m[i],NULL,s,r,identity,NULL,0);
35  }
36  }
37  ideal Ir = witness(inIr,J,r);
38 
39  identity = n_SetMap(r->cf,s->cf);
40  ideal Is = idInit(k);
41  for (int i=0; i<k; i++)
42  {
43  if(Ir->m[i]!=NULL)
44  {
45  Is->m[i] = p_PermPoly(Ir->m[i],NULL,r,s,identity,NULL,0);
46  }
47  }
48 
49  id_Delete(&inIr,r);
50  id_Delete(&Ir,r);
51  return Is;
52 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
int k
Definition: cfEzgcd.cc:93
ideal lift(const ideal J, const ring r, const ideal inI, const ring s)
Definition: lift.cc:26
const ring r
Definition: syzextra.cc:208
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar, BOOLEAN use_mult)
Definition: p_polys.cc:3977
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
Definition: coeffs.h:73
int i
Definition: cfEzgcd.cc:123
#define IDELEMS(i)
Definition: simpleideals.h:24
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
Definition: coeffs.h:725
ideal idInit(int idsize, int rank)
initialise an ideal / module
Definition: simpleideals.cc:38
#define NULL
Definition: omList.c:10
poly witness(const poly m, const ideal I, const ideal inI, const ring r)
Let w be the uppermost weight vector in the matrix defining the ordering on r.
Definition: witness.cc:34