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
```