Verification of Durable Linearizability of a Persistent Queue

This Website documents KIV-proofs done for [FAoC20]. The earlier version of the proofs used for the paper [FM19] is still available. The project overview gives a graphical overview over the hierarchy of specifications of the project.

DMSQ, Assertions and Invariants

The formal proofs make use of a library (specifications with orange color) that contains a formalization of much of the refinement theory of IO-Automata from [LV95]. The specifications imported from this library contain

.

The proofs of the case study benefit from an automated transformation of programs to a standard IO-Automaton, and the generation of thread-local proof obligations, as described in [FAoC20] that is programmed in KIV. The main specification DMSQ contains the programs annotated with assertions. The data types and axioms for the step relation that are generated from these programs can be found after the separator.

The theorem base of specification DMSQ-proofs contains the generated thread-local proof obligations and the definition of the invariant generated from the assertions as described in [FAoC20]. Most of the effort of mechanizing the case study went into getting the assertions right, and proving all the proof obligations required. The syntax of both specifications is similar to the one of the paper. Here is a rough description and some remarks about small technical differences.

Intermediate Automaton DQ and Abstract Automaton DurQ

The intermediate automaton IDQ and the abstract automaton DURAUT(S) given in [FAoC20] are also specified using the automaton format in in specifications DQ and DurQ. Again data types and axioms for a step relation are generated (shown after the separator). Here are some details:

Refinement proof from DMSQ to DQ

The refinement proof uses the forward simulation defined in specification abs. To map to the refinement theory of [LV95], which has a single internal action τ, the actions of DQ are abstracted to type absAction, which has invoke and response actions, the crash and a "callRun"-action to start a thread as external actions. Specification DMSQ-refines-DQ proves a forward simulation to show refinement. This consists mainly of a proof of a commuting diagram for each step. This proof is broken down into several subproofs:

Refinement proof from DQ to DurQ

Specification DQ-refines-DurQ proves an image-finite backward simulation to show that the intermediate automaton refines. the abstract one. The backward simulation relation "bwabs" is defined in specification bwabs. The relation is usually identity, except that a thread tid, that is before the persistence point in dequeue (pcf(tid) = invDeq) and that has successfully checked the queue to be empty (lsf(tid).obsEmpty is true) may also be related additionally to an abstract state that is after the persistence point and stores return value Empty.

Back to the overview of all KIV projects.
For general informations on KIV and a download site for the whole system refer to this page.


Bibliography

[FAoC20] J. Derrick, S. Doherty, B. Dongol, G. Schellhorn, H. Wehrheim.
Verifying Correctness of Persistent Concurrent Data Structures: A Sound and Complete Method
(submitted to Formal Aspects of Computing)

[FM19] J. Derrick, S. Doherty, B. Dongol, G. Schellhorn, H. Wehrheim.
Verifying Correctness of Persistent Concurrent Data Structures
(FM 2019)

[PPoPP18]    M. Friedman, M. Herlihy, V. J. Marathe, E. Petrank.
A persistent lock-free queue for non-volatile memory.
(PPoPP 2018, pp. 28--40, ACM)

[LV95] N. Lynch, F. Vaandrager
Forward and Backward Simulations -- Part I: Untimed systems
(Information and Computation 1995, vol. 121(2), p. 214--233)


[Imprint] [Data Privacy Statement] [E-Mail]