一句话:将形式语言刻画为类型级字符串谓词,并导出正则表达式符号微分与 trie 自动微分两种对偶解析实现。
论文将形式语言从集合论定义转为类型论定义,把语言看作字符串上的类型级谓词:应用于字符串得到成员证明类型,证明描述解析方式。并、连接、Kleene 闭包等构件有精确规格,并可推广为谓词上的定义域/值域变换。作者给出语言(及列表到任意类型函数)的简单刻画,揭示语言“微分”用于识别的核心,形成一组类型级谓词引理。这些引理支撑两种对偶解析实现:归纳式正则表达式对应符号微分,余归纳式 trie 对应自动微分,代码相同但表示与原语操作互换。类型级语言的易证性质几乎无代价迁移到可判定实现,证明代数性质无需归纳或互模拟论证。
Formal languages are usually defined in terms of set theory. Choosing type theory instead gives us languages as type-level predicates over strings. Applying a language to a string yields a type whose elements are language membership proofs describing how a string parses in the language. The usual building blocks of languages (including union, concatenation, and Kleene closure) have precise and compelling specifications uncomplicated by operational strategies and are easily generalized to a few general domain-transforming and codomain-transforming operations on predicates. A simple characterization of languages (and indeed functions from lists to any type) captures the essential idea behind language “differentiation” as used for recognizing languages, leading to a collection of lemmas about type-level predicates. These lemmas are the heart of two dual parsing implementations—using (inductive) regular expressions and (coinductive) tries—each containing the same code but in dual arrangements (with representation and primitive operations trading places). The regular expression version corresponds to symbolic differentiation, while the trie version corresponds to automatic differentiation. The relatively easy-to-prove properties of type-level languages transfer almost effortlessly to the decidable implementations. In particular, despite the inductive and coinductive nature of regular expressions and tries respectively, we need neither inductive nor coinductive/bisimulation arguments to prove algebraic properties.