All Projects → weakmemory → imm

weakmemory / imm

Licence: MIT license
Intermediate Memory Model (IMM) and compilation correctness proofs for it

Programming Languages

Coq
218 projects

Projects that are alternatives of or similar to imm

Dblib Linear
Formalisation of the linear lambda calculus in Coq
Stars: ✭ 10 (-33.33%)
Mutual labels:  coq, proof
InfSeqExt
A Coq library for reasoning (co)inductively on infinite sequences using LTL-like modal operators
Stars: ✭ 12 (-20%)
Mutual labels:  coq, proof
Verdi Raft
An implementation of the Raft distributed consensus protocol, verified in Coq using the Verdi framework
Stars: ✭ 143 (+853.33%)
Mutual labels:  coq, proof
Verdi
A framework for formally verifying distributed systems implementations in Coq
Stars: ✭ 496 (+3206.67%)
Mutual labels:  coq, proof
Disel
Distributed Separation Logic: a framework for compositional verification of distributed protocols and their implementations in Coq
Stars: ✭ 85 (+466.67%)
Mutual labels:  coq, proof
Iron
Coq formalizations of functional languages.
Stars: ✭ 114 (+660%)
Mutual labels:  coq, proof
coq-to-ocaml-to-js
Proof of concept to generate safe and fast JavaScript
Stars: ✭ 25 (+66.67%)
Mutual labels:  coq, proof
coq-ecosystem
No description or website provided.
Stars: ✭ 39 (+160%)
Mutual labels:  coq
coqdocjs
Collection of scripts to improve the output of coqdoc [maintainers=@chdoc,@palmskog]
Stars: ✭ 28 (+86.67%)
Mutual labels:  coq
toychain
A minimalistic blockchain consensus implemented and verified in Coq
Stars: ✭ 103 (+586.67%)
Mutual labels:  coq
coq-100-theorems
Statements of famous theorems proven in Coq [maintainer=@jmadiot]
Stars: ✭ 41 (+173.33%)
Mutual labels:  coq
stablesort
Stable sort algorithms and their stability proofs in Coq
Stars: ✭ 19 (+26.67%)
Mutual labels:  coq
LPL-solutions
Solutions for the book "Language Proof and Logic".
Stars: ✭ 51 (+240%)
Mutual labels:  proof
CoqCheatSheet
Reference sheet for the Coq language.
Stars: ✭ 15 (+0%)
Mutual labels:  coq
opam-coq-archive
Archive for all Coq related OPAM packages organized in various repositories
Stars: ✭ 101 (+573.33%)
Mutual labels:  coq
coq-elpi
Coq plugin embedding elpi
Stars: ✭ 92 (+513.33%)
Mutual labels:  coq
system-F
Formalization of the polymorphic lambda calculus and its parametricity theorem
Stars: ✭ 20 (+33.33%)
Mutual labels:  coq
proofable-image
Build trust into your image by creating a blockchain certificate for it
Stars: ✭ 17 (+13.33%)
Mutual labels:  proof
Actuary
Formalization of the basic actuarial mathematics using Coq
Stars: ✭ 17 (+13.33%)
Mutual labels:  coq
coq-tal
Formalization of Typed Assembly Language (TAL) in Coq
Stars: ✭ 15 (+0%)
Mutual labels:  coq

Intermediate Memory Model (IMM) and compilation correctness proofs for it

Related projects

  • A Promising 1.0 [Kang-al:POPL17] to IMM compilation correctness proof [Github]
  • A Promising 2.0 [Lee-al:PLDI20] to IMM compilation correctness proof [Github]
  • A Weakestmo [Chakraborty-Vafeiadis:POPL19] to IMM compilation correctness proof [Github]

Related papers

  • [POPL19] Bridging the Gap Between Programming Languages and Hardware Weak Memory Models
    [Paper | arXiv | POPL19 arifact release]
    Anton Podkopaev, Ori Lahav, and Viktor Vafeiadis
  • [PLDI20] Repairing and Mechanising the JavaScript Relaxed Memory Model
    Conrad Watt, Christopher Pulte, Anton Podkopaev, Guillaume Barbier, Stephen Dolan, Shaked Flur, Jean Pichon-Pharabod, and Shu-yu Guo
  • [CoRR19] Reconciling Event Structures with Modern Multiprocessors
    [arXiv | Related project]
    Evgenii Moiseenko, Anton Podkopaev, Ori Lahav, Orestis Melkonian, and Viktor Vafeiadis

