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

asked 2020-07-28 20:53:29 +0200

Emmanuel Charpentier gravatar image

(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) ?

edit retag flag offensive close merge delete

Comments

1

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()

rburing gravatar imagerburing ( 2020-07-28 22:22:20 +0200 )edit