1 | initial version |
You don't have to declare any symbols to solve the problem that you want to solve. (See the XY problem.)
Instead, proceed as follows:
F.<t>=GF(2^3)
R.<X,Y,Z> = PolynomialRing(F)
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
g = f.homogenize(Z)
C = Curve(g)
sols = [P.dehomogenize(2) for P in C.rational_points() if P[2] != 0]
If you want them as pairs of vectors:
sage: [map(vector, sol) for sol in sols]
[[(0, 0, 0), (0, 0, 0)],
[(1, 0, 0), (1, 1, 0)],
[(0, 1, 0), (0, 0, 1)],
[(1, 1, 0), (0, 1, 0)],
[(0, 0, 1), (1, 0, 1)],
[(1, 0, 1), (1, 1, 1)],
[(0, 1, 1), (0, 1, 1)]]
Note that C.rational_points()
is a "slow" Python implementation, but it works fine when the degree of F
is not too big.
2 | No.2 Revision |
You don't have to declare any symbols to solve the problem that you want to solve. (See the XY problem.)
Instead, proceed as follows:
F.<t>=GF(2^3)
R.<X,Y,Z> R.<X,Y> = PolynomialRing(F)
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
g = f.homogenize(Z)
C = Curve(g)
Curve(f)
sols = [P.dehomogenize(2) for P in C.rational_points() if P[2] != 0]
C.rational_points()
If you want them as pairs of vectors:
sage: [map(vector, sol) for sol in sols]
[[(0, 0, 0), (0, 0, 0)],
[(1, 0, 0), (1, 1, 0)],
[(0, 1, 0), (0, 0, 1)],
[(1, 1, 0), (0, 1, 0)],
[(0, 0, 1), (1, 0, 1)],
[(1, 0, 1), (1, 1, 1)],
[(0, 1, 1), (0, 1, 1)]]
Note that C.rational_points()
is a "slow" Python implementation, but it works fine when the degree of F
is not too big.
3 | No.3 Revision |
You don't have to declare any symbols to solve the problem that you want to solve. (See the XY problem.)
Instead, proceed as follows:
F.<t>=GF(2^3)
R.<X,Y> = PolynomialRing(F)
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
C = Curve(f)
sols = C.rational_points()
If you want them as pairs of vectors:
sage: [map(vector, sol) for sol in sols]
[[(0, 0, 0), (0, 0, 0)],
[(1, 0, 0), (1, 1, 0)],
[(0, 1, 0), (0, 0, 1)],
[(1, 1, 0), (0, 1, 0)],
[(0, 0, 1), (1, 0, 1)],
[(1, 0, 1), (1, 1, 1)],
[(0, 1, 1), (0, 1, 1)]]
Note that C.rational_points()
is a "slow" Python implementation, but it works fine when the degree of F
is not too big.
To answer your question about symbols, you can do the following:
R.<a1,b1,c1,a2,b2,c2> = BooleanPolynomialRing()
S.<s> = PolynomialRing(R)
T.<t> = S.quotient(conway_polynomial(2,3).change_variable_name('s'))
X = a1 + b1*t + c1*t^2
Y = a2 + b2*t + c2*t^2
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
Then you have:
sage: R.ideal(list(f)).variety()
[{c2: 0, b2: 0, a2: 0, b1: 0, c1: 0, a1: 0},
{c2: 0, b2: 1, a2: 0, b1: 1, c1: 0, a1: 1},
{c2: 0, b2: 1, a2: 1, b1: 0, c1: 0, a1: 1},
{c2: 1, b2: 0, a2: 0, b1: 1, c1: 0, a1: 0},
{c2: 1, b2: 0, a2: 1, b1: 0, c1: 1, a1: 0},
{c2: 1, b2: 1, a2: 0, b1: 1, c1: 1, a1: 0},
{c2: 1, b2: 1, a2: 1, b1: 0, c1: 1, a1: 1}]
4 | No.4 Revision |
You don't have to declare any symbols to solve the problem that you want to solve. (See the XY problem.)
Instead, proceed as follows:
F.<t>=GF(2^3)
R.<X,Y> = PolynomialRing(F)
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
C = Curve(f)
sols = C.rational_points()
If you want them as pairs of vectors:
sage: [map(vector, sol) for sol in sols]
[[(0, 0, 0), (0, 0, 0)],
[(1, 0, 0), (1, 1, 0)],
[(0, 1, 0), (0, 0, 1)],
[(1, 1, 0), (0, 1, 0)],
[(0, 0, 1), (1, 0, 1)],
[(1, 0, 1), (1, 1, 1)],
[(0, 1, 1), (0, 1, 1)]]
Note that C.rational_points()
is a "slow" Python implementation, but it works fine when the degree of F
is not too big.
To answer your question about symbols, you can do the following:
R.<a1,b1,c1,a2,b2,c2> = BooleanPolynomialRing()
S.<s> = PolynomialRing(R)
T.<t> = S.quotient(conway_polynomial(2,3).change_variable_name('s'))
from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic
T = PolynomialQuotientRing_generic(S, S(conway_polynomial(2,3).change_variable_name('s')), 't')
t = T.gen()
X = a1 + b1*t + c1*t^2
Y = a2 + b2*t + c2*t^2
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
Then you have:
sage: R.ideal(list(f)).variety()
[{c2: 0, b2: 0, a2: 0, b1: 0, c1: 0, a1: 0},
{c2: 0, b2: 1, a2: 0, b1: 1, c1: 0, a1: 1},
{c2: 0, b2: 1, a2: 1, b1: 0, c1: 0, a1: 1},
{c2: 1, b2: 0, a2: 0, b1: 1, c1: 0, a1: 0},
{c2: 1, b2: 0, a2: 1, b1: 0, c1: 1, a1: 0},
{c2: 1, b2: 1, a2: 0, b1: 1, c1: 1, a1: 0},
{c2: 1, b2: 1, a2: 1, b1: 0, c1: 1, a1: 1}]
Morally I think it should be possible (and it was in 8.1) to construct T
by
T.<t> = S.quotient(conway_polynomial(2,3).change_variable_name('s'))
but it seems this is no longer the case. Probably it is a bug; I will investigate.
5 | No.5 Revision |
You don't have to declare any symbols to solve the problem that you want to solve. (See the XY problem.)
Instead, proceed as follows:
F.<t>=GF(2^3)
R.<X,Y> = PolynomialRing(F)
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
C = Curve(f)
sols = C.rational_points()
If you want them as pairs of vectors:
sage: [map(vector, sol) for sol in sols]
[[(0, 0, 0), (0, 0, 0)],
[(1, 0, 0), (1, 1, 0)],
[(0, 1, 0), (0, 0, 1)],
[(1, 1, 0), (0, 1, 0)],
[(0, 0, 1), (1, 0, 1)],
[(1, 0, 1), (1, 1, 1)],
[(0, 1, 1), (0, 1, 1)]]
Note that C.rational_points()
is a "slow" Python implementation, but it works fine when the degree of F
is not too big.
To answer your question about symbols, you can do the following:
R.<a1,b1,c1,a2,b2,c2> = BooleanPolynomialRing()
S.<s> = PolynomialRing(R)
from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic
T = PolynomialQuotientRing_generic(S, S(conway_polynomial(2,3).change_variable_name('s')), 't')
t = T.gen()
X = a1 + b1*t + c1*t^2
Y = a2 + b2*t + c2*t^2
f = X^2*Y^2 - (X^2+(1+t)*Y^2)
Then you have:
sage: R.ideal(list(f)).variety()
[{c2: 0, b2: 0, a2: 0, b1: 0, c1: 0, a1: 0},
{c2: 0, b2: 1, a2: 0, b1: 1, c1: 0, a1: 1},
{c2: 0, b2: 1, a2: 1, b1: 0, c1: 0, a1: 1},
{c2: 1, b2: 0, a2: 0, b1: 1, c1: 0, a1: 0},
{c2: 1, b2: 0, a2: 1, b1: 0, c1: 1, a1: 0},
{c2: 1, b2: 1, a2: 0, b1: 1, c1: 1, a1: 0},
{c2: 1, b2: 1, a2: 1, b1: 0, c1: 1, a1: 1}]
Morally I think it should be possible (and it was in 8.1) to construct T
by
T.<t> = S.quotient(conway_polynomial(2,3).change_variable_name('s'))
but it seems this is no longer the case. Probably it This is a bug; I will investigate.