From 61064dbf1dd1bf6d845b157265d35c0dfdea416d Mon Sep 17 00:00:00 2001
From: Hoang-Hai Dang <haidang@mpi-sws.org>
Date: Wed, 19 Apr 2017 15:55:09 +0200
Subject: [PATCH] update README

---
 README.md | 49 +++++++++++++++++++++++++++++++++++--------------
 1 file changed, 35 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index fe6d11d9..cf4e1db4 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,16 @@
 # iGPS & iRSL - encoding of GPS and RSL in Iris
 
-## Content
-
 This repository contains the Coq development of **iGPS** and **iRSL**,
 which are variants of **GPS** and **RSL** in Iris.
 
-### Dependencies
+## Dependencies
 
 The master branch is known to compile with:
 * Coq 8.6
 * Ssreflect 1.6.1
 * Iris 3.0
 
-### Build
+## Build
 
 The easiest way to build the development is to use OPAM.
 Go to [coq/ra](coq/ra) and then `make build-dep`.
@@ -20,17 +18,40 @@ All the dependencies will be built and installed by OPAM before
 the actual compilation of the development.
 
 Manually, one can build and install Iris
-(currently
-[Iris@01d12014](https://gitlab.mpi-sws.org/FP/iris-coq/commit/01d12014855abe6adaea20bbb35b1e9beadff14e)),
+(currently [Iris@01d12014][iris]),
 and then `make` in [coq/ra](coq/ra).
 
-### Structure
+## Structure
+
+The Coq development is in folder [coq/ra/](coq/ra).
 
-* The operational semantics is in `machine.v`. The language is in `lang.v`.
-* The base logic is in the `base` folder. The model is in `base/ghosts.v`.
+* The operational semantics is in [machine.v](coq/ra/machine.v). The language is in [lang.v](coq/ra/lang.v).
+* The base logic is in the [base/](coq/ra/base) folder.
   Each base rule is proven in a separate file.
-* iRSL's main rules are in `rsl_instances.v`. The model is in `rsl.v`.
-* Non-atomic rules are in `na.v`.
-* iGPS's rules are in the `gps` folder. The model is in `gps/shared.v`
-* Examples are in the `examples` folder.
-* `tests/message_passing.v` contains a closed proof of MP without Iris statements.
\ No newline at end of file
+* iRSL's main rules are in [rsl_instances.v](coq/ra/rsl_instances.v). The model is in [rsl.v](coq/ra/rsl.v).
+* Non-atomic rules are in [na.v](coq/ra/na.v).
+* iGPS's rules are in the [gps/](coq/ra/gps) folder. The model is in [gps/shared.v](coq/ra/gps/shared.v)
+* Examples are in the [examples](coq/ra/examples) folder.
+* [tests/message_passing.v](coq/ra/tests/message_passing.v) contains a closed proof (adequacy) of MP without Iris statements.
+
+#### Mapping with ECOOP 2017 paper submission
+
+| Paper section | Paper definitions/rules/lemmas | Coq definitions/lemmas | in Coq file  (under [coq/ra](coq/ra))                            |
+| ------------- | ------------------------------ | ---------------------- | ------------------------------------- |
+| 2.2           | Operational semantics          | `machine_red`, split into `thread_red` (RA reductions), `drf_red` (NA reductions), `alloc_red` (allocation reductions)        | [machine.v](coq/ra/machine.v)  |
+| 2.3           | $`\lambda_{RN}`$ language      | `expr` (expressions) and `step` (reductions) | [lang.v](coq/ra/lang.v)   |
+| 3.2           | Base logic local assertions and invariants | `Seen` `Hist` `HInv` `PSInv` | [base/ghosts.v](coq/ra/base/ghosts.v) |
+| 3.2           | Base logic NA rules            | `f_read_na` `f_write_na` `f_alloc` `f_dealloc` | [base](coq/ra/base)/na_*.v  [base/alloc.v](coq/ra/base/alloc.v) [base/dealloc.v](coq/ra/base/dealloc.v) |
+| 4.1           | iGPS NA rules                   | `na_read` `na_write`; **fractional versions**: `na_read_frac` `na_write_frac` | [na.v](coq/ra/na.v) |
+| 4.1           | iGPS normal (*plain*) protocol rules | `GPS_PP_*` lemmas    | [gps/plain.v](coq/ra/gps/plain.v)  |
+| 4.1, Appendix C | iGPS escrows and exchanges | `exchange_*` and `escrows_*` lemmas | [escrows.v](coq/ra/escrows.v) |
+| 4.2, Appendix B | iGPS single-writer protocol rules | `GPS_SW_*` lemmas; **extra versions**: `GPS_nSW_*` | [gps/singlewriter.v](coq/ra/gps/singlewriter.v) |
+| 4.3, Appendix F | iGPS model                    | GPS assertions defined by `vPred_*`; GPS invariant `gps_inv`; soundness proofs depend on **raw protocols** rules `RawProto_*`         | [viewpred.v](coq/ra/viewpred.v) [gps/shared.v](coq/ra/gps/shared.v) [gps/read.v](coq/ra/gps/read.v) [gps/write.v](coq/ra/gps/write.v) [gps/cas.v](coq/ra/gps/cas.v) [gps/fai.v](coq/ra/gps/fai.v) |
+| 5, Appendix D  | iRSL rules | `Rel_*` `Acq_*` `RMWAcq_*` lemmas; **fractional versions**: `Relp_*` `Acqp_*` `RMWAcqp_*` lemmas | [rsl_instances.v](coq/ra/rsl_instances.v); model in [rsl.v](coq/ra/rsl.v) |
+| 5              | Allocations and Deallocations | `alloc` `dealloc` `malloc_spec`   | [malloc.v](coq/ra/malloc.v)   |
+| 5              | Fractional protocols | **single-writer**: `GPS_FWP_*` and `GPS_FRP_*` lemmas; **plain** `GPS_FP_*`; **extra versions**: `GPS_nFWP_*` | [gps/singlewriter.v](coq/ra/gps/singlewriter.v) [gps/fractional.v](coq/ra/gps/fractional.v) |
+| 5, Appendix E | Examples: message passing, circular buffer, read-copy-update (RCU), spin lock, bounded ticket lock | all the `*_spec` lemmas. Other examples: Michael-Scott queue, SC stack, Treiber stack  | [examples/circ_buffer.v](coq/ra/examples/circ_buffer.v) [examples/message_passing.v](coq/ra/examples/message_passing.v) [examples/msqueue.v](coq/ra/examples/msqueue.v) [examples/rcu.v](coq/ra/examples/rcu.v) [examples/sc_stack.v](coq/ra/examples/sc_stack.v) [examples/spin_lock.v](coq/ra/examples/spin_lock.v) [examples/ticket_lock.v](coq/ra/examples/ticket_lock.v) [examples/tstack.v](coq/ra/examples/tstack.v)  |
+| Appendix A    | Equivalence between the axiomantic and operational semantics | No Coq formalization, partly follows from the promising semantics (POPL'17), which already has a Coq formalization, except for the non-atomic race detector. | |
+
+
+[iris]: https://gitlab.mpi-sws.org/FP/iris-coq/commit/01d12014855abe6adaea20bbb35b1e9beadff14e
-- 
GitLab