
These are the Walnut commands for the paper

"Proving properties of some greedily-defined integer recurrences
via automata theory"

by Jeffrey Shallit

published in

Theoretical Computer Science
 988 (2024) 114363

eval func_f_check1 "?msd_fib An Ex $fp(n,x)":
eval func_f_check2 "?msd_fib An ~Ex,y x!=y & $fp(n,x) & $fp(n,y)":
eval func_h_check1 "?msd_fib An Ex $hp(n,x)":
eval func_h_check2 "?msd_fib An ~Ex,y x!=y & $hp(n,x) & $hp(n,y)":

eval en n "?msd_fib i<n":
eval enp1 n "?msd_fib i<=n":
eval hn n "?msd_fib Ex $hp(n,x) & i<x":
eval hnp1 n "?msd_fib Ex $hp(n+1,x) & i<x":
eval fnp1 n "?msd_fib Ex $fp(n+1,x) & i<x":

eval check_fp_membership "?msd_fib An,x,i,y ($fp(n,x) & $fp(i,y) & i<n) => x!=y":

eval check_fp_inequality1 "?msd_fib An,x (n>=1 & $fp(n,x)) => x<2*n":

eval check_fp_inequality2 "?msd_fib An,x $fp(n,x) => (x<=n | Ei,y i<n & $fp(i,y) & x=n+y)":

reg shift {0,1} {0,1} "([0,0]|[0,1][1,1]*[1,0])*":
def phin "?msd_fib (s=0 & n=0) | Ex $shift(n-1,x) & s=x+1":
def phi2n "?msd_fib (s=0 & n=0) | Ex,y $shift(n-1,x) & $shift(x,y) & s=y+2":
def noverphi "?msd_fib Et $phin(n,t) & s+n=t":

eval testa "?msd_fib An,x,y ($h(n,x) & $h(n+1,y)) => x<=y":
eval testb "?msd_fib An,x $h(n,x) => x<=n":
eval testc "?msd_fib An,x,y ($h(n,x) & $h(n+1,y)) => (y=x | y=x+1)":
eval testd "?msd_fib An,x,y,z ($h(n,x) & $h(n+1,y) & $f(n+1,z)) => (y=x <=> z=x)":
eval teste "?msd_fib An,x,y,z ($h(n,x) & $h(n+1,y) & $f(n+1,z)) => (y=x+1 <=> z=x+n+1)":
eval testf "?msd_fib An,x,y,z (n>=1 & $h(n,x) & $h(x,y) & $h(n+1,z)) => y+z=n+2":
eval testg "?msd_fib An,x,y ($f(n,x) & $f(x,y)) => y=n":
eval testh "?msd_fib An,x,y (n>=1 & $h(n,x) & $h(x+n,y)) => y=n+1":
eval testi "?msd_fib An,x,y (n>=1 & $h(n,x) & $phin(n,y)) => x+n=y+1":
eval testj "?msd_fib ~En1,n2,n3,x (n1<n2) & (n2<n3) & $h(n1,x) & $h(n2,x) & $h(n3,x)":
eval testk "?msd_fib An,x,y ($h(n,x) & $h(n+2,y)) => y>x":
eval testl "?msd_fib Ax En $h(n,x)":
eval testm "?msd_fib Ax En $f(n,x)":
eval testn "?msd_fib An1,n2 (Ex $f(n1,x) & $f(n2,x)) => n1=n2":
eval testo "?msd_fib An,x (n>=6 & $h(n,x)) => x+2<=n":
eval testp "?msd_fib An,x,y ($f(n+1,x) & $h(n,y) & x>y) => (Aj,t (j>=n+1 & $f(j,t)) => t>y)":
eval testq "?msd_fib ~Ek,l k>=2 & $f(k-1,l) & $f(k,l+1)":


reg isfib msd_fib "0*10*":
reg adjfib msd_fib msd_fib "[0,0]*[0,1][1,0][0,0]*":
eval parta "?msd_fib Ax,y ($adjfib(x,y) & x>=2) => $zp(x,y)":
eval partb "?msd_fib Ax,y ($adjfib(x,y) & y>=5) => $zp(y-1,x-1)":
eval partc "?msd_fib Ak,n,x ($phi2n(k,n) & $phin(k,x) & (~$isfib(n)) & (~$isfib(n+1))) => $zp(n,x)":
eval partd "?msd_fib Ak,n,x ($phin(k,n) & $phi2n(k,x) & (~$isfib(n)) & (~$isfib(n+1))) => $zp(n,x)":
eval parte "?msd_fib An,x,y,w (n>2 & $zp(n,x) & $mp(n,y) & $mp(n-1,w) & (Ai,r (i>=1 & i<n & $z(i,r)) => r!=w)) => (x=w & y=w)":
eval partf "?msd_fib An,x,y,w (n>2 & $zp(n,x) & $mp(n,y) & $mp(n-1,w) & (Ei,r i>=1 & i<n & $zp(i,r) & r=w)) => (x=w+n+1 & y=w+1)":
eval partg "?msd_fib Ax En $zp(n,x)":
eval parth "?msd_fib An1,n2 (Ex $zp(n1,x) & $zp(n2,x)) => n1=n2":

eval chk1 "?msd_fib An,x (n>=1 & $fp(n,x) & Em $phin(m,n-1)) => $phin(n,x)":
eval chk2 "?msd_fib An,x (n>=1 & $fp(n,x) & ~Em $phin(m,n-1)) => $noverphi(n,x-1)":

eval thm6 "?msd_fib An,x,y ($fp(n,x) & $zp(n,y)) => (y=x|y=x+n|y=x+1|y+n=x)":

reg evenfib msd_fib "0*1(00)*":
reg oddfib msd_fib "0*10(00)*":
def eps1 "?msd_fib (x=1 & $evenfib(n+1)) | (x=0 & ~$evenfib(n+1))":
def eps2 "?msd_fib (x=1 & $oddfib(n+1)) | (x=0 & ~$oddfib(n+1))":
eval checkstolla "?msd_fib An,x,y,z ($noverphi(n+1,x) & $ha(n,y) & $eps1(n,z)) => y=x+z":
eval checkstollb "?msd_fib An,x,y,z ($noverphi(n+1,x) & $hb(n,y) & $eps2(n,z)) => y+z=x":

eval queta_check1 "?msd_fib An Ex $queta(n,x)":
eval queta_check2 "?msd_fib An ~Ex,y x!=y & $queta(n,x) & $queta(n,y)":
eval quetb_check1 "?msd_fib An Ex $quetb(n,x)":
eval quetb_check2 "?msd_fib An ~Ex,y x!=y & $quetb(n,x) & $quetb(n,y)":
eval en n "?msd_fib i<n":
eval enp1 n "?msd_fib i<n+1":
eval enp2 n "?msd_fib i<n+2":
eval qan3 n "?msd_fib Ex $queta(n+3,x) & i<x":
eval qbn3 n "?msd_fib Ex $quetb(n+3,x) & i<x":
eval qbn2 n "?msd_fib Ex $quetb(n+2,x) & i<x":
eval queta_onto "?msd_fib Ax En $queta(n,x)":
eval queta_one_one "?msd_fib ~En1,n2,x (n1!=n2) & $queta(n1,x) & $queta(n2,x)":

eval quetbcheck "?msd_fib An,x,y (n>=2 & $quetb(n,x) & $ha(n-2,y)) => x=y+2":