Yasuaki Honda at gmail dot com
Hilbert Class Polynomial $P_D(x)$of determinant $D$ is defined as follows: $$ P_{D}(x)=\prod_{i=1}^{h_{D}}{\left(x-j\left(a_{i}\right)\right)} $$ where $h_D$ is the class number of the determinant $D$.
The fact that $P_D(x) \in Z[x]$, meaning that all the coefficients of $P_D(x)$ are integers. This fact can be used to determine the exact value of $j(x)$ for $x$ a quadratic irrational.
Note that all the tools to compute the Hilbert Class Polynomial is already defined:
install_github("YasuakiHonda","modular_j","main")$
asdf_load("modular_j")$
; processing (IN-PACKAGE :MAXIMA) ; processing (LET NIL ...) ; processing (DEFPROP |$InFD| ...) ; processing (ADD2LNC (QUOTE |$InFD|) ...) ; processing (DEFMTRFUN (|$InFD| $ANY ...) ...) ; processing (DEFPROP |$Ta| ...) ; processing (ADD2LNC (QUOTE |$Ta|) ...) ; processing (DEFMTRFUN (|$Ta| $ANY ...) ...) ; processing (DEFPROP |$FindInFD| ...) ; processing (ADD2LNC (QUOTE |$FindInFD|) ...) ; processing (DEFMTRFUN (|$FindInFD| $ANY ...) ...) ; processing (LET NIL ...) ; processing (DEFPROP $FLOAT_MODULAR_J ...) ; processing (ADD2LNC (QUOTE $FLOAT_MODULAR_J) ...) ; processing (DEFMTRFUN ($FLOAT_MODULAR_J $ANY ...) ...) ; processing (DEFPROP $BFLOAT_MODULAR_J ...) ; processing (ADD2LNC (QUOTE $BFLOAT_MODULAR_J) ...) ; processing (DEFMTRFUN ($BFLOAT_MODULAR_J $ANY ...) ...) ; processing (DEFPROP |$Checkabc| ...) ; processing (ADD2LNC (QUOTE |$Checkabc|) ...) ; processing (DEFMTRFUN (|$Checkabc| $ANY ...) ...) ; processing (DEFPROP |$FindReducedQuadIrrD| ...) ; processing (ADD2LNC (QUOTE |$FindReducedQuadIrrD|) ...) ; processing (DEFMTRFUN (|$FindReducedQuadIrrD| $ANY ...) ...) ; processing (DEFPROP |$FindClassNumberD| ...) ; processing (ADD2LNC (QUOTE |$FindClassNumberD|) ...) ; processing (DEFMTRFUN (|$FindClassNumberD| $FIXNUM ...) ...) ; processing (DEFPROP |$FindClassPolyD| ...) ; processing (ADD2LNC (QUOTE |$FindClassPolyD|) ...) ; processing (DEFMTRFUN (|$FindClassPolyD| $ANY ...) ...) ; processing (DEFPROP $IRR_NUMBER ...) ; processing (ADD2LNC (QUOTE $IRR_NUMBER) ...) ; processing (DEFMTRFUN ($IRR_NUMBER $ANY ...) ...) ; processing (DEFPROP |$FindDetIrr| ...) ; processing (ADD2LNC (QUOTE |$FindDetIrr|) ...) ; processing (DEFMTRFUN (|$FindDetIrr| $ANY ...) ...) ; processing (DEFPROP $EXACT_MODULAR_J ...) ; processing (ADD2LNC (QUOTE $EXACT_MODULAR_J) ...) ; processing (DEFMTRFUN ($EXACT_MODULAR_J $ANY ...) ...)[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$InFD-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$InFD| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Ta-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Ta| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindInFD-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindInFD| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$FLOAT_MODULAR_J-IMPL in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$FLOAT_MODULAR_J in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$BFLOAT_MODULAR_J-IMPL in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$BFLOAT_MODULAR_J in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Checkabc-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Checkabc| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindReducedQuadIrrD-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindReducedQuadIrrD| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassNumberD-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassNumberD| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassPolyD-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassPolyD| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$IRR_NUMBER-IMPL in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$IRR_NUMBER in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindDetIrr-IMPL| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindDetIrr| in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$EXACT_MODULAR_J-IMPL in DEFUN [SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$EXACT_MODULAR_J in DEFUN
P[D](x)=product(x-j(a[i]),i,1,h[D]);
a:FindReducedQuadIrrD(-15);
FindClassNumberD(-15);
product(x-float_modular_j(a[i]),i,1,2);
aproxpoly:expand(%);
(cround(z):=round(realpart(z))+round(imagpart(z)), cround(coeff(aproxpoly,x,1)));
cround(coeff(aproxpoly,x,0));
x^2+%th(2)*x+%th(1);
FindClassPolyD(x,-15);