lh-l4v/proof/sep-capDL
Gerwin Klein 1af1d2b67b some of the global Isabelle2014 renames
option_case -> case_option
sum_case -> case_sum
prod_case -> case_prod
Option.set -> set_option
Option.map -> map_option
option_rel -> rel_option
list_all2_def -> list_all2_iff
map.simps -> list.map
tl.simps -> list.sel(2-3)
the.simps -> option.sel
2014-08-09 15:39:20 +10:00
..
AbstractSeparationHelpers_SD.thy Import release snapshot. 2014-07-14 21:32:44 +02:00
AbstractSeparation_SD.thy sys-init: Show the separation algebra for capDL is a cancellative separation algebra. 2014-07-23 15:20:52 +10:00
Frame_SD.thy Cleanup of a number of definitions of the separation algebra for capDL. 2014-07-22 14:37:37 +10:00
Helpers_SD.thy some of the global Isabelle2014 renames 2014-08-09 15:39:20 +10:00
Lookups_D.thy Import release snapshot. 2014-07-14 21:32:44 +02:00
README.md misc: Proofing and formatting of README.md files. 2014-07-28 13:15:48 +10:00
Sep_Tactic_Helper.thy Import release snapshot. 2014-07-14 21:32:44 +02:00
Separation_SD.thy some of the global Isabelle2014 renames 2014-08-09 15:39:20 +10:00
Types_SD.thy Import release snapshot. 2014-07-14 21:32:44 +02:00

README.md

CapDL Separation Logic Proof

This proof defines a separation logic for the capDL kernel specification. It builds on a generic separation algebra, described in the ITP 2012 paper.

The separation logic is defined on a lifted heap where we lift the object heap and IRQ table into an object-component heap and an IRQ table heap. This gives us a separation algebra with a capability-level of granularity.

This separation logic is used by the CapDL API Proofs and the system initialiser specification.

This separation logic is described in the ICFEM '13 paper and Andrew Boyton's PhD thesis.

Building

To build from the l4v/ directory, run:

    ./isabelle/bin/isabelle build -d . -v -b SepDSpec

Important Theories

  • The definitions of heap disjunction, heap addition and showing that they produce a separation algebra is found in AbstractSeparation_SD.

  • The "arrows" are defined in Separation_SD.

  • The "frame rule" for specific leaf functions is defined in Frame_SD. This "frame rule" is different from the traditional frame rule as we use a shallow embedding.