All Projects → tchajed → iris-simp-lang

tchajed / iris-simp-lang

Licence: MIT license
We define a simple programming language, simp_lang, then instantiate Iris to verify simple simp_lang programs with concurrent separation logic.

Programming Languages

Coq
218 projects
Makefile
30231 projects

Projects that are alternatives of or similar to iris-simp-lang

Vscoq
A Visual Studio Code extension for Coq [[email protected],@fakusb]
Stars: ✭ 138 (+245%)
Mutual labels:  coq
Quickchick
Randomized Property-Based Testing Plugin for Coq
Stars: ✭ 188 (+370%)
Mutual labels:  coq
server-benchmarks
🚀 Cross-platform transparent benchmarks for HTTP/2 Web Servers at 2020-2023
Stars: ✭ 78 (+95%)
Mutual labels:  iris
Coqhammer
CoqHammer: An Automated Reasoning Hammer Tool for Coq - Proof Automation for Dependent Type Theory
Stars: ✭ 157 (+292.5%)
Mutual labels:  coq
Coq Chick Blog
🐣 A blog engine written and proven in Coq
Stars: ✭ 173 (+332.5%)
Mutual labels:  coq
Coqgym
A Learning Environment for Theorem Proving with the Coq proof assistant
Stars: ✭ 201 (+402.5%)
Mutual labels:  coq
Advent Of Coq 2018
Advent of Code 2018, in Coq! (https://adventofcode.com/2018)
Stars: ✭ 137 (+242.5%)
Mutual labels:  coq
goose
Goose converts a small subset of Go to Coq
Stars: ✭ 73 (+82.5%)
Mutual labels:  coq
Jscert
A Coq specification of ECMAScript 5 (JavaScript) with verified reference interpreter
Stars: ✭ 186 (+365%)
Mutual labels:  coq
Vellvm
The Vellvm (Verified LLVM) coq development.
Stars: ✭ 243 (+507.5%)
Mutual labels:  coq
Kami
Kami - a DSL for designing Hardware in Coq, and the associated semantics and theorems for proving its correctness. Kami is inspired by Bluespec. It is actually a complete rewrite of an older version from MIT
Stars: ✭ 158 (+295%)
Mutual labels:  coq
Fpga readings
Recipe for FPGA cooking
Stars: ✭ 164 (+310%)
Mutual labels:  coq
Fscq
FSCQ is a certified file system written and proven in Coq
Stars: ✭ 208 (+420%)
Mutual labels:  coq
Verdi Raft
An implementation of the Raft distributed consensus protocol, verified in Coq using the Verdi framework
Stars: ✭ 143 (+257.5%)
Mutual labels:  coq
demo-chatroom
go+iris+jwt+mysql+xorm+viper,iris项目实战简易聊天室,登录、注册、私聊、群聊。
Stars: ✭ 47 (+17.5%)
Mutual labels:  iris
Bedrock2
A work-in-progress language and compiler for verified low-level programming
Stars: ✭ 138 (+245%)
Mutual labels:  coq
Metacoq
Metaprogramming in Coq
Stars: ✭ 192 (+380%)
Mutual labels:  coq
WasmCert-Coq
A mechanisation of Wasm in Coq
Stars: ✭ 68 (+70%)
Mutual labels:  coq
corn
Coq Repository at Nijmegen [maintainers=@spitters,@VincentSe]
Stars: ✭ 106 (+165%)
Mutual labels:  coq
Foundations
Voevodsky's original development of the univalent foundations of mathematics in Coq
Stars: ✭ 210 (+425%)
Mutual labels:  coq

simp_lang

CI

simp_lang is a very simple programming language that we instantiate Iris with. On top of that Iris gives a program logic based on weakest preconditions. It is heavily inspired by heap_lang (and mostly copied from it) but aims to simplify things down as much as possible while still supporting verifying concurrent programs.

You might want to start with a high-level conceptual overview (links to a YouTube video; if you'd prefer there's a static version):

This overview might be useful before diving into this code, which works out all the details and goes a step beyond by also doing some program verification in our new language.

The recommended reading order for this tutorial is the following:

  1. lang.v defines the syntax and semantics of simp_lang (instantiating ectxi_language)
  2. primitive_laws.v defines a state interpretation for simp_lang (instantiating irisG simp_lang). This is the connection between the state of simp_lang (a heap from locations to values) and the Iris logic.
  3. heap_ra.v and heap_lib.v are the mechanism for the state interpretation, which will make more sense after seeing them used.
  4. adequacy.v sets up the generic language adequacy theorem with an initialization of the state interpretation for simp_lang.

Next, you can check out some examples from the Iris POPL 2021 tutorial that are re-implemented and verified in simp_lang:

  1. examples/swap.v verifies a version of swap.
  2. examples/parallel_add.v verifies the parallel increment example. It also demonstrates applying the adequacy theorem to derive a theorem about parallel_add whose statement is independent of Iris.

There are a few files that are optional reading which make the tutorial work:

  • tactics.v and class_instances.v are necessary parts of the implementation but aren't directly related to instantiating Iris.
  • notation.v makes it possible to write programs in simp_lang
  • proofmode.v gives enough proofmode support to actually verify programs written in simp_lang.
  • examples/spawn.v and examples/par.v implement and verify the par combinator (e1 ||| e2) used in the tutorial example.

Compiling

This development relies on a development version of Iris and Coq 8.14 or later. We test Coq 8.14, 8.15, 8.16, and master with Iris dev in CI. (The released version of Iris is currently incompatible.)

You'll need to install Iris, which is easiest done through opam. There are installation instructions at https://gitlab.mpi-sws.org/iris/iris.

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].