@@ -98,26 +98,26 @@ A (fairly) large part of the code-base is shared between $\lambda_{\mathtt{IFC}}
9898$\lambda_ {\mathtt{SEC}}^\star$.
9999
100100
101- ## Meta -theoretical results and demo programs
101+ ## Top-level modules of meta -theoretical results and demo programs
102102
103103There are three top-level modules in the [ ` src/ ` ] ( ./src ) directory:
104104
105- 1 . [ ** ` Proofs ` ** ] ( ./src/Proofs.agda ) : sources the proofs of important ** meta-theoretical results **
106- in the following modules :
107- - Here are some meta -theoretical results for $\lambda_ {\mathtt{SEC}}^\star$ and its cast
108- calculus $\lambda_ {\mathtt{SEC}}^{c}$:
105+ 1 . [ ** ` Proofs ` ** ] ( ./src/Proofs.agda ) : The module sources the proofs of important ** meta-theoretical
106+ results ** in the following files :
107+ - Meta -theoretical results for $\lambda_ {\mathtt{SEC}}^\star$ and its cast calculus
108+ $\lambda_ {\mathtt{SEC}}^{c}$:
109109 - [ ` CC.TypeSafety ` ] ( ./src/CC/TypeSafety.agda ) : $\lambda_ {\mathtt{SEC}}^{c}$ is type safe by satisfying progress and
110110 preservation.
111111 - [ ` CC.BigStepPreservation ` ] ( ./src/CC/BigStepPreservation.agda ) : The big-step semantics of $\lambda_ {\mathtt{SEC}}^{c}$ also
112- preserves types. The big-step semantics
112+ preserves types. This big-step semantics is used in the erasure-based
113+ noninterference proof.
113114 - [ ` CC.BigStepErasedDeterministic ` ] ( ./src/CC/BigStepErasedDeterministic.agda ) : The big-step evaluation of erased
114115 $\lambda_ {\mathtt{SEC}}^{c}$ is deterministic.
115116 - [ ` CC.Noninterference ` ] ( ./src/CC/Noninterference.agda ) : $\lambda_ {\mathtt{SEC}}^{c}$ satisfies termination-insensitive
116117 noninterference (TINI).
117118 - [ ` CC.Compile ` ] ( ./src/CC/Compile.agda ) : The compilation from $\lambda_ {\mathtt{SEC}}^\star$ to $\lambda_ {\mathtt{SEC}}^{c}$
118119 preserves types.
119- - Here are meta-theoretical results for $\lambda_ {\mathtt{IFC}}^\star$ and its cast calculus
120- $\lambda_ {\mathtt{IFC}}^{c}$:
120+ - Meta-theoretical results for $\lambda_ {\mathtt{IFC}}^\star$ and its cast calculus $\lambda_ {\mathtt{IFC}}^{c}$:
121121 - [ ` CC2.Progress ` ] ( ./src/CC2/Progress.agda ) : $\lambda_ {\mathtt{IFC}}^{c}$ satisfies progress, so that a well-typed $\lambda_ {\mathtt{IFC}}^{c}$
122122 term is either a value or a blame, which does not reduce, or the term
123123 takes one reduction step.
@@ -172,14 +172,14 @@ There are three top-level modules in the [`src/`](./src) directory:
172172 blame, that contains its blame label. In this way, the programmer knows which
173173 cast is causing the problem.
174174- [ ` Common.TypeBasedCast ` ] ( ./src/Common/TypeBasedCast.agda ) : This module defines * type-based casts* between two
175- security types. In particular, $\lambda_ {\mathtt{SEC}}^{c}$ uses type-based cast as its
175+ security types. In particular, $\lambda_ {\mathtt{SEC}}^{c}$ uses type-based casts as its
176176 cast representation.
177177- [ ` Common.Coercions ` ] ( ./src/Common/Coercions.agda ) : This modules defines the coercion-based cast
178- representation used by $\lambda_ {\mathtt{IFC}}^{c}$; in particular, it defines the * security
178+ representation used by $\lambda_ {\mathtt{IFC}}^{c}$. In particular, it defines the * security
179179 coercions on values* of $\lambda_ {\mathtt{IFC}}^{c}$.
180180
181181
182- ### The shared heap model [ in directory ` Memory/ ` ] ( ./src/Memory )
182+ ### The heap model of $\lambda _ {\mathtt{SEC}}^\star$ and $\lambda _ {\mathtt{IFC}}^\star$ [ in directory ` Memory/ ` ] ( ./src/Memory )
183183
184184- [ ` Memory.Addr ` ] ( ./src/Memory/Addr.agda ) : Definition of memory addresses.
185185- [ ` Memory.Heap ` ] ( ./src/Memory/Heap.agda ) : Definition and helper methods of the split-heap model, where
@@ -224,9 +224,9 @@ There are three top-level modules in the [`src/`](./src) directory:
224224- [ ` CC.Values ` ] ( ./src/CC/Values.agda ) : The definition of values in $\lambda_ {\mathtt{SEC}}^{c}$. A value can be (1) a
225225 constant (2) an address (3) a $\lambda$ abstraction or (4) a value wrapped
226226 with an irreducible (` Inert ` ) cast. The opaque term is also a value in the
227- semantics of erased $\lambda_ {\mathtt{SEC}}^{c}$. There are canonical-form lemmas for
228- constants, functions, and memory addresses in this model: for example, a value
229- of function type must be either a $\lambda$ or a function proxy (a $\lambda$
227+ semantics of erased $\lambda_ {\mathtt{SEC}}^{c}$. In this module, there are canonical-form
228+ lemmas for constants, functions, and memory addresses. For example, a value of
229+ function type must be either a $\lambda$ or a function proxy (a $\lambda$
230230 wrapped with at least one inert function cast).
231231- [ ` CC.Reduction ` ] ( ./src/CC/Reduction.agda ) : The operational semantics for $\lambda_ {\mathtt{SEC}}^{c}$. The relation
232232 $M \mid \mu \mid \ell \longrightarrow N \mid \mu'$ says that $\lambda_ {\mathtt{SEC}}^{c}$
@@ -248,37 +248,40 @@ There are three top-level modules in the [`src/`](./src) directory:
248248- [ ` CC.Interp ` ] ( ./src/CC/Interp.agda ) : A stepper that replies on the progress proof to generate a
249249 reduction sequence of $k$ steps for a well-typed $\lambda_ {\mathtt{SEC}}^{c}$ term.
250250- [ ` CC.Compile ` ] ( ./src/CC/Compile.agda ) : Compilation from $\lambda_ {\mathtt{SEC}}^\star$ to $\lambda_ {\mathtt{SEC}}^{c}$. The module
251- also contains a proof that the compilation preserves types
251+ also contains a proof that this compilation function preserves types
252252 (` compilation-preserves-type ` ).
253253
254254The noninterference proof of $\lambda_ {\mathtt{SEC}}^{c}$ is erasure-based. It uses the
255255following auxiliary definitions:
256256
257257- [ ` CC.BigStep ` ] ( ./src/CC/BigStep.agda ) : The big-step semantics for $\lambda_ {\mathtt{SEC}}^{c}$. It is a direct
258- mechanical translation from the semantics in [ CC.Reduction] ( ./src/CC/Reduction.agda ) .
259- - [ ` CC.Erasure ` ] ( ./src/CC/Erasure.agda ) : Definition of the erasure functions for $\lambda_ {\mathtt{SEC}}^{c}$ terms
260- (` erase ` ) and heaps (` erase-μ ` ). Note that the memory cells of high security
261- are completely erased, because the values read from those cells are always
262- of high security and thus appear to be opaque for a low observer.
258+ mechanical translation from the semantics in [ ` CC.Reduction ` ] ( ./src/CC/Reduction.agda ) .
259+ - [ ` CC.Erasure ` ] ( ./src/CC/Erasure.agda ) : Definition of the erasure functions for terms (` erase ` ) and
260+ heaps (` erase-μ ` ) in $\lambda_ {\mathtt{SEC}}^{c}$. Note that the memory cells of high security
261+ are completely erased, because the values read from those cells are always of
262+ high security and thus appear to be opaque from a low-observer's point of
263+ view.
263264- [ ` CC.BigStepErased ` ] ( ./src/CC/BigStepErased.agda ) : The big-step semantics for erased $\lambda_ {\mathtt{SEC}}^{c}$.
264265
265266
266267### Technical definitions of the surface language $\lambda_ {\mathtt{IFC}}^\star$ [ in directory ` Surface2/ ` ] ( ./src/Surface2 )
267268
268269- [ ` Surface2.Syntax ` ] ( ./src/Surface2/Syntax.agda ) : The syntax of $\lambda_ {\mathtt{IFC}}^\star$. The most noteworthy difference
269- from $\lambda_ {\mathtt{SEC}}^\star$ is that in $\lambda_ {\mathtt{IFC}}^\star$, the PC annotation on a $\lambda$
270- is treated as a type annotation, which means that it can be $\star$.
270+ from $\lambda_ {\mathtt{SEC}}^\star$ is that in $\lambda_ {\mathtt{IFC}}^\star$, the PC annotation on a
271+ $\lambda$ is treated as a type annotation instead of a value annotation, which
272+ means that it is allowed to be $\star$ in $\lambda_ {\mathtt{IFC}}^\star$ (but not in
273+ $\lambda_ {\mathtt{SEC}}^\star$).
271274- [ ` Surface2.Typing ` ] ( ./src/Surface2/Typing.agda ) : The typing rules for $\lambda_ {\mathtt{IFC}}^\star$.
272275- [ ` Surface2.Precision ` ] ( ./src/Surface2/Precision.agda ) : The precision rules for $\lambda_ {\mathtt{IFC}}^\star$. The precision
273276 relation is used in the definition and the proof of the gradual guarantee.
274277
275278
276279### The coercion calculus for security labels [ in directory ` CoercionExpr/ ` ] ( ./src/CoercionExpr )
277280
278- This directory contains the definition of and lemmas about the * coercion calculus
279- on security labels* .
281+ This directory contains the definition of and the lemmas about the * coercion
282+ calculus on security labels* .
280283
281- - [ ` CoercionExpr.Coercions ` ] ( ./src/CoercionExpr/Coercions.agda ) : One single coercion on security labels can either
284+ - [ ` CoercionExpr.Coercions ` ] ( ./src/CoercionExpr/Coercions.agda ) : A single coercion on security labels can either
282285 be identity ($\mathbf{id}$), subtype ($\uparrow$), injection from $\ell$ ($\ell!$),
283286 or projection to $\ell$ with blame label $p$ ($\ell?^p$).
284287- [ ` CoercionExpr.CoercionExpr ` ] ( ./src/CoercionExpr/CoercionExpr.agda ) : The syntax, typing, reduction, and normal forms
0 commit comments