###################################################################### ##SALIKHOV.txt: Save this file as SALIKHOV.txt # ## To use it, stay in the # ##same directory, get into Maple (by typing: maple ) # ##and then type: read SALIKHOV.txt # ##Then follow the instructions given there # ## # ##Written by Doron Zeilberger, Rutgers University , # #DoronZeil at gmail dot com # ###################################################################### #Created: Nov. 2019 print(`Created: Nov. 2019`): print(` This is SALIKHOV.txt `): print(`It is one of the Maple package that accompanies the article `): print(` Automatic Discovery of Irrationailty Proofs and Independence Measures`): print(`by Doron Zeilberger and Wadim Zudiln`): print(`and also available from Zeilberger's website`): print(``): print(`Please report bugs to DoronZeil at gmail dot com `): print(``): print(`The most current version of this package and paper`): print(` are available from`): print(`http://sites.math.rutgers.edu/~zeilberg/ .`): print(`---------------------------------------`): print(`For a list of the procedures for general families type ezraG();, for help with`): print(`a specific procedure, type ezra(procedure_name); .`): print(``): print(`---------------------------------------`): print(`For a list of the Supporting procedures type ezra1();, for help with`): print(`a specific procedure, type ezra(procedure_name); .`): print(``): print(`---------------------------------------`): print(`---------------------------------------`): print(`For a list of the MAIN procedures type ezra();, for help with`): print(`a specific procedure, type ezra(procedure_name); .`): print(``): print(`---------------------------------------`): with(combinat): ezraG:=proc() if args=NULL then print(` The procedures for the general cases are: `): print(` NuEven, NuOdd , PaperG `): print(``): else ezra(args): fi: end: ezra1:=proc() if args=NULL then print(` The supporting procedures are: Atoms1, Atoms2, dn, ExtractLogs, GrC, MakeNice, OpeNice, Ra1, RaE1, RaE2, `): print(` Sabc1, Sabc1f, Sabc2, Sabc2, SalPairs, SalPairsPC, SInt `): print(``): else ezra(args): fi: end: ezra:=proc() if args=NULL then print(`The main procedures are: deltE, deltT1, deltT2, Info1, Info2, INFOab, GuessK1, GuessK2, Ope, Paper, Sabc1f, Sabc2f, Shors, Zug1, Zug2 `): print(` `): elif nargs=1 and args[1]=Atoms1 then print(`Atoms1(a,b,c): The atoms of Sabc1(a,b,c,n) for all n. Try:`): print(`Atoms1(5,7,35);`): elif nargs=1 and args[1]=Atoms2 then print(`Atoms2(a,b,c): The atoms of Sabc2(a,b,c,n) for all n. Try:`): print(`Atoms2(5,7,35);`): elif nargs=1 and args[1]=deltE then print(`deltE(f,X): Given f a linear combination of 1, X[1],.., X[nops(X)] and 1`): print(`with integer coefficients, finds`): print(` the empirical delta such that abs(f)=1/max(coeff(f,1),coeff(f,X[1]),coeff(f,X[2]))^delta. Try: `): print(` deltE(Sabc1f(5,7,35,200),[log(2),log(3)]); `): print(`deltE(Sabc2f(5,7,35,200),[log(2),log(3)]);`): elif nargs=1 and args[1]=deltT1 then print(`deltT1(a,b,c): The theoretical delta for Salikhov's Diophantine approximations inspired by Sabc1(a,b,c,n). Try:`): print(`deltT1(5,7,35);`): elif nargs=1 and args[1]=deltT2 then print(`deltT2(a,b,c): The theoretical delta for Salikhov's Diophantine approximations inspired by Sabc2(a,b,c,n). Try:`): print(`deltT2(5,7,35);`): elif nargs=1 and args[1]=dn then print(`dn(n): lcm(1..n). Try: `): print(`dn(100);`): elif nargs=1 and args[1]=ExtractLogs then print(`ExtractLogs(L): Given an expression that is a linear combination of log(k)'s and 1, outputs the set of k's that show up.`): print(`Try: `): print(`ExtractLogs(5*log(3)-11*log(5));`): elif nargs=1 and args[1]=Info1 then print(`Info1(a,b,c): inputs positive integers a,b,c, and outputs a list consisting of`): print(`(i) the set of integers such that Sabc1(a,b,c,n) are linear combinations (with rational number coefficients) of their logs`): print(`(ii) The conjectured integer K such that K^n*dn(2*n)*Sabc1(a,b,c,n) have integer coefficients`): print(`(iii) The theoretical delta such that`): print(`T(a,b,c,n):=Sabc1(a,b,c,n)*K^n*dn(2*n), has the property, that for some universal constant CONST`): print(`|T(a,b,c,n)|<=CONST/(max(abs(coeff.s))^delta .`): print(`(iv): The smallest empirical delta between 100 and 150. Try:`): print(`Info1(5,7,35); `): elif nargs=1 and args[1]=Info2 then print(`Info2(a,b,c): inputs positive integers a,b,c, and outputs a list consisting of`): print(`(i) the set of integers such that Sabc1(a,b,c,n) are linear combinations (with rational number coefficients) of their logs`): print(`(ii) The conjectured integer K such that K^n*dn(2*n)*Sabc2(a,b,c,n) have integer coefficients`): print(`(iii) The theoretical delta such that`): print(`T(a,b,c,n):=Sabc2(a,b,c,n)*K^n*dn(2*n), has the property, that for some universal constant CONST`): print(`|T(a,b,c,n)|<=CONST/(max(abs(coeff.s))^delta .`): print(`(iv): The smallest empirical delta between 100 and 150. Try:`): print(`Info2(5,7,35); `): elif nargs=1 and args[1]=INFOab then print(`INFOab(a,b,x): inputs two integers 1<=a=Q0 is sufficiently large, then `): print(` |q+p1*log((b-1)/(b+1))+p2*log((a-1)/(a+1)))|>1/Q^nu `): print(` It also outputs empirical delta1 and delta2.`): print(`It also outputs the indicial polynomial in the variable x, and its roots. `): print(` To get a synopsis of the original Salikhov proof, type: `): print(`INFOab(2,3,x);`): elif nargs=1 and args[1]=GrC then print(`GrC(a,b,c): The growth constants of Sabc1(a,b,c,n) and Sabc2(a,b,c,n)`): print(`It also gives the locations (or rather their squares). Try:`): print(`GrC(5,7,35); `): elif nargs=1 and args[1]=GuessK1 then print(`GuessK1(a,b,c,N): guesses an integer K and a small integer L such that Sabc1(a,b,c,n)*dn(2*n)*K^n*L is an integer for all n`): print(`between 20 and N. The output is [K,L].`): print(`Try: `): print(`GuessK1(5,7,35,100); `): elif nargs=1 and args[1]=GuessK2 then print(`GuessK2(a,b,c,N): guesses an integer K and a small integer L such that Sabc2(a,b,c,n)*dn(2*n)*K^n*L is an integer for all n`): print(`between 20 and N. The output is [K,L].`): print(`Try: `): print(`GuessK2(5,7,35,100); `): elif nargs=1 and args[1]=MakeNice then print(`MakeNice(ope,n,N): inputs a recurrence operator ope in n, N, outputs Ope1(n,1/N) such that`): print(`1-Ope1(n,N) is equivalent fo Ope. Try:`): print(`MakeNice(N^2-n*N-1,n,N);`): elif nargs=1 and args[1]=NuEven then print(`NuEven(a,N): a closed form expression for the exponent nu in the linear independence measure of {1,log(a/(a+1)), log((a+1)/(a+2))}`): print(`when a is a positive even integer. `): print(`It also returns the cubic in N whose largest and smallest roots are used in the expression. Try:`): print(`NuEven(a,N):`): elif nargs=1 and args[1]=NuOdd then print(`NuOdd(a,N): a closed form expression for the exponent nu in in the linear independence measure of {1,log(a/(a+1)), log((a+1)/(a+2))}`): print(`when a is a positive odd integer that is a>=3. When a=1 it is 20.01872047...`): print(`It also returns the cubic in N whose largest and smallest roots are used in the expression. Try:`): print(`NuOdd(a,N):`): elif nargs=1 and args[1]=Ope then print(`Ope(a,b,c,n,N): The third-order linear recurrence operator, where N is the forward shift in n annihilating both`): print(`Sabc1(a,b,c,n) and Sabc2(a,b,c,n) (q.v.) it was obtained via the Maple package EKHAD, procedure`): print(`AZd, implementing the Almkvist-Zeilberger algorithm. Try:`): print(`Ope(a,b,c,n,N);`): print(`Ope(5,7,35,n,N);`): elif nargs=1 and args[1]=OpeNice then print(`OpeNice(a,b,c,n,N): the operator in 1/N, let's call it Ope1, such that Ope(a,b,c,n,N) is equivalent fo 1-Ope1. Try:`): print(`OpeNice(5,7,35,n,N);`): elif nargs=1 and args[1]=Paper then print(`Paper(M): States and sketches the proof of simultaneous linear diophantine approximation`): print(`for log((b-1)/(b+1)) and log((a-1)/(a+1)) for all 3<=a0) then print(`X must be a non-emptylist`): RETURN(FAIL): fi: f1:=numer(f): gu:=f1: gad:=abs(coeff(gu,X[1],1)): gu:=coeff(f1,X[1],0): for i from 2 to nops(X) do gad:=max(abs(coeff(gu,X[i],1)),gad): gu:=coeff(gu,X[i],0): od: if not type(gu,numeric) then RETURN(FAIL): fi: L:=max(abs(gu),gad): E1:=evalf(f1): evalf(-log(abs(E1))/log(L)): end: #dn(n): lcm(1...n). Try: dn(10); dn:=proc(n) local i:lcm(seq(i,i=1..n)):end: #deltT1(a,b,c): The theoretical delta for Salikhov's Diophantine approximations inspired by Sabc1(a,b,c,n). Try: #deltT1(5,7,35); deltT1:=proc(a,b,c) local K,gu,N,n,ka,ga,i,ku1,ku2,kak,kak1,kak2,lu: K:=GuessK1(a,b,c,200): if K=FAIL then RETURN(FAIL): fi: K:=K[1]: gu:=Shors(a,b,c,N)[2]: kak:=RaE1(a,b,c,100): kak1:=abs(gu[1]-kak): kak2:=abs(gu[2]-kak): if kak1=5 then mu:=mu*op(1,op(1,op(i,gu)))^round(op(2,op(i,gu))/50): fi: fi: od: elif type(gu,`^`) then mu:=op(1,op(1,gu))^round(op(2,gu)/50): else mu:=1: fi: K:=mu: gu:=lcm(seq(denom(Sabc1f(a,b,c,n1)*dn(2*n1)*K^n1),n1=20..N)): if {seq(denom(gu*Sabc1f(a,b,c,n1)*dn(2*n1)*K^n1),n1=20..N)}<>{1} then RETURN(FAIL): fi: [K,gu]: end: #GuessK2(a,b,c,N): guesses an integer K and a small integer L such that Sabc2(a,b,c,n)*dn(2*n)*K^n*L is an integer for all n #between 20 and N. The output is [K,L]. #Try: #GuessK2(5,7,35,100); GuessK2:=proc(a,b,c,N) local mu,gu,i,K,n1: if N<=20 then print(N, `is too small`): RETURN(FAIL): fi: gu:=ifactor(denom(Sabc2f(a,b,c,50)*dn(100))): if type(gu, `*`) then mu:=1: for i from 1 to nops(gu) do if type(op(i,gu),`^`) then if op(2,op(i,gu))>=5 then mu:=mu*op(1,op(1,op(i,gu)))^round(op(2,op(i,gu))/50): fi: fi: od: elif type(gu,`^`) then mu:=op(1,op(1,gu))^round(op(2,gu)/50): else mu:=1: fi: K:=mu: gu:=lcm(seq(denom(Sabc2f(a,b,c,n1)*dn(2*n1)*K^n1),n1=20..N)): if {seq(denom(gu*Sabc2f(a,b,c,n1)*dn(2*n1)*K^n1),n1=20..N)}<>{1} then RETURN(FAIL): fi: [K,gu]: end: #ExtractLogs1(L): Given an expression of the form log(k) or c*log(k) where k is an integer, outputs k. #Tty: #ExtractLog1(log(11)); ExtractLog1(7*log(11)); ExtractLogs1:=proc(L) local i: if not ( type(L, function) or type(L,`*`)) then RETURN(FAIL): fi: if type(L,function) then if not op(0,L)=ln then RETURN(FAIL): else RETURN(op(1,L)): fi: fi: for i from 1 to nops(L) do if type(op(i,L),function) then RETURN(ExtractLogs1(op(i,L))): fi: od: FAIL: end: #ExtractLogs(L): Given an expression that is a linear combination of log(k)'s and 1, outputs the set of k's that show up. #Try: #ExtractLogs(5*log(3)-11*log(5)); ExtractLogs:=proc(L) local i,gu,mu: if not type(L,`+`) then mu:=ExtractLogs1(L): if mu<>FAIL then gu:={mu}: fi: else gu:={}: for i from 1 to nops(L) do if not type(op(i,L),numeric) then mu:=ExtractLogs1(op(i,L)): if mu=FAIL then RETURN(FAIL): else gu:=gu union {mu}: fi: fi: od: fi: gu: mu:=L-add(coeff(L,log(gu[i]),1)*log(gu[i]),i=1..nops(gu)): if not (type(mu,fraction) or type(mu,integer)) then RETURN(FAIL): fi: gu: end: #Atoms1(a,b,c): The atoms of Sabc1(a,b,c,n) for all n. Try: #Atoms1(5,7,35); Atoms1:=proc(a,b,c) local gu,mu,i: option remember: gu:=ExtractLogs(Sabc1(a,b,c,0)): if gu=FAIL then RETURN(FAIL): fi: for i from 1 to 2 do mu:=ExtractLogs(Sabc1(a,b,c,i)): if mu=FAIL then RETURN(FAIL): else gu:=gu union mu: fi: od: gu: end: #Atoms2(a,b,c): The atoms of Sabc2(a,b,c,n) for all n. Try: #Atoms2(5,7,35); Atoms2:=proc(a,b,c) local gu,mu,i: option remember: gu:=ExtractLogs(Sabc2(a,b,c,0)): if gu=FAIL then RETURN(FAIL): fi: for i from 1 to 2 do mu:=ExtractLogs(Sabc2(a,b,c,i)): if mu=FAIL then RETURN(FAIL): else gu:=gu union mu: fi: od: gu: end: #RaE1(a,b,c,N):abs(Sabc1f(a,b,c,N)/Sabc1f(a,b,c,N-1)): RaE1:=proc(a,b,c,N) local gu: gu:=evalf(abs(Sabc1f(a,b,c,N)/Sabc1f(a,b,c,N-1))): evalf(gu,20): end: #RaE2(a,b,c,N):abs(Sabc2f(a,b,c,N)/Sabc2f(a,b,c,N-1)): RaE2:=proc(a,b,c,N) local gu: gu:=evalf(abs(Sabc2f(a,b,c,N)/Sabc2f(a,b,c,N-1))): evalf(gu,20): end: #CoeffsL(L,X): Given f a linear combination of 1, X[1],.., X[nops(X)] and 1, outputs the respective coefficients #Try(CoeffsL(Sabc1(5,7,35,100),[log(2),log(3)]); Coeffs:=proc(L,X) local i: if not (type(X,list) and nops(X)>0) then print(`X must be a non-emptylist`): RETURN(FAIL): fi: [seq(coeff(L,X[i],1),i=1..nops(X)), L-add(coeff(L,X[i],1)*X[i],i=1..nops(X))]: end: #Ra1(a,b,c,N): The rations of the sequence of coefficients of the atoms of Sabc1(a,b,c) with N. Try: #Ra1(5,7,35,100); Ra1(5,17,85,100); Ra1:=proc(a,b,c,N) local gu,mu1,mu2,lu,i: gu:=Atoms1(a,b,c): if gu=FAIL then RETURN(FAIL): fi: gu:=[seq(log(gu[i]),i=1..nops(gu))]; mu1:=Coeffs(Sabc1f(a,b,c,N),gu): mu2:=Coeffs(Sabc1f(a,b,c,N-1),gu): lu:=[seq(mu1[i]/mu2[i],i=1..nops(mu1))]: evalf(lu,20): end: #Shors(a,b,c,N): The indicial polynomial and three roots of the limiting indicial equation of Ope(a,b,c,n,N). Try: #Shors(5,7,35,N); Shors:=proc(a,b,c,N) local gu,n,i,c1,mu: gu:=Ope(a,b,c,n,N): gu:=lcoeff(gu,n): c1:=igcd(seq(coeff(gu,N,i),i=0..degree(gu,N))): gu:=sort(normal(gu/c1)): mu:=evalf([solve(gu,N)]): mu:=evalf(mu,20): [gu,sort([seq(abs(coeff(mu[i],I,0)),i=1..nops(mu))])]: end: #GrC(a,b,c): The growth constants of Sabc1(a,b,c,n) and Sabc2(a,b,c,n) #It also gives the locations (or rather their squares) GrC:=proc(a,b,c) local t,g,gu,mu,i,gu1,gu2,gu3: g:=t*(t-a^2)*(t-b^2)/(t-c^2)^2: gu:=[solve(numer(diff(g,t)))]: gu:=evalf(gu): gu:=[seq(coeff(gu[i],I,0),i=1..nops(gu))]: for i from 1 to nops(gu) do if gu[i]>0 and gu[i]0 and gu[i]>a^2 and gu[i]b^2 then gu3:=gu[i]: fi: od: mu:=[abs(subs(t=gu1,g)),abs(subs(t=gu2,g)),abs(subs(t=gu3,g))]: mu:=evalf(mu,20): [[evalf(gu1,20),evalf(gu2,20),evalf(gu3,20)],mu]: end: #Info1(a,b,c): inputs positive integers a,b,c, and outputs a list consisting of #(i) the set of integers such that Sabc1(a,b,c,n) are linear combinations (with rational number coefficients) of their logs #(ii) The conjectured integer K such that K^n*dn(2*n)*Sabc1(a,b,c,n) have integer coefficients #(iii) The theoretical delta such that #T(a,b,c,n):=Sabc1(a,b,c,n)*K^n*dn(2*n), has the property, that for some universal constant CONST #|T(a,b,c,n)|<=CONST/(max(abs(coeff.s))^delta . #(iv): The smallest empirical delta between 100 and 150. Try: #Info1(5,7,35): Info1:=proc(a,b,c) local gu1,gu2,gu3,gu4,i,X,n1: gu1:=Atoms1(a,b,c): if gu1=FAIL then RETURN(FAIL): fi: gu2:=GuessK1(a,b,c,200): if gu2=FAIL then RETURN(FAIL): fi: gu2:=gu2[1]: gu3:=deltT1(a,b,c): X:=[seq(log(gu1[i]),i=1..nops(gu1))]: gu4:=min(seq(deltE(Sabc1f(a,b,c,n1),X),n1=100..150)): gu4:=evalf(gu4,20): [gu1,gu2,gu3,gu4]: end: #Info2(a,b,c): inputs positive integers a,b,c, and outputs a list consisting of #(i) the set of integers such that Sabc2(a,b,c,n) are linear combinations (with rational number coefficients) of their logs #(ii) The conjectured integer K such that K^n*dn(2*n)*Sabc1(a,b,c,n) have integer coefficients #(iii) The theoretical delta such that #T(a,b,c,n):=Sabc2(a,b,c,n)*K^n*dn(2*n), has the property, that for some universal constant CONST #|T(a,b,c,n)|<=CONST/(max(abs(coeff.s))^delta . #(iv): The smallest empirical delta between 100 and 150. Try: #Info2(5,7,35): Info2:=proc(a,b,c) local gu1,gu2,gu3,gu4,i,X,n1: gu1:=Atoms2(a,b,c): if gu1=FAIL then RETURN(FAIL): fi: gu2:=GuessK2(a,b,c,200): if gu2=FAIL then RETURN(FAIL): fi: gu2:=gu2[1]: gu3:=deltT2(a,b,c): X:=[seq(log(gu1[i]),i=1..nops(gu1))]: gu4:=min(seq(deltE(Sabc2f(a,b,c,n1),X),n1=100..150)): gu4:=evalf(gu4,20): [gu1,gu2,gu3,gu4]: end: #SalPairsSlow(N): all the pairs of primes [p,q] p=Q0 is sufficiently large, then #|q+p1*log((b-1)/(b+1))+p2*log((a-1)/(a+1)))|>1/Q^nu #It also outputs empirical delta1 and delta2. Try #INFOabNoGood(2,3,x); INFOabNoGood:=proc(a,b,x) local gu1,gu2: if not (a>0 and b>0 and type(a,integer) and type(b,integer)) then print(a,b, `must be positive integers larger than 1`): RETURN(FAIL): fi: if not a=Q0 is sufficiently large, then #|q+p1*log((b-1)/(b+1))+p2*log((a-1)/(a+1)))|>1/Q^nu #It also outputs empirical delta1 and delta2. Try #INFOab(2,3,x); INFOab:=proc(a,b,x) local gu1,gu2,de: if not (a>0 and b>0 and type(a,integer) and type(b,integer)) then print(a,b, `must be positive integers larger than 1`): RETURN(FAIL): fi: if not a=Q0, where Q0 is a sufficiently large number`): print(`then |q+p1*log(2)+p2*log(3)|>1/Q^4.125 `): print(``): print(`Let us make the following definition`): print(``): print(`Definition: Given two real constants, theta1, and theta2, nu is a LINEAR INDEPENDENCE MEASURE of 1, theta1, theta2, if the following holds.`): print(` Suppose that q,p1,p2 are integers and Q=max(|p|,|q1|,|q2|) Q>=Q0, where Q0 is a sufficiently large number`): print(`then |q+p1*theta1+p2*theta2|>1/Q^nu `): print(`and nu is the smallest such number. `): print(``): print(`Using this definition, Salikhov's theorem can be phrased as`): print(``): print(` nu(log(2),log(3))<=4.125 `): print(``): print(`In fact, Salikhov proved the equivalent statement `): print(``): print(` nu(log(2/3),log(3/4))<=4.125 `): print(``): print(`In this article we will prove many such results for the pairs of irrational numbers [log(a/(a+1)),log(b/(b+1))]`): print(`For 2<=a= then 1/min(delta1,delta2)=`, gu[2][3]): print(``): print(`Now comes the GENERALIZATION`): print(``): print(`Let a and b be positive integers larger than 1 and such that aFAIL and gu[2][3]>0 then print(`a=`, a, `b=`, b): print(theta1=log(b/(b+1)),theta2=log(a/(a+1)), K1=gu[2][1], K2=gu[2][2], nu=gu[2][3], pol=gu[4][1]): fi: od: od: print(``): print(`--------------------------------------------------------------`): print(``): print(`This concludes this paper, that took`, time()-t0, `seconds to generate. `): print(``): end: ############Start infinite families #NuEven(a,N): a closed form expression for the exponent nu in the linear independce of {1,log(a/(a+1)), log((a+1)/(a+2))}. Try: #when a is even. #It also returns the cubic in N whose largest and smallest roots feature. Try: #NuEven(a,N); NuEven:=proc(a,N) local ope,n,gad,kat,si,hal,gu,i,K,lu: ope:=Ope(4*a+1,4*a+3,(4*a+1)*(4*a+3),n,N): ope:=lcoeff(ope,n): gu:=[solve(ope,N)]: gad:=gu[1]: si:=coeff(evalf(subs(a=3,gad)),I,0): for i from 2 to nops(gu) do hal:=coeff(evalf(subs(a=3,gu[i])),I,0): if hal>si then gad:=gu[i]: fi: od: kat:=gu[1]: si:=coeff(evalf(subs(a=3,gad)),I,0): for i from 2 to nops(gu) do hal:=coeff(evalf(subs(a=3,gu[i])),I,0): if hal=3 #It also returns the cubic in N whose largest and smallest roots feature. Try: #NuOdd (a,N); NuOdd:=proc(a,N) local ope,n,gad,kat,si,hal,gu,i,K,lu: ope:=Ope(4*a+3,4*a+5,(4*a+3)*(4*a+5),n,N): ope:=lcoeff(ope,n): gu:=[solve(ope,N)]: gad:=gu[1]: si:=coeff(evalf(subs(a=3,gad)),I,0): for i from 2 to nops(gu) do hal:=coeff(evalf(subs(a=3,gu[i])),I,0): if hal>si then gad:=gu[i]: fi: od: kat:=gu[1]: si:=coeff(evalf(subs(a=3,gad)),I,0): for i from 2 to nops(gu) do hal:=coeff(evalf(subs(a=3,gu[i])),I,0): if hal=Q0, where Q0 is a sufficiently large number`): print(`then |q+p1*log(a/(a+1))+p2*log((a+1)/(a+2))|>1/Q^nu .`): print(``): print(`Furthermore, an upper bound for nu is as follows`): print(``): print(`if a is even then nu can be taken as`): print(``): print(gue): print(``): print(`and in Maple format `): print(``): lprint(gue): print(``): print(`On the other hand, if a is odd and >=3 then nu can be taken as`): print(``): print(guo): print(``): print(`and in Maple format `): print(``): lprint(guo): print(``): print(`When a=1, then nu can be taken as`): print(``): lprint(INFOab(1,2,x)[2][3]): print(``): print(`--------------------------------------`): print(``): print(`Proof: Consider the two integrals`): print(``): print(E1(n)=Int(SInt(2*a+1,2*a+3,(2*a+1)*(2*a+3),n,x),x=0..2*a+1)): print(``): print(E2(n)=Int(SInt(2*a+1,2*a+3,(2*a+1)*(2*a+3),n,x),x=0..2*a+3 ) ): print(``): print(`It is readily seen that we can write`): print(``): print(E1(n)=A1(n)+B(n)*log((a+1)/(a+2))): print(``): print(E2(n)=A2(n)+B(n)*log((a/(a+1)))): print(``): print(`For THREE sequences of RATIONAL numbers A1(n), A2(n), B(n) `): print(``): print(`Note the crucial fact that the coefficient of log((a+1)/(a+2)) in E1(n) and the coefficient of log(a/(a+1)) in E2(n) are identical`): print(``): print(`but of course, A1(n), A2(n) are different. `): print(``): ope:=Ope(2*a+1,2*a+3,(2*a+1)*(2*a+3),n,N): print(``): print(`Using the amazing Almkvist-Zeilberger algorithm (using a different Maple package called EKHAD.txt), it emerges as that`): print(`both E1(n) and E2(n), and hence also the sequences of rational numbers A1(n), A2(n), B(n) satisfy the third order linear recurrence`): print(`equation`): print(``): print(add(factor(coeff(ope,N,i))*F(n+i),i=0..degree(ope,N))=0): print(``): print(`but of course with different initial conditions. `): print(``): print(`Using the Poincare lemma, we can use it to deduce the growth of E1(n), E2(n), and the common growth of A1(n),A2(n), B(n). `): print(``): print(`We approximate the above linear recurrence equation by a CONSTANT coefficients linear recurrence obtained by taking the leading term in n`): print(``): print(`The indicial polynomial, in N, (after normalizing the constant term to be 1) `): print(``): ope:=lcoeff(ope,n): ope:=normal(ope/coeff(ope,N,0)): print(``): ope:=add(factor(coeff(ope,N,i))*N^i,i=0..degree(ope,N)): print(``): print(ope): print(``): print(`and in Maple format`): print(``): lprint(ope): print(``): print(`Let C1(a) be the largest root, C2(a), the second largest root, and C3(a) the smallest rule of the above equation`): print(``): print(`that can be expressed explicitly thanks to Cardano`): print(``): print(`It follows from the Poincare lemma that, ignoring polynomial corrections that disappear at the end`): print(``): print(`A1(n),A2(n),B(n)=OMEGA(C1(a)^n)`): print(``): print(`E1(n)=OMEGA(C2(a)^n), E2(n)=OMEGA(C3(a)^n)`): print(` or the other way`): print(``): print(`E2(n)=OMEGA(C3(a)^n), E1(n)=OMEGA(C2(a)^n)`): print(``): print(`Note that C1(a) is big and C2(a), C3(a) are small`): print(``): print(`We now need three divisibility lemmas that we leave to the reader`): print(``): print(`Lemma 1: B(n)*lcm(1..2*n) is always an integer `): print(``): print(`Lemma 2: A1(n)*K1(a)^n*lcm(1..2*n) is always an integer (or at worst has bounded denominator) `): print(``): print(`where K1(a)= a+2 if a is odd, and K1(a)=a/2+1 if a is even`): print(``): print(`Lemma 3: A2(n)*K2(a)^n*lcm(1..2*n) is always an integer (or at worst has bounded denominator) `): print(``): print(`where K2(a)= a if a is odd, and K2(a)=a/2 if a is even`): print(``): print(`Let K(a)=K1(a)*K2(a) `): print(``): print(`In other words, K(a)=a(a+2) if a is odd, and K(a)=(a/2)(a/2+1) if a is even `): print(``): print(`Multiplying the equations`): print(``): print( E1(n)=A1(n)+B(n)*log((a+1)/(a+2))): print(``): print(E2(n)=A2(n)+B(n)*log((a/(a+1)))): print(``): print(` by K(a)^n*lcm(1..2*n), and letting E1new(n)=K(a)^n*lcm(1..2*n)*E1(n), E2new(n)=K(a)^n*lcm(1..2*n)*E2(n) `): print(``): print(` We have `): print(`E1new(n)=A1new(n)+Bnew(n)*log((a+1)/(a+2))`): print(``): print(`E2new(n)=A2new(n)+Bnew(n)*log((a/(a+1)))`): print(``): print(`where A1new(n), A2new(n), Bnew(n) are INTEGER sequences `): print(``): print(`Recall the fact that lcm(1..n) is asymptotic to e^n and hence lcm(1..2*n) is asymptotic to e^(2n) .`): print(`We now that A1new(n), A2new(n), Bnew(n) are, up to polynomial factors that disappear at the wash `): print(``): print(`A1new(n),A2new(n),Bnew(n)=OMEGA((C1(a)*e^2*K(a))^n )`): print(``): print(`E1new(n), E2new(n) =OMEGA((C3(a)*e^2*K(a))^n `): print(``): print(`Finally, using Lemma 3 in Salikhov's paper, that is due to M. Hata (Acta Arith. 63(4), 335-349 (1993)),`): print(``): print(`We get that one can take nu to be`): print(``): lu:=-(log(C2(a))+log(K(a))+2)/(log(C1(a))+log(K(a))+2): print(``): lu:=1/lu: print(``): print(lu): print(``): print(`plugging for C1(a), C3(a) their values given by the Cardano formulas and K(a)=a(a+2) if a is odd, and K(a)=(a/2)(a/2+1) if a is even `): print(``): print(`we get the expressions in the statement of the theorem. QED. `): print(``): print(`Finally let's plot the independce measure in terms of a, from a=1 to a=1000. The higher curve is for the odd case`): print(``): print(plot([gue,guo], a=1..1000)); end: