add option to work modulo an ideal

This commit is contained in:
Nelynx 2025-02-27 16:33:03 +01:00
parent 38e7c8af19
commit e2717632d5
2 changed files with 85 additions and 3 deletions

View File

@ -12,3 +12,36 @@ f = imap(s,f);
f;
kbase(std(f));
quit;
LIB"AeCodPruebas.lib";
ring r = 0,(x,y),ds;
ideal f = x,y2,y3+x2y;
def Q = MalgrRing(ideal(0),2,f);
setring Q;
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
LIB"AeCodPruebas.lib";
TargetIdeal(ideal(x,y));
ring r = 0,(x,y),ds;
ideal f = x,y2,y3+x2y;
LIB"AeCodPruebas.lib";
TargetIdeal(f, ideal(x,y));
TargetIdeal(f, std(ideal(x,y)));
LIB"AeCodPruebas.lib";
TargetIdeal(f, std(ideal(x,y)));
LIB"AeCodPruebas.lib";
ring r = 0,(x,y),ds;
ideal f = x,y2,y3+x2y;
TargetIdeal(f, std(ideal(x,y)));

View File

@ -123,6 +123,13 @@ proc AeNormal(ideal f, list #)
int n = nvars(basering);
int p = ncols(f);
int s = size(#);
if (s > 0)
{
int k = TargetIdeal(f,std(#[1]));
}
def Raux = MalgrRing(ideal(0),n,ideal(f[1..n]));
matrix jf[p][n] = jacob(f);
@ -133,7 +140,11 @@ proc AeNormal(ideal f, list #)
execute("def f = imap("+RName+",f)");
execute("def jf = imap("+RName+",jf)");
if (s > 0)
{
execute("def # = imap("+RName+",#)");
}
module wf = freemodule(p);
int m = ncols(Gens);
@ -150,6 +161,11 @@ proc AeNormal(ideal f, list #)
}
}
if (s>0)
{
wf = wf + freemodule(p)*(f^k);
}
if (size(#)>0)
{
jf = jf + #[1]*freemodule(p);
@ -218,6 +234,39 @@ proc NormalOYModule(matrix GOX, matrix GOY, list #)
//////////////////////////////////////////////////////////////////////////////
proc TargetIdeal(ideal f, ideal J)
{
/*
Ideal f should be a finite map.
Ideal J should be an ideal in O_X in STD form, such that the radical of J is the maximal ideal.
OUTPUT: An integer k such that f^k is contained in J.
*/
int done = 0;
int k = 1;
ideal auxf = 1;
while (done == 0)
{
auxf = auxf*f;
if (size(reduce(auxf,J,1)) == 0)
{
done = 1;
}
else
{
k++;
}
}
return(k);
}
//////////////////////////////////////////////////////////////////////////////
proc GenerateOYModule(matrix GOX, matrix GOY, list #)
{
/*
@ -399,7 +448,6 @@ proc MalgrFormPoly(poly h, list #)
poly c;
int nGens = ncols(Gens);
// Convert the Malgrange Normal Form of the polynomial to row matrix form.
/*
@ -408,6 +456,7 @@ proc MalgrFormPoly(poly h, list #)
We only need to extract these coefficients and add them to the corresponding component in v.
*/
matrix v[1][nGens] = 0;
for (i=1; i<= nGens-1; i++)