English

A Calculus of Inheritance

Programming Languages 2026-05-27 v9 Software Engineering

Abstract

Just as the λ\lambda-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 λ\lambda-calculus, since B\"ohm tree equivalence is fully abstract for the first-iteration approximation of a sublanguage of inheritance-calculus. As a corollary, this establishes a convergence hierarchy eagerlazyfixpoint\text{eager} \subsetneq \text{lazy} \subsetneq \text{fixpoint} among λ\lambda-calculi sharing the same λ\lambda-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; this\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 λ\lambda-calculus in both common sense and Felleisen's sense.

Keywords

Cite

@article{arxiv.2602.16291,
  title  = {A Calculus of Inheritance},
  author = {Bo Yang},
  journal= {arXiv preprint arXiv:2602.16291},
  year   = {2026}
}
R2 v1 2026-07-01T10:41:01.116Z