diff --git a/README.md b/README.md index 7dbf2b9530dbaac84693f34dfd7b4d54806485e8..9dcd82222c5e7d3eb7476259e1f82e725c5e7512 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,50 @@ followed by `make build-dep`. The derived rules mentioned in the paper can be found [here](theories/typing/examples/derived_rules.v). -### Type System Rules --- from the RustBelt Paper +### Key Type-Spec Rules --- from the RustHornBelt Paper + +The following table contains the location of every rule mentioned in the RustHornBelt paper. +The filenames are spread across `theories/typing/examples`, `theories/typing`, `theories/typing/lib` (and its subfolders), and `theories/prophecy`. + +| Proof Rule | File | Lemma | +| ------------------- | ----------------- | ------------------------ | +| Adequacy | `soundness.v` | `type_soundness` | +| **Basic** | | | +| MUTBOR | `derived_rules.v` | `ty_borrow` | +| MUTREF-WRITE | `derived_rules.v` | `ty_assgn_bor_mut` | +| MUTREF-BYE | `derived_rules.v` | `ty_resolve` | +| ENDLFT | `programs.v` | `type_endlft` | +| **Prophecies** | | | +| PROPH-INTRO | `prophecy.v` | `proph_intro` | +| PROPH-FRACT | `prophecy.v` | `proph_tok_fractional` | +| PROPH-IMPL | `prophecy.v` | `proph_obs_impl` | +| PROPH-MERGE | `prophecy.v` | `proph_obs_and` | +| PROPH-TRUE | `prophecy.v` | `proph_obs_true` | +| PROPH-RESOLVE | `prophecy.v` | `proph_resolve` | +| PROPH-SAT | `prophecy.v` | `proph_obs_sat` | +| **Mutable Borrows** | | | +| MUT-AGREE | `uniq_cmra.v` | `uniq_agree` | +| MUT-UPDATE | `uniq_cmra.v` | `uniq_update` | +| MUT-INTRO | `uniq_cmra.v` | `uniq_intro` | +| MUT-RESOLVE | `uniq_cmra.v` | `uniq_resolve` | +| **`Vec`** | | | +| `push` | `vec_pushpop.v` | `vec_push_type` | +| `pop` | `vec_pushpop.v` | `vec_pop_type` | +| `index_mut` | `vec_index.v` | `vec_index_uniq_type` | +| **`IterMut`** | | | +| `iter_mut` | `vec_slice.v` | `vec_to_uniq_slice_type` | +| `next` | `iter.v` | `iter_uniq_next_type` | +| `inc_vec` | `inc_vec.v` | `inc_vec_type` | +| **`Cell`** | | | +| `new` | `cell.v` | `cell_new_type` | +| `get` | `cell.v` | `cell_get_type` | +| `set` | `cell.v` | `cell_set_type` | +| `inc_cell` | `inc_cell.v` | `inc_cell_type` | +| **`Mutex`** | | | +| `new` | `mutex.v` | `mutex_new_type` | +| `get_mut` | `mutex.v` | `mutex_get_mut` | + +### Key Type(-Spec) Rules --- from the RustBelt Paper The files in [typing](theories/typing) prove semantic versions of the proof rules given in the *RustBelt* paper. Notice that mutable borrows are called