# Ticket #2220(closed defect: fixed)

Opened 5 years ago

## irreducibility testing in relative extensions seems to be messed up

Reported by: Owned by: jason davidloeffler major sage-4.8 number fields ncalexan, ccitro, mjo N/A Colton Pauderis Michael Orlitzky sage-4.8.alpha5

### Description

```> Is the following output for b.gens() correct?

> sage: NumberField([x,x^2-3],'a')
> Number Field in a0 with defining polynomial x over its base field
> sage: b=NumberField([x,x^2-3],'a')
> sage: b.gens()
> (0, 0)

> To contrast:

> sage: c=NumberField([x^2-3, x^2-2],'a')
> sage: c.gens()
> (a0, a1)

> Also, this blows up:

> sage: c=NumberField([x^2-3, x],'a')

The problem here is that x is triggering a an error in the
irreducibility test, which is a little bizarre since of course x is
irreducible.

So the real issue is: why is x allowed to determine an absolute number
field (base Q) but not a relative one?  My guess is that this is a
side-effect of the differing code being used to test irreducibility in
the two cases,

Personally, I think that trivial extensions should be allowed and
treated just as non-trivial ones.  I have recently had to define
extensions of the ring ZZ, and find this awkward:

sage: R=ZZ.extension(x^2+5,'a')
sage: R.gens()
[1, a]
sage: S=ZZ.extension(x+5,'b')
sage: S.gens()
[1]

In the latter case I need S to remember the polynomial used to
generaite it and would expect its gens() to include (in this case) -5.

On the same topic, R and S above have no defining_polynomial() method.
I'll try to fix that if it looks easy.
```

## Change History

### comment:1 Changed 5 years ago by cremona

As was pointed out (by was I think), the gens() for an extension of ZZ are ZZ-module generators, n in number for an extension of degree n. For example:

```sage: R.<a>=ZZ.extension(x^3-2)
sage: R
Order in Number Field in a with defining polynomial x^3 - 2
sage: R.gens()
[1, a, a^2]
```

This is quite clear in the docstring "returns module generators of this order" and so requires no action.

For examples such as this, I said that the following would be convenient to access more directly:

```sage: R.fraction_field().gen()
a
sage: R.fraction_field().defining_polynomial()
x^3 - 2
```

However, objects of the type or R here <class 'sage.rings.number_field.order.AbsoluteOrder?'> might be created in more complicated ways so that they do not have one natural defining polynomial or (ring) generator. In fact one immediately finds this:

```sage: R.ring_generators()
[a]
```

and the docstring for ring_generators() gives an example for which more than one generator is needed (remember that not every order is of the form Z[a] for some a), so it makes no sense at all, in general, to define methods gen() or ring_gen() or defining_polynomial() for general orders.

All this leaves from the original post is to work out why the specific polynomial x is not handled consistently. The rest is perfect as it is. Well done to the authors (was and robertb) for doing a good job, well documented!

### comment:2 Changed 4 years ago by mhansen

Note that this part now works:

```sage: c=NumberField([x^2-3, x],'a')
sage:
sage: c.gens()
(a0, 0)
```

### comment:3 Changed 4 years ago by davidloeffler

• Owner changed from was to davidloeffler
• Component changed from number theory to number fields

### comment:4 Changed 2 years ago by fwclarke

• Report Upstream set to N/A

The other part works too now:

```sage: b = NumberField([x, x^2 - 3], 'a')
sage: b.gens()
(0, a1)
```

### Changed 17 months ago by mjo

Add doctest for a trivial extension

### comment:5 Changed 17 months ago by mjo

• Status changed from new to needs_review
• Authors set to Michael Orlitzky

I'm pretty sure this is fixed, so I've added a doctest.

### comment:6 Changed 17 months ago by cpauderis

• Status changed from needs_review to positive_review
• Reviewers set to Colton Pauderis

This appears to work exactly as advertised. Positive review.

### comment:7 Changed 17 months ago by jdemeyer

• Status changed from positive_review to closed
• Resolution set to fixed
• Merged in set to sage-4.8.alpha5
Note: See TracTickets for help on using tickets.