Demo Data from SIGIR 2026 / reviewers in the wild / expert
Jana Dunfield
dblp:38/6042
· DBLP profile ↗
15ranked-venue papers
8as first author
1since 2021 · last 2023
0000-0002-3718-3395ORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 15 · 8 first-author · 1 since 2021Theory of computation · 2 · 1 first-author
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
6 papers |
Programming languages and type systems · 94% Program analysis · 4% Compilers and program optimization · 2% | |
| Theoretical computer science
1 paper |
Algorithms and data structures · 100% |
Topics — the 20 heaviest of 21, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems › type systems
refinement types |
0.9 | 2 | 2023 | Focusing on Refinement Typing · ACM Trans. Program. Lang. Syst. 2023 Sums of uncertainty: refinements go gradual · POPL 2017 |
Programming languages and type systems › language semantics › formal semantics
denotational semantics |
0.7 | 1 | 2023 | Focusing on Refinement Typing · ACM Trans. Program. Lang. Syst. 2023 |
Programming languages and type systems › type systems
subtyping |
0.7 | 1 | 2023 | Focusing on Refinement Typing · ACM Trans. Program. Lang. Syst. 2023 |
Programming languages and type systems › type systems
type soundness |
0.7 | 1 | 2023 | Focusing on Refinement Typing · ACM Trans. Program. Lang. Syst. 2023 |
Programming languages and type systems › type checking
bidirectional type checking |
0.4 | 2 | 2019 | Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed types · Proc. ACM Program. Lang. 2019 Tridirectional typechecking · POPL 2004 |
Programming languages and type systems › functional programming › algebraic data types
generalized algebraic data types |
0.4 | 1 | 2019 | Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed types · Proc. ACM Program. Lang. 2019 |
Programming languages and type systems › type systems › polymorphism
higher-rank polymorphism |
0.4 | 1 | 2019 | Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed types · Proc. ACM Program. Lang. 2019 |
Programming languages and type systems › type theory › dependent types
indexed types |
0.4 | 1 | 2019 | Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed types · Proc. ACM Program. Lang. 2019 |
Programming languages and type systems › control structures
pattern matching |
0.3 | 1 | 2017 | Sums of uncertainty: refinements go gradual · POPL 2017 |
Program analysis › static analysis
incremental analysis |
0.2 | 1 | 2015 | Incremental computation with names · OOPSLA 2015 |
Programming languages and type systems › programming paradigms
self-adjusting computation |
0.2 | 1 | 2015 | Incremental computation with names · OOPSLA 2015 |
Compilers and program optimization
program transformation |
0.1 | 1 | 2012 | Type-directed automatic incrementalization · PLDI 2012 |
Programming languages and type systems › type theory
existential types |
0.1 | 1 | 2019 | Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed types · Proc. ACM Program. Lang. 2019 |
Programming languages and type systems › type theory
dependent types |
0.0 | 1 | 2004 | Tridirectional typechecking · POPL 2004 |
Programming languages and type systems › type inference
principal types |
0.0 | 1 | 2004 | Tridirectional typechecking · POPL 2004 |
Programming languages and type systems
type checking |
0.0 | 1 | 2004 | Tridirectional typechecking · POPL 2004 |
Programming languages and type systems
type systems |
0.0 | 1 | 2004 | Tridirectional typechecking · POPL 2004 |
Programming languages and type systems
type theory |
0.0 | 1 | 2004 | Tridirectional typechecking · POPL 2004 |
Algorithms and data structures
dynamic algorithms |
0.0 | 1 | 2012 | Type-directed automatic incrementalization · PLDI 2012 |
Algorithms and data structures › dynamic algorithms
incremental algorithms |
0.0 | 1 | 2012 | Type-directed automatic incrementalization · PLDI 2012 |
Methods — techniques the papers use, named apart from their topics
focalization · 1.0call-by-push-value · 0.7bidirectional typing · 0.7SMT · 0.7soundness and completeness proof · 0.4refinement types · 0.4type theory · 0.3refinement typing · 0.3from-scratch consistency proof · 0.2core calculus · 0.2type-directed compilation · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2023 | Focusing on Refinement TypingabstractWe present a logically principled foundation for systematizing, in a way that works with any computational effect and evaluation order, SMT constraint generation seen in refinement type systems for functional programming languages. By carefully combining a focalized variant of call-by-push-value, bidirectional typing, and our novel technique of value-determined indexes, our system generates solvable SMT constraints without existential (unification) variables. We design a polarized subtyping relation allowing us to prove our logically focused typing algorithm is sound, complete, and decidable. We prove type soundness of our declarative system with respect to an elementary domain-theoretic denotational semantics. Type soundness implies, relatively simply, the total correctness and logical consistency of our system. The relative ease with which we obtain both algorithmic and semantic results ultimately stems from the proof-theoretic technique of focalization. Dimitrios J. Economou, Neelakantan R. Krishnaswami, Jana Dunfield |
ACM Trans. Program. Lang. Syst. | 3 |
| 2019 | Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed typesabstractBidirectional typechecking, in which terms either synthesize a type or are checked against a known type, has become popular for its applicability to a variety of type systems, its error reporting, and its ease of implementation. Following principles from proof theory, bidirectional typing can be applied to many type constructs. The principles underlying a bidirectional approach to indexed types (generalized algebraic datatypes) are less clear. Building on proof-theoretic treatments of equality, we give a declarative specification of typing based on focalization. This approach permits declarative rules for coverage of pattern matching, as well as support for first-class existential types using a focalized subtyping judgment. We use refinement types to avoid explicitly passing equality proofs in our term syntax, making our calculus similar to languages such as Haskell and OCaml. We also extend the declarative specification with an explicit rules for deducing when a type is principal, permitting us to give a complete declarative specification for a rich type system with significant type inference. We also give a set of algorithmic typing rules, and prove that it is sound and complete with respect to the declarative system. The proof requires a number of technical innovations, including proving soundness and completeness in a mutually recursive fashion. Jana Dunfield, Neelakantan R. Krishnaswami |
Proc. ACM Program. Lang. | 1 |
| 2017 | Extensible Datasort Refinements
Jana Dunfield |
ESOP | 1 |
| 2017 | Sums of uncertainty: refinements go gradualabstractA long-standing shortcoming of statically typed functional languages is that type checking does not rule out pattern-matching failures (run-time match exceptions). Refinement types distinguish different values of datatypes; if a program annotated with refinements passes type checking, pattern-matching failures become impossible. Unfortunately, refinement is a monolithic property of a type, exacerbating the difficulty of adding refinement types to nontrivial programs. Khurram A. Jafery, Jana Dunfield |
POPL | 2 |
| 2015 | Elaborating evaluation-order polymorphismabstractWe classify programming languages according to evaluation order: each language fixes one evaluation order as the default, making it transparent to program in that evaluation order, and troublesome to program in the other. This paper develops a type system that is impartial with respect to evaluation order. Evaluation order is implicit in terms, and explicit in types, with by-value and by-name versions of type connectives. A form of intersection type quantifies over evaluation orders, describing code that is agnostic over (that is, polymorphic in) evaluation order. By allowing such generic code, programs can express the by-value and by-name versions of a computation without code duplication. We also formulate a type system that only has by-value connectives, plus a type that generalizes the difference between by-value and by-name connectives: it is either a suspension (by name) or a "no-op" (by value). We show a straightforward encoding of the impartial type system into the more economical one. Then we define an elaboration from the economical language to a call-by-value semantics, and prove that elaborating a well-typed source program, where evaluation order is implicit, produces a well-typed target program where evaluation order is explicit. We also prove a simulation between evaluation of the target program and reductions (either by-value or by-name) in the source program. Finally, we prove that typing, elaboration, and evaluation are faithful to the type annotations given in the source program: if the programmer only writes by-value types, no by-name reductions can occur at run time. Jana Dunfield |
ICFP | 1 |
| 2015 | Incremental computation with namesabstractOver the past thirty years, there has been significant progress in developing general-purpose, language-based approaches to incremental computation, which aims to efficiently update the result of a computation when an input is changed. A key design challenge in such approaches is how to provide efficient incremental support for a broad range of programs. In this paper, we argue that first-class names are a critical linguistic feature for efficient incremental computation. Names identify computations to be reused across differing runs of a program, and making them first class gives programmers a high level of control over reuse. We demonstrate the benefits of names by presenting Nominal Adapton, an ML-like language for incremental computation with names. We describe how to use Nominal Adapton to efficiently incrementalize several standard programming patterns---including maps, folds, and unfolds---and show how to build efficient, incremental probabilistic trees and tries. Since Nominal Adapton's implementation is subtle, we formalize it as a core calculus and prove it is from-scratch consistent, meaning it always produces the same answer as simply re-running the computation. Finally, we demonstrate that Nominal Adapton can provide large speedups over both from-scratch computation and Adapton, a previous state-of-the-art incremental computation system. Matthew A. Hammer, Jana Dunfield, Kyle Headley, Nicholas Labich, Jeffrey S. Foster, Michael Hicks 0001, David Van Horn |
OOPSLA | 2 |
| 2014 | Implicit self-adjusting computation for purely functional programsabstractAbstract Computational problems that involve dynamic data, such as physics simulations and program development environments, have been an important subject of study in programming languages. Building on this work, recent advances in self-adjusting computation have developed techniques that enable programs to respond automatically and efficiently to dynamic changes in their inputs. Self-adjusting programs have been shown to be efficient for a reasonably broad range of problems, but the approach still requires an explicit programming style, where the programmer must use specific monadic types and primitives to identify, create, and operate on data that can change over time. We describe techniques for automatically translating purely functional programs into self-adjusting programs. In this implicit approach, the programmer need only annotate the (top-level) input types of the programs to be translated. Type inference finds all other types, and a type-directed translation rewrites the source program into an explicitly self-adjusting target program. The type system is related to information-flow type systems and enjoys decidable type inference via constraint solving. We prove that the translation outputs well- typed self-adjusting programs and preserves the source program's input–output behavior, guaranteeing that translated programs respond correctly to all changes to their data. Using a cost semantics, we also prove that the translation preserves the asymptotic complexity of the source program. Yan Chen 0001, Jana Dunfield, Matthew A. Hammer, Umut A. Acar |
J. Funct. Program. | 2 |
| 2014 | Elaborating intersection and union typesabstractAbstract Designing and implementing typed programming languages is hard. Every new type system feature requires extending the metatheory and implementation, which are often complicated and fragile. To ease this process, we would like to provide general mechanisms that subsume many different features. In modern type systems, parametric polymorphism is fundamental, but intersection polymorphism has gained little traction in programming languages. Most practical intersection type systems have supported only refinement intersections , which increase the expressiveness of types (more precise properties can be checked) without altering the expressiveness of terms; refinement intersections can simply be erased during compilation. In contrast, unrestricted intersections increase the expressiveness of terms, and can be used to encode diverse language features, promising an economy of both theory and implementation. We describe a foundation for compiling unrestricted intersection and union types: an elaboration type system that generates ordinary λ-calculus terms. The key feature is a Forsythe-like merge construct. With this construct, not all reductions of the source program preserve types; however, we prove that ordinary call-by-value evaluation of the elaborated program corresponds to a type-preserving evaluation of the source program. We also describe a prototype implementation and applications of unrestricted intersections and unions: records, operator overloading, and simulating dynamic typing. Jana Dunfield |
J. Funct. Program. | 1 |
| 2013 | Complete and easy bidirectional typechecking for higher-rank polymorphismabstractBidirectional typechecking, in which terms either synthesize a type or are checked against a known type, has become popular for its scalability (unlike Damas-Milner type inference, bidirectional typing remains decidable even for very expressive type systems), its error reporting, and its relative ease of implementation. Following design principles from proof theory, bidirectional typing can be applied to many type constructs. The principles underlying a bidirectional approach to polymorphism, however, are less obvious. We give a declarative, bidirectional account of higher-rank polymorphism, grounded in proof theory; this calculus enjoys many properties such as eta-reduction and predictability of annotations. We give an algorithm for implementing the declarative system; our algorithm is remarkably simple and well-behaved, despite being both sound and complete. Jana Dunfield, Neelakantan R. Krishnaswami |
ICFP | 1 |
| 2012 | Elaborating intersection and union typesabstractDesigning and implementing typed programming languages is hard. Every new type system feature requires extending the metatheory and implementation, which are often complicated and fragile. To ease this process, we would like to provide general mechanisms that subsume many different features. Jana Dunfield |
ICFP | 1 |
| 2012 | Type-directed automatic incrementalizationabstractApplication data often changes slowly or incrementally over time. Since incremental changes to input often result in only small changes in output, it is often feasible to respond to such changes asymptotically more efficiently than by re-running the whole computation. Traditionally, realizing such asymptotic efficiency improvements requires designing problem-specific algorithms known as dynamic or incremental algorithms, which are often significantly more complicated than conventional algorithms to design, analyze, implement, and use. A long-standing open problem is to develop techniques that automatically transform conventional programs so that they correctly and efficiently respond to incremental changes. Yan Chen 0001, Jana Dunfield, Umut A. Acar |
PLDI | 2 |
| 2011 | Implicit self-adjusting computation for purely functional programsabstractComputational problems that involve dynamic data, such as physics simulations and program development environments, have been an important subject of study in programming languages. Building on this work, recent advances in self-adjusting computation have developed techniques that enable programs to respond automatically and efficiently to dynamic changes in their inputs. Self-adjusting programs have been shown to be efficient for a reasonably broad range of problems but the approach still requires an explicit programming style, where the programmer must use specific monadic types and primitives to identify, create and operate on data that can change over time. Yan Chen 0001, Jana Dunfield, Matthew A. Hammer, Umut A. Acar |
ICFP | 2 |
| 2008 | Programming with proofs and explicit contextsabstractThis paper explores a new point in the design space of functional programming: functional programming with dependently-typed higher-order data structures described in the logical framework LF. This allows us to program with proofs as higher-order data. We present a decidable bidirectional type system that distinguishes between dependently-typed data and computations. To support reasoning about open data, our foundation makes contexts explicit. This provides us with a concise characterization of open data, which is crucial to elegantly describe proofs. In addition, we present an operational semantics for this language based on higherorder pattern matching for dependently typed objects. Based on this development, we prove progress and preservation Brigitte Pientka, Jana Dunfield |
PPDP | 2 |
| 2004 | Tridirectional typecheckingabstractIn prior work we introduced a pure type assignment system that encompasses a rich set of property types, including intersections, unions, and universally and existentially quantified dependent types. This system was shown sound with respect to a call-by-value operational semantics with effects, yet is inherently undecidable.In this paper we provide a decidable formulation for this system based on bidirectional checking, combining type synthesis and analysis following logical principles. The presence of unions and existential quantification requires the additional ability to visit subterms in evaluation position before the context in which they occur, leading to a tridirectional type system. While soundness with respect to the type assignment system is immediate, completeness requires the novel concept of contextual type annotations, introducing a notion from the study of principal typings into the source program. Jana Dunfield, Frank Pfenning |
POPL | 1 |
| 2003 | Type Assignment for Intersections and Unions in Call-by-Value Languages
Jana Dunfield, Frank Pfenning |
FoSSaCS | 1 |