1. Course Syllabus

1.1. Lectures (Weeks 1-7)

The list of topics below is a subject of possible minor changes.

Foundations of Distributed Computing

  • Week 1: Introduction and Basic Results
    • Module Logistics
    • Asynchronous Communication Model
    • Failure Modes
    • Time, Ordering of events, Vector Clocks
    • Lamport’s distributed locking
  • Week 2: SMR and Consensus
    • State Machine Replication
    • Two-Phase Commit
    • Distributed consensus and its properties
    • Paxos and its variants
  • Week 3: Byzantine Fault Tolerance
    • FLP Impossibility
    • Viewstamped Replication and Raft
    • CAP Theorem, PACELC
    • Byzantine generals problem
    • Practical Byzantine Fault-Tolerance

Verification Techniques and Tools

  • Week 4: Linearizability, Refinement, and Simulations
    • Linearizablity
    • Refinement and Proof by Simulation
  • Week 5: Hoare-style Reasoning and Auxiliary State
    • Owicki-Gries Proofs and Auxiliary Variables
    • Rely-Guarantee Reasoning
    • Verifying Linearisability with Auxiliary Variables and RG
    • Proving Paxos linearisable
  • Week 6: TLA+ and Model Checking
    • TLA+ and PlusCal
    • Tool demo: Examples of specifying systems in TLA+

Mid-Term Break

  • Week 7: More TLA+; Ivy
    • Tool demo: using TLA+ for Smart Contracts
    • Effectively Propositional logic
    • Interactive Invariant Inference
    • Tool demo: Ivy and its applications

1.3. Papers to present at the seminars

Below is the tentative list of suggested papers. Each week we will have two presentations by the module attendees. Papers in the following list are grouped according to the common themes. Even not all of them will appear at seminars, you might want to check them out for relevant information on your chosen presentation subjects.

If there is a paper you’d like to discuss that is not in the following list, please, feel free to suggest it!

Deductive Verification

(Semi-)Automated Verification

Mechanised Reasoning about BFT

Verified Blockchain (and similar) Protocols

Testing an Model Checking

Conflict-free Replicated Data Types

Related Techniques