Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.

Phuc C. Nguyen

dblp:132/9068 · DBLP profile ↗
← Back
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

TopicWeightPapersLastEvidence papers
Program verification
contract verification
0.822021
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.512021
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.512021
Corpse reviver: sound and efficient gradual typing via contract verification · Proc. ACM Program. Lang. 2021
Programming languages and type systems
type systems
0.512021
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.412019
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.412019
Size-change termination as a contract: dynamically and statically enforcing termination for higher-order programs · PLDI 2019
Program verification
termination analysis
0.412019
Size-change termination as a contract: dynamically and statically enforcing termination for higher-order programs · PLDI 2019
Program analysis
static analysis
0.312018
Soft contract verification for higher-order stateful programs · Proc. ACM Program. Lang. 2018
Program verification › model checking
counterexample generation
0.212015
Relatively complete counterexamples for higher-order programs · PLDI 2015
Program analysis
symbolic execution
0.212015
Relatively complete counterexamples for higher-order programs · PLDI 2015
Compilers and program optimization › compiler optimization › redundancy elimination
run-time check elimination
0.112021
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.112018
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
YearPublicationVenuePosition
2021 Corpse reviver: sound and efficient gradual typing via contract verification
abstract
Gradually 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 programs
abstract
Termination 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
PLDI1
2018 Soft contract verification for higher-order stateful programs
abstract
Software 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 refutation
abstract
Abstract 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)
abstract
In 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 programs
abstract
In 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
PLDI1
2014 Soft contract verification
abstract
Behavioral 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
ICFP1