Table of Contents
Fetching ...

Semantically Separating Nominal Wyvern for Usability and Decidability

Yu Xiang Zhu, Amos Robinson, Sophia Roshal, Timothy Mou, Julian Mackay, Jonathan Aldrich, Alex Potanin

TL;DR

Nominal Wyvern addresses the decidability challenges of merging functional and OO features in DOT by instituting a semantic separation between nominal type definitions and structural refinements, augmented with explicit shape/material annotations. This design preserves expressiveness such as F-bounded polymorphism and module-like patterns while ensuring subtype decidability through a material/shape separation framework and a nominal subtyping graph. The paper provides a formal grammar, typing rules, and a decidability proof for subtyping, plus a type-safety proof using a fuel-annotated big-step semantics, and demonstrates expressiveness via practical patterns like ML-like modules and OO patterns. The approach yields a more usable, Java/OO-friendly nominal system that retains DOT's practical expressiveness without sacrificing safety or performance, with clear avenues for tooling support and further integration with existing DOT-like languages.

Abstract

The Dependent Object Types (DOT) calculus incorporates concepts from functional languages (e.g. modules) with traditional object-oriented features (e.g. objects, subtyping) to achieve greater expressivity (e.g. F-bounded polymorphism). However, this merger of paradigms comes at the cost of subtype decidability. Recent work on bringing decidability to DOT has either sacrificed expressiveness or ease of use. The unrestricted construction of recursive types and type bounds has made subtype decidability a much harder problem than in traditional object-oriented programming. Recognizing this, our paper introduces Nominal Wyvern, a DOT-like dependent type system that takes an alternative approach: instead of having a uniform structural syntax like DOT, Nominal Wyvern is designed around a "semantic separation" between the nominal declaration of recursive types on the one hand, and the structural refinement of those types when they are used on the other. This design naturally guides the user to avoid writing undecidably recursive structural types. From a technical standpoint, this separation also makes guaranteeing decidability possible by allowing for an intuitive adaptation of material/shape separation, a technique for achieving subtype decidability by separating types responsible for subtyping constraints from types that represent concrete data. The result is a type system with syntax and structure familiar to OOP users that achieves decidability without compromising the expressiveness of F-bounded polymorphism and module systems as they are used in practice.

Semantically Separating Nominal Wyvern for Usability and Decidability

TL;DR

Nominal Wyvern addresses the decidability challenges of merging functional and OO features in DOT by instituting a semantic separation between nominal type definitions and structural refinements, augmented with explicit shape/material annotations. This design preserves expressiveness such as F-bounded polymorphism and module-like patterns while ensuring subtype decidability through a material/shape separation framework and a nominal subtyping graph. The paper provides a formal grammar, typing rules, and a decidability proof for subtyping, plus a type-safety proof using a fuel-annotated big-step semantics, and demonstrates expressiveness via practical patterns like ML-like modules and OO patterns. The approach yields a more usable, Java/OO-friendly nominal system that retains DOT's practical expressiveness without sacrificing safety or performance, with clear avenues for tooling support and further integration with existing DOT-like languages.

Abstract

The Dependent Object Types (DOT) calculus incorporates concepts from functional languages (e.g. modules) with traditional object-oriented features (e.g. objects, subtyping) to achieve greater expressivity (e.g. F-bounded polymorphism). However, this merger of paradigms comes at the cost of subtype decidability. Recent work on bringing decidability to DOT has either sacrificed expressiveness or ease of use. The unrestricted construction of recursive types and type bounds has made subtype decidability a much harder problem than in traditional object-oriented programming. Recognizing this, our paper introduces Nominal Wyvern, a DOT-like dependent type system that takes an alternative approach: instead of having a uniform structural syntax like DOT, Nominal Wyvern is designed around a "semantic separation" between the nominal declaration of recursive types on the one hand, and the structural refinement of those types when they are used on the other. This design naturally guides the user to avoid writing undecidably recursive structural types. From a technical standpoint, this separation also makes guaranteeing decidability possible by allowing for an intuitive adaptation of material/shape separation, a technique for achieving subtype decidability by separating types responsible for subtyping constraints from types that represent concrete data. The result is a type system with syntax and structure familiar to OOP users that achieves decidability without compromising the expressiveness of F-bounded polymorphism and module systems as they are used in practice.

Paper Structure

This paper contains 38 sections, 23 theorems, 6 equations, 17 figures.

Key Result

Theorem 3.9

Figures (17)

  • Figure 1: Type parameter variance, using Scala's type parameter syntax
  • Figure 2: F-bounded polymorphism (in Scala)
  • Figure 3: Cloneable list causing expansive inheritance
  • Figure 4: Nominal Wyvern Grammar
  • Figure 5: Immutable Set container type (Nominal Wyvern)
  • ...and 12 more figures

Theorems & Definitions (54)

  • Definition 3.1: Nominal subtyping graph
  • Definition 3.2: Material/shape separation
  • Definition 3.3: Shape type validity
  • Definition 3.4: Subtype dependency graph (SDG)
  • Example 3.5
  • Definition 3.6: Rank of variables, paths and types
  • Definition 3.7: Head-rank of types
  • Definition 3.8: Well-formedness of environments and types
  • Theorem 3.9: Single-exposure expose1 is decidable
  • proof
  • ...and 44 more