The code accompanying this paper is part of the Coq Library of Undecidability Proofs
in the branch coq-8.13
, library which depends on some external packages
(Equations and MetaCoq). Therefore it is necessary to
clone and checkout this release and install the whole library following the Manual installation instructions
below.
However, to save some time, the final build with make all
can be replaced by the command
cd theories
followed by either:
make H10/summary.vo
to only compile the files relevant for the paper. The summary.v
file gives
a high-level view of all the many-one reductions described in the paper together with pointers
to the relevant definitions;make H10/standalone.vo
which imports summary.vo
but moreover contains a standalone statement
(preceded with all the relevant definitions) for the many-one reduction from BPCP
to H10nat
:
BPCP
: the Post correspondence problem for Boolean strings;H10nat
: solvability of single polynomial equation over natural numbers.Any of the above two make
commands should take considerably less time than the >30min necessary for the full build of the library.
Notice that the files H10/summary.v
and H10/standalone.v
are specific to this release and are not included in the coq-8.13
branch of the Coq Library of Undecidability Proofs.
The Coq Library of Undecidability Proofs contains mechanised reductions to establish undecidability results in Coq.
The undecidability proofs are based on a synthetic approach to undecidability, where a problem P
is considered undecidable if its decidability in Coq would imply the decidability of the halting problem of single-tape Turing machines in Coq.
As in the traditional literature, undecidability of a problem P
in the library is often established by constructing a many-one reduction from an undecidable problem to P
.
For more information on the structure of the library, the synthetic approach, and included problems see Publications below, our Wiki, look at the slides or the recording of the talk on the Coq Library of Undecidability proofs at CoqPL ‘20.
The library is a collaborative effort, growing constantly and we invite everybody to contribute undecidability proofs!
The problems in the library can mostly be categorized into seed problems, advanced problems, and target problems.
Seed problems are simple to state and thus make for good starting points of undecidability proofs, often leading to easier reductions to other problems.
Advanced problems do not work well as seeds, but they highlight the potential of our library as a framework for mechanically checking pen&paper proofs of potentially hard undecidability results.
Target problems are very expressive and thus work well as targets for reduction, with the aim of closing loops in the reduction graph to establish the inter-reducibility of problems.
PCP
in PCP/PCP.v
)MM2_HALTING
in MinskyMachines/MM2.v
)FRACTRAN_REG_HALTING
in FRACTRAN/FRACTRAN.v
)x = 1
, x = y + z
or x = y · z
(H10C_SAT
in DiophantineConstraints/H10C.v
)x = 1 + y + z · z
(H10UC_SAT
in DiophantineConstraints/H10C.v
)CM1_HALT
in CounterMachines/CM1.v
)FMsetC_SAT
in SetConstraints/FMsetC.v
)SSTS01
in StringRewriting/SSTS.v
)HaltL
in L/L.v
)HaltMTM
in TM/TM.v
)HaltTM 1
in TM/TM.v
)HaltSBTM
) in TM/SBTM.v
BSM_HALTING
in StackMachines/BSM.v
)MM_HALTING
in MinskyMachines/MM.v
)MUREC_HALTING
in MuRec/recalg.v
)FOL*_prv_intu
, FOL_prv_intu
, FOL_prv_class
in FOL/FOL.v
), including a formulation for the minimal binary signature (FOL/binFOL.v
)FOL*_valid
, FOL_valid_intu
in FOL/FOL.v
)FOL*_satis
, FOL_satis_intu
in FOL/FOL.v
)FSAT
in FOL/FSAT.v
based on TRAKHTENBROT/red_utils.v
)FOL/ZF.v
) and without (FOL/minZF.v
and FOL/binZF.v
) function symbols for set operationsFOL/PA.v
)EILL_PROVABILITY
in ILL/EILL.v
)ILL_PROVABILITY
in ILL/ILL.v
)CLL_cf_PROVABILITY
in ILL/CLL.v
)IMSELL_cf_PROVABILITY3
in ILL/IMSELL.v
)HSC_PRV
in HilbertCalculi/HSC.v
)HSC_AX
in HilbertCalculi/HSC.v
)SLSAT
in SeparationLogic/SL.v and MSLSAT
in SeparationLogic/MSL.v)ndMM2_ACCEPT
in MinskyMachines/ndMM2.v
)SR
and TSR
in StringRewriting/SR.v
)PCSnf
in StringRewriting/PCSnf.v
)H10
in H10/H10.v
)x = 1
, x = y + z
, x = X · y
(LPolyNC_SAT
in PolynomialConstraints/LPolyNC.v
)CM1_HALT
in CounterMachines/CM1.v
),FMsetC_SAT
in SetConstraints/FMsetC.v
)SMNdl_UB
in StackMachines/SMN.v
)SemiU
in SemiUnification/SemiU.v
)SysF_INH
in SystemF/SysF.v
), System F Typability (SysF_TYP
in SystemF/SysF.v
), System F Type Checking (SysF_TC
in SystemF/SysF.v
)HaltL
in L/L.v
)FOL/FOL.v
)If you can use opam 2
on your system, you can follow the instructions here.
If you cannot use opam 2
, you can use the noopam
branch of this repository, which has no dependencies, but less available problems.
We recommend creating a fresh opam switch:
opam switch create coq-library-undecidability 4.07.1+flambda
eval $(opam env)
Then the following commands install the library:
opam repo add coq-released https://coq.inria.fr/opam/released
opam install coq-library-undecidability.1.0.0+8.13
You need Coq 8.13
built on OCAML >= 4.07.1
, the Smpl package, the Equations package, and the MetaCoq package for Coq. If you are using opam 2 you can use the following commands to install the dependencies on a new switch:
opam switch create coq-library-undecidability 4.07.1+flambda
eval $(opam env)
opam repo add coq-released https://coq.inria.fr/opam/released
opam install . --deps-only
make all
builds the librarymake TM/TM.vo
compiles only the file theories/TM/TM.v
and its dependenciesmake html
generates clickable coqdoc .html
in the website
subdirectorymake clean
removes all build files in theories
and .html
files in the website
directoryThe library is compatible with Coq’s compiled interfaces (vos
) for quick infrastructural access.
make vos
builds compiled interfaces for the librarymake vok
checks correctness of the libraryIf you use Visual Studio Code on Windows 10 with Windows Subsystem for Linux (WSL), then local opam switches may cause issues.
To avoid this, you can use a non-local opam switch, i.e. opam switch create 4.07.1+flambda
.
Be careful that this branch only compiles under Coq 8.13
. If you want to use a different Coq version you have to change to a different branch.
Due to compatibility issues, not every branch contains exactly the same problems.
We recommend to use the newest branch if possible.
A Coq Library of Undecidable Problems. Yannick Forster, Dominique Larchey-Wendling, Andrej Dudenhefner, Edith Heiter, Dominik Kirst, Fabian Kunze, Gert Smolka, Simon Spies, Dominik Wehr, Maximilian Wuttke. CoqPL ‘20. https://popl20.sigplan.org/details/CoqPL-2020-papers/5/A-Coq-Library-of-Undecidable-Problems
TRAKTHENBROT
. https://www.ps.uni-saarland.de/extras/fol-trakh/SemiUnification
. https://www.ps.uni-saarland.de/Publications/documents/Dudenhefner_2020_Semi-unification.pdfHOU
. https://www.ps.uni-saarland.de/Publications/details/SpiesForster:2019:UndecidabilityHOU.htmlTM
. https://github.com/uds-psl/tm-verification-framework/H10
. https://uds-psl.github.io/H10L
. https://github.com/uds-psl/certifying-extraction-with-time-boundsILL
. http://uds-psl.github.io/ill-undecidability/FOL
. https://www.ps.uni-saarland.de/extras/fol-undecL/AbstractMachines
. https://www.ps.uni-saarland.de/extras/cbvlcm2/ILL
. https://www.ps.uni-saarland.de/~forster/downloads/LOLA-2018-coq-library-undecidability.pdfPCP
. https://ps.uni-saarland.de/extras/PCPL
. https://www.ps.uni-saarland.de/extras/L-computability/Fork the project on GitHub, add a new subdirectory for your project and your files, then file a pull request. We have guidelines for the directory structure of projects.
Parts of the Coq Library of Undecidability Proofs reuse generic code initially developed as a library for the lecture “Introduction to Computational Logics” at Saarland University, which was written by a subset of the above contributors, Sigurd Schneider, and Jan Christian Menz.