# Difference(s) between `fraction(Integers(p))` and`fraction(GF(p))` (with `p` prime) ?

(Mis-)inspired by this question . Let `F`

b some (not uninteresting) rational fraction:

```
sage: F=tan(2*arctan(x)+3*arctan(y)).trig_expand().trig_expand() ; F
((y^3 - 3*y)/(3*y^2 - 1) - 2*x/(x^2 - 1))/(2*(y^3 - 3*y)*x/((x^2 - 1)*(3*y^2 - 1)) + 1)
```

Question : when working in the (fraction field of) congruence rings, when is this fraction a polynomial ? This question has a trivial answer : when its denominator has a multiplicative inverse.

However :

```
sage: F.fraction(Integers(2))
(x^2*y^3 + x^2*y + y^3 + y)/(x^2*y^2 + x^2 + y^2 + 1)
```

Here, `Sage`

does *not* simplify its results, notwithstanding the fact that it "knows" that such simplifications are possible) :

```
sage: F.fraction(GF(2)).parent().is_integral_domain()
True
```

In consequence :

```
sage: F.fraction(Integers(2)).denominator().is_unit()
False
```

However, if we work with the *finite field* of size 2 (which *is* the same ring...) :

```
sage: F.fraction(GF(2))
y
sage: F.fraction(GF(2)).denominator()
1
```

The documentation is not especially enlightening. I still do not see why there should be any difference between `GF(2)`

and `Integers(2)`

Could some kind soul point me to the direction and magnitude of my (ignorance|stupidity) ?

There seems to be a bug in factoring over

`Integers(n)`

, e.g. the following crashes my SageMath 9.1:`R.<x,y> = Integers(2)[]; (x^2*y^3 + x^2*y + y^3 + y).factor()`