Venue. FoSSaCS
2025
Two-sorted algebraic decompositions of Brookes’s shared-state denotational semantics dvir-2025-two
Idempotent Resources in Separation Logic: The Heart of core in Iris gratzer-2025-idempotent
2023
A Higher-Order Language for Markov Kernels and Linear Operators amorim_2023_fossacs
Much work has been done to give semantics to probabilistic programming languages. In recent years, most of the semantics used to reason about probabilistic programs fall in two categories: semantics based on Markov kernels and semantics based on linear operators.
Both styles of semantics have found numerous applications in reasoning about probabilistic programs, but they each have their strengths and weaknesses. Though it is believed that there is a connection between them there are no languages that can handle both styles of programming.
In this work we address these questions by defining a two-level calculus and its categorical semantics which makes it possible to program with both kinds of semantics. From the logical side of things we see this language as an alternative resource interpretation of linear logic, where the resource being kept track of is sampling instead of variable use.
A Logical Framework with Higher-Order Rational (Circular) Terms chen-2023-a
A Formal Logic for Formal Category Theory new_licata_2023
2021
Adjoint Reactive GUI Programming graulund-2021-adjoint
2018
Quotient Inductive-Inductive Types altenkirch_etal_2018
FabULous Interoperability for ML and a Linear Language scherer_etal_2018
Instead of a monolithic programming language trying to cover all features of interest, some programming systems are designed by combining together simpler languages that cooperate to cover the same feature space. This can improve usability by making each part simpler than the whole, but there is a risk of abstraction leaks from one language to another that would break expectations of the users familiar with only one or some of the involved languages.
We propose a formal specification for what it means for a given language in a multi-language system to be usable without leaks: it should embed into the multi-language in a fully abstract way, that is, its contextual equivalence should be unchanged in the larger system.
To demonstrate our proposed design principle and formal specification criterion, we design a multi-language programming system that combines an ML-like statically typed functional language and another language with linear types and linear state. Our goal is to cover a good part of the expressiveness of languages that mix functional programming and linear state (ownership), at only a fraction of the complexity. We prove that the embedding of ML into the multi-language system is fully abstract: functional programmers should not fear abstraction leaks. We show examples of combined programs demonstrating in-place memory updates and safe resource handling, and an implementation extending OCaml with our linear language.