begin changes to work modulo ideal
This commit is contained in:
parent
add55746c4
commit
69b39c01b6
@ -58,7 +58,6 @@ MalgrFormPoly((y+x)^18+t17y,Gens,GW);
|
|||||||
proc AeCod(ideal f)
|
proc AeCod(ideal f)
|
||||||
{
|
{
|
||||||
int aecodf = ncols(AeNormal(f));
|
int aecodf = ncols(AeNormal(f));
|
||||||
|
|
||||||
return(aecodf);
|
return(aecodf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +112,7 @@ proc AeNormalModk(ideal f, int k)
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
proc AeNormal(ideal f)
|
proc AeNormal(ideal f, list #)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
f: Cn -> Cp is a map-germ with p >= n
|
f: Cn -> Cp is a map-germ with p >= n
|
||||||
@ -134,6 +133,7 @@ proc AeNormal(ideal f)
|
|||||||
|
|
||||||
execute("def f = imap("+RName+",f)");
|
execute("def f = imap("+RName+",f)");
|
||||||
execute("def jf = imap("+RName+",jf)");
|
execute("def jf = imap("+RName+",jf)");
|
||||||
|
execute("def # = imap("+RName+",#)");
|
||||||
|
|
||||||
module wf = freemodule(p);
|
module wf = freemodule(p);
|
||||||
int m = ncols(Gens);
|
int m = ncols(Gens);
|
||||||
@ -150,8 +150,12 @@ proc AeNormal(ideal f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module NAef = NormalOYModule(jf,wf);
|
if (size(#)>0)
|
||||||
|
{
|
||||||
|
jf = jf + #[1]*freemodule(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
module NAef = NormalOYModule(jf, wf, #);
|
||||||
execute("setring(" + RName + ")");
|
execute("setring(" + RName + ")");
|
||||||
module NAef = imap(Raux, NAef);
|
module NAef = imap(Raux, NAef);
|
||||||
|
|
||||||
@ -160,7 +164,7 @@ proc AeNormal(ideal f)
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
proc NormalOYModule(matrix GOX, matrix GOY)
|
proc NormalOYModule(matrix GOX, matrix GOY, list #)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
WARNING:
|
WARNING:
|
||||||
@ -170,13 +174,16 @@ proc NormalOYModule(matrix GOX, matrix GOY)
|
|||||||
The GOX and GOY columns are generators of modules over OX and OY respectively
|
The GOX and GOY columns are generators of modules over OX and OY respectively
|
||||||
with the same number of rows. Returns generators of M/ (<GOX>_OX+<GOY>_OY) where M
|
with the same number of rows. Returns generators of M/ (<GOX>_OX+<GOY>_OY) where M
|
||||||
is a free O_X-module.
|
is a free O_X-module.
|
||||||
|
|
||||||
|
# is an optional ideal so that computations are made modulo this ideal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
int a = nrows(GOX);
|
int a = nrows(GOX);
|
||||||
int p = ncols(mappingf);
|
int p = ncols(mappingf);
|
||||||
int m = ncols(Gens);
|
int m = ncols(Gens);
|
||||||
module T = GenerateOYModule(GOX,GOY);
|
module T = GenerateOYModule(GOX, GOY, #);
|
||||||
//basering;//
|
//basering;//
|
||||||
|
|
||||||
int nx = nvars(basering) - p;
|
int nx = nvars(basering) - p;
|
||||||
@ -302,7 +309,7 @@ proc oldAeNormal(ideal f)
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
proc GenerateOYModule(matrix GOX, matrix GOY)
|
proc GenerateOYModule(matrix GOX, matrix GOY, list #)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
WARNING:
|
WARNING:
|
||||||
@ -311,6 +318,8 @@ proc GenerateOYModule(matrix GOX, matrix GOY)
|
|||||||
|
|
||||||
The GOX and GOY columns are generators of modules over OX and OY respectively
|
The GOX and GOY columns are generators of modules over OX and OY respectively
|
||||||
with the same number of rows.
|
with the same number of rows.
|
||||||
|
|
||||||
|
# is an optional ideal so that computations are made modulo this ideal.
|
||||||
*/
|
*/
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
@ -327,7 +336,7 @@ proc GenerateOYModule(matrix GOX, matrix GOY)
|
|||||||
for (i=1; i<= ny; i++)
|
for (i=1; i<= ny; i++)
|
||||||
{
|
{
|
||||||
col = submat(GOY,intvec(1..a),intvec(i));
|
col = submat(GOY,intvec(1..a),intvec(i));
|
||||||
M = M + MatrixToVector(MalgrFormVect(col));
|
M = M + MatrixToVector(MalgrFormVect(col, #));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=1; i <= nx; i++)
|
for (i=1; i <= nx; i++)
|
||||||
@ -335,7 +344,7 @@ proc GenerateOYModule(matrix GOX, matrix GOY)
|
|||||||
col = submat(GOX,intvec(1..a),intvec(i));
|
col = submat(GOX,intvec(1..a),intvec(i));
|
||||||
for (j=1; j<= m; j++)
|
for (j=1; j<= m; j++)
|
||||||
{
|
{
|
||||||
M = M + MatrixToVector(MalgrFormVect(Gens[j]*col));
|
M = M + MatrixToVector(MalgrFormVect(Gens[j]*col, #));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,11 +365,13 @@ proc MalgrRing(ideal J, int n, ideal f)
|
|||||||
int p = ncols(f);
|
int p = ncols(f);
|
||||||
string RName=nameof(basering);
|
string RName=nameof(basering);
|
||||||
ideal w = f[1..n];
|
ideal w = f[1..n];
|
||||||
|
|
||||||
// Compute generators of w_*O_X
|
// Compute generators of w_*O_X
|
||||||
ideal Gens = kbase(std(w+J));
|
ideal Gens = kbase(std(w+J));
|
||||||
int nGens = ncols(Gens);
|
int nGens = ncols(Gens);
|
||||||
|
|
||||||
|
ring R0 = changeord(list(list("dp",nvars(basering))));
|
||||||
|
|
||||||
// Create a ring with generators as variables and target variables.
|
// Create a ring with generators as variables and target variables.
|
||||||
string vaG ="G(";
|
string vaG ="G(";
|
||||||
def R1=extendring(nGens,vaG,"dp",1);
|
def R1=extendring(nGens,vaG,"dp",1);
|
||||||
@ -393,10 +404,12 @@ proc MalgrRing(ideal J, int n, ideal f)
|
|||||||
|
|
||||||
ideal GF = std(W+G+J);
|
ideal GF = std(W+G+J);
|
||||||
|
|
||||||
|
/* This is now moved to the MalgrFormPoly procedure
|
||||||
for (i=n+1; i <= p; i++)
|
for (i=n+1; i <= p; i++)
|
||||||
{
|
{
|
||||||
GF = GF + ideal(X(i) - reduce(f[i], GF));
|
GF = GF + ideal(X(i) - reduce(f[i], GF));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
export(GF);
|
export(GF);
|
||||||
export(Gens);
|
export(Gens);
|
||||||
@ -404,6 +417,8 @@ proc MalgrRing(ideal J, int n, ideal f)
|
|||||||
|
|
||||||
ideal mappingf = f;
|
ideal mappingf = f;
|
||||||
export(mappingf);
|
export(mappingf);
|
||||||
|
int dimX = n;
|
||||||
|
export(dimX);
|
||||||
|
|
||||||
return(R2);
|
return(R2);
|
||||||
}
|
}
|
||||||
@ -440,7 +455,9 @@ proc OldMalgrFormVect(matrix M, ideal Gens, ideal GW)
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
proc MalgrFormPoly(poly h)
|
|
||||||
|
|
||||||
|
proc MalgrFormPoly(poly h, list #)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
WARNING:
|
WARNING:
|
||||||
@ -448,9 +465,25 @@ proc MalgrFormPoly(poly h)
|
|||||||
ideal J, ideal Gens, ideal GF, and the appropriate variables.
|
ideal J, ideal Gens, ideal GF, and the appropriate variables.
|
||||||
|
|
||||||
Converts polynomial h to a row matrix of coefficients with respect to Gens.
|
Converts polynomial h to a row matrix of coefficients with respect to Gens.
|
||||||
|
|
||||||
|
# is an optional ideal so that computations are made modulo this ideal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
poly hr = reduce(h,GF); // Obtain Malgrange form as a sum
|
|
||||||
|
ideal K = GF;
|
||||||
|
|
||||||
|
if (size(#)> 0)
|
||||||
|
{
|
||||||
|
K = std(#[1]+GF);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=dimX+1; i <= size(mappingf); i++)
|
||||||
|
{
|
||||||
|
K = K + ideal(X(i) - reduce(mappingf[i], K));
|
||||||
|
}
|
||||||
|
|
||||||
|
poly hr = reduce(h,K); // Obtain Malgrange form as a sum
|
||||||
poly c;
|
poly c;
|
||||||
int nGens = ncols(Gens);
|
int nGens = ncols(Gens);
|
||||||
|
|
||||||
@ -469,7 +502,7 @@ proc MalgrFormPoly(poly h)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
proc MalgrFormVect(matrix v)
|
proc MalgrFormVect(matrix v, list #)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
WARNING:
|
WARNING:
|
||||||
@ -478,17 +511,19 @@ proc MalgrFormVect(matrix v)
|
|||||||
|
|
||||||
Converts column matrix v of size a x 1 to a matrix a x b. Each row contains
|
Converts column matrix v of size a x 1 to a matrix a x b. Each row contains
|
||||||
the coefficients of the Malgrange form with respect to Gens for each entry.
|
the coefficients of the Malgrange form with respect to Gens for each entry.
|
||||||
|
|
||||||
|
# is an optional ideal so that computations are made modulo this ideal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int a = nrows(v);
|
int a = nrows(v);
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
def m = MalgrFormPoly(v[1,1]);
|
def m = MalgrFormPoly(v[1,1], #);
|
||||||
|
|
||||||
for (i=2; i <= a; i++)
|
for (i=2; i <= a; i++)
|
||||||
{
|
{
|
||||||
m = transpose(concat(transpose(m),transpose(MalgrFormPoly(v[i,1]))));
|
m = transpose(concat(transpose(m),transpose(MalgrFormPoly(v[i,1], #))));
|
||||||
}
|
}
|
||||||
|
|
||||||
return(m);
|
return(m);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user