Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/au-ts/cogent
Cogent Project
https://github.com/au-ts/cogent
co-generation file-systems isabelle-hol programming-languages verification
Last synced: 1 day ago
JSON representation
Cogent Project
- Host: GitHub
- URL: https://github.com/au-ts/cogent
- Owner: au-ts
- License: other
- Created: 2016-05-01T23:35:59.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-02-15T14:58:51.000Z (over 1 year ago)
- Last Synced: 2024-10-15T12:02:59.882Z (27 days ago)
- Topics: co-generation, file-systems, isabelle-hol, programming-languages, verification
- Language: Isabelle
- Homepage: https://trustworthy.systems/projects/TS/cogent.pml
- Size: 17.2 MB
- Stars: 158
- Watchers: 21
- Forks: 26
- Open Issues: 102
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE_BSD2.txt
Awesome Lists containing this project
README
[![Build Status](https://github.com/au-ts/cogent/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/au-ts/cogent/actions/workflows/ci.yml)
[![Documentation Status](https://readthedocs.org/projects/cogent/badge/?version=latest)](https://cogent.readthedocs.io/en/latest/?badge=latest)# Cogent: Code and Proof Co-Generation
## Project homepage
For general context of this project, motivation, an overview, and published papers, see
our [project homepage](https://trustworthy.systems/projects/TS/cogent.pml).## Online documentation
https://cogent.readthedocs.io
## Installation
Instructions tested on Debian GNU/Linux 9.8 ("stretch") and Ubuntu 18.04 ("bionic"). Similar distributions may also work.
Install dependencies from the Debian repository.
```
sudo apt-get install git # git
sudo apt-get install python-lxml python-psutil python-pycparser # regression tester
```To install the Cogent compiler, consult file [cogent/README.md](./cogent/README.md) for details.
The Cogent framework depends on [Isabelle-2019](https://isabelle.in.tum.de/).
If you already have them on your machine, you can use your local copy.
Otherwise you can either obtain it from their website or from the `isabelle` submodule, via
`git submodule update --init --recursive -- isabelle`.Add `isabelle/bin` to your PATH: `export PATH="$(pwd)/isabelle/bin:$PATH"`
If you have an existing Isabelle install, you may want to set `ISABELLE_IDENTIFIER` instead of `PATH`.Initialise Isabelle and install components:
```
isabelle components -I
isabelle components -a
```
Consult [Isabelle manual](https://isabelle.in.tum.de/documentation.html) for more information.For more customised settings to run proofs and regression tests, modify [`build-env.sh`](build-env.sh).
Note: also see [Proofs](#proofs) and [Regression tests](#regression-tests) below.
## Compiler
See [cogent/README.md](./cogent/README.md) for more information.
## File systems
See [impl/fs/ext2/README](./impl/fs/ext2/README) and [impl/fs/bilby/README](./impl/fs/bilby/README) for more information on how to build the kernel modules.
## Proofs
Firstly, download the AutoCorres release v1.6.1 from [https://trustworthy.systems/projects/TS/autocorres](https://trustworthy.systems/projects/TS/autocorres/),
move the extracted folder to this directory, and rename the folder to `autocorres`.To build the proofs, it is recommended that your machine (or virtual machine)
provides 32G of memory and 4–8 CPU threads.```
# Build compilation correctness proof for ext2. (ETA: 120 CPU hours)
(cd impl/fs/ext2/cogent;
make verification;
export L4V_ARCH="ARM";
isabelle build -d plat/verification -d ../../../../cogent/isa -d ../../../../autocorres -b Ext2_AllRefine)# Build compilation correctness proof for BilbyFs. (ETA: 120 CPU hours)
(cd impl/fs/bilby/cogent;
make verification;
patch -d plat/verification < ../../../../BilbyFs_CorresProof.patch;
export L4V_ARCH="ARM";
isabelle build -d plat/verification -d ../../../../cogent/isa -d ../../../../autocorres -b -o process_output_limit=999 BilbyFs_AllRefine)# View end-to-end theorems. Each theory has a "print_theorems" command for this.
# For ext2:
L4V_ARCH="ARM" isabelle jedit -d impl/ext2/cogent/plat/verification -d cogent/isa -d autocorres -l Ext2_CorresProof impl/fs/ext2/cogent/plat/verification/Ext2_AllRefine.thy
# For BilbyFs:
L4V_ARCH="ARM" isabelle jedit -d impl/fs/bilby/cogent/plat/verification -d cogent/isa -d autocorres -l BilbyFs_CorresProof impl/fs/bilby/cogent/plat/verification/BilbyFs_AllRefine.thy
```The functional correctness proofs for BilbyFs's `sync` and `iget` operations are in
`impl/fs/bilby/proof/`.
They are built as part of the [regression tests](#regression-tests), and can be rebuilt with```
regression/run_tests.py -x autocorres -x isabelle -v sync iget
```## Regression tests (for developers; ETA: 2–3 CPU hours)
For testing the compiler, refer to [travis.yml](./travis.yml) for commands.
Run `./run_tests` to test systems implementations and parts of their Isabelle proofs.
For C-refinement proofs, which are excluded from the regression tests because of
their size, follow instructions in [Proofs](#proofs) section.## Directory
* `cogent`: Cogent compiler
* `c-refinement`: Isabelle/HOL theories and proof procedures for Cogent-C refinement
* `tests`: Cogent test programs for proof procedures
* `isa-parser`: Haskell library for parsing and pretty-printing Isabelle/HOL
* `impl`: Systems implemented in Cogent
* `fs`: File systems
* `bilby`: Bilby file system
* `cogent`: Cogent code for BilbyFs
* `c`: C implementation for BilbyFs
* `proof`: Functional correctness specs and proofs for BilbyFs
* `ext2`: ext2 file system
* `cogent`: Cogent code for ext2
* `regression`: Regression test script## The Gencot Tool
Gencot is a tool for translating C code to Cogent. It's developed by our collaborators.
The repository is hosted on [Github](https://github.com/F1-C0D3/gencot). See the
README file and the documentation for more details.