Building the Project

Requirements

Building Manually

To build the project, one needs to install some libraries (promising-lib and hahn), which the project depends on. This might be done by running ./configure. The command installs Coq as well. After that, one needs to run make (or make -j4 for a faster build).

Installation via OPAM

The project may be built and installed via OPAM:

opam repo add coq-released https://coq.inria.fr/opam/released
opam remote add coq-promising-local -k git https://github.com/snu-sf/promising-opam-coq-archive
opam remote add coq-weakmemory-local -k git https://github.com/weakmemory/local-coq-opam-archive
opam install coq-imm

Description of code and its relation to the [POPL19] paper

  • Section 2. src/basic. Definitions and statements about programs and execution graphs.

    • Prog.v—a definition of the program language (Fig. 2).
    • Events.v—definitions related to events (Section 2.2).
    • Execution.v, Execution_eco.v—execution graphs (Section 2.2).
    • ProgToExecution.v—construction of execution graphs from sequential programs (Fig. 3).
    • ProgToExecutionProperties.v—properties of the construction.
  • Section 3. src/imm. Definitions and statements about IMM and IMMs, a version of IMM with RC11-style definition of happens-before (HB) (Section 7.0).

    • CombRelations.v, CombRelationsMore.v—definitions of relation VF (in the development called furr) and linked relations and their properties.
    • imm_common_more.v, imm_common.v—common definitions for both models.
    • imm_hb.v—a definition of HB for IMM (Section 3.1).
    • imm_s_hb.v—the RC11-style definition of HB for IMMs.
    • imm.v—a definition of IMM (Def. 3.11).
    • imm_s.v—a definition of IMMs (Section 7.0).
    • imm_sToimm.v—a proof that IMMs is weaker than IMM.
  • Section 4. src/hardware. Definitions of hardware models and proofs about them.

    • Power_fences.v, Power_ppo.v, Power.v—a definition of POWER (Alglave-al:TOPLAS14).
    • Rel_opt.v—a correctness proof for release write transformation (Thm. 4.1).
    • immToPower.v—a compilation correctness proof from IMM to POWER (Thm. 4.3).
    • Arm.v—a definition of ARMv8.3 (Pulte-al:POPL18).
    • immToARM.v—a compilation correctness proof from IMM to ARMv8.3 (Thm. 4.5).
    • TSO.v—a definition of TSO (Alglave-al:TOPLAS14, Owens-al:TPHOLs09).
    • immToTSO.v—a compilation correctness proof from IMM to TSO.
  • Section 5. src/c11. Definition of a (stronger) version of the C11 model w/o SC and NA accesses and a compilation correctness proof from it to IMMs.

    • C11.v—a definition of the stronger version of the C11 model (Batty-al:POPL11). The version follows a fix from Lahav-al:PLDI17.
    • C11Toimm_s.v—a compilation correctness proof from C11 to IMMs.
  • Section 5. src/rc11. Definition of the RC11 model w/o SC and NA accesses and a compilation correctness proof from it to IMMs.

    • RC11.v—a definition of RC11 (Lahav-al:PLDI17).
    • RC11Toimm_s.v—a compilation correctness proof from RC11 to IMMs.
  • Sections 6.2 and 7.2 src/traversal. Traversal of IMM-consistent graphs.

    • TraversalConfig.v, Traversal.v—a small traversal step of IMMs-consistent execution graphs used to prove properties of the traversal (Def. 7.3 and 7.7).
    • SimTraversal.v—traversal of IMMs-consistent execution graphs (Prop. 6.5).
    • SimTraversalProperties.v—properties of the normal traversal.
  • New parts: src/travorder. Traversal of IMM-consistent graphs based on the traversal labels approach.

    • TraversalOrder.v—definitions of traversal labels and relation describing the restrictions on the traversal order.
    • TLSCoherency.v—definitions of coherent sets of traversal labels.
    • IordCoherency.v—definition of a traversal labels set corresponding to a traversal prefix.
    • SimClosure.v—transitions between traversal labels set corresponding to simulation steps.
    • SimClosureTraversal.v—construction of a traversal.

Auxiliary files:

  • IfThen.v, TraversalConfigAlt.v, TraversalCounting.v, ViewRelHelpers.v.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].