https://github.com/kaist-cp/view-hw
Mechanized Proof for Article: "Revamping Hardware Persistency Models: View-Based and Axiomatic Persistency Models for Intel-x86 and Armv8" (PLDI 2021)
https://github.com/kaist-cp/view-hw
armv8 coq-formalization persistency pldi proof semantics theorem x86
Last synced: 6 months ago
JSON representation
Mechanized Proof for Article: "Revamping Hardware Persistency Models: View-Based and Axiomatic Persistency Models for Intel-x86 and Armv8" (PLDI 2021)
- Host: GitHub
- URL: https://github.com/kaist-cp/view-hw
- Owner: kaist-cp
- License: bsd-2-clause
- Created: 2019-10-22T02:21:09.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2021-04-14T08:06:58.000Z (over 4 years ago)
- Last Synced: 2025-02-15T02:26:35.600Z (8 months ago)
- Topics: armv8, coq-formalization, persistency, pldi, proof, semantics, theorem, x86
- Language: Coq
- Homepage: https://cp.kaist.ac.kr/pmem
- Size: 1.41 MB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# View-based semantics for hardware
[![CI][docker-action-shield]][docker-action-link]
[docker-action-shield]: https://github.com/kaist-cp/view-hw/workflows/Docker%20CI/badge.svg?branch=master
[docker-action-link]: https://github.com/kaist-cp/view-hw/actions?query=workflow:"Docker%20CI"Related publications:
- Christopher Pulte, Jean Pichon-Pharabod, Jeehoon Kang, Sung-Hwan Lee, Chung-Kil Hur. Promising-ARM/RISC-V: a simpler and faster operational concurrency model. PLDI 2019.
This repository is a fork of [this paper's artifact](https://github.com/snu-sf/promising-arm).
- Kyeongmin Cho, Sung-Hwan Lee, Azalea Raad, and Jeehoon Kang. Revamping Hardware Persistency Models: View-Based and Axiomatic Persistency Models for Intel-x86 and Armv8. PLDI 2021.
## Installation
We assume you use **Ubuntu 20.04** and **Coq 8.13.1 or later**.
### Requirements
- [opam](https://opam.ocaml.org/)
```
sudo apt install -y build-essential rsync opam
opam init
opam switch create 4.10.0 # or later. If your system OCaml version is >= 4.10.0, you can use it.
eval $(opam env)
opam update
```- [Coq 8.13.1](https://coq.inria.fr/)
```
opam install coq.8.13.1
```### Build
- `make -j`: quickly build without checking the proofs.
- `./build.sh`: build with checking all the proofs. It will incrementally copy the development to `.build` sub-directory, and then build there.
- `./status.sh`: check if there is any `admit` in the proofs. (It will print a single result, which is tactic in the library used for development and has nothing to do with the proofs.)
- Interactive Theorem Proving: use [ProofGeneral](https://proofgeneral.github.io/) or
[CoqIDE](https://coq.inria.fr/download). Note that `make` creates `_CoqProject`, which is then
used by ProofGeneral and CoqIDE. To use it:
+ ProofGeneral: use a recent version.
+ CoqIDE: configure it to use `_CoqProject`: `Edit` > `Preferences` > `Project`: change
`ignored` to `appended to arguments`.### Our results
Our proofs are based on [a prior work](https://github.com/snu-sf/promising-arm) for Armv8-view, originally named "Promising-ARMv8". The prior work contains:
- the proof of the equivalence between Armv8-view and Armv8-axiom
- some proofs about certificationWe extend the existing proofs for Armv8 to persistency. In addition, we newly define Px86-view/Px86-axiom and prove the theorems of it mentioned in the paper.
#### Model
- `lib`(open source) and `src/lib` contain libraries not necessarily related to relaxed-memory concurrency and persistency.
- `src/lib/Lang.v`: Definition of assembly-like language and its interpretation for both x86 and Armv8 (corresponding to Figure 13)
- `src/promising/TsoPromising.v`: Definition of Px86-view and Px86-prom (corresponding to Figure 11 and 12)
- `src/axiomatic/TsoAxiomatic.v`: Definition of Px86-axiom (corresponding to Figure 7)
- `src/promising/Promising.v`: Definition of PArmv8-view without
certification (corresponding to Figure 14, 15 and 16)- `src/axiomatic/Axiomatic.v`: Definition of PArmv8-axiom (corresponding to Figure 9)
- `src/lcertify`: Thread-local certification
#### Results
- Background definitions
+ A **behavior** is either (1) post-crash image of memory or (2) non-crash terminal image of memory.
This is the simplest possible definition of behaviors for NVM; we may refine the concept by incorporating I/O or other kinds of externally visible interactions.
We believe it is straightforward to incorporate such interactions in the definition of behaviors as future work.
+ The **behaviors** of a program is (1) the set of **post-crash memories** and (2) the set of **non-crash terminal memories** resulting from an execution of the program.
+ A behavior is **allowed** in a program iff the behavior---either post-crash or non-crash terminal image---is in the corresponding set of memories of the program's behaviors.
+ A model, say X, **refines** another model, say Y, iff the set of behaviors according to X, is a subset of that according to Y.
+ A model, say X, is **equivalent** to another model, say Y, iff the set of behaviors according to X coincides with that according to Y.- Theorem 5.3: Equivalence between Px86-view and Px86-axiom
+ Theorem `axiomatic_to_promising` in `src/equiv/TsoAtoP.v`:
Px86-axiom refines Px86-prom.
+ Theorem `promising_to_axiomatic` in `src/equiv/TsoPFtoA.v`:
Px86-prom refines Px86-axiom.
* `TsoPFtoA1.v`: construction of axiomatic execution from promising execution
* `TsoPFtoA2.v`, `TsoPFtoA3.v`: definitions and lemmas for main proof
* `TsoPFtoA4*.v`: proof for validity of constructed axiomatic execution
* `TsoPFtoA4SL.v`: simulation between promising and axiomatic execution
* `TsoPFtoA4OBR.v`, `TsoPFtoA4OBW.v`, `TsoPFtoA4FR.v`, `TsoPFtoA4FOB.v`, `TsoPFtoA4FP.v`: proof for "external" axiom+ Lemma 5.1: Equivalence between Px86-prom and Px86-view
* The paper says that after the x86-prom and x86-view have been proven to be equivalent (Theorem 5.2)
and then extended to persistency, the proof in Coq was done right away.
* Theorem `promising_to_view` in `src/equiv/TsoPFtoV.v`:
Px86-prom refines Px86-view.
* Theorem `view_to_promising` in `src/equiv/TsoVtoP.v`:
Px86-view refines Px86-prom.- Theorem 6.2: Equivalence between PArmv8-view and PArmv8-axiom
+ Theorem `axiomatic_to_promising` in `src/equiv/AtoP.v`:
PArmv8-axiom refines PArmv8-view without certification.
+ Theorem `promising_to_axiomatic` in `src/equiv/PFtoA.v`:
PArmv8-view without certification refines PArmv8-axiom.
* `PFtoA1.v`: construction of axiomatic execution from promising execution
* `PFtoA2.v`, `PFtoA3.v`: definitions and lemmas for main proof
* `PFtoA4*.v`: proof for validity of constructed axiomatic execution
* `PFtoA4SL.v`: simulation between promising and axiomatic execution
* `PFtoA4OBR.v`, `PFtoA4OBW.v`, `PFtoA4FR.v`, `PFtoA4FOB.v`, `PFtoA4FP.v`: proof for "external" axiom
* `PFtoA4Atomic.v`: proof for "atomic" axiom
+ Theorem `certified_exec_equivalent` in `src/lcertify/CertifyComplete.v`:
PArmv8-view and PArmv8-view without certification are equivalent.### Results of prior work
Theorems included in the code but not directly related to what we did are:
- Theorem `certified_deadlock_free` in `src/lcertify/CertifyProgressRiscV.v`:
Promising-RISC-V is deadlock-free.
- Theorem `certified_promise_correct` in `src/lcertify/FindCertify.v`:
`find_and_certify` is correct.
+ Theorem `certified_promise_sound` in `src/lcertify/FindCertify.v`:
Assume the thread configuration `` is certified, and promising
`p` leads to ``. Then `` is certified if `p` is in
`find_and_certify `.
+ Theorem `certified_promise_complete` in `src/lcertify/FindCertify.v`:
Assume the thread configuration `` is certified, and promising
`p` leads to ``. Then `p` is in `find_and_certify ` if
`` is certified.