I think that you missed some comas in your definition of set
. Indeed, when you write, (2)
you do not define the tuple with a single entry whose value is 2
but you define the integer 2
:
sage: (2)
2
If you want to defint the tuple with a single entry whose valye is 2, you have to add a coma:
sage: (2,)
(2,)
So to be consistent with the tuple (7,8)
i guess you wanted to write:
sage: set = (2,), (4,), (5,), (7,8)
Anyway, to define the polynomial you are expecting, you first have to define a polynomial ring with the wariables you want:
sage: R = PolynomialRing(ZZ,9,"x")
sage: R
Multivariate Polynomial Ring in x0, x1, x2, x3, x4, x5, x6, x7, x8 over Integer Ring
You can get the i^th variable as follows:
sage: R.gens()[4]
x4
Then, from the tuple of tuples set
, you can easily make the sum of products as follows:
sage: polynomial = sum(prod(R.gens()[j] for j in i) for i in set)
sage: polynomial
x7*x8 + x2 + x4 + x5
For your second question (about evaluating), it works as you expect, with the following warning: in Sage as in Python, the indices start at 0, not at 1, so you should better do the following:
sage: vector = (0, 1, 0, 1, 0, 1, 0, 1, 0) # see the 0 at the beginning, for the variable x_0
sage: polynomial(vector)
1
sage: vector = (0, 1, 3, 1, 0, 1, 0, 1, 0)
sage: polynomial(vector)
4