GitHub - logsem/AxSL: AxSL, a concurrent separation logic for Arm's relaxed concurrency
2
Fig. 3
lang/mm.v
Module AAConsistent
consistency axioms are in record t
3
The splitting rule used in Fig. 7
low/rules/prelude.v
annot_split_iupd
↦ₐ is the notation for tied assertions
4
Fig. 8
lang/instrs.v
Section instructions
os and vr are defined in system-semantics-coq
Fig. 9
Section interpretation
The outcome interface is from system-semantics-coq. ;; corresponds to >>=
Whole-system-execution
low/adequacy.v
tpsteps, tpstate_done, tp_state_init
There is no a formal definition of the rule, we instead only defined the premises
Fig. 10
lang/opsem.v
Module LThreadStep
t of the module defines the reduction relation, see below for more
Graph X and Instruction memory I
Module GlobalState
H-mem-read
TStepReadMem
We use ⊆ instead of = for addr and ctrl; po1 is handled differently in our formalisation
H-reg-write
TStepRegWrite
po1 is handled differently in our formalisation
H-reload
TStepReload
ts_is_done_instr is omitted in the rule
H-term
TStepTerm
ts_is_done_thd implements the last premise
T of Ctd T and R of Done R
Module ThreadState
Field ts.reqs of record t corresponds to program T.p. R is the rest of the fields, except for that we have an extra ts_rmw_pred to handle exclusive; iis_iid and iis_cntr together correspond to e; next-e is inline; e_{po} is defined separately as lls_pop of LogicalLocalState.
Ctd T and Done R
Module LThreadState
Both take ThreadState.t in the code.
5
Protocol Φ
low/instantiation.v
Typeclass UserProt
The type prot_t is defined in low/lib/annotations.v
Fig. 11
middle/specialised_rules.v
mem_read_external
Hoare triples are implemented in a continuation-passing style using WP: the preconditions are premises; the post conditions are in the continuation. The Coq definition is slightly general: it does not have constraint (2). Detailed correspondence can be found below.
(1) & (10) NoLocalWrites
last_local_write
(3) & (11) PoPred
o_po_src -{LPo}>
(4) & (12) CtrlPreds
ctrl_srcs -{Ctrl}>
(5) & (13)
([∗ map] dr ↦ dv ∈ dep_regs, dr ↦ᵣ dv)
dep_regs is regs
(6)
([∗ map] node ↦ annot ∈ lob_annot, node ↦ₐ annot)
lob_annot is m
(7) & (14) GraphFacts
R_graph_facts of mem_read_external
(8) Lob
Lines between comments Lob edge formers and FE
(9) FlowIn
Lines between comment FE and continuation
={⊤}[∅]▷=∗ is the view shift that also supports invariants; prot (field of UserProt) is the protocol Φ The persistent R_graph_facts is assumed again.
(15)
eid ↦ₐ R addr val eid_w
Fig. 13
examples/lb_datas/proof.v
instrs_val, write_val_thread_1, write_val_thread_2
instrs_val is the LB program, the definitions are the specs
Fig. 14
userprot_val, write_val_thread_1, write_val_thread_2
userprot_val is Φ, the rest two is the proof
Oneshot
Section one_shot
Instruction Hoare triple
SSWPi
Defined using single-step instruction weakest precondition SSWPi
Fig. 15
wpi_pln_read, wpi_pln_write_data
Fig. 16
examples/mp.v
send_instrs, dep_receive_instrs
Φ(flag,v,e)
flag_prot
The invariant for exclusives
middle/excl.v
excl_inv
Proof rules for exclusives
middle/rules.v
mem_write_xcl_Some_inv, mem_write_xcl_None
Again in the continuation-passing style. For successful and unsuccessful exclusive stores; Exclusive loads are handled in mem_read_external with extra machinery.
6
The microinstruction Hoare triple
middle/weakestpre.v
wpi_def
Defined using weakest preconditions, so P is not mentioned. The Coq definition (WPi) is actually a weakest precondition for instuctions, not microinstructions, but the definiton follows the same spirit as the presented microinstruction one.
SI-reg-agree and SI-reg-update
reg_interp_agree, reg_interp_update
Definition of weakest precondition
low/weakestpre.v
wp_pre
The formalisation in Coq is quite different -- the paper only demonstrates the key ideas. Most important correspondence: annot_interp is SI_{T}; gconst_interp is SI_{G}; flow_eq is FlowImp; post_lifting is PullOutTied
FlowImp
low/lib/annotations.v
flow_eq_ea, na_splitting_wf
flow_eq_ea is the view shift; na_splitting_wf is Detach; the map extension is inlined in wp_pre
Supporting framing
low/instantiation.v
annot_split
Supporting invariants
low/lib/annotations.v
With ={⊤,∅}=∗ ▷ |={∅,⊤}=> of flow_eq_ea
Same as ={⊤}[∅]▷=∗
Theorem 6.1
middle/rules.v, middle/specialised_rules.v, low/rules/*.v
middle/rules.v and middle/specialised_rules.v contains the soundness proof of all microinstruction proof rules (in continuation style, proved using results in low/rules/*.v)
Theorem 6.2
low/adequacy.v
adequacy_pure
With insignificant details omitted