EngineeringSoftware / mcoq

Licence: Apache-2.0 license
Mutation analysis tool for Coq verification projects

Programming Languages

java
68154 projects - #9 most used programming language
python
139335 projects - #7 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to mcoq

SigProfilerMatrixGenerator
SigProfilerMatrixGenerator creates mutational matrices for all types of somatic mutations. It allows downsizing the generated mutations only to parts for the genome (e.g., exome or a custom BED file). The tool seamlessly integrates with other SigProfiler tools.
Stars: ✭ 68 (+209.09%)
Mutual labels:  mutation-analysis
imm
Intermediate Memory Model (IMM) and compilation correctness proofs for it
Stars: ✭ 15 (-31.82%)
Mutual labels:  coq
fcsl-pcm
Partial Commutative Monoids
Stars: ✭ 20 (-9.09%)
Mutual labels:  coq
coqdocjs
Collection of scripts to improve the output of coqdoc [maintainers=@chdoc,@palmskog]
Stars: ✭ 28 (+27.27%)
Mutual labels:  coq
system-F
Formalization of the polymorphic lambda calculus and its parametricity theorem
Stars: ✭ 20 (-9.09%)
Mutual labels:  coq
coq-program-verification-template
Template project for program verification in Coq
Stars: ✭ 26 (+18.18%)
Mutual labels:  coq
coq-tal
Formalization of Typed Assembly Language (TAL) in Coq
Stars: ✭ 15 (-31.82%)
Mutual labels:  coq
fm-notes
Unassorted scribbles on formal methods, type theory, category theory, and so on, and so on
Stars: ✭ 19 (-13.64%)
Mutual labels:  coq
kami
A Platform for High-Level Parametric Hardware Specification and its Modular Verification
Stars: ✭ 119 (+440.91%)
Mutual labels:  coq
vericert
A formally verified high-level synthesis tool based on CompCert and written in Coq.
Stars: ✭ 63 (+186.36%)
Mutual labels:  coq
hs-to-coq
Convert Haskell source code to Coq source code.
Stars: ✭ 64 (+190.91%)
Mutual labels:  coq
PUMPKIN-PATCH
Proof Updater Mechanically Passing Knowledge Into New Proofs, Assisting The Coq Hacker
Stars: ✭ 43 (+95.45%)
Mutual labels:  coq
coq-library-undecidability
A library of mechanised undecidability proofs in the Coq proof assistant.
Stars: ✭ 84 (+281.82%)
Mutual labels:  coq
hydra-battles
Variations on Kirby & Paris' hydra battles and other entertaining math in Coq (collaborative, documented, includes exercises) [maintainer=@Casteran]
Stars: ✭ 38 (+72.73%)
Mutual labels:  coq
alea
Coq library for reasoning on randomized algorithms [maintainers=@anton-trunov,@volodeyka]
Stars: ✭ 20 (-9.09%)
Mutual labels:  coq
Actuary
Formalization of the basic actuarial mathematics using Coq
Stars: ✭ 17 (-22.73%)
Mutual labels:  coq
bignums
Coq library of arbitrarily large numbers, providing BigN, BigZ, BigQ that used to be part of the standard library [maintainers=@proux01,@erikmd]
Stars: ✭ 20 (-9.09%)
Mutual labels:  coq
pitest-descartes
Descartes supports developers to improve their test suites by reporting weak spots in covered code
Stars: ✭ 113 (+413.64%)
Mutual labels:  mutation-analysis
rupicola
Gallina to Bedrock2 compilation toolkit
Stars: ✭ 41 (+86.36%)
Mutual labels:  coq
coq-big-o
A general yet easy-to-use formalization of Big O, Big Theta, and more based on seminormed vector spaces.
Stars: ✭ 31 (+40.91%)
Mutual labels:  coq

mCoq: Mutation Analysis for Coq

mCoq is a tool for mutation analysis of verification projects that use the Coq proof assistant.

mCoq applies a set of mutation operators to Coq definitions, generating modified versions, called mutants, of the project. If all proofs of a mutant are successfully checked, a mutant is declared live; otherwise it is declared killed. mCoq produces HTML reports pinpointing both live and killed mutants in the Coq code, where live mutants may indicate incomplete specifications. Our original research paper provides more information on the technique and optimizations that mCoq implements.

If you have used mCoq in a research project, please cite our tool paper in any related publications:

@inproceedings{JainETAL20mCoqTool,
  author = {Jain, Kush and Palmskog, Karl and Celik, Ahmet and
    Gallego Arias, Emilio Jes{\'u}s and Gligoric, Milos},
  title = {{mCoq}: Mutation Analysis for {C}oq Verification Projects},
  booktitle = {International Conference on Software Engineering,
    Tool Demonstrations Track},
  pages = {To appear},
  year = {2020},
}

Requirements

Installation

We strongly recommend installing the required versions of OCaml, Coq, and SerAPI via the OPAM package manager, version 2.0.5 or later.

To set up the OPAM-based OCaml environment, use:

opam switch create 4.07.1
opam switch 4.07.1
eval $(opam env)

Then, install Coq and SerAPI, pinning them to avoid unintended upgrades:

opam update
opam pin add coq 8.10.2
opam pin add coq-serapi 8.10.0+0.7.0

Next, clone the mCoq repository and enter the directory:

git clone https://github.com/EngineeringSoftware/mcoq.git
cd mcoq

The entry point for using mCoq is the mcoq.py script. To see the available options, use:

./mcoq.py --help

The tool currently assumes that all project Coq source files to be mutated are listed in the _CoqProject file in a Coq project's root directory.

Before performing mutations, the script will automatically check that all mCoq dependencies are present. To disable these checks, pass the option --nocheck.

Usage example

To apply mCoq to StructTact revision 82a85b7, run:

./mcoq.py --project StructTact --threads 2 --sha 82a85b7 \
  --url https://github.com/uwplse/StructTact.git \
  --buildcmd "./configure && make -j2" --qdir ".,StructTact"

After running this command, the HTML report is available in the reports/results/StructTact directory. We also provide the corresponding report for online viewing.

For large Coq projects, we recommend setting the --threads option to at least the number of CPU cores in the machine, since mutation analysis may otherwise take a very long time to complete.

Authors

Acknowledgements

The mCoq developers thank Arthur Charguéraud, Georges Gonthier, Farah Hariri, Cătălin Hrițcu, Robbert Krebbers, Pengyu Nie, Zachary Tatlock, James R. Wilcox and Théo Zimmermann for their feedback on this work.

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