Just as the $λ$-calculus uses three primitives (abstraction, application, variable) as the foundation of functional programming, inheritance-calculus uses three primitives (record, definition, inheritance) as the foundation of declarative programming. By unifying modules, classes, objects, methods, fields, and locals under a single record abstraction, the calculus models inheritance simply as set union. Consequently, composition is inherently commutative, idempotent, and associative, structurally eliminating the multiple-inheritance linearization problem. Its semantics is first-order, denotational, and computable by tabling, even for cyclic inheritance hierarchies. These three properties extend to the $λ$-calculus, since Böhm tree equivalence is fully abstract for the first-iteration approximation of a sublanguage of inheritance-calculus. As a corollary, this establishes a convergence hierarchy $\text{eager} \subsetneq \text{lazy} \subsetneq \text{fixpoint}$ among $λ$-calculi sharing the same $λ$-syntax. Inheritance-calculus is distilled from MIXINv2, a practical implementation in which the same code acts as different function colors; ordinary arithmetic yields the relational semantics of logic programming; $\mathtt{this}$ resolves to multiple targets; and programs are immune to nonextensibility in the sense of the Expression Problem. This makes inheritance-calculus strictly more expressive than the $λ$-calculus in both common sense and Felleisen's sense.
翻译:正如$λ$-演算使用三个原语(抽象、应用、变量)作为函数式编程的基础,继承演算使用三个原语(记录、定义、继承)作为声明式编程的基础。通过将模块、类、对象、方法、字段和局部变量统一到单一记录抽象下,该演算将继承简单地建模为集合的并。因此,组合天然具有交换性、幂等性和结合性,从结构上消除了多重继承的线性化问题。其语义是一阶的、指称的,并且可以通过表格化计算,即使对于循环继承层次结构也是如此。这三个性质可扩展到$λ$-演算,因为Böhm树等价对于继承演算子语言的一次迭代近似是完全抽象的。作为推论,这在共享相同$λ$-语法的$λ$-演算中建立了收敛层次$\text{eager} \subsetneq \text{lazy} \subsetneq \text{fixpoint}$。继承演算源自MIXINv2——一个实际实现,其中相同的代码扮演不同的函数角色;普通算术产生逻辑编程的关系语义;$\mathtt{this}$解析到多个目标;程序在表达式问题的意义上对非扩展性免疫。这使得继承演算在常识和Felleisen意义上都严格比$λ$-演算更具表现力。