We begin by starting up the AbstractAlgebra.jl module.
using AbstractAlgebra
R, x = PolynomialRing(ZZ, "x")
Create a random polynomial of degree 5 with integer coefficients in [-10, 10]
p = rand(R, 5:5, -10:10)
q = rand(R, 5:5, -10:10)
r = resultant(p, q)
R = ResidueField(ZZ, 65537) # R = Z/65537Z
S, (x, y) = PolynomialRing(R, ["x", "y"])
f = 1 + x + y
g = f^5;
h = g*(g + 1);
length(h)
R, x = PolynomialRing(QQ, "x")
K = ResidueField(R, x^3 + 3x + 1) # Number field
S = MatrixSpace(K, 3, 3)
M = rand(S, 2:2, -10:10)
U, t = PolynomialRing(K, "t")
p = minpoly(U, M) # compute minimum polynomial of M
D = det(M)
We will compute with a polynomial ring over a residue ring over a polynomial ring over a finite field
R = ResidueField(ZZ, 23)
S, y = PolynomialRing(R, "y")
T = ResidueRing(S, y^3 + 3y + 1)
U, z = PolynomialRing(T, "z")
p = rand(U, 2:2, 5:5, -10:10); q = rand(U, 2:2, 5:5, -10:10);
s = resultant(p, q)
We verify an identity on Weber functions
Work to an internal precision of 1000 terms
R, q = PuiseuxSeriesRing(ZZ, 1000 , "q" )
Define the Dedekind eta function
eta_qexp(q) = prod(1 - q^n for n = 1:50)*q^(1//24)
Define one of the Weber modular functions
f1(q) = divexact(eta_qexp(q^(1//2)), eta_qexp(q))
Define two Puiseux series in terms of the Weber function
A = divexact(f1(q)^2, f1(q^20)^2)
B = divexact(f1(q^2)^2, f1(q^10)^2)
Verify an identity between A and B to the maximum available precision
A^8*(B^18 + 2B^15 + 255B^12 - 580B^9 + 255B^6 - 30B^3 + 1 - 256A^8*B^11 + 256A^4*B^7) + 16A^4*B^11 - B^19