1 | initial version |

I think the following is self-explanatory:

```
sage: Z_4 = IntegerModRing(4)
sage: Z_4
Ring of integers modulo 4
sage: P.<x> = PolynomialRing(Z_4)
sage: P
Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: I = P.ideal(x^4+1, 2+2*x)
sage: I
Ideal (x^4 + 1, 2*x + 2) of Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: R = P.quotient(I)
sage: R
Quotient of Univariate Polynomial Ring in x over Ring of integers modulo 4 by the ideal (x^4 + 1, 2*x + 2)
```

2 | No.2 Revision |

I think the following is self-explanatory:

```
sage: Z_4 = IntegerModRing(4)
sage: Z_4
Ring of integers modulo 4
sage: P.<x> = PolynomialRing(Z_4)
sage: P
Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: I = P.ideal(x^4+1, 2+2*x)
sage: I
Ideal (x^4 + 1, 2*x + 2) of Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: R = P.quotient(I)
sage: R
Quotient of Univariate Polynomial Ring in x over Ring of integers modulo 4 by the ideal (x^4 + 1, 2*x + 2)
```

The problem afterwards is that Sage is does not know much things about `R`

, for example, even if `R`

is finite, you can not iterate over it:

```
sage: R.list()
NotImplementedError: object does not support iteration
```

It does not even knows that `R`

is finite:

```
sage: R.is_finite()
NotImplementedError:
```

3 | No.3 Revision |

I think the following is self-explanatory:

```
sage: Z_4 = IntegerModRing(4)
sage: Z_4
Ring of integers modulo 4
sage: P.<x> = PolynomialRing(Z_4)
sage: P
Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: I = P.ideal(x^4+1, 2+2*x)
sage: I
Ideal (x^4 + 1, 2*x + 2) of Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: R = P.quotient(I)
sage: R
Quotient of Univariate Polynomial Ring in x over Ring of integers modulo 4 by the ideal (x^4 + 1, 2*x + 2)
```

The problem afterwards is that Sage is does not know much things about `R`

, for example, even if `R`

is finite, you can not iterate over it:

```
sage: R.list()
NotImplementedError: object does not support iteration
```

It does not even knows that `R`

is finite:

```
sage: R.is_finite()
NotImplementedError:
```

4 | No.4 Revision |

I think the following is self-explanatory:

```
sage: Z_4 = IntegerModRing(4)
sage: Z_4
Ring of integers modulo 4
sage: P.<x> = PolynomialRing(Z_4)
sage: P
Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: I = P.ideal(x^4+1, 2+2*x)
sage: I
Ideal (x^4 + 1, 2*x + 2) of Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: R = P.quotient(I)
sage: R
Quotient of Univariate Polynomial Ring in x over Ring of integers modulo 4 by the ideal (x^4 + 1, 2*x + 2)
```

The problem afterwards is that Sage is does not know much things about `R`

, for example, even if `R`

is finite, you can not iterate over it:

```
sage: R.list()
NotImplementedError: object does not support iteration
```

It does not even knows that `R`

is finite:

```
sage: R.is_finite()
NotImplementedError:
```

Nor whether some elements are units:

```
sage: a = R.an_element()
sage: a
xbar
sage: a.is_unit()
NotImplementedError:
```

5 | No.5 Revision |

I think the following is self-explanatory:

```
sage: Z_4 = IntegerModRing(4)
sage: Z_4
Ring of integers modulo 4
sage: P.<x> = PolynomialRing(Z_4)
sage: P
Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: I = P.ideal(x^4+1, 2+2*x)
sage: I
Ideal (x^4 + 1, 2*x + 2) of Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: R = P.quotient(I)
sage: R
Quotient of Univariate Polynomial Ring in x over Ring of integers modulo 4 by the ideal (x^4 + 1, 2*x + 2)
```

~~things ~~about `R`

, for example, even if `R`

is finite, you can not iterate over it:

```
sage: R.list()
NotImplementedError: object does not support iteration
```

It does not even knows that `R`

is finite:

```
sage: R.is_finite()
NotImplementedError:
```

Nor whether some elements are units:

```
sage: a = R.an_element()
sage: a
xbar
sage: a.is_unit()
NotImplementedError:
```

But you are welcome to join and help fill to the gap !

6 | No.6 Revision |

I think the following is self-explanatory:

```
sage: Z_4 = IntegerModRing(4)
sage: Z_4
Ring of integers modulo 4
sage: P.<x> = PolynomialRing(Z_4)
sage: P
Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: I = P.ideal(x^4+1, 2+2*x)
sage: I
Ideal (x^4 + 1, 2*x + 2) of Univariate Polynomial Ring in x over Ring of integers modulo 4
sage: R = P.quotient(I)
sage: R
Quotient of Univariate Polynomial Ring in x over Ring of integers modulo 4 by the ideal (x^4 + 1, 2*x + 2)
```

The problem afterwards is that Sage is does not know much about `R`

, for example, even if `R`

is finite, you can not iterate over it:

```
sage: R.list()
NotImplementedError: object does not support iteration
```

It does not even knows that `R`

is finite:

```
sage: R.is_finite()
NotImplementedError:
```

Nor whether some elements are units:

```
sage: a = R.an_element()
sage: a
xbar
sage: a.is_unit()
NotImplementedError:
```

But you are welcome to join and help fill to the gap !

**EDIT** What makes me fear however is the following:

```
sage: 2*xbar+2 == 0
False
sage: (2*xbar+2 ).is_zero()
NotImplementedError:
```

We should definitely prevent Sage answering random things when it does not know.