Programming Languages

Introduction and Elimination, Left and Right

by Klaus Ostermann, David Binder, Ingo Skupin, Tim Süberkrüb, and Paul Downen

In Proc. Int’l Conf. Functional Programming (ICFP). ACM Press, 2022.

Abstract

Functional programming language design has been shaped by the framework of natural deduction, in which language constructs are divided into introduction and elimination rules for producers of values. In sequent calculus-based languages, left introduction rules replace (right) elimination rules and provide a dedicated sublanguage for consumers of values. In this paper, we present and analyze a wider design space of programming languages which encompasses four kinds of rules: Introduction and elimination, both left and right. We analyze the influence of rule choice on program structure and argue that having all kinds of rules enriches a programmer’s modularity arsenal. In particular, we identify four ways of adhering to the principle that žthe structure of the program follows the structure of the datał and show that they correspond to the four possible choices of rules. We also propose the principle of bi-expressibility to guide and validate the design of rules for a connective. Finally, we deepen the well-known dualities between different connectives by means of the proof/refutation duality.