Ask Your Question

Revision history [back]

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.

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.

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}]

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.

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.

bug, which was reported as trac ticket #26929.