Algebraic types aren't scary at all. See:
type CollatzConjectureIsTrue<
N extends any[] = [unknown],
M = "∀",
A extends any[] = []
> =
M extends "odd" ? (N extends [any, any, ...infer R] ? CollatzConjectureIsTrue<R,"odd"> : N extends [any] ? true : false)
: M extends "half" ? (N extends [any, any, ...infer R] ? CollatzConjectureIsTrue<R,"half",[unknown,...A]> : A)
: M extends "3n1" ? [unknown, ...N, ...N, ...N]
: M extends "next" ? (CollatzConjectureIsTrue<N,"odd"> extends true ? CollatzConjectureIsTrue<N,"3n1"> : CollatzConjectureIsTrue<N,"half">)
: M extends "term" ? (N extends [unknown] ? true : CollatzConjectureIsTrue<CollatzConjectureIsTrue<N,"next">,"term">)
: (CollatzConjectureIsTrue<N,"term"> extends true ? CollatzConjectureIsTrue<[unknown,...N]> : false);