§ Gosper's algorithm

§ Step 1: p, q, r decomposition

# f(k)/f(k-1) = (a1+k)(a2+k)..(am+k)z/(b1+k)(b2+k)...(bn+k)
p = 1
q = (a1+k)(a2+k)..(am+k)
r = (b1+k)(b2+k)...(bn+k)

while exists a, b such that q % (k + a) = 0 and r % (k + b) = 0:
  N = a - b
  if N < 0: break
  # N nonnegative, so a >= b.
  q = q / (k + a); r = r / (k + b);
  fudge = falling_factorial(k + a, N)
  # so 'fudge(k) = (k + a) (k + a - 1) ... (k + b + 1)'
  # see that 't(k) / t(k - 1) = (k + a) / (k + b)',
  # which is exactly what we cancelled from p, q.
  p = p * t

§ Step 2: The secret function s(k)

§ s(k)s(k) is a rational function iff S(k)S(k) is

s(k)=p(k)q(k)fracS(k)f(k)=p(k)q(k)S(k)(S(k)S(k1)=p(k)q(k)1(1(S(k1)/S(k)) \begin{aligned} s(k) &= \frac{p(k)}{q(k)} frac{S(k)}{f(k)} \\ &= \frac{p(k)}{q(k)} \frac{S(k)}{(S(k) - S(k - 1)} \\ &= \frac{p(k)}{q(k)} \frac{1}{(1 - (S(k - 1)/S(k))} \\ \end{aligned}

§ Recurrence of s(k)s(k)

Substituting S(k)=q(k+1)/p(k)s(k)f(k)S(k) = q(k + 1)/p(k) \cdot s(k) f(k) into f(k)=S(k)S(k1)f(k) = S(k) - S(k - 1), we get:
f(k)=q(k+1)p(k)s(k)f(k)q(k)p(k1)s(k1)f(k1)p(k)f(k)f(k)=p(k)f(k)q(k+1)p(k)s(k)f(k)p(k)f(k)q(k)p(k1)s(k1)f(k1)p(k)=q(k+1)s(k)r(k)s(k1) \begin{aligned} f(k) &= \frac{q(k+1)}{p(k)}s(k)f(k) - \frac{q(k)}{p(k-1)}s(k-1)f(k-1) \\ \frac{p(k)}{f(k)} f(k) &= \frac{p(k)}{f(k)} \frac{q(k+1)}{p(k)}s(k)f(k) - \frac{p(k)}{f(k)} \frac{q(k)}{p(k-1)}s(k-1)f(k-1) \\ \dots p(k) = q(k + 1)s(k) - r(k) s(k - 1) \end{aligned}

§ Step 3: s(k)s(k) is polynomial iff S(k)S(k) is a rational function

p(k)=q(k+1)s(k)r(k)s(k1)p(k)=q(k+1)u(k)/v(k)r(k)u(k1)/v(k1)p(k)v(k)v(k1)=q(k+1)u(k)v(k1)r(k)u(k1)v(k) \begin{aligned} p(k) &= q(k + 1)s(k) - r(k) s(k - 1) \\ p(k) &= q(k + 1)u(k)/v(k) - r(k) u(k - 1)/v(k-1) \\ p(k)v(k)v(k-1) &= q(k + 1)u(k)v(k-1) - r(k) u(k - 1)v(k) \\ \end{aligned}
p(k)v(k)(v(k1)0)=q(k+1)u(k)(v(k1)0)r(k)u(k1)v(k)0=r(k)u(k1)v(k)0=r(β+1)u(β)v(β+1) \begin{aligned} p(k)v(k)(v(k-1) \sim 0) &= q(k + 1)u(k)(v(k-1) \sim 0) - r(k) u(k - 1)v(k) \\ 0 &= - r(k) u(k - 1)v(k) \\ 0 &= r(-\beta + 1) u(-\beta)v(-\beta + 1) \end{aligned}
p(k)(v(k)0)v(k1)=q(k+1)u(k)v(k1)r(k)u(k1)(v(k)0)0=q(k+1)u(k)v(k1)0=q(βN+1)u(βN)v(βN1) \begin{aligned} p(k)(v(k) \sim 0)v(k-1) &= q(k + 1)u(k)v(k-1) - r(k) u(k - 1)(v(k) \sim 0) \\ 0 &= q(k+1)u(k)v(k - 1) \\ 0 &= q(-\beta - N +1)u(-\beta - N)v(-\beta -N - 1) \end{aligned}

§ Step 4: finding s(k)s(k) given p,q,rp, q, r

§ References