EDBT 2026 Demo / reviewers in the wild / expert
Phuc C. Nguyen
dblp:132/9068
· DBLP profile ↗
7ranked-venue papers
5as first author
1since 2021 · last 2021
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 7 · 5 first-author · 1 since 2021
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
4 papers |
Programming languages and type systems · 44% Program verification · 41% Program analysis · 12% |
Topics — the 12 heaviest of 14, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program verification
contract verification |
0.8 | 2 | 2021 | Corpse reviver: sound and efficient gradual typing via contract verification · Proc. ACM Program. Lang. 2021 Soft contract verification for higher-order stateful programs · Proc. ACM Program. Lang. 2018 |
Programming languages and type systems › type systems
gradual typing |
0.5 | 1 | 2021 | Corpse reviver: sound and efficient gradual typing via contract verification · Proc. ACM Program. Lang. 2021 |
Programming languages and type systems › type systems › gradual typing
sound gradual typing |
0.5 | 1 | 2021 | Corpse reviver: sound and efficient gradual typing via contract verification · Proc. ACM Program. Lang. 2021 |
Programming languages and type systems
type systems |
0.5 | 1 | 2021 | Corpse reviver: sound and efficient gradual typing via contract verification · Proc. ACM Program. Lang. 2021 |
Programming languages and type systems › functional programming
higher-order programs |
0.4 | 1 | 2019 | Size-change termination as a contract: dynamically and statically enforcing termination for higher-order programs · PLDI 2019 |
Program verification › termination analysis
size-change termination |
0.4 | 1 | 2019 | Size-change termination as a contract: dynamically and statically enforcing termination for higher-order programs · PLDI 2019 |
Program verification
termination analysis |
0.4 | 1 | 2019 | Size-change termination as a contract: dynamically and statically enforcing termination for higher-order programs · PLDI 2019 |
Program analysis
static analysis |
0.3 | 1 | 2018 | Soft contract verification for higher-order stateful programs · Proc. ACM Program. Lang. 2018 |
Program verification › model checking
counterexample generation |
0.2 | 1 | 2015 | Relatively complete counterexamples for higher-order programs · PLDI 2015 |
Program analysis
symbolic execution |
0.2 | 1 | 2015 | Relatively complete counterexamples for higher-order programs · PLDI 2015 |
Compilers and program optimization › compiler optimization › redundancy elimination
run-time check elimination |
0.1 | 1 | 2021 | Corpse reviver: sound and efficient gradual typing via contract verification · Proc. ACM Program. Lang. 2021 |
Programming languages and type systems › functional programming
higher-order functions |
0.1 | 1 | 2018 | Soft contract verification for higher-order stateful programs · Proc. ACM Program. Lang. 2018 |
Methods — techniques the papers use, named apart from their topics
static analysis · 0.5contract verification · 0.5size-change graphs · 0.4contract enforcement · 0.4symbolic execution · 0.3mechanized proof · 0.3behavioral approximation · 0.3first-order solver · 0.2SMT solving · 0.2
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2021 | Corpse reviver: sound and efficient gradual typing via contract verificationabstractGradually typed programming languages permit the incremental addition of static types to untyped programs. To remain sound, languages insert run-time checks at the boundaries between typed and untyped code. Unfortunately, performance studies have shown that the overhead of these checks can be disastrously high, calling into question the viability of sound gradual typing. In this paper, we show that by building on existing work on soft contract verification, we can reduce or eliminate this overhead. Our key insight is that while untyped code cannot be trusted by a gradual type system, there is no need to consider only the worst case when optimizing a gradually typed program. Instead, we statically analyze the untyped portions of a gradually typed program to prove that almost all of the dynamic checks implied by gradual type boundaries cannot fail, and can be eliminated at compile time. Our analysis is modular, and can be applied to any portion of a program. We evaluate this approach on a dozen existing gradually typed programs previously shown to have prohibitive performance overhead—with a median overhead of 2.5× and up to 80.6× in the worst case—and eliminate all overhead in most cases, suffering only 1.5× overhead in the worst case. Cameron Moy, Phuc C. Nguyen, Sam Tobin-Hochstadt, David Van Horn |
Proc. ACM Program. Lang. | 2 |
| 2019 | Size-change termination as a contract: dynamically and statically enforcing termination for higher-order programsabstractTermination is an important but undecidable program property, which has led to a large body of work on static methods for conservatively predicting or enforcing termination. One such method is the size-change termination approach of Lee, Jones, and Ben-Amram, which operates in two phases: (1) abstract programs into “size-change graphs,” and (2) check these graphs for the size-change property: the existence of paths that lead to infinite decreasing sequences. Phuc C. Nguyen, Thomas Gilray, Sam Tobin-Hochstadt, David Van Horn |
PLDI | 1 |
| 2018 | Soft contract verification for higher-order stateful programsabstractSoftware contracts allow programmers to state rich program properties using the full expressive power of an object language. However, since they are enforced at runtime, monitoring contracts imposes significant overhead and delays error discovery. So contract veri cation aims to guarantee all or most of these properties ahead of time, enabling valuable optimizations and yielding a more general assurance of correctness. Existing methods for static contract verification satisfy the needs of more restricted target languages, but fail to address the challenges unique to those conjoining untyped, dynamic programming, higher-order functions, modularity, and statefulness. Our approach tackles all these features at once, in the context of the full Racket system—a mature environment for stateful, higher-order, multi-paradigm programming with or with- out types. Evaluating our method using a set of both pure and stateful benchmarks, we are able to verify 99.94% of checks statically (all but 28 of 49, 861). Stateful, higher-order functions pose significant challenges for static contract verification in particular. In the presence of these features, a modular analysis must permit code from the current module to escape permanently to an opaque context (unspecified code from outside the current module) that may be stateful and therefore store a reference to the escaped closure. Also, contracts themselves, being predicates wri en in unrestricted Racket, may exhibit stateful behavior; a sound approach must be robust to contracts which are arbitrarily expressive and interwoven with the code they monitor. In this paper, we present and evaluate our solution based on higher-order symbolic execution, explain the techniques we used to address such thorny issues, formalize a notion of behavioral approximation, and use it to provide a mechanized proof of soundness. Phuc C. Nguyen, Thomas Gilray, Sam Tobin-Hochstadt, David Van Horn |
Proc. ACM Program. Lang. | 1 |
| 2017 | Higher order symbolic execution for contract verification and refutationabstractAbstract We present a new approach to automated reasoning about higher-order programs by endowing symbolic execution with a notion of higher-order, symbolic values. To validate our approach, we use it to develop and evaluate a system for verifying and refuting behavioral software contracts of components in a functional language, which we call soft contract verification . In doing so, we discover a mutually beneficial relation between behavioral contracts and higher-order symbolic execution. Contracts aid symbolic execution by providing a rich language of specifications serving as a basis of symbolic higher-order values; the theory of blame enables modular verification and leads to the theorem that verified components can't be blamed ; and the run-time monitoring of contracts enables soft verification whereby verified and unverified components can safely interact. Conversely, symbolic execution aids contracts by providing compile-time verification and automated test case generation from counter-examples to verification. This relation between symbolic exuection and contracts engenders a virtuous cycle encouraging the gradual use of contracts. Our approach is able to analyze first-class contracts, recursive data structures, unknown functions, and control-flow-sensitive refinements of values, which are all idiomatic in dynamic languages. It makes effective use of off-the-shelf solvers to decide problems without heavy encodings. Counterexample search is sound and relatively complete with respect to a first-order solver for base type values and counter-examples are reported as concrete values, including functions. Therefore, it can form the basis of automated verification and bug-finding tools for higher-order programs. The approach is competitive with a range of existing tools—including type systems, flow analyzers, and model checkers—on their own benchmarks. We have built a prototype to analyze programs written in Racket and report on its effectiveness in verifying and refuting contracts. Phuc C. Nguyen, Sam Tobin-Hochstadt, David Van Horn |
J. Funct. Program. | 1 |
| 2017 | Abstracting definitional interpreters (functional pearl)abstractIn this functional pearl, we examine the use of definitional interpreters as a basis for abstract interpretation of higher-order programming languages. As it turns out, definitional interpreters, especially those written in monadic style, can provide a nice basis for a wide variety of collecting semantics, abstract interpretations, symbolic executions, and their intermixings. But the real insight of this story is a replaying of an insight from Reynold's landmark paper, Definitional Interpreters for Higher-Order Programming Languages , in which he observes definitional interpreters enable the defined-language to inherit properties of the defining-language. We show the same holds true for definitional abstract interpreters. Remarkably, we observe that abstract definitional interpreters can inherit the so-called “pushdown control flow” property, wherein function calls and returns are precisely matched in the abstract semantics, simply by virtue of the function call mechanism of the defining-language. The first approaches to achieve this property for higher-order languages appeared within the last ten years, and have since been the subject of many papers. These approaches start from a state-machine semantics and uniformly involve significant technical engineering to recover the precision of pushdown control flow. In contrast, starting from a definitional interpreter, the pushdown control flow property is inherent in the meta-language and requires no further technical mechanism to achieve. David Darais, Nicholas Labich, Phuc C. Nguyen, David Van Horn |
Proc. ACM Program. Lang. | 3 |
| 2015 | Relatively complete counterexamples for higher-order programsabstractIn this paper, we study the problem of generating inputs to a higher-order program causing it to error. We first approach the problem in the setting of PCF, a typed, core functional language and contribute the first relatively complete method for constructing counterexamples for PCF programs. The method is relatively complete with respect to a first-order solver over the base types of PCF. In practice, this means an SMT solver can be used for the effective, automated generation of higher-order counterexamples for a large class of programs. We achieve this result by employing a novel form of symbolic execution for higher-order programs. The remarkable aspect of this symbolic execution is that even though symbolic higher-order inputs and values are considered, the path condition remains a first-order formula. Our handling of symbolic function application enables the reconstruction of higher-order counterexamples from this first-order formula. After establishing our main theoretical results, we sketch how to apply the approach to untyped, higher-order, stateful languages with first-class contracts and show how counterexample generation can be used to detect contract violations in this setting. To validate our approach, we implement a tool generating counterexamples for erroneous modules written in Racket. Phuc C. Nguyen, David Van Horn |
PLDI | 1 |
| 2014 | Soft contract verificationabstractBehavioral software contracts are a widely used mechanism for governing the flow of values between components. However, run-time monitoring and enforcement of contracts imposes significant overhead and delays discovery of faulty components to run-time. Phuc C. Nguyen, Sam Tobin-Hochstadt, David Van Horn |
ICFP | 1 |