Opened 4 years ago

# .extension with other variables than x

Reported by: Owned by: dkrenn major sage-7.1 algebra N/A

### Description

```T.<t> = ZZ.extension(x^2-x+2)
```

works, where

```sage: x.parent()
Symbolic Ring
```

But

```sage: X = SR('x')
sage: T.<t> = ZZ.extension(X^2-X+2)
```

does not work:

```ValueError: each generator must be integral
```

It should work with any symbolic variable; error message does not give a hint what is wrong.

### comment:1 Changed 4 years ago by nbruin

OK, the problem is this code in EquationOrder?:

```    R = ZZ['x']
...
try:
R(f)
except TypeError:
raise ValueError('each generator must be integral')
```

So indeed `x` is singled out. Naturally, the constructor should work with any univariate polynomial over ZZ and it does because of the conversion rules:

```sage: ZZ['x'](ZZ['c'].0)
x
sage: ZZ['x'](QQ['c'].0) #univariate converts generator to generator (good choice?)
x
sage: ZZ['x'](QQ['x,v'].0) #name matches
x
```

but already for univariate polynomials that are not explicitly defined as such things go wrong:

```sage: ZZ['x'](QQ['u,v'].0) #no conversion at all
TypeError:
```

(yes, an empty error message)

```sage: ZZ['x'](QQ['u,x'].0) #u doesn't convert into ZZ['x']
TypeError: cannot coerce nonconstant polynomial
```

The behaviour with "SR" is consistent with this. However, `x` shouldn't really have a special role here. How far do we want to go with trying to read `f` as a univariate polynomial over `ZZ`? Do we want to special case all kinds of rings (multivariate, SR, etc.) to specially see if, even if there are more generators on the ring, really only one is occurring in `f`, so we can read it as a univariate polynomial?

The "see if we can convert into `ZZ['x']`" is really a bit of a poor substitute for what we would really want to do. Input should really be "a univariate polynomial over ZZ", and as such input from SR would be not valid. But that would be impractical.

Note: See TracTickets for help on using tickets.