Next generation modality for Iris.
This directory contains the Coq mechanization accompanying the paper "The Nextgen Modality: A Modality for Non-Frame-Preserving Updates in Separation Logic".
The main
branch is currently developed using Coq version 8.17.1. and coq-equations version 1.3+8.17
The project uses submodules for its dependencies. To clone it and the associated submodules use the following command:
git submodule update --init --recursive
The following git command updates all the submodules:
git submodule update --remote --merge
We recommend installing the dependencies using opam
Once you have installed Coq 8.17.1
and coq-equations 1.3+8.17
, you can build the project by running:
make -jN # replace N with the number of CPU cores of your machine
-
case_study
: contains files specific to StackLang (definition, program logic, and examples). -
case_study/program_logic
: contains language generic files related to the construction of a program logics that use the nextgen modality. -
lib
: contains the construction of invariants in the presence of the nextgen modality. -
gmap_view_transformation.v
: provides a generic methodology to define transformations over the map resource algebra. -
nextgen_soundness.v
: proves soundness of the nextgen modality as it occurs in the weakest precondition. -
nextgen_independent.v
: defines the independence modality
Paper | File or Folder | Name |
---|---|---|
Definition 3.1 (Generational transformation) | gen_trans.v |
GenTrans |
bng-own (Fig 2) | basic_nextgen.v |
bnextgen_ownM |
bng-mono (Fig 2) | basic_nextgen.v |
bnextgen_mono |
bng-conj (Fig 2) | basic_nextgen.v |
bnextgen_and |
bng-disj (Fig 2) | basic_nextgen.v |
bnextgen_or |
bng-later (Fig 2) | basic_nextgen.v |
bnextgen_later |
bng-exists (Fig 2) | basic_nextgen.v |
bnextgen_exist |
bng-forall (Fig 2) | basic_nextgen.v |
bnextgen_forall |
bng-sep (Fig 2) | basic_nextgen.v |
bnextgen_sep_2 |
bng-pers (Fig 2) | basic_nextgen.v |
bnextgen_pers |
bng-trans (Fig 2) | basic_nextgen.v |
bnextgen_compose |
bng-idemp (Fig 2) | basic_nextgen.v |
bnextgen_idemp |
bng-plainly (Fig 2) | basic_nextgen.v |
bnextgen_plainly |
bng-sound | basic_nextgen.v |
bnextgen_plain_soundness |
StackLang syntax (Fig 3) | case_study/stack_lang.v |
expr |
StackLang step relation (Page 9, Fig 4) | case_study/stack_lang.v |
head_step |
Points-to predicates (Page 9) | case_study/rules_unary.v |
l ↦ v , i @@ l ↦ v , [size] n |
Nextgen modality for stack (Page 10) | case_study/rules_unary.v |
next_state |
Rules about stack nextgen (Page 10) | case_study/rules_unary.v |
Section heapG_nextgen_updates |
cut-heap-intro | case_study/rules_unary.v |
heap_stack_intro |
cut-stack-intro | case_study/rules_unary.v |
stack_stack_pop_intro |
cut-size-intro | case_study/rules_unary.v |
stack_size_frag_intro |
Weakest Precondition definition (Fig 5) | case_study/program_logic/weakestpre.v |
wp_pre |
Adequacy (Theorem 4.1) | case_study/program_logic/adequacy.v and nextgen_soundness.v |
wp_adequacy_no_lc_single_thread |
Independence modality (Page 11) | nextgen_independent.v |
uPred_bnextgen_ind |
ind-intro | nextgen_independent.v |
bnextgen_bounded_ind_GenIndependent_intro |
cut-ind-intro | nextgen_independent.v |
bnextgen_bounded_ind_bnextgen_intro |
ind-elim | nextgen_independent.v |
bnextgen_bounded_ind_elim |
ind-weaken | nextgen_independent.v |
bnextgen_bounded_ind_weaken |
ind-heap-intro | case_study/rules_unary.v |
heap_stack_ind_intro |
ind-stack-intro | case_study/rules_unary.v |
stack_stack_ind_intro |
ind-size-intro | case_study/rules_unary.v |
stack_size_frag_ind_intro |
Frame rule (Page 11) | case_study/program_logic/weakestpre.v |
wp_frame_l |
Context-local Weakest Precondition (Page 11) | case_study/program_logic/cl_weakestpre.v |
clwp |
ClSalloc | case_study/program_logic/cl_weakestpre.v |
clwp_stack_alloc |
Return | case_study/rules_unary.v |
wp_return |
inv-alloc | lib/invariants |
own_inv_alloc |
cut-inv-intro | case_study/rules_unary.v |
next_state_stack_inv_intro |
ind-inv-intro | case_study/rules_unary.v |
next_state_stack_inv_ind_intro |