# Code+example for section1. Copy/paste, or read, this into Maple. FindExceptionalPoints := proc(F, x, A::list) local P,i,n,V; # P[1],P[2],P[3] = points above 0, 1, infinity: P := [numer(F), numer(evala(1-F)), denom(F)]; # Compute the degree of F: n := max(degree(P[1],x), degree(P[3],x)); V := [seq(FactorMultiplicityNotDiv(P[i], x, n, A[i]), i=1..3)]; [seq(sort(collect(i,x),x), i=V)] end: FivePointPolynomial := proc(F, x, A) local i; mul(`if`(has(i,x),i,1), i = FindExceptionalPoints(args) ); end: # Give factors (include infinity if deg(f)0), i[1], NULL), i=factors(f)[2]), `if`( d>0 and (A=infinity or irem( d ,A)<>0), infinity, NULL) end: lprint("Example:"); f := (1/4)*(8*x-3)^3*(3*x^2-26*x+3)/((x^2-10*x+15)^3*x^4); A := [infinity, 2, 3]; FindExceptionalPoints(f, x, A); FivePointPolynomial(f, x, A);