- Research Article
- 10.1561/2500000067
- Jan 1, 2025
- Foundations and Trends® in Programming Languages
- Yanhong A Liu
- Research Article
- 10.1561/2500000069
- Jan 1, 2025
- Foundations and Trends® in Programming Languages
- Joseph P Near + 1 more
- Research Article
31
- 10.1561/2500000045
- Jan 1, 2019
- Foundations and Trends® in Programming Languages
- Talia Ringer + 4 more
Development of formal proofs of correctness of programs can increase actual and perceived reliability and facilitate better understanding of program specifications and their underlying assumptions. Tools supporting such development have been available for over 40 years, but have only recently seen wide practical use. Projects based on construction of machine-checked formal proofs are now reaching an unprecedented scale, comparable to large software projects, which leads to new challenges in proof development and maintenance. Despite its increasing importance, the field of proof engineering is seldom considered in its own right; related theories, techniques, and tools span many fields and venues. This survey of the literature presents a holistic understanding of proof engineering for program correctness, covering impact in practice, foundations, proof automation, proof organization, and practical proof development.
- Research Article
84
- 10.1561/2500000031
- Jan 1, 2016
- Foundations and Trends® in Programming Languages
- Davide Ancona + 18 more
- Research Article
10
- 10.1561/2500000017
- Jan 1, 2016
- Foundations and Trends® in Programming Languages
- Andrzej S Murawski + 1 more
- Research Article
167
- 10.1561/2500000014
- Jan 1, 2015
- Foundations and Trends® in Programming Languages
- Yannis Smaragdakis + 1 more
- Research Article
16
- 10.1561/2500000001
- Jan 1, 2014
- Foundations and Trends® in Programming Languages
- Véronique Cortier + 1 more
International audience
- Research Article
85
- 10.1561/2500000011
- Jan 1, 2014
- Foundations and Trends® in Programming Languages
- Sebastian Burckhardt
In globally distributed systems, shared state is never perfect. When communication is neither fast nor reliable, we cannot achieve strong consistency, low latency, and availability at the same time. Unfortunately, abandoning strong consistency has wide ramifications. Eventual consistency, though attractive from a performance viewpoint, is challenging to understand and reason about, both for system architects and programmers. To provide robust abstractions, we need not just systems, but also principles: we need the ability to articulate what a consistency protocol is supposed to guarantee, and the ability to prove or refute such claims.In this tutorial, we carefully examine both the what and the how of consistency in distributed systems. First, we deconstruct consistency into individual guarantees relating the data type, the conflict resolution, and the ordering, and then reassemble them into a hierarchy of consistency models that starts with linearizability and gradually descends into sequential, causal, eventual, and quiescent consistency. Second, we present a collection of consistency protocols that illustrate common techniques, and include templates for implementations of arbitrary replicated data types that are fully available under partitions. Third, we demonstrate that our formalizations serve their purpose of enabling proofs and refutations, by proving both positive results (the correctness of the protocols) and a negative result (a version of the CAP theorem for sequential consistency).