# n = 5 in the following condition: # (i) When f ramifies of order 2 above any one of {0,1,infty} with exponent difference <> odd integer/2. Deg2_5:= proc(L::set,x,K) # L is the singularity structure of input differential operator, # i.e. a set of lists [pi,ei] where pi is an irreducible poly in x # and ei its corresponding exponent difference. # K is the base field. local L1,a2,i,i1,j,j1,k,k1,P,Ps,Es,N,C1,C2,e0,e1,ei,Base_Field,f,f1,F,Field_F,cand,c,c_val; if nargs = 2 then Base_Field:= indets([args], {nonreal, RootOf, radical}); return procname(args, Base_Field); else Base_Field:= K; fi; # we are looking for the rational f which produces 5 non # removable singularities from 0,1,infinity. # So, we must have at least 3 irreducible polys and the polys may have at most degree 2. # at least one of them must have degree 1: L1:= L; for i in L1 do if points(i[1],x) <> 1 and points(i[1],x) <> 2 then return "Wrong input"; fi; od; if nops(L1) < 3 or add(points(i[1],x),i= L1) <> 5 then return "Not in Case Deg2_5"; fi; Ps:=[seq(i[1],i=L1)]; Es:= [seq(i[2],i=L1)]; N:= {seq(i,i=1..nops(L1))}; # Compute f now: let's put the ramified point at the root of f: # f:= k1*(x-a0)^2/(x^2+b1*x+b0); 1-f:= k2*(x^2+c1*x+c0)/(x^2+b1*x+b0); # where other polynomials have non repeated roots. cand:= {}; for i in N do if points(Ps[i],x) <> 1 then next; fi; if type(Es[i],integer) then e0:= normal(Es[i]/2); else e0:= {normal(Es[i]/2), normal((Es[i]+1)/2)}; fi; C1:= N minus {i}; f:= c*(Ps[i])^2; for j in C1 do ei:= Es[j]; C2:= C1 minus {j}; a2:= points(Ps[j],x); f1:= f/Ps[j]; if a2 = 1 then for j1 in C2 while a2 <> 2 do if points(Ps[j1],x) = 1 and (type(evala(Es[j1]-ei),integer) or type(evala(Es[j1]+ei),integer)) then a2:= a2+ points(Ps[j1],x); C2:= C2 minus {j1}; f1:= f1/Ps[j1]; fi; od; if a2 <> 2 then next; fi; fi; e1:= Es[C2[1]]; if nops(C2) = 2 then if not type(evala(Es[C2[2]]-e1),integer) and not type(evala(Es[C2[2]]+e1),integer) then next; fi; fi; P:= mul(Ps[k], k = C2); c_val:= {solve({coeffs(rem(numer(1-f1),P,x),x)})}; if c_val <> {} and c_val <> {{}} then for k1 in c_val do F:= eval(f1,c=rhs(op(k1))); if max(degree(numer(F),x),degree(denom(F),x)) = 2 and type(rem(P, evala(Factor(numer(1-F))),x),numeric) then Field_F:= indets(F, {RootOf, radical}) union `if`(has(F,I),{I},{}); if nops(Field_F minus Base_Field) <> 0 then next; fi; cand:= cand union {seq([factor(F),[k2,e1,ei]], k2 = e0)}; fi; od; fi; od; od; cand; end: points:= proc(f,x) if f = 1 then 1 else degree(f,x); fi; end: