https://github.com/palmskog/chip
Change impact analysis in Coq and OCaml
https://github.com/palmskog/chip
coq impact-analysis mathcomp ocaml proof ssreflect
Last synced: 4 months ago
JSON representation
Change impact analysis in Coq and OCaml
- Host: GitHub
- URL: https://github.com/palmskog/chip
- Owner: palmskog
- License: mit
- Created: 2019-01-09T15:26:52.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2021-11-01T10:16:15.000Z (over 4 years ago)
- Last Synced: 2025-02-16T10:14:01.573Z (12 months ago)
- Topics: coq, impact-analysis, mathcomp, ocaml, proof, ssreflect
- Language: Coq
- Homepage: https://setoid.com/chip/
- Size: 353 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Chip
[![Docker CI][docker-action-shield]][docker-action-link]
[docker-action-shield]: https://github.com/palmskog/chip/workflows/Docker%20CI/badge.svg?branch=master
[docker-action-link]: https://github.com/palmskog/chip/actions?query=workflow:"Docker%20CI"
Coq specification and executable functions
for change impact analysis, as used in build systems
and tools for regression test selection.
## Meta
- Author(s):
- Cyril Cohen
- Aleksandar Nanevski
- Karl Palmskog
- Laurent Théry
- License: [MIT license](LICENSE)
- Compatible Coq versions: 8.13 or later
- Additional dependencies:
- [MathComp ssreflect 1.12 or later](https://math-comp.github.io)
- [MathComp fingroup](https://math-comp.github.io)
- Coq namespace: `chip`
- Related publication(s):
- [Practical Machine-Checked Formalization of Change Impact Analysis](http://users.ece.utexas.edu/~gligoric/papers/PalmskogETAL20Chip.pdf) doi:[10.1007/978-3-030-45237-7_9](https://doi.org/10.1007/978-3-030-45237-7_9)
## Building the Coq formalization
Make sure the Coq requirements are installed, then run:
``` shell
git clone https://github.com/palmskog/chip.git
cd chip
make # or make -j
```
## Building and running the executable tools
The executable tools have the following additional OCaml requirements:
- [OCaml 4.05.0 or later](https://ocaml.org)
- [Ocamlbuild](https://github.com/ocaml/ocamlbuild)
- [yojson](https://github.com/ocaml-community/yojson)
- [extlib](https://github.com/ygrek/ocaml-extlib)
After installing the Coq requirements, install the OCaml requirements:
```
opam install ocamlbuild yojson extlib
```
To build the regular tool, run:
```
make impacted
```
To try plain change impact analysis, go to `extraction/impacted` and run:
```
./filtering.native test/new.json test/old.json
```
To try hierarchical change impact analysis, run:
```
./hierarchical.native test/new-hierarchical.json test/old-hierarchical.json
```
To try topological sorting, run:
```
./topfiltering.native test/new-topsort.json test/old-topsort.json
```
To build the optimized tool:
```
make impacted-rbt
```
and look in `extraction/impacted-rbt`. The programs and command-line
options are the same as above.
## Files
Coq files adapted and extended from work by [Cohen and Théry](https://github.com/CohenCyril/tarjan):
- `core/extra.v`: auxiliary sequence lemmas
- `core/connect.v`: auxiliary connect and topological sort definitions and lemmas
- `core/kosaraju.v`: implementation and correctness proof of Kosaraju's strongly connected components algorithm
- `core/tarjan.v`: implementation and correctness proof of Tarjan's strongly connected components algorithm
Coq file adapted from work by [Nanevski](https://github.com/imdea-software/fcsl-pcm):
- `core/ordtype.v`: ordered type definition for the Mathematical Components library
Coq core definitions and lemmas:
- `core/closure.v`: basic definition of transitive closures of sets
- `core/check.v`: set-based definitions of dependency graphs, impactedness, and freshness
- `core/change.v`: correctness argument for basic change impact analysis definitions
- `core/hierarchical.v`: overapproximation strategy for change impact analysis in hierarchical systems
- `core/hierarchical_correct.v`: correctness proofs for overapproximation strategy
- `core/hierarchical_sub.v`: compositional strategy for change impact analysis in hierarchical systems
- `core/hierarchical_sub_correct.v`: correctness proofs for compositional strategy
- `core/hierarchical_sub_pt.v`: improved hierarchical compositional strategy using partition of new vertices
- `core/hierarchical_sub_pt_correct.v`: correctness proofs for improved compositional strategy
- `core/acyclic.v`: definition of and basic lemmas for acyclicity, parameterized acyclicity checker
- `core/kosaraju_acyclic.v`: acyclicity checking based on Kosaraju's algorithm
- `core/tarjan_acyclic.v`: acyclicity checking based on Tarjan's algorithm
- `core/topos.v`: definitions and lemmas on topological sorting of acyclic graphs
Coq implementation-related definitions and lemmas:
- `core/close_dfs.v`: refined sequence-based transitive closure computation
- `core/dfs_set.v`: refined transitive closure computation using MSet functor (to enable red-black trees)
- `core/check_seq.v`: sequence-based change impact analysis definitions, optimized topological sorting using impact analysis
- `core/check_seq_hierarchical.v`: sequence-based hierarchical change impact analysis definitions
- `core/finn.v`: regular instantiation of sequence-based definitions for the ordinal finite type
- `core/finn_set.v`: red-black tree instantiation of sequence-based definitions for the ordinal finite type
Key OCaml files for regular tool:
- `extraction/impacted/ocaml/change_impact.mli`: interface to extracted code
- `extraction/impacted/ocaml/change_impact.ml`: mapping to extracted functions
- `extraction/impacted/ocaml/filtering.ml`: program for plain change impact analysis
- `extraction/impacted/ocaml/topfiltering.ml`: program for topological sorting
- `extraction/impacted/ocaml/hierarchical.ml`: program for two-level hierarchical change impact analysis
- `extraction/impacted/ocaml/util.ml`: utility functions
Key OCaml files for optimized tool:
- `extraction/impacted-rbt/ocaml/change_impact.mli`: interface to extracted code
- `extraction/impacted-rbt/ocaml/change_impact.ml`: mapping to extracted functions
- `extraction/impacted-rbt/ocaml/filtering.ml`: program for plain change impact analysis
- `extraction/impacted-rbt/ocaml/topfiltering.ml`: program for topological sorting
- `extraction/impacted-rbt/ocaml/hierarchical.ml`: program for two-level hierarchical change impact analysis
- `extraction/impacted-rbt/ocaml/util.ml`: utility functions