Tactician is a tactic learner and prover for the Coq Proof Assistant. The system will help users make tactical proof decisions while they retain control over the general proof strategy. To this end, Tactician will learn from previously written tactic scripts, and either gives the user suggestions about the next tactic to be executed or altogether takes over the burden of proof synthesis. Tactician’s goal is to provide the user with a seamless, interactive, and intuitive experience together with strong, adaptive proof automation.
For installation and usage instructions, see the manual.
Tactician welcomes contributions of any kind. To get started hacking on Tactician, you first need to learn how to build it manually. These instructions assume basic understanding of Coq, OCaml, Opam and Dune. If not, it is recommended that you first go through the manual before contributing.
-
Make sure that you have an Opam switch available and that you have this repository checked out.
-
Add the required Coq repositories to your Opam switch:
opam repo add coq-released https://coq.inria.fr/opam/released opam repo add coq-core-dev https://coq.inria.fr/opam/core-dev opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev
Optionally, but recommended, add a custom repository for Tactician that includes a version of Coq with some bug-fixes that have been back-ported to older versions:
opam repo add custom-archive https://github.com/LasseBlaauwbroek/custom-archive.git
-
Ensure that you have the proper dependencies installed by running
opam install . --deps-only --with-test
. -
You can now build Tactician using
dune build
. -
Due to limitations in Dune, Tactician currently cannot be executed or used without being installed first (in particular
dune exec ..
does not work). If you want to test your changes, you have two options:- Slow but safe: Pin and install your local changes to Tactician with
opam install . -w
. This approach is slow because Opam has a lot of overhead due to dependency-solving. - Fast but unsafe: After running
dune build
let Dune take care of the installation by runningdune install
. This option is unsafe, because it bypasses Opam. This means that no dependency-solving is performed, and Opam will not know how to remove Tactician (it will not even know it was installed).
The best of both worlds may be to install Tactician through Opam once so that it at least knows that some version of Tactician is installed, and then update quickly using
dune install
. - Slow but safe: Pin and install your local changes to Tactician with
Tactician is a plugin for Coq that supports all versions between Coq 8.10 and master. We do this in order to maximize the number of Coq developments with which we can benchmark.
Because Coq does not guarantee backwards compatibility of its plugin API, we have to maintain different
versions of Tactician for every major Coq version. Hence, we haven an active branch for every
supported Coq version called coq8.10
, coq8.11
, coq8.12
, ..., coqdev
. The main development
of Tactician is done in one of these branches, currently coq8.11
. Once in a while (whenever
is convenient), all the changes in coq8.11
are merged into the other branches and any tweaks
needed for Coq's ever-changing API are applied. This propagation works as follows:
incoming change
|
merge |
|
merge merge merge merge merge merge merge ⯆ merge
dev <---- 8.16 <---- 8.16 <---- 8.15 <---- 8.14 <---- 8.13 <---- 8.12 <---- 8.11 ----> 8.10
Changes that target a branch other than the default branch are only allowed to fix a problem that manifests itself in specific versions of Coq.
Whenever a new Coq release candidate 8.xx
gets branched off upstream, a new branch coq8.xx
will also be branched off from coqdev
in Tactician.
The coqdev
branch is part of Coq's test-suite, meaning that we get fixes when
an API is changed upstream. Only a basic compilation test is run there.
Additionally, a daily CI test is run in this repo to compile all Tactician
branches against upstream Coq.
In order to ensure some stability to develop Tactician, it's default branch does not move every time a new Coq version is released. However, we may still move the default branch once in a while to benefit from upstream changes that increase developer comfort.