A keyword is a subsequence of a text if can be obtained by deleting some characters from ; otherwise, is a non-subsequence of . (Non-)subsequence relationships arise in various fields, including genetic analysis, blockchains, and natural language processing. Recently, Ling et al. (SCN 2024) proposed a succinct argument for non-subsequences based on multivariate sumcheck (Lund et al., FOCS 1990) whose prover's running time is at least , where and are respectively the lengths of strings and , and is the alphabet over which and are defined. As shown in their work, proving non-subsequence relationships is non-trivial since one needs to decompose such an argument into smaller components for sumcheck, permutation, and lookup.
We propose a subsequence scheme that separates proving (non-)subsequences into the following two phases: (i) a preprocessing phase and (ii) a (non-)subsequence proving phase, assuming (i.e., ). Specifically, we can generate a one-time preprocessing proof with inputs and , without any knowledge of . When is known, we can determine whether is a subsequence of and prove the corresponding statement. Employing cached quotients (IACR ePrint 2022/1763), we achieve a running time quasi-linear in for preprocessing, while the running time of proving a (non-)subsequence relationship is for each query . Since and grows sub-linearly with the text size, this saves the prover's running time, assuming a preprocessing depending only on is computed in advance. Hence, we achieve a \textit{text-sub-linear} proving time.