The Coq documentation ===================== The Coq documentation includes - A Reference Manual - A document presenting the Coq standard library The documentation of the latest released version is available on the Coq web site at [rocq-prover.org/docs](https://rocq-prover.org/docs). Additionally, you can view the reference manual for the development version at , and the documentation of the standard library for the development version at . The reference manual is written in reStructuredText and compiled using Sphinx. See [`sphinx/README.rst`](sphinx/README.rst) to learn more about the format that is used. The documentation for the standard library is generated from the `.v` source files using `rocq doc`. Dependencies ------------ ### HTML documentation To produce the complete documentation in HTML, you will need Coq dependencies listed in [`INSTALL.md`](../INSTALL.md). Additionally, the Sphinx-based reference manual requires Python 3, and the following Python packages: - sphinx >= 5.0.0 - sphinx_rtd_theme >= 1.1.0 - beautifulsoup4 >= 4.10.0 - antlr4-python3-runtime >= 4.7.1 & <= 4.9.3 - pexpect >= 4.8.0 - sphinxcontrib-bibtex >= 2.4.2 - sphinx-markdown-builder >= 0.6.10 To install them, you should first install pip and setuptools (for instance, with `apt install python3-pip python3-setuptools` on Debian / Ubuntu) then run: pip3 install sphinx sphinx_rtd_theme beautifulsoup4 \ antlr4-python3-runtime==4.7.1 pexpect sphinxcontrib-bibtex \ sphinx-markdown-builder==0.6.10 Nix users should get the correct development environment to build the HTML documentation from Coq's [`default.nix`](../default.nix) (note this doesn't include the LaTeX packages needed to build the full documentation). You can check the dependencies using the `doc/tools/coqrst/checkdeps.py` script. ### Other formats To produce the documentation in PDF and PostScript formats, the following additional tools are required: - latex (latex2e) - pdflatex - dvips - makeindex - xelatex - latexmk All of them are part of the TexLive distribution. E.g. on Debian / Ubuntu, install them with: apt install texlive-full Or if you want to use less disk space: apt install texlive-latex-extra texlive-fonts-recommended texlive-xetex \ latexmk fonts-freefont-otf ### JSON indices The documentation generator can also produce computer-readable JSON files for individual indices with `make refman-indices`. These files are meant to be useful for tool developers, for instance to power autocompletion in editors. They output files are found in `doc/refman-indices/*.json`. Each JSON index has the following shape: ```typescript { // a key is the name of the index entry [string]: { // the refman documentation page path for that entry "documentation_path": string. // the anchor on that page that leads to the documentation entry "documentation_anchor": string, // the grammar description "syntax": Syntax, // a simpler, markdown documentation "documentation": string, } } ``` Where `Syntax` can be used to match some text against the index entry or to propose the user a code snippet. It is of the following shape: ```ts type Syntax = | ["Literal", Literal] | ["Reference", Reference] | ["Alternative", Alternative] | ["Repeat", Repeat] // the literal string type Literal = { value: string // an optional subscript, for example "1" which should be rendered as "₁" subscript: string | null } // a reference to a different entry in the documentation type Reference = { value: string // an optional subscript, for example "1" which should be rendered as "₁" subscript: string | null } // an alternative between a list of options type Alternative = { children: Syntax[] } // repetition of a list of syntax nodes type Repeat = { // nodes have to repeat at least this many times min: number // nodes can repeat up to and including this many times max: number | null // each repetition has to be separated with this separator: string | null children: Syntax[] } ``` ### Setting the locale for Python Make sure that the locale is configured on your platform so that Python encodes printed messages with utf-8 rather than generating runtime exceptions for non-ascii characters. The `.UTF-8` in `export LANG=C.UTF-8` sets UTF-8 encoding. The `C` can be replaced with any supported language code. You can set the default for a Docker build with `ENV LANG C.UTF-8`. (Python may look at other environment variables to determine the locale; see the [Python documentation](https://docs.python.org/3/library/locale.html#locale.getdefaultlocale)). ### Libraries Most of the refman compiles with only the rocq-core package. However, in order to showcase some nice advertising examples with some external libraries included in Coq CI, a few code blocks in the refman depend on those libraries. These blocks are marked with the `extra` parameter (see [`sphinx/README.rst`](sphinx/README.rst) for more details). The targets below make those blocks optional but their correct compilation is checked in the CI target `doc:ci-refman`. Compilation ----------- The current documentation targets are: - `make refman-html` Build the reference manual in HTML form into `_build/default/doc/refman-html` - `make refman-pdf` Build the reference manual in PDF form into `_build/default/doc/refman-pdf` - `make corelib-html` Build Rocq core library documentation into `_build/default/doc/corelib/html` - `make refman-indices` Build the JSON indices into `doc/refman-indices` - `make apidoc` Build the ML API's documentation into `_build/default/_doc/_html` To build the Sphinx documentation without stopping at the first warning, change the value of the `SPHINXWARNOPT` variable (default is `-W`). The following will build the Sphinx documentation without stopping at the first warning, and store all the warnings in the file `/tmp/warn.log`: ``` SPHINXWARNOPT="-w/tmp/warn.log" make refman-html ``` Note that inspecting local copies of the docs may behave in unexpected ways if opening the sources with a browser (eg with `firefox _build/default/doc/refman-html/index.html`). In order to avoid this, either inspect the version generated by the CI or run a local server, for example with: ``` cd _build/default/doc/refman-html/ && python3 -m http.server ``` Installation ------------ The produced documents are stored in the described directories above, you can install them just by copying the contents to the desired directory. In the future, the `rocq-doc` and `rocq-core` opam packages will install the documentation automatically.