ellisto wrote:
Basically I'd like to be able to do things like in the
example of solving systems of polynomials (in the example, it's over complex numbers), except over GF(2)
This is again numerical solvong.
The problem over GF(2) is, that some coordinates of the solution are zeroes
of polynomials which are irreducible over GF(2)[x].
Hence, in this case you can not write the solutions plain explicitely as
x= ..., y = ..., z =....; instead you need i
mplicit equations i.e. the minimal
polynomials. See the example I gave at the beginning.
In case that you want to ignore these solutions and you wishes only the
have the 0-1-coordinates, then you can write a small proc.
The following may be partial solution:
Code:
proc gf2solver(string fnm, ideal I)
// writes the solutions in GF(2)^n to stdout resp. writes to file fnm
{
int i,j;
option(redSB);
list L = facstd(I);
ideal J;
string S;
for(i=1;i<=size(L);i++)
{
if (deg(L[i])==1) // solutions in GF(2), no field extension is needed
{
J= L[i];
S = newline + S + "["+string(i)+"]" +newline;
for (j=1;j<=ncols(J);j++)
{
S = S + string(J[j]-jet(J[j],0)) + " = "+ string(jet(J[j],0)) + ";"
+ newline;
}
S = S + newline;
}
else
{
"ignoring solution";
L[i];
}
}
if (fnm=="") {return(S);}
else {write(fnm,S);}
}
It is yet incomplete as it has to be extended for the free variables:
Code:
> ring r=2,(x,y,z),dp;
> ideal I = xy-z2,x+y+z,z2+y;
> facstd(I*(x+1));
[1]:
_[1]=x+1
[2]:
_[1]=z
_[2]=y
_[3]=x
[3]:
_[1]=x+y+z
_[2]=z2+y
_[3]=y2+y+1
> gf2solver("",I*(x+1));
ignoring solution
_[1]=x+y+z
_[2]=z2+y
_[3]=y2+y+1
[1]
x = 1;
[2]
z = 0;
y = 0;
x = 0;