read `W:\\mPOL.txt`: HelpC:=proc(): print(`Celine1(F,n,k,N,K,degn,degN,degK)`): print(`ApplyOper(F,n,k,P,N,K,n1,k1)`): end: #Celine1(F,n,k,N,K,degn,degN,degK): Given an expression #in n and k, variables (symbols) n and k, symbols #N and K denoting the fundamental shift operators #in n and k resp. (NF(n,k):=F(n+1,k), KF(n,k):=F(n,k+1) #outputs a conjectured linear recurrence operator #of the form P(N,K,n) )of degrees degn,degN,degK #resp.) in each of #n,N,K #(free of k) that annihilates #F(n,k) Celine1:=proc(F,n,k,N,K,degn,degN,degK) local P,a,var,k1,n1,eq,c, var1,eq1,aek,i: P:=GenPol([n,N,K],[degn,degN,degK],a,0): var:=P[2]: P:=P[1]: eq:={}: c:=0: for n1 from 1 do for k1 from 0 to n1 do eq1:=ApplyOper(F,n,k,P,N,K,n1,k1): if eq1<>0 then c:=c+1: eq:=eq union {eq1}: fi: if nops(eq)-nops(var)>8 then var1:=solve(eq,var): aek:={}: for i from 1 to nops(var1) do if op(1,var1[i])=op(2,var1[i]) then aek:=aek union {op(1,var1[i])}: fi: od: if nops(aek)>1 then print(`Too much slack, reduce one of the degrees`): fi: P:=subs(var1,P): if P=0 then RETURN(FAIL): else P:=subs({aek[1]=1,seq(aek[i]=0,i=2..nops(aek))},P): RETURN(P): fi: fi: od: od: end: #ApplyOper(F,n,k,P,N,K,n1,k1): P(n,N,K)F(n1,k1) ApplyOper:=proc(F,n,k,P,N,K,n1,k1) local s,i,j: s:=0: for i from ldegree(P,N) to degree(P,N) do for j from ldegree(P,K) to degree(P,K) do s:=s+ subs(n=n1,coeff(coeff(P,N,i),K,j))*eval(subs({n=n1+i,k=k1+j},F)): od: od: s: end: