Impressum changes.rst
Sprache: unbekannt
|
|
Spracherkennung für: .rst vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]
.. _changes:
--------------
Recent changes
--------------
.. ifconfig:: not is_a_released_version
.. include:: ../unreleased.rst
Version 9.1
-----------
.. contents::
:local:
:depth: 1
Summary of changes
~~~~~~~~~~~~~~~~~~
We highlight some of the most impactful changes here:
- fixed incorrect guard checking leading to inconsistencies (multiple PRs)
- sort polymorphic universe instances :ref:`should now be written <91sortpolysyntax>`
as `@{s ; u}` instead of `@{s | u}`
- :ref:`fixed <91ltac2notationfix>` handling of notation variables for ltac2 in notations
(i.e. `Notation "'foo' x" := ltac2:(...)`)
- :ref:`Support <91refinedef>` for :attr:`refine` attribute in :cmd:`Definition`
- Rocq can be compile-time configured to be :ref:`relocatable <91relocatable>`
- extraction :ref:`handles <91extractsortpoly>` sort polymorphic definitions
See the `Changes in 9.1.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Rocq's `reference manual for 9.1 < https://rocq-prover.org/doc/v9.1/refman>`_,
documentation of the 9.1 `corelib < https://rocq-prover.org/doc/v9.1/corelib>`__
and `developer documentation of the 9.1 ML API < https://rocq-prover.org/doc/v9.1/api>`_
are also available.
Théo Zimmermann, with help from Jason Gross and Gaëtan Gilbert, maintained
`coqbot < https://github.com/rocq-prover/bot>`__ used to run Rocq's CI and other
pull request management tasks.
Jason Gross maintained the `bug minimizer < https://github.com/JasonGross/coq-tools>`_
and its `automatic use through coqbot < https://github.com/rocq-prover/rocq/wiki/Coqbot-minimize-feature>`__.
Ali Caglayan, Emilio Jesús Gallego Arias, Rudi Grinberg and Rodolphe Lepigre maintained the
`Dune build system for OCaml and Coq/Rocq < https://github.com/ocaml/dune/>`_
used to build the Rocq Prover itself and many Rocq projects.
The `opam repository < https://github.com/coq/opam>`_ for Rocq packages has been maintained b y
Guillaume Claret, Guillaume Melquiond, Karl Palmskog, Matthieu Sozeau
and Enrico Tassi with contributions from many users. The up-to-date list
of packages is `available on the Rocq website <https://rocq-prover.org/packages>`_.
Erik Martin-Dorel maintained the
`Rocq Docker images <https://hub.docker.com/r/rocq/rocq-prover>`_ and
the `docker-keeper <https://gitlab.com/erikmd/docker-keeper>`_ compiler
used to build and keep those images up to date (note that the tool is not Rocq specific).
Erik Martin-Dorel and Théo Zimmermann maintained the
`docker-coq-action <https://github.com/coq-community/docker-coq-action>`_
container action (which is applicable to any opam project hosted on GitHub).
Cyril Cohen, Vincent Laporte, Pierre Roux and Théo Zimmermann
maintained the `Nix toolbox <https://github.com/coq-community/coq-nix-toolbox>`_.
The docker-coq-action and the Nix toolbox are used by many Rocq projects for continuous integration.
Rocq 9.1 was made possible thanks to the following 24 reviewers:
Florian Angeletti, Ali Caglayan, Cyril Cohen, Pierre Courtieu, Jim
Fehrle, Gaëtan Gilbert, Jason Gross, Emilio Jesús Gallego Arias,
Jan-Oliver Kaiser, Thomas Lamiaux, Rodolphe Lepigre,
Erik Martin-Dorel, Guillaume Melquiond, Patrick Nicodemus,
Pierre-Marie Pédrot, Pierre Rousselin, Pierre Roux, Gabriel Scherer,
Matthieu Sozeau, Nicolas Tabareau, Enrico Tassi, Théo Winterhalter and
Théo Zimmermann.
See the `Rocq Team <https://rocq-prover.org/rocq-team>`_ page for
more details on Rocq's development teams.
The 45 contributors to the 9.1 version are: Soudant,
ypopovitch, Reynald Affeldt, Wassim Ait-Moussa, David Allsopp,
Christian Benedict Smit, Frédéric Besson, Mathis Bouverot, Ali
Caglayan, Jean Caspar, Benedict Christian Smit, Cyril Cohen, Pierre Courtieu,
Julien Cretin, Jian Fang, Jim Fehrle, Gaëtan Gilbert, Jason Gross,
Dario Halilovic, Hugo Herbelin, Elyes Jemel, Emilio Jesús Gallego
Arias, Jan-Oliver Kaiser, Kacper Korban, Lucie Lahaye, Thomas Lamiaux,
Rodolphe Lepigre, Yann Leray, Kenji Maillard, Erik Martin-Dorel,
Patrick Nicodemus, Charles Norton, Pim Otte, Pierre-Marie Pédrot,
Josselin Poiret, Johann Rosain, Pierre Rousselin, Pierre Roux,
Radosław Rowicki, Benedict Smit, Bastien Sozeau, Matthieu Sozeau,
Nicolas Tabareau, Enrico Tassi and Théo Zimmermann.
The Rocq community at large helped improve this new version via
the GitHub issue and pull request system,
the `Discourse forum <https://discourse.rocq-prover.org>`__ and the
`Rocq Zulip chat <https://rocq-prover.zulipchat.com>`_.
Gaëtan Gilbert and Pierre-Marie Pédrot are the release managers of Rocq 9.1.
This release is the result of 397 merged PRs, closing 56 issues.
| Nantes, September 2025
| Gaëtan Gilbert and Pierre-Marie Pédrot for the Rocq development team
Changes in 9.1.0
~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Fixed:**
Guard checking forgot to check non principal arguments of a fixpoint
for unguarded uses of the fixpoint leading to an inconsistency
(`#20415 <https://github.com/coq/coq/pull/20415>`_,
fixes `#20413 <https://github.com/coq/coq/issues/20413>`_,
by Gaëtan Gilbert).
- **Fixed:**
inconsistency from incomplete guard checking with nested matches
(`#20457 <https://github.com/rocq-prover/rocq/pull/20457>`_,
fixes `#20455 <https://github.com/rocq-prover/rocq/issues/20455>`_,
by Gaëtan Gilbert).
- **Fixed:**
inconsistency from incorrect reduction across a fixpoint during guard checking
(`#20648 <https://github.com/rocq-prover/rocq/pull/20648>`_,
fixes `#20555 <https://github.com/rocq-prover/rocq/issues/20555>`_,
by Yann Leray).
- **Fixed:**
Wrong context management during rewrite rule reduction
(`#20729 <https://github.com/rocq-prover/rocq/pull/20729>`_,
fixes `#20728 <https://github.com/rocq-prover/rocq/issues/20728>`_,
by Yann Leray).
- **Fixed:**
Fix guard checker making propositional extensionality inconsistent
(`#21050 <https://github.com/rocq-prover/rocq/pull/21050>`_,
fixes `#21053 <https://github.com/rocq-prover/rocq/issues/21053>`_,
by Yann Leray).
- **Fixed:**
substitution of functor delta-resolvers when strengthening.
The previous code was only substituting the inner delta resolvers
and ignoring the codomain of functors. In particular this was generating
ill-formed constants whose canonical component was pointing to a bound name
that did not exist in the global environment, leading to an inconsistency
(`#21057 <https://github.com/rocq-prover/rocq/pull/21057>`_,
fixes `#21051 <https://github.com/rocq-prover/rocq/issues/21051>`_,
by Pierre-Marie Pédrot).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _91sortpolysyntax:
- **Deprecated:**
in :ref:`sort polymorphic <sort-polymorphism>` instances, separating sorts from universes using `|` instead of `;` (the later being possible since this version)
(`#20635 <https://github.com/rocq-prover/rocq/pull/20635>`_,
by Gaëtan Gilbert).
- **Added:**
in :ref:`sort polymorphic <sort-polymorphism>` instances, sorts can be separated from universes using `;` instead of `|`.
This is less ambiguous as `|` is also used to separate universes and constraints when declaring sort polymorphic objects,
and in such declarations when constraints are unspecified it allows omitting the `|`
(`Definition foo@{s;u} := ...` instead of `Definition foo@{s|u|+} := ...`)
(`#20635 <https://github.com/rocq-prover/rocq/pull/20635>`_,
by Gaëtan Gilbert).
- **Fixed:**
Anomaly `List.chop` in the presence of projections with not
enough argument scopes (`#20945
<https://github.com/rocq-prover/rocq/pull/20945>`_, fixes `#20940
<https://github.com/rocq-prover/rocq/issues/20940>`_, by Hugo
Herbelin).
- **Fixed:**
Anomaly `List.chop` with too many projection parameters in an abbreviation
(`#20946 <https://github.com/rocq-prover/rocq/pull/20946>`_,
fixes `#15815 <https://github.com/rocq-prover/rocq/issues/15815>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Changed:**
The `Specif` notations (`exists x : A, P`, `{ x : A | P }`, `{ x : A & P }`, etc)
locally opens `type_scope` for the second component (`P`).
This makes eg `{ x & type_1 * type_2 }` work even when `nat_scope` is opened instead of interpreting `*` as peano multiplication
(`#20294 <https://github.com/coq/coq/pull/20294>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Enable Notation` and :cmd:`Disable Notation` do not take
effect in deep imports (i.e. when a parent of their origin module is
imported)
(`#20484 <https://github.com/rocq-prover/rocq/pull/20484>`_,
by Gaëtan Gilbert).
Tactics
^^^^^^^
- **Changed:**
the :tacn:`abstract` tactic now only registers a name
for the sublemma after the whole tactic block has run,
i.e. after a dot. In particular, the sublemma cannot
be accessed by its name while the tactic call has not
returned
(`#14937 <https://github.com/coq/coq/pull/14937>`_,
by Pierre-Marie Pédrot).
- **Changed:**
the congruence tactic now can handle some dependently typed constructor fields.
The field's type has to be composed of terms occuring globally or projectable from
parameters or indices of the inductive type
(`#19700 <https://github.com/rocq-prover/rocq/pull/19700>`_,
by Benedict Christian Smit).
- **Changed:**
setoid rewriting now rewrites under primitive projections.
In rare cases (see for instance
`#20575 <https://github.com/rocq-prover/rocq/issues/20575>`_),
some rewrite that used to accidentally work will now correctly fail
(`#19811 <https://github.com/rocq-prover/rocq/pull/19811>`_,
by Josselin Poiret and Pierre-Marie Pédrot).
- **Changed:**
output of :cmd:`Print Instances` better matches the actual behaviour
when an instance is declared multiple times with different priorities
(`#20486 <https://github.com/rocq-prover/rocq/pull/20486>`_,
by Gaëtan Gilbert).
- **Added:**
a new :flag:`Rewrite Output Constraints` flag and :ref:`documented <debugging_resolution_issues>` its use
for debugging typeclass resolution failures in setoid rewriting
(`#20476 <https://github.com/rocq-prover/rocq/pull/20476>`_,
by Matthieu Sozeau).
Ltac language
^^^^^^^^^^^^^
- **Changed:**
:cmd:`Ltac` redefinitions (`Ltac ::=`) understand :attr:`export`.
Previously :attr:`global` and the default locality meant the redefinition would
take effect at Require time and when importing any surrounding module.
Now :attr:`global` means it takes affect at Require time,
:attr:`export` when the current module (but not its parents) is imported,
and the default is equivalent to the combination of :attr:`global` and :attr:`export`
(`#20054 <https://github.com/coq/coq/pull/20054>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Ltac` redefinitions (`Ltac foo ::= ...`) are not undone by
importing the module containing the original definition.
To get the previous behaviour, add `Ltac foo ::= orig_def.`
after the original definition `Ltac foo := orig_def.`
(`#20391 <https://github.com/coq/coq/pull/20391>`_,
by Gaëtan Gilbert).
- **Changed:**
Named goals can now appear in any goal selector list
(`#20511 <https://github.com/rocq-prover/rocq/pull/20511>`_,
fixes `#12838 <https://github.com/rocq-prover/rocq/issues/12838>`_,
by Dario Halilovic).
Ltac2 language
^^^^^^^^^^^^^^
- **Changed:**
Ltac2 does not depend on the prelude (i.e. it is compiled with `-noinit`).
It still depends on `Corelib.Init.Ltac` due to the interoperation with Ltac1
(`#20387 <https://github.com/rocq-prover/rocq/pull/20387>`_,
by Gaëtan Gilbert).
- **Changed:**
the documentation and error messages do not use the term "scope" to describe Ltac2 :ref:`syntactic_classes`
(`#20504 <https://github.com/rocq-prover/rocq/pull/20504>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Ltac2 Set` only takes effect with shallow imports, i.e.
`Import Foo` will not run a mutation from (non exported) inner module `Foo.Bar`
(`#20516 <https://github.com/rocq-prover/rocq/pull/20516>`_,
by Gaëtan Gilbert).
- **Added:**
A file `Ltac1CompatNotations` for Ltac2 Notations reproducing Ltac1 parsing of tactics,
that can be harmful to parsing, and produce bad error messages.
(`#20569 <https://github.com/rocq-prover/rocq/pull/20569>`_,
by Thomas Lamiaux).
- **Added:**
`rename` (in `Ltac1CompatNotations`), `eassumption`, `cycle`, and `exfalso` Ltac2 notations
(`#20197 <https://github.com/rocq-prover/rocq/pull/20197>`_,
by Josselin Poiret).
- **Added:**
``Ltac2.Constr.is_string``, ``Ltac2.Constr.is_sort``
(`#20088 <https://github.com/coq/coq/pull/20088>`_,
by Jason Gross).
- **Added:**
``Ltac2.Constr.decompose_app_list``, ``Ltac2.Constr.decompose_app``
(`#20089 <https://github.com/coq/coq/pull/20089>`_,
by Jason Gross).
- **Added:**
``Ltac2.Option.is_some``, ``Ltac2.Option.is_none``, ``Ltac2.Option.compare``,
``Ltac2.Option.join``, ``Ltac2.Option.iter``
(`#20184 <https://github.com/coq/coq/pull/20184>`_,
by Jason Gross).
- **Added:**
`empty` and `add` in `Ltac2.Fresh.Free`, `next` in `Ltac2.Fresh`.
`Ltac2.Fresh` operations should also be faster
(`#20220 <https://github.com/coq/coq/pull/20220>`_,
by Gaëtan Gilbert).
- **Added:**
Enable use of (open\_)lconstr inside Ltac2 Notation command
(`#20430 <https://github.com/coq/coq/pull/20430>`_,
by Pim Otte).
- **Added:**
API functions for inductive types - `Ind.nparams`, `Ind.nparams_uniform`, `Ind.constructor_nargs`, `Ind.constructor_ndecls`, `Constr.Case.inductive`
(`#20475 <https://github.com/rocq-prover/rocq/pull/20475>`_,
fixes `#10940 <https://github.com/rocq-prover/rocq/issues/10940>`_,
by Patrick Nicodemus).
- **Added:**
format specifiers `%A` to use unthunked printers and `%m` for already-formatted messages.
Typically, instead of `printf "foo: %a" (fun () v => print_thing v) v`
we can now write `printf "foo: %A" print_thing v`
or `printf "foo: %m" (print_thing v)`
(`#20498 <https://github.com/rocq-prover/rocq/pull/20498>`_,
by Gaëtan Gilbert).
- **Added:**
Ltac2 type for reduction expressions
(`#20543 <https://github.com/rocq-prover/rocq/pull/20543>`_,
by Radosław Rowicki, with review of Pierre-Marie Pédrot and Gaëtan Gilbert and Jason Gross).
- **Added:**
Ported `rewrite_strat` to Ltac2 and added the `Rewrite.Strategy` module for describing rewrite strategies
(`#20544 <https://github.com/rocq-prover/rocq/pull/20544>`_,
fixes `#20482 <https://github.com/rocq-prover/rocq/issues/20482>`_,
by Radosław Rowicki with review of Jason Gross and Pierre-Marie Pédrot and Gaëtan Gilbert).
- **Added:**
``Ltac2.Message.empty``
(`#20547 <https://github.com/coq/coq/pull/20547>`_,
by Elyes Jemel).
- **Added:**
conversion tests to Unification - `Unification.conv`, `Unification.conv_current`, `Unification.conv_full`
(`#20649 <https://github.com/rocq-prover/rocq/pull/20649>`_,
fixes `#20579 <https://github.com/rocq-prover/rocq/issues/20579>`_,
by Thomas Lamiaux).
- **Added:**
antiquotation `$hyp:id` in terms for dynamically named hypotheses,
i.e. `let x := @y in constr:($hyp:x)` is equivalent to `constr:(&y)`
(`#20656 <https://github.com/rocq-prover/rocq/pull/20656>`_,
by Gaëtan Gilbert).
.. _91ltac2notationfix:
- **Fixed:**
Ltac2 in terms in notations is more aware of the notation variables it uses,
providing early failure when the variable is instantiated with an invalid term,
preventing a spurious warning when a variable that cannot be instantiated is unused,
and preventing exponential blowups from copying unused data
(`#20313 <https://github.com/coq/coq/pull/20313>`_,
fixes `#17833 <https://github.com/coq/coq/issues/17833>`_
and `#20188 <https://github.com/coq/coq/issues/20188>`_
and `#20305 <https://github.com/coq/coq/issues/20305>`_,
by Gaëtan Gilbert).
SSReflect
^^^^^^^^^
- **Changed:**
`%FUN` now delimits scope `function_scope` rather than `fun_scope`
in `ssrfun.v`
(`#20478 <https://github.com/rocq-prover/rocq/pull/20478>`_,
by Pierre Roux).
- **Removed:**
scope `fun_scope` from `ssrfun.v` that was deprecated since 8.20,
use `function_scope` instead
(`#20478 <https://github.com/rocq-prover/rocq/pull/20478>`_,
by Pierre Roux).
- **Deprecated:**
`idempotent` in `ssrfun.v`, use `idempotent_op` instead
(`#20478 <https://github.com/rocq-prover/rocq/pull/20478>`_,
by Pierre Roux).
- **Added:**
definitions `injective2`, `idempotent_op` and `idempotent_fun` and
lemmas `omap_id`, `eq_omap`, `inj_omap`, `omapK`, `inr_inj` and
`inl_inj` in `ssrfun.v`
(`#20478 <https://github.com/rocq-prover/rocq/pull/20478>`_,
by Pierre Roux).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
commands taking a tactic argument (e.g. :cmd:`Hint Extern`)
now follow :opt:`Default Proof Mode` instead of hardcoding Ltac1
(`#19690 <https://github.com/coq/coq/pull/19690>`_,
fixes `#13784 <https://github.com/coq/coq/issues/13784>`_,
by Gaëtan Gilbert).
- **Changed:**
:opt:`Printing Depth` completely skips subterms beyond the given depth.
In general the formatter depth is higher than the term depth, so there is no visible change,
but some notations print subterms without increasing the formatting depth in which case
you may need to increase the printing depth to avoid `...`
(`#20275 <https://github.com/coq/coq/pull/20275>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Search` ignores lemmas declared with :attr:`local` unless
new flag :flag:`Search Blacklist Locals` is unset
(`#20349 <https://github.com/coq/coq/pull/20349>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Search` now accepts open modules, including the current file with
the `in`, `inside` and `outside` filters.
(`#20733 <https://github.com/coq/coq/pull/20733>`_,
fixes `#14010 <https://github.com/coq/coq/issues/14010>`_,
by Pierre Rousselin, with a lot of help by Gaëtan Gilbert).
- **Removed:**
flag `Lia Enum`, which did nothing
(`#20640 <https://github.com/rocq-prover/rocq/pull/20640>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Sort` to declare global or section-scoped sort qualities
(`#18615 <https://github.com/coq/coq/pull/18615>`_,
by Kenji Maillard).
- **Added:**
:cmd:`Number Notation` and :cmd:`String Notation` understand parsers which may produce error messages
(`#20107 <https://github.com/coq/coq/pull/20107>`_,
fixes `#20042 <https://github.com/coq/coq/issues/20042>`_,
by Gaëtan Gilbert).
.. _91refinedef:
- **Added:**
support for the :attr:`refine` attribute to definitions and (co)fixpoints
(`#20355 <https://github.com/coq/coq/pull/20355>`_,
fixes `#20302 <https://github.com/coq/coq/issues/20302>`_,
by Yann Leray).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
`rocq timelog2html` now needs package `rocq-devtools` to be installed
(`#20169 <https://github.com/coq/coq/pull/20169>`_,
by Gaëtan Gilbert).
- **Added:**
error on ambiguous :cmd:`Require`. Rocq used to silently select a file
when ambiguous :cmd:`Require`\s came from different loadpaths, for instance
different fields of the ``ROCQPATH`` environment variable
(`#20601 <https://github.com/rocq-prover/rocq/pull/20601>`_,
fixes `#20587 <https://github.com/rocq-prover/rocq/issues/20587>`_,
by Gaëtan Gilbert).
- **Fixed:**
`rocq dep` implicitly adds `-I $rocq-runtime/..` after the explicit `-I` instead of before
(where `$rocq-runtime` is the expected location of the rocq-runtime package).
This means that if a local plugin (whose META is in an explicit `-I` path) is installed next to rocq-runtime,
`rocq dep` will emit a dependency on the local version instead of the installed version
(`#20393 <https://github.com/coq/coq/pull/20393>`_,
by Gaëtan Gilbert).
RocqIDE
^^^^^^^
- **Changed:**
default character encoding is UTF8 (it was locale dependent on non-windows OSes),
and when the configured encoding is not UTF8 RocqIDE will attempt to convert input files even if they are already valid UTF8
(`#20256 <https://github.com/coq/coq/pull/20256>`_,
fixes `#11526 <https://github.com/coq/coq/issues/11526>`_,
by Gaëtan Gilbert).
- **Added:**
an option to control the maximum length of the message view
in RocqIDE
(`#20597 <https://github.com/rocq-prover/rocq/pull/20597>`_,
fixes `#20420 <https://github.com/rocq-prover/rocq/issues/20420>`_,
by Pierre-Marie Pédrot).
Corelib
^^^^^^^
- **Added:**
type `result` in `Corelib.Datatypes`, equivalent to `sum`
but with a name fitting possibly-failing computations
(`#20107 <https://github.com/coq/coq/pull/20107>`_,
by Gaëtan Gilbert).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
minimum supported OCaml version is now 4.14.0 (instead of 4.09.0),
and minimum supported OCamlfind version is now 1.9.1 (instead of 1.8.1)
(`#20576 <https://github.com/rocq-prover/rocq/pull/20576>`_,
by Gaëtan Gilbert).
.. _91relocatable:
- **Added:**
Rocq can be compile-time configured to be relocatable,
using `./configure -relocatable` instead of e.g. `./configure -prefix /some/path`.
See :ref:`system_config` for an explanation of how Rocq uses its configured installation paths
(`#19901 <https://github.com/coq/coq/pull/19901>`_,
by Gaëtan Gilbert).
- **Added:** Experimental support for native Windows builds.
Rocq can now build and run under a native Windows environment using
the new native Windows support in Opam 2.3. This setup is tested in
CI, running a large part of the test suite. Beware this support is
still experimental, and some problem may arise on Unix-specific
tools. Note that RocqIDE is still not supported (c.f. `#20631
<https://github.com/rocq-prover/rocq/issues/20631>`_) (`#20464
<https://github.com/rocq-prover/rocq/pull/20464>`_, by Emilio Jesus
Gallego Arias, Gaëtan Gilbert, David Allsopp, Ali Caglayan, Jason
Gross, the Opam team, the @setup-ocaml team, the OCaml team).
- **Fixed:**
Bad interaction between dune, `rocq dep`, and local opam directory switches
(`#20437 <https://github.com/rocq-prover/rocq/pull/20437>`_,
fixes `#20422 <https://github.com/rocq-prover/rocq/issues/20422>`_,
by Rodolphe Lepigre).
Extraction
^^^^^^^^^^
.. _91extractsortpoly:
- **Fixed:**
extraction handles sort polymorphic definitions
(`#20655 <https://github.com/rocq-prover/rocq/pull/20655>`_,
by Pierre-Marie Pédrot).
Miscellaneous
^^^^^^^^^^^^^
- **Added:**
plugin tutorial for extending Ltac2
(`#20670 <https://github.com/rocq-prover/rocq/pull/20670>`_,
by Gaëtan Gilbert).
Version 9.0
-----------
.. contents::
:local:
:depth: 1
Summary of changes
~~~~~~~~~~~~~~~~~~
The Rocq Prover version 9.0 is the first Rocq Prover release after the renaming
from The Coq Proof Assistant. The Rocq Prover 9.0 command line interface is
backwards compatible with Coq 8.20, providing compatibility shims so that
developments depending on Coq can be easily ported, see `Porting to The Rocq
Prover`_ for details. The 9.0 version is based on a new single binary `rocq`
that dispatches commands to previously separate binaries, a split and renaming
of the standard library to `Stdlib` and improvements to the handling of
template-polymorphism, bringing it closer to a complete subsumption by sort
polymorphism.
We highlight some of the most impactful changes here:
- "The Rocq Prover" is the new official name of the project. We leave to users the
choice of renaming their projects to reflect this change, see `Renaming Advice`_.
The Rocq Prover comes with a new visual identity and website, see `The Rocq Prover Website`_.
- A single `rocq` binary dispatches commands for compilation, read-eval-print-loop,
documentation building, dependency computation, etc. See :ref:`therocqcommands`.
It corresponds to the `rocq-runtime` `opam package <https://ocaml.org/p/rocq-runtime>`_.
This is a bare-bones package that does not provide any Gallina code.
- The `Coq` standard library has been :ref:`split <90stdlib>` into two libraries:
- A `Corelib` library (the `rocq-core` opam package). This is an
extended prelude, which is
enough to run Rocq tactics and contains the `Ltac2` library and bindings
for primitive types (integers, floats, arrays and strings).
- An `Stdlib` library (the `rocq-stdlib` opam package). The `Stdlib` is
now maintained out of the main `rocq` repository. We welcome maintainers and
contributors to the `new repository <https://github.com/rocq-prover/stdlib>`_.
A specific call for contributions will be
sent soon.
Notable breaking changes:
- The legacy loading mode for plugins has been :ref:`removed <LegacyLoadingRemoval>`.
See the `Changes in 9.0.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Rocq's `reference manual for 9.0 <https://rocq-prover.org/doc/v9.0/refman>`_,
documentation of the 9.0 `core <https://rocq-prover.org/doc/v9.0/corelib>`_ and
`standard <https://rocq-prover.org/doc/v9.0/stdlib>`_ libraries,
`reference manual of the 9.0 standard library <https://rocq-prover.org/doc/v9.0/refman-stdlib>`_
and `developer documentation of the 9.0 ML API <https://rocq-prover.org/doc/v9.0/api>`_
are also available.
Théo Zimmermann, with help from Jason Gross and Gaëtan Gilbert, maintained
`coqbot <https://github.com/coq/bot>`_ used to run Coq's CI and other
pull request management tasks.
Jason Gross maintained the `bug minimizer <https://github.com/JasonGross/coq-tools>`_
and its `automatic use through coqbot <https://github.com/coq/coq/wiki/Coqbot-minimize-feature>`_.
Ali Caglayan, Emilio Jesús Gallego Arias, Rudi Grinberg and Rodolphe Lepigre maintained the
`Dune build system for OCaml and Coq/Rocq <https://github.com/ocaml/dune/>`_
used to build the Rocq Prover itself and many Rocq projects.
The `opam repository <https://github.com/coq/opam>`_ for Rocq packages has been maintained by
Guillaume Claret, Guillaume Melquiond, Karl Palmskog, Matthieu Sozeau
and Enrico Tassi with contributions from many users. The up-to-date list
of packages is `available on the Rocq website <https://rocq-prover.org/packages>`_.
Erik Martin-Dorel and Jaime Arias maintained the
`Rocq Docker images <https://hub.docker.com/r/rocq/rocq-prover>`_.
Erik Martin-Dorel maintained the `docker-keeper <https://gitlab.com/erikmd/docker-keeper>`_ compiler
used to build and keep those images up to date (note that the tool is not Rocq specific).
Erik Martin-Dorel and Théo Zimmermann maintained the
`docker-coq-action <https://github.com/coq-community/docker-coq-action>`_
container action (which is applicable to any opam project hosted on GitHub).
Cyril Cohen, Vincent Laporte, Pierre Roux and Théo Zimmermann
maintained the `Nix toolbox <https://github.com/coq-community/coq-nix-toolbox>`_.
The docker-coq-action and the Nix toolbox are used by many Rocq projects for continuous integration.
Rocq 9.0 was made possible thanks to the following 27 reviewers:
Yves Bertot, Ali Caglayan, Tej Chajed, Andres Erbsen, Jim Fehrle,
Emilio Jesús Gallego Arias, Gaëtan Gilbert, Jason Gross, Samuel Gruetter,
Hugo Herbelin, Thomas Lamiaux, Olivier Laurent, Rodolphe Lepigre,
Erik Martin-Dorel, Guillaume Melquiond, Guillaume Munch-Maccagnoni,
Karl Palmskog, Pierre-Marie Pédrot, Pierre Rousselin, Pierre Roux,
Marcello Seri, Michael Soegtrop, Matthieu Sozeau, Enrico Tassi,
Romain Tetley, Oliver Turner and Théo Zimmermann.
See the `Rocq Team <https://rocq-prover.org/rocq-team>`_ page for
more details on Rocq's development teams.
The 48 contributors to the 9.0 version are:
Jean Abou Samra, Tanaka Akira, David Allsopp, Frédéric Besson, Mathis Bouverot, Sylvain Chiron,
Cyril Cohen, Lucas Donati, Andrej Dudenhefner, Arya Elfren, Andres Erbsen, Siegmentation Fault,
Jim Fehrle, Gaëtan Gilbert, Tomaz Gomes Mascarenhas, Jason Gross, Hugo Herbelin, Florent Hivert,
Daniil Iaitskov, Emilio Jesús Gallego Arias, Jan-Oliver Kaiser, Rodolphe Lepigre, Yann Leray,
Felix Loyau-Kahn, Erik Martin-Dorel, Guillaume Melquiond, Guillaume Munch-Maccagnoni,
Aleksandar Nanevski, Charles Norton, Karl Palmskog, Pierre-Marie Pédrot, Pierre Rousselin,
Pierre Roux, Kazuhiko Sakaguchi, Gabriel Scherer, Marcello Seri, Benny Smit, Michael Soegtrop,
Matthieu Sozeau, Nicolas Tabareau, Enrico Tassi, Oliver Turner, Quentin Vermande, Daneel Yaitskov,
Remzi Yang, Tan Yee Jian and Théo Zimmermann.
The Coq/Rocq community at large helped improve this new version via
the GitHub issue and pull request system, the coq-club@inria.fr mailing list,
the `Discourse forum <https://coq.discourse.group/>`_ and the
`Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 9.0's development spanned 7 months from the release of Coq 8.20.0.
Pierre-Marie Pédrot and Matthieu Sozeau are the release managers of Rocq 9.0.
This release is the result of 491 merged PRs, closing 68 issues.
| Nantes, March 2025
| Pierre-Marie Pédrot and Matthieu Sozeau for the Rocq development team
Porting to The Rocq Prover
~~~~~~~~~~~~~~~~~~~~~~~~~~
The Rocq Prover version 9.0 includes compatibility shims that make it possible
to invoke it through legacy Coq commands: `coq-tex`, `coq_makefile`, `coqchk`, `coqdoc`, `coqpp`, `coqtop`,
`coqwc`, `coqc`, `coqdep`, `coqnative`, `coqtimelog2html`, `coqtop.byte`, `coqworkmgr`.
When using `opam`, this compatibility layer is provided by the packages `coq-core`,
`coq-stdlib` and `coq`. In this setting, nothing needs to be changed to the build systems
of existing projects to compile with Rocq 9.0 (aliased as "Coq 9.0").
You should expect warnings that the standard library previously under namespace
`Coq` has been renamed to `Stdlib`. See `this entry
<https://rocq-prover.org/doc/v9.0/refman-stdlib/changes.html#changed>`_ from
the Standard Library's changelog for the suggested workflow to port theories.
There are important changes to consider for building plugins and libraries:
- To be future-proof, projects based on `coq_makefile` can be ported to not rely
on the compatibility layer anymore. To do so, one must replace uses of
`coq_makefile` with :ref:`rocq makefile <rocq_makefile>`, which will directly
call the new `rocq` binary without relying on the compatibility shims.
- If using `dune` to :ref:`build <building_dune>` a Rocq project, you will still
need the compatibility shim for `coq-core` so that `dune`'s Coq language extension
functions correctly.
Regarding packaging:
- Opam packages that depend on the compatibility shims should remain named as `coq-*`, whereas
ported packages should be named `rocq-*`, with the `coq` dependency being replaced by
a `rocq-core` and `rocq-stdlib` dependency (unless your package does not depend on the stdlib),
but **not** `rocq-prover` which is only a user-oriented metapackage.
- Similarly, Nix packages that use the compatibility shims can be kept in
`coqPackages` (and can keep depending on `coq`), whereas ported packages can
be added in `rocqPackages`, depending on `rocq-core`.
In both cases, when a `rocq` port is done, a `coq` metapackage can be kept,
simply depending on the new `rocq` package and `coq`.
Renaming Advice
~~~~~~~~~~~~~~~
We have applied the `renaming <https://rocq-prover.org/about#Name>`_ from the
Coq Proof Assistant to The Rocq Prover in this version, and officialy supported
projects in the `Rocq organization <https://github.com/rocq-prover>`_ will be
renamed in the future. The Rocq Development Team's official position on renaming of
projects *it does not officially maintain* is to let their authors do as they wish.
We just note that the new identity is quite compatible with existing
Rooster references. However, we encourage existing and forthcoming projects to
adopt the new logo, its colors and fonts, see the `identity guidelines
<https://rocq-prover.org/logo>`_ for more information.
The Rocq Prover Website
~~~~~~~~~~~~~~~~~~~~~~~
The Rocq Prover comes with a new `website <https://rocq-prover.org>`_ which was
developped by Matthieu Sozeau, Nicolas Tabareau and Théo Zimmermann in
collaboration with Bastien Sozeau of the `Noir Blanc Rouge
<https://noirblancrouge.com/>`_ type foundry. The new website is a fork of the
`OCaml.org <https://ocaml.org>`_ website developed by `Tarides
<https://tarides.com/>`_. The Rocq development team is thankful for their help
and for open-sourcing their website. It includes full support for the `Rocq
package archive <https://github.com/coq/opam>`_, a responsive design and easy
contributions through markdown files. The new identity, customized fonts and
logo were designed by Bastien Sozeau, consulting for the Rocq development team.
The logo is released under the UNLICENSE open-source `license <https://github.com/coq/rocq-prover.org/LICENSE>`_
and customized 3rd-party fonts are released under open-source `licences <https://github.com/coq/rocq-prover.org/LICENSE-3RD-PARTY>`_.
The website is deployed automatically using a
custom `deployer <https://deploy.rocq-prover.org>`_ developed by Matthieu
Sozeau. The deployer keeps the website up-to-date with the GitHub repositories
of the `website <https://github.com/coq/rocq-prover.org>`__ and `documentation
<https://github.com/coq/doc>`_. Its code is accessible on `GitHub
<https://github.com/coq/deploy-rocq-prover.org>`_.
Changes in 9.0.0
~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Changed:**
large performance improvements in kernel checking of terms with repeated subterms
(`#19160 <https://github.com/coq/coq/pull/19160>`_,
by Gaëtan Gilbert)
- **Changed:**
the criteria for a parameter to be considered template in a template inductive type.
For a level to be template, it must now appear only once in the context of parameters,
and only as the return sort of the arity of some parameter. Furthermore,
it may appear neither in the indices of the inductive type nor in the type of its constructors.
Finally, a template level appearing in the return sort of the inductive type must have a zero increment
(`#19250 <https://github.com/coq/coq/pull/19250>`_,
`#19254 <https://github.com/coq/coq/pull/19254>`_,
`#19263 <https://github.com/coq/coq/pull/19263>`_,
by Pierre-Marie Pédrot).
- **Changed:**
the kernel typing rules for template polymorphic inductive types do not
require anymore adding global constraints when applied enough. Rather,
template polymorphic inductive types are now a special kind of universe
polymorphic inductive types that do not need explicit instances and
can handle some amount of algebraic universe levels. The new rules are
strictly more general than the previous ones and thus backwards compatible
(`#19262 <https://github.com/coq/coq/pull/19262>`_,
by Pierre-Marie Pédrot).
- **Removed:**
the kernel always produces an error when given terms with bad relevances
instead of emitting the default-error `bad-relevance` warning
(which is now only used by the higher layers)
(`#19164 <https://github.com/coq/coq/pull/19164>`_,
by Gaëtan Gilbert).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Typeclasses queries of classes that are declared with the options
`Typeclasses Strict Resolution` and `Typeclasses Unique Instances`
enabled are resolved independently of other queries, allowing them
to succeed even when the remaining queries fail
(`#18762 <https://github.com/coq/coq/pull/18762>`_,
by Jan-Oliver Kaiser).
- **Changed:**
More systematic early check of `@{univs}`-like universe declarations
at the time of declaring the statement of an interactive
definition/theorem
(`#18960 <https://github.com/coq/coq/pull/18960>`_,
by Hugo Herbelin).
- **Changed:**
The syntax :n:`Derive x SuchThat type As name` is deprecated and replaced by
:n:`Derive x in type as name` which itself is generalized into
:n:`Derive open_binders in type as name`, so that several names,
and possibly types to these names, can be given
(`#19295 <https://github.com/coq/coq/pull/19295>`_,
by Hugo Herbelin).
- **Changed:**
`match` elaboration can unify sort quality variables to make an elimination valid
(`#19329 <https://github.com/coq/coq/pull/19329>`_,
fixes `#19327 <https://github.com/coq/coq/issues/19327>`_,
by Gaëtan Gilbert).
- **Changed:**
``:>`` in :token:`of_type_inst` now always declares coercions. The previous behavior,
deprecated since 8.18, was to declare typeclass instances instead,
when used in records declared with the :cmd:`Class` keyword. Look at
the :ref:`previous changelog entries <819_changes_spec_language>`
about former warnings `future-coercion-class-constructor` and
`future-coercion-class-field` for advice on how to update your code
(`#19519 <https://github.com/coq/coq/pull/19519>`_, by Pierre Roux).
- **Changed:**
The unification algorithm does not solve unification problems of the
form `proj _ ~ _` using canonical structures when the LHS reduces or
is ground
(`#19611 <https://github.com/coq/coq/pull/19611>`_,
by Quentin Vermande).
- **Changed:**
When unification fails to instantiate an evar because
of a problem that occurs under a beta-redex, we reduce
this beta-redex and try again
(`#19833 <https://github.com/coq/coq/pull/19833>`_,
by Quentin Vermande).
- **Added:**
Ability to hide the quantification over the decreasing argument of a
fixpoint under a definition, with application to declaring fixpoints
as instance of a class
(`#19296 <https://github.com/coq/coq/pull/19296>`_,
fixes `#7913 <https://github.com/coq/coq/issues/7913>`_,
by Hugo Herbelin).
- **Fixed:**
:cmd:`Derive` now supports :cmd:`Admitted`
(`#19092 <https://github.com/coq/coq/pull/19092>`_,
fixes `#18951 <https://github.com/coq/coq/issues/18951>`_,
by Hugo Herbelin).
- **Fixed:**
Mishandling of let binders in `Program Fixpoint`
(`#19257 <https://github.com/coq/coq/pull/19257>`_,
fixes `#16906 <https://github.com/coq/coq/issues/16906>`_,
by Hugo Herbelin).
- **Fixed:**
Pattern-matching in :attr:`Program` mode now supports inductive
types using :ref:`local definitions <let-in>` in their declaration
(`#19773 <https://github.com/coq/coq/pull/19773>`_,
fixes `#10407 <https://github.com/coq/coq/issues/10407>`_,
by Hugo Herbelin).
- **Fixed:**
Anomaly in :cmd:`Function` when a well-founded relation had not the expected type
(`#19775 <https://github.com/coq/coq/pull/19775>`_,
fixes `#12417 <https://github.com/coq/coq/issues/12417>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Fixed:**
Recognized all Unicode non-spacing marks as valid identifier characters
(`#19693 <https://github.com/coq/coq/pull/19693>`_,
fixes `#19512 <https://github.com/coq/coq/issues/19512>`_,
by Guillaume Melquiond).
Tactics
^^^^^^^
- **Changed:**
The reduction tactic :tacn:`hnf` becomes insensitive to the
:g:`simpl never` status of constants, as prescribed in the reference
manual; this can exceptionally impact the behavior of :tacn:`intros`
on goals defining an implicative or universally quantified statement
by recursion (`#18580 <https://github.com/coq/coq/pull/18580>`_,
by Hugo Herbelin).
- **Changed:**
`Ncring_tac.extra_reify` is expected to return `tt` on failure and
the reification result on success, instead of `(false, anything)` on failure
and `(true, result)` on success
(this only matters to users overriding it to extend the Ncring reification)
(`#19501 <https://github.com/coq/coq/pull/19501>`_,
by Gaëtan Gilbert).
- **Removed:**
the deprecated `gintuition` tactic
(`#19704 <https://github.com/coq/coq/pull/19704>`_,
by Pierre-Marie Pédrot).
- **Removed:**
`dfs eauto` tactic, which was deprecated in 8.16
(`#19817 <https://github.com/coq/coq/pull/19817>`_,
by Jim Fehrle).
- **Added:**
The :flag:`Info Micromega` flag (unset by default) makes :tacn:`lia`,
:tacn:`lra`, :tacn:`nia` and :tacn:`nra` print the names of
hypotheses used by the proof
(`#19703 <https://github.com/coq/coq/pull/19703>`_,
by Frédéric Besson).
- **Fixed:**
Refolding of constants marked as :g:`simpl never` in position of
argument of a destructor in :tacn:`simpl`; note that this may
occasionally cause some calls to :tacn:`simpl` to satisfy more
scrupulously :g:`simpl never` and to stop reducing further in
subterms that are *not* in position of argument of a destructor, as
specified by :g:`simpl never`
(`#18591 <https://github.com/coq/coq/pull/18591>`_,
fixes `#16040 <https://github.com/coq/coq/issues/16040>`_,
by Hugo Herbelin).
- **Fixed:**
`Set Typeclasses Strict Resolution` is no longer ignored in
`typeclasses eauto with <dbs>`
(`#19436 <https://github.com/coq/coq/pull/19436>`_,
fixes `#15432 <https://github.com/coq/coq/issues/15432>`_,
by Jan-Oliver Kaiser).
- **Fixed:**
Unbound variables were sometimes generated when a metavariable of a
theorem given to :tacn:`apply` occurred in the type of the theorem
under a :n:`fun`
(`#19769 <https://github.com/coq/coq/pull/19769>`_,
fixes `#17314 <https://github.com/coq/coq/issues/17314>`_,
by Hugo Herbelin).
- **Fixed:**
`cbn` now considers primitive literals (integers, floats, arrays, strings)
"constructors", i.e. they now satisfy the `!` modifier in `Arguments`
(`#20004 <https://github.com/coq/coq/pull/20004>`_,
fixes `#20003 <https://github.com/coq/coq/issues/20003>`_,
by Jan-Oliver Kaiser).
Ltac2 language
^^^^^^^^^^^^^^
- **Deprecated:**
`Ltac2.Constr.occur_between` and `occurn` whose return values are the opposite of that implied by their names
(`#19614 <https://github.com/coq/coq/pull/19614>`_,
by Gaëtan Gilbert).
- **Added:**
Added Ltac2 bindings for congruence and simpl congruence, it fixes #14289 not entirely but provides Ltac2 bindings for one of the tactics listed there
(`#19032 <https://github.com/coq/coq/pull/19032>`_,
fixes `#14289 <https://github.com/coq/coq/issues/14289>`_,
by Benny Smit, reviewed by Jason Gross, Pierre-Marie Pédrot, Gaëtan Gilbert).
- **Added:**
APIs `compare` `of_int` and `print` in `Ltac2.Uint63`
(`#19197 <https://github.com/coq/coq/pull/19197>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Ltac2 Type` supports deprecation of the declared constructors
(`#19575 <https://github.com/coq/coq/pull/19575>`_,
by Gaëtan Gilbert).
- **Added:**
`Ltac2.Constr.noccur_between` and `noccurn` to test for non-occurrence of local variables in terms
(`#19614 <https://github.com/coq/coq/pull/19614>`_,
by Gaëtan Gilbert).
- **Added:**
`Ltac2.Control.hyp_value` to get the value (`v` in `H := v`) of an hypothesis
(`#19630 <https://github.com/coq/coq/pull/19630>`_,
by Gaëtan Gilbert).
- **Fixed:**
resolution of :ref:`abbreviations <Abbreviations>` in :n:`reference`
in :token:`ltac2_quotations`, for instance in eval tactic
delta-reduction flags :token:`ltac2_delta_reductions`
(`#19589 <https://github.com/coq/coq/pull/19589>`_,
fixes `#19590 <https://github.com/coq/coq/issues/19590>`_,
by Pierre Roux).
- **Fixed:**
`Ltac2 Eval` does not require to be focused in a goal
anymore (`#19961 <https://github.com/coq/coq/pull/19961>`_, by
Daniil Iaitskov).
SSReflect
^^^^^^^^^
- **Changed:**
The :tacn:`done` tactic now tries to apply `sym_equal` with four arguments
instead of trying first with zero to three arguments
(`#19372 <https://github.com/coq/coq/pull/19372>`_,
by Quentin Vermande).
- **Changed:**
`done` uses `simple refine` instead of `apply` to apply `sym_equal`
(`#19399 <https://github.com/coq/coq/pull/19399>`_,
by Quentin Vermande).
- **Removed:**
no longer used lemma ``not_locked_false_eq_true``
and its call in the :tacn:`done` tactic
(`#19382 <https://github.com/coq/coq/pull/19382>`_,
by Pierre Roux).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
:cmd:`Variables` and its aliases do not share the type of combined binders anymore.
This makes for instance `Variables a b : T` strictly equivalent to `Variables (a: T) (b : T).`
(when `a` is not bound in `T`).
The difference matters when interpreting `T` generates fresh universes or existential variables:
they will be distinct in the types of `a` and `b`.
This was already the case for binders in terms (eg `fun (a b : T) => ...`), :cmd:`Context`,
and when :flag:`Universe Polymorphism` is enabled
(`#19277 <https://github.com/coq/coq/pull/19277>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Guarded` and :cmd:`Validate Proof` are now internally classified as "queries" instead of "proof steps".
This means they should not be counted anymore when stepping back with :cmd:`Undo`.
(`#19383 <https://github.com/coq/coq/pull/19383>`_,
by Gaëtan Gilbert).
- **Changed:**
template polymorphism can bind universes which do not appear in the inductive's conclusion.
For instance `eq` and `ex` are now template polymorphic.
(`#19528 <https://github.com/coq/coq/pull/19528>`_,
by Gaëtan Gilbert).
- **Changed:**
The order of hints shown in the "For any goal" category in :cmd:`Print HintDb`
now matches the order in which they will be tried.
Previously the entries were misordered on their priority
(`#19624 <https://github.com/coq/coq/pull/19624>`_,
by Jim Fehrle).
- **Changed:**
The :cmd:`Hint Rewrite` command now requires a *non-empty* list of hintDbs
after the colon to be consistent with other Hint commands. If your script
has an empty list of hintDbs, fix it by removing the colon
(`#19730 <https://github.com/coq/coq/pull/19730>`_,
by Jim Fehrle).
- **Changed:**
:cmd:`Create HintDb` no longer erases pre-existing hint databases
(`#19808 <https://github.com/coq/coq/pull/19808>`_,
by Gaëtan Gilbert).
.. _LegacyLoadingRemoval:
- **Removed:**
"legacy" (non-findlib) loading mode for plugins in :cmd:`Declare ML Module`
(`#18385 <https://github.com/coq/coq/pull/18385>`_,
by Emilio Jesús Gallego Arias and Gaëtan Gilbert).
- **Removed:**
:n:`: @type` annotation in :cmd:`Obligation` which was ignored when executing the command
(`#19678 <https://github.com/coq/coq/pull/19678>`_,
by Gaëtan Gilbert).
- **Removed:**
flag `Automatic Proposition Inductives` (using its effect was deprecated since 8.20)
(`#19872 <https://github.com/coq/coq/pull/19872>`_,
by Gaëtan Gilbert).
- **Added:**
New :cmd:`Arguments`' modifier `clear simpl` to reset `simpl` reduction flags
(`#19216 <https://github.com/coq/coq/pull/19216>`_,
by Hugo Herbelin).
- **Added:**
The ``use`` field of the :attr:`deprecated` attribute lets one specify
a replacement for a ``Theorem``, ``Definition`` or ``Notation`` that is
printed as part of the deprecation warning message and also used to suggest
a quick fix in LSP based user interfaces
(`#19300 <https://github.com/coq/coq/pull/19300>`_,
by Enrico Tassi).
- **Added:**
:cmd:`Register`, :cmd:`Register Scheme` and :cmd:`Add Zify`
now support attributes :attr:`local`, :attr:`export` and :attr:`global`
(`#19362 <https://github.com/coq/coq/pull/19362>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Add` and :cmd:`Remove`
now support attributes :attr:`local`, :attr:`export` and :attr:`global`
(`#19390 <https://github.com/coq/coq/pull/19390>`_,
by Gaëtan Gilbert).
- **Added:**
Default hint mode option for typeclasses, mode attribute on Class
declarations overriding the default and class-declaration-default-mode
warning to check for uses of the default mode
(`#19473 <https://github.com/coq/coq/pull/19473>`_,
by Matthieu Sozeau).
- **Added:**
:cmd:`Profile` command modifier to get profiling information for a given command
(`#19517 <https://github.com/coq/coq/pull/19517>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Print Universes` `Subgraph` accepts raw universe names (which end in an integer instead of an identifier)
for debugging purposes, eg `Print Universes Subgraph ("foo.1" "foo.2")`.
The integer in raw universe expressions is extremely unstable,
so raw universe expressions should not be used outside debugging sessions
(`#19640 <https://github.com/coq/coq/pull/19640>`_,
by Gaëtan Gilbert).
- **Fixed:**
the effect of :cmd:`Export` survives sections
(the previous behaviour was identical to :cmd:`Import` in sections)
(`#19361 <https://github.com/coq/coq/pull/19361>`_,
fixes `#19360 <https://github.com/coq/coq/issues/19360>`_,
by Gaëtan Gilbert).
- **Fixed:**
Anomaly when printing a module functor with :cmd:`Strategy` or
:cmd:`Transparent` in one of its parameters
(`#19768 <https://github.com/coq/coq/pull/19768>`_,
fixes `#19767 <https://github.com/coq/coq/issues/19767>`_,
by Hugo Herbelin).
- **Fixed:**
:opt:`Debug` and :opt:`Warnings` are classified as Synterp.
This changes the scheduling during :cmd:`Import` such that putting `#[export] Set Warnings` around a specific command may change behaviour.
(`#19981 <https://github.com/coq/coq/pull/19981>`_,
by Gaëtan Gilbert).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
The ``-compat`` :ref:`command line option <command-line-options>`
now raises a warning rather than an error when the compatibility file
doesn't exist. This enables easier use of the compat mechanism with
versions where the compatibility file doesn't exist yet
(`#19370 <https://github.com/coq/coq/pull/19370>`_,
by Pierre Roux).
- **Changed:**
`coq_makefile` generated makefiles only install plugin `.cmxs` files in findlib locations
and stop putting a copy in `user-contrib` (the copy should be useless after the removal of plugin legacy loading)
(`#19841 <https://github.com/coq/coq/pull/19841>`_,
by Gaëtan Gilbert).
- **Removed:**
`coqdep` flag `-m` (it was used through `coq_makefile`)
(`#19863 <https://github.com/coq/coq/pull/19863>`_,
by Gaëtan Gilbert).
- **Added:**
:ref:`command line option <command-line-options>` ``-compat-from``
to enable writing compatibility files for libraries similarly to the
``-compat`` option for Rocq
(`#19370 <https://github.com/coq/coq/pull/19370>`_,
by Pierre Roux).
- **Added:**
The ``-compat`` :ref:`command line option <command-line-options>`
now silences deprecation warnings that were introduced since the
given version
(`#19370 <https://github.com/coq/coq/pull/19370>`_,
by Pierre Roux).
RocqIDE
^^^^^^^
- **Changed:**
Improved Preferences dialog: larger margins,
tree of categories, sections in the categories,
spin buttons for numbers, preservation of the last
selected category, and more
(`#19417 <https://github.com/coq/coq/pull/19417>`_,
by Sylvain Chiron).
- **Fixed:**
All preferences are now applied after clicking Apply or OK
rather than immediately
(`#19417 <https://github.com/coq/coq/pull/19417>`_,
by Sylvain Chiron).
- **Fixed:**
Changing the allowed modifiers in the Shortcuts panel of
the Preferences dialog now immediately updates the available
modifiers for the listed items
(`#19417 <https://github.com/coq/coq/pull/19417>`_,
by Sylvain Chiron).
- **Added:**
Preference setting for unjustified conclusions background color
(`#19417 <https://github.com/coq/coq/pull/19417>`_,
by Sylvain Chiron).
- **Changed:**
CoqIDE is renamed to RocqIDE (the auxiliary binary `coqidetop` is not renamed)
(`#20036 <https://github.com/coq/coq/pull/20036>`_,
by Gaëtan Gilbert).
- **Added:**
Warnings are now included in the Errors panel
(`#19188 <https://github.com/coq/coq/pull/19188>`_,
by Jim Fehrle).
- **Fixed:**
Changing the position of buffer names (top, left,
bottom or right) no longer needs a restart
(`#19166 <https://github.com/coq/coq/pull/19166>`_,
by Sylvain Chiron).
- **Added:**
Document tabs are now reorderable
(`#19166 <https://github.com/coq/coq/pull/19166>`_,
by Sylvain Chiron).
Standard library
^^^^^^^^^^^^^^^^
.. _90stdlib:
- **Changed:**
Stdlib moved to its own repository, look for
`Stdlib own changelog <https://rocq-prover.org/doc/v9.0/refman-stdlib/changes.html>`_
for other changes there
(`#19975 <https://github.com/coq/coq/pull/19975>`_,
by Pierre Roux).
- **Added:**
a new `rocq-core` package for users who don't want to depend on Stdlib.
This provides `Corelib <https://rocq-prover.org/doc/v9.0/corelib>`_ a tiny subset of Stdlib
(`#19530 <https://github.com/coq/coq/pull/19530>`_,
starting to implement `CEP#83 <https://github.com/coq/ceps/pull/83>`_
by Pierre Roux).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
when building Coq, the makefile's `world` target and `dune build`'s default target do not build rocqide anymore.
Use `make world rocqide` or `dune build @default rocqide.install` to build what they respectively used to build
(`#19378 <https://github.com/coq/coq/pull/19378>`_,
by Gaëtan Gilbert).
- **Changed:**
`coq_makefile` generates profiling info for `coqc` in `foo.vo.prof.json.gz` instead of `foo.v.prof.json.gz`
(`#19428 <https://github.com/coq/coq/pull/19428>`_,
by Gaëtan Gilbert).
- **Added:**
`coq_makefile` generates profiling info for `coqchk` in `validate.prof.json.gz`
(`#19428 <https://github.com/coq/coq/pull/19428>`_,
by Gaëtan Gilbert).
- **Changed:**
minimal Dune version required to build Coq bumped to 3.8.3
(`#19621 <https://github.com/coq/coq/pull/19621>`_,
by Pierre Roux).
Miscellaneous
^^^^^^^^^^^^^
- **Changed:**
the current working directory is not implicitly added to the ML search path
(`#19834 <https://github.com/coq/coq/pull/19834>`_,
by Gaëtan Gilbert).
- **Changed:**
the `user-contrib`, XDG and `COQPATH` directories are not implicitly added to the ML loadpath
(`#19842 <https://github.com/coq/coq/pull/19842>`_,
by Gaëtan Gilbert).
Version 8.20
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.20 adds a new rewrite rule mechanism along with a few
new features, a host of improvements to the virtual machine, the
notation system, Ltac2 and the standard library.
We highlight some of the most impactful changes here:
- :ref:`rewrite_rules`
- `primitive strings <https://github.com/coq/coq/pull/18973>`_
- A lot of work went into reducing the size of the bytecode segment,
which in turn means that .vo files might now be considerably
smaller.
- A new version of the
`docker-keeper <https://gitlab.com/erikmd/docker-keeper>`_ compiler to
build and maintain Docker images of Coq.
Notable breaking changes:
- Syntactic global references passed through the `using` clauses of
:tacn:`auto`-like tactics are now handled as plain references
rather than interpreted terms. In particular, their typeclass
arguments will not be inferred. In general, the previous behaviour
can be emulated by replacing `auto using foo` with `pose proof
foo; auto`.
- Argument order for the Ltac2 combinators `List.fold_left2` and
`List.fold_right2` changed to be the same as in OCaml.
- :cmd:`Import`\ing a module containing a mutable Ltac2 definition
does not undo its mutations. Replace `Ltac2 mutable foo :=
some_expr.` with `Ltac2 mutable foo := some_expr. Ltac2 Set foo :=
some_expr.` to recover the previous behaviour.
- Some :ref:`renaming <820_renaming_stdlib>` in the standard
library. Deprecations are provided for a smooth transition.
See the `Changes in 8.20.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Coq's `reference manual for 8.20 <https://coq.github.io/doc/v8.20/refman>`_,
`documentation of the 8.20 standard library <https://coq.github.io/doc/v8.20/stdlib>`_
and `developer documentation of the 8.20 ML API <https://coq.github.io/doc/v8.20/api>`_
are also available.
Théo Zimmermann with help from Ali Caglayan and Jason Gross maintained
`coqbot <https://github.com/coq/bot>`_ used to run Coq's CI and other
pull request management tasks.
Jason Gross maintained the `bug minimizer <https://github.com/JasonGross/coq-tools>`_
and its `automatic use through coqbot <https://github.com/coq/coq/wiki/Coqbot-minimize-feature>`_.
Erik Martin-Dorel maintained the
`Coq Docker images <https://hub.docker.com/r/coqorg/coq>`_
and the `docker-keeper <https://gitlab.com/erikmd/docker-keeper>`_ compiler
used to build and keep those images up to date (note that the tool is not Coq specific).
Cyril Cohen, Vincent Laporte, Pierre Roux and Théo Zimmermann
maintained the `Nix toolbox <https://github.com/coq-community/coq-nix-toolbox>`_
used by many Coq projects for continuous integration.
Ali Caglayan, Emilio Jesús Gallego Arias, Rudi Grinberg and
Rodolphe Lepigre maintained the
`Dune build system for OCaml and Coq <https://github.com/ocaml/dune/>`_
used to build Coq itself and many Coq projects.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Guillaume Melquiond, Karl Palmskog and Enrico Tassi with
contributions from many users. A list of packages is `available on the Coq website <https://coq.inria.fr/coq-package-index>`_.
Coq 8.20 was made possible thanks to the following reviewers:
Frédéric Besson, Lasse Blaauwbroek, Ali Caglayan, Cyril Cohen, Andrej
Dudenhefner, Andres Erbsen, Jim Fehrle, Emilio Jesús Gallego Arias,
Gaëtan Gilbert, Jason Gross, Hugo Herbelin, Ralf Jung, Jan-Oliver
Kaiser, Chantal Keller, Olivier Laurent, Rodolphe Lepigre, Yishuai Li,
Ralph Matthes, Guillaume Melquiond, Pierre-Marie Pédrot, Karl
Palmskog, Clément Pit-Claudel, Pierre Rousselin, Pierre Roux, Michael
Soegtrop, soukouki, Matthieu Sozeau, Nicolas Tabareau, Enrico Tassi,
Niels van der Weide, Nickolai Zeldovich and Théo Zimmermann. See the
`Coq Team face book <https://coq.inria.fr/coq-team.html>`_ page for
more details on Coq's development team.
The 59 contributors to the 8.20 version are:
Timur Aminev, Frédéric Besson, Lasse Blaauwbroek, Björn Brandenburg,
Ali Caglayan, Nikolaos Chatzikonstantinou, Sylvain Chiron, chluebi,
Cyril Cohen, Anton Danilkin, Louise Dubois de Prisque, Andrej
Dudenhefner, Maxime Dénès, Andres Erbsen, Jim Fehrle, Davide Fissore,
Andreas Florath, Yannick Forster, Mario Frank, Gaëtan Gilbert, Georges
Gonthier, Jason Gross, Stefan Haan, Hugo Herbelin, Lennart Jablonka,
Emilio Jesús Gallego Arias, Ralf Jung, Jan-Oliver Kaiser, Evgenii
Kosogorov, Rodolphe Lepigre, Yann Leray, David M. Cooke, Erik
Martin-Dorel, Guillaume Melquiond, Guillaume Munch-Maccagnoni, Karl
Palmskog, Julien Puydt, Pierre-Marie Pédrot, Ramkumar Ramachandra,
Pierre Rousselin, Pierre Roux, Kazuhiko Sakaguchi, Bernhard Schommer,
Remy Seassau, Matthieu Sozeau, Enrico Tassi, Romain Tetley, Laurent
Théry, Alexey Trilis, Oliver Turner, Quentin Vermande, Li-yao Xia and
Théo Zimmermann,
The Coq community at large helped improve this new version via
the GitHub issue and pull request system, the coq-club@inria.fr mailing list,
the `Discourse forum <https://coq.discourse.group/>`_ and the
`Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.20's development spanned 7 months from the release of Coq 8.19.0
(9 months since the branch for 8.19.0).
Pierre Roux and Guillaume Melquiond are the release managers of Coq 8.20.
This release is the result of 470 merged PRs, closing 113 issues.
| Toulouse, September 2024
| Pierre Roux and Guillaume Melquiond for the Coq development team
Changes in 8.20.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Changed:**
The guard checker now recognizes uniform parameters of a
fixpoint and treats their instances as constant over the recursive call
(`#17986 <https://github.com/coq/coq/pull/17986>`_,
grants `#16040 <https://github.com/coq/coq/issues/16040>`_,
by Hugo Herbelin).
- **Added:**
A mechanism to add user-defined rewrite rules to Coq's reduction mechanisms;
see chapter :ref:`rewrite_rules`
(`#18038 <https://github.com/coq/coq/pull/18038>`_,
by Yann Leray).
- **Added:** Support for primitive strings in terms
(`#18973 <https://github.com/coq/coq/pull/18973>`_,
by Rodolphe Lepigre).
.. _819_changes_spec_language:
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
warnings `future-coercion-class-constructor`
and `future-coercion-class-field` about ``:>`` in :cmd:`Class` as
errors by default. This offers a last opportunity to replace ``:>``
with ``::`` (available since Coq 8.18) to declare typeclass instances
before making ``:>`` consistently declare coercions in all records in
next version.
To adapt huge codebases, you can try
`this script <https://gist.github.com/JasonGross/59fc3c03664f2280849abf50b531be42>`_
or the one below. But beware that both are incomplete.
.. code-block:: sh
#!/bin/awk -f
BEGIN {
startclass = 0;
inclass = 0;
indefclass = 0; # definitionalclasses (single field, without { ... })
}
{
if ($0 ~ "[ ]*Class") {
startclass = 1;
}
if (startclass == 1 && $0 ~ ":=") {
inclass = 1;
indefclass = 1;
}
if (startclass == 1 && $0 ~ ":=.*{") {
indefclass = 0;
}
if (inclass == 1) startclass = 0;
if (inclass == 1 && $0 ~ ":>") {
if ($0 ~ "{ .*:>") { # first field on a single line
sub("{ ", "{ #[global] ");
} else if ($0 ~ ":=.*:>") { # definitional classes on a single line
sub(":= ", ":= #[global] ");
} else if ($0 ~ "^ ") {
sub(" ", " #[global] ");
} else {
$0 = "#[global] " $0;
}
sub(":>", "::")
}
print $0;
if ($0 ~ ".*}[.]" || indefclass == 1 && $0 ~ "[.]$") inclass = 0;
}
(`#18590 <https://github.com/coq/coq/pull/18590>`_,
by Pierre Roux).
- **Changed:**
Mutually-proved theorems with statements in different coinductive
types now supported
(`#18743 <https://github.com/coq/coq/pull/18743>`_,
by Hugo Herbelin).
- **Added:**
:cmd:`CoFixpoint` supports attributes `bypass_guard`, `clearbody`,
`deprecated` and `warn`
(`#18754 <https://github.com/coq/coq/pull/18754>`_,
by Hugo Herbelin).
- **Added:**
`Program Fixpoint` with `measure` or `wf` (see
:ref:`program_fixpoint`) now supports the `where` clause for
notations, the `local` and `clearbody` attributes, as well as
non-atomic conclusions
(`#18834 <https://github.com/coq/coq/pull/18834>`_,
by Hugo Herbelin, fixes in particular
`#13812 <https://github.com/coq/coq/issues/13812>`_ and
`#14841 <https://github.com/coq/coq/issues/14841>`_).
- **Fixed:**
Anomaly on the absence of remaining obligations of some name now
an error
(`#18873 <https://github.com/coq/coq/pull/18873>`_,
fixes `#3889 <https://github.com/coq/coq/issues/3889>`_,
by Hugo Herbelin).
- **Fixed:**
Universe polymorphic `Program`'s obligations are now generalized
only over the universe variables that effectively occur in the
obligation
(`#18915 <https://github.com/coq/coq/pull/18915>`_,
fixes `#11766 <https://github.com/coq/coq/issues/11766>`_
and `#11988 <https://github.com/coq/coq/issues/11988>`_,
by Hugo Herbelin).
- **Fixed:**
Anomaly `assertion failed` in pattern-matching compilation, with
:flag:`Program Mode` or with let-ins in the arity of an inductive type
(`#18921 <https://github.com/coq/coq/pull/18921>`_,
fixes `#5777 <https://github.com/coq/coq/issues/5777>`_
and `#11030 <https://github.com/coq/coq/issues/11030>`_
and `#11586 <https://github.com/coq/coq/issues/11586>`_,
by Hugo Herbelin).
- **Fixed:**
Support for `Program`-style pattern-matching on more than one
argument in an inductive family
(`#18929 <https://github.com/coq/coq/pull/18929>`_,
fixes `#1956 <https://github.com/coq/coq/issues/1956>`_
and `#5777 <https://github.com/coq/coq/issues/5777>`_,
by Hugo Herbelin).
- **Fixed:**
anomaly with obligations in the binders of a `measure`- or
`wf`-based `Program Fixpoint`
(`#18958 <https://github.com/coq/coq/pull/18958>`_,
fixes `#18920 <https://github.com/coq/coq/issues/18920>`_,
by Hugo Herbelin).
- **Fixed:**
Incorrect registration of universe names attached to a primitive
polymorphic constant
(`#19100 <https://github.com/coq/coq/pull/19100>`_,
fixes `#19099 <https://github.com/coq/coq/issues/19099>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Changed:**
an :g:`only printing` interpretation of a notation with a specific
format does no longer change the printing rule of other
interpretations of the notation; to globally change the default
printing rule of all interpretations of a notation, use
:g:`Reserved Notation` instead
(`#16329 <https://github.com/coq/coq/pull/16329>`_,
fixes `#16262 <https://github.com/coq/coq/issues/16262>`_,
by Hugo Herbelin).
- **Changed:**
levels of :cmd:`Reserved Notation` now default to levels of
previous notations with longest common prefix, if any. This helps to
:ref:`factorize notations <NotationFactorization>` with common
prefixes
(`#19149 <https://github.com/coq/coq/pull/19149>`_,
by Pierre Roux).
- **Added:**
:warn:`closed-notation-not-level-0` and :warn:`postfix-notation-not-level-1`
warnings about closed and postfix notations at unusual levels
(`#18588 <https://github.com/coq/coq/pull/18588>`_,
by Pierre Roux).
- **Added:**
:warn:`notation-incompatible-prefix` warning when two notation
definitions have incompatible prefixes
(`#19049 <https://github.com/coq/coq/pull/19049>`_,
by Pierre Roux).
- **Fixed:**
Notations for applied constants equipped with multiple signatures of
implicit arguments were not correctly inserting as many maximal
implicit arguments as they should have
(`#18445 <https://github.com/coq/coq/pull/18445>`_,
by Hugo Herbelin).
- **Fixed:**
Add support for printing notations applied to extra arguments in
custom entries, thus eliminating an anomaly
(`#18447 <https://github.com/coq/coq/pull/18447>`_,
fixes `#18342 <https://github.com/coq/coq/issues/18342>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
- **Changed:**
When using :g:`Z.to_euclidean_division_equations`, :tacn:`nia` can now relate
:g:`Z.div`/:g:`Z.modulo` to :g:`Z.quot`/:g:`Z.rem` a bit better, by virtue of being
noticing when there are two equations of the form ``x = y * q₁ + _`` and
``x = y * q₂ + _`` (or minor variations thereof), suggesting that ``q₁ = q₂``.
Users can replace :g:`Z.to_euclidean_division_equations` with
:g:`let flags := Z.euclidean_division_equations_flags.default_with Z.euclidean_division_equations_flags.find_duplicate_quotients false in Z.to_euclidean_division_equations_with flags`
or, using :g:`Import Z.euclidean_division_equations_flags.`, with
:g:`Z.to_euclidean_division_equations_with ltac:(default_with find_duplicate_quotients false)`
(`#17934 <https://github.com/coq/coq/pull/17934>`_,
by Jason Gross).
- **Changed:**
The opacity/transparency of primitive projections is now attached to the
projections themselves, not the compatibility constants, and compatibility
constants are always considered transparent
(`#18327 <https://github.com/coq/coq/pull/18327>`_,
fixes `#18281 <https://github.com/coq/coq/issues/18281>`_,
by Jan-Oliver Kaiser and Rodolphe Lepigre).
- **Changed:**
Tactic :g:`intro z` on an existential variable goal forces the resolution
of the existential variable into a goal :g:`forall z:?T, ?P`, which
becomes :g:`?P` in context :g:`z:?T` after introduction. The
existential variable :n:`?P` itself is now defined in a context
where the variable of type `?T` is also named :g:`z`, as specified
by :tacn:`intro` instead of :g:`x` as it was conventionally the case
before
(`#18395 <https://github.com/coq/coq/pull/18395>`_,
by Hugo Herbelin).
- **Changed:**
syntactic global references passed through the `using` clauses of :tacn:`auto`-like
tactics are now handled as plain references rather than interpreted terms. In
particular, their typeclass arguments will not be inferred. In general, the previous
behaviour can be emulated by replacing `auto using foo` with `pose proof foo; auto`
(`#18909 <https://github.com/coq/coq/pull/18909>`_,
by Pierre-Marie Pédrot).
- **Changed:**
Use Coqlib's :cmd:`Register` mechanism for the generalized rewriting tactic
and make the (C)RelationClasses/(C)Morphisms independent of the `rewrite`
tactic to ease maintainance.
(`#19115 <https://github.com/coq/coq/pull/19115>`_,
by Matthieu Sozeau).
- **Removed:**
the `clear` modifier which was deprecated since 8.17
(`#18887 <https://github.com/coq/coq/pull/18887>`_,
by Pierre-Marie Pédrot).
- **Removed:**
the `cutrewrite` tactic, which was deprecated since
Coq 8.5
(`#19027 <https://github.com/coq/coq/pull/19027>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
non-reference hints in `using` clauses of :tacn:`auto`-like tactics
(`#19006 <https://github.com/coq/coq/pull/19006>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
the `gintuition` tactic, which used to be undocumented
until Coq 8.16
(`#19129 <https://github.com/coq/coq/pull/19129>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
:tacn:`destauto`,
see `#11537 <https://github.com/coq/coq/issues/11537#issuecomment-2154260216>`_
(`#19179 <https://github.com/coq/coq/pull/99999>`_,
by Jim Fehrle).
- **Added:**
When using :g:`Z.to_euclidean_division_equations`, you can now pose
equations of the form ``x = y * q`` using :g:`Z.divide`
(`#17927 <https://github.com/coq/coq/pull/17927>`_,
by Evgenii Kosogorov).
- **Added:** support for :g:`Nat.double` and :g:`Nat.div2` to :g:`zify` and
:g:`lia`
(`#18729 <https://github.com/coq/coq/pull/18729>`_,
by Andres Erbsen).
- **Added:**
the :tacn:`replace` tactic now accepts `->` and `<-`
to specify the direction of the replacement
when used with a `with` clause
(`#19060 <https://github.com/coq/coq/pull/19060>`_,
fixes `#13480 <https://github.com/coq/coq/issues/13480>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
The name of a cofixpoint globally defined with a name is now
systematically reused by :tacn:`simpl` after reduction, even when
the named cofixpoint is mutually defined or defined in a section
(`#18576 <https://github.com/coq/coq/pull/18576>`_,
fixes `#4056 <https://github.com/coq/coq/issues/4056>`_,
by Hugo Herbelin).
- **Fixed:**
The reduction of primitive projections of cofixpoints by
:tacn:`simpl` is now implemented
(`#18577 <https://github.com/coq/coq/pull/18577>`_,
fixes `#7982 <https://github.com/coq/coq/issues/7982>`_,
by Hugo Herbelin).
- **Fixed:**
Support for refolding reduced global mutual fixpoints/cofixpoints
with parameters in :tacn:`cbn`
(`#18601 <https://github.com/coq/coq/pull/18601>`_,
fixes part of `#4056 <https://github.com/coq/coq/issues/4056>`_,
by Hugo Herbelin).
- **Fixed:**
:tacn:`cbn` was leaving behind unnamable constants when refolding
mutual fixpoints/cofixpoints from aliased modules
(`#18616 <https://github.com/coq/coq/pull/18616>`_,
fixes `#17897 <https://github.com/coq/coq/issues/17897>`_,
by Hugo Herbelin).
- **Fixed:**
:tacn:`cbv` of primitive projections applied to a tuple now ignores `beta`
like it does for :tacn:`cbn`, :tacn:`lazy` and :tacn:`simpl`
(`#18618 <https://github.com/coq/coq/pull/18618>`_,
fixes `#9086 <https://github.com/coq/coq/issues/9086>`_,
by Hugo Herbelin).
Ltac language
^^^^^^^^^^^^^
- **Added:**
In :tacn:`rewrite_strat`, :n:`@rewstrategy` now supports the fixpoint operator :n:`fix @ident := @rewstrategy1`
(`#18094 <https://github.com/coq/coq/pull/18094>`_,
fixes `#13702 <https://github.com/coq/coq/issues/13702>`_,
by Jason Gross and Gaëtan Gilbert).
- **Fixed:**
:tacn:`rewrite_strat` now works inside module functors
(`#18094 <https://github.com/coq/coq/pull/18094>`_,
fixes `#18463 <https://github.com/coq/coq/issues/18463>`_,
by Jason Gross).
Ltac2 language
^^^^^^^^^^^^^^
- **Changed:**
recursive `let` and non mutable projections of syntactic values are considered syntactic values
(`#18411 <https://github.com/coq/coq/pull/18411>`_,
by Gaëtan Gilbert).
- **Changed:**
Ltac2 notations are typechecked at declaration time by default.
This should produce better errors when a notation argument does not have the expected type
(e.g. wrong branch type in `match! goal`).
In the previous behaviour of typechecking, only the expansion result can be
recovered using :flag:`Ltac2 Typed Notations`. We believe there are no real
use cases for this, please report if you have any
(`#18432 <https://github.com/coq/coq/pull/18432>`_,
fixes `#17477 <https://github.com/coq/coq/issues/17477>`_,
by Gaëtan Gilbert).
- **Changed:**
argument order for the Ltac2 combinators `List.fold_left2` and `List.fold_right2`
changed to be the same as in OCaml
(`#18706 <https://github.com/coq/coq/pull/18706>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Import`\ing a module containing a mutable Ltac2 definition
does not undo its mutations. Replace `Ltac2 mutable foo := some_expr.`
with `Ltac2 mutable foo := some_expr. Ltac2 Set foo := some_expr.`
to recover the previous behaviour
(`#18713 <https://github.com/coq/coq/pull/18713>`_,
by Gaëtan Gilbert).
- **Changed:**
the `using` clause argument of :tacn:`auto`-like tactics in Ltac2 now
take a global `reference` rather than arbitrary `constr`
(`#18940 <https://github.com/coq/coq/pull/18940>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
`Ltac2.Constr.Pretype.Flags.open_constr_flags` whose name is misleading
as it runs typeclass inference unlike `open_constr:()`
(`#18765 <https://github.com/coq/coq/pull/18765>`_,
by Gaëtan Gilbert).
- **Added:**
`fst` and `snd` in `Ltac2.Init`
(`#18370 <https://github.com/coq/coq/pull/18370>`_,
by Gaëtan Gilbert).
- **Added:**
`Ltac2.Ltac1.of_preterm` and `to_preterm`
(`#18551 <https://github.com/coq/coq/pull/18551>`_,
by Gaëtan Gilbert).
- **Added:**
`of_intro_pattern` and `to_intro_pattern` in `Ltac2.Ltac1`
(`#18558 <https://github.com/coq/coq/pull/18558>`_,
by Gaëtan Gilbert).
- **Added:**
basic APIs in `Ltac2.Ltac1` to produce slightly more informative errors when failing to convert a Ltac1 value to some Ltac2 type
(`#18558 <https://github.com/coq/coq/pull/18558>`_,
by Gaëtan Gilbert).
- **Added:**
APIs `Ltac2.Control.unshelve` and `Ltac2.Notations.unshelve`
(`#18604 <https://github.com/coq/coq/pull/18604>`_,
by Gaëtan Gilbert).
- **Added:**
warning on unused Ltac2 variables (except when starting with `_`)
(`#18641 <https://github.com/coq/coq/pull/18641>`_,
by Gaëtan Gilbert).
- **Added:**
`Ltac2.Control.numgoals`
(`#18690 <https://github.com/coq/coq/pull/18690>`_,
by Gaëtan Gilbert).
- **Added:**
`intropattern` and `intropatterns` notation scopes support views (`foo%bar`)
(`#18757 <https://github.com/coq/coq/pull/18757>`_,
by Gaëtan Gilbert).
- **Added:**
open recursion combinators in `Ltac2.Constr.Unsafe`
(`#18764 <https://github.com/coq/coq/pull/18764>`_,
by Gaëtan Gilbert).
- **Added:**
APIs in `Ltac2.Constr.Pretype.Flags` to customize pretyping flags.
(`#18765 <https://github.com/coq/coq/pull/18765>`_,
by Gaëtan Gilbert).
- **Added:**
:attr:`abstract` attribute for :cmd:`Ltac2 Type` to turn types abstract at the end of the current module
(`#18766 <https://github.com/coq/coq/pull/18766>`_,
fixes `#18656 <https://github.com/coq/coq/issues/18656>`_,
by Gaëtan Gilbert).
- **Added:**
APIs in `Ltac2.Message` to interact with the boxing system of the pretty printer
(`#18988 <https://github.com/coq/coq/pull/18988>`_,
by Gaëtan Gilbert).
- **Added:**
flag `Automatic Proposition Inductives`, :flag:`Dependent Proposition Eliminators` and
warning `automatic-prop-lowering`
(`#18989 <https://github.com/coq/coq/pull/18989>`_,
by Gaëtan Gilbert).
- **Added:**
`String.sub`
(`#19204 <https://github.com/coq/coq/pull/19204>`_,
by Rodolphe Lepigre).
- **Fixed:**
`Ltac2.Control.new_goal` removes the new goal from the shelf and future goals
(`#19141 <https://github.com/coq/coq/pull/19141>`_,
fixes `#19138 <https://github.com/coq/coq/issues/19138>`_,
by Gaëtan Gilbert).
SSReflect
^^^^^^^^^
- **Changed:**
ssreflect no longer relies on the recovery mechanism
of the parsing engine, this can slightly change
the parsing priorities in rare occurences, for instance
when combining :tacn:`unshelve` and ``=>``
(`#18224 <https://github.com/coq/coq/pull/18224>`_,
by Pierre Roux).
- **Changed:**
notations ``_.1`` and ``_.2`` are now defined in the prelude
at level 1 rather than in ``ssrfun`` at level 2
(`#18224 <https://github.com/coq/coq/pull/18224>`_,
by Pierre Roux).
- **Changed:**
The :tacn:`have` tactic generates a proof term containing an opaque
constant, as it did up to PR `#15121 <https://github.com/coq/coq/pull/15121>`_
included in Coq 8.16.0. See the variant `have @H` to generate a (transparent)
let-in instead (:ref:`generating_let_ssr`).
(`#18449 <https://github.com/coq/coq/pull/18449>`_,
fixes `#18017 <https://github.com/coq/coq/issues/18017>`_,
by Enrico Tassi).
- **Deprecated:**
The ``fun_scope`` notation scope declared in `ssrfun.v` is deprecated. Use
``function_scope`` instead
(`#18374 <https://github.com/coq/coq/pull/18374>`_,
by Kazuhiko Sakaguchi).
- **Fixed:**
handling of primitive projections in ssrewrite
(`#19213 <https://github.com/coq/coq/pull/19213>`_,
fixes `#19229 <https://github.com/coq/coq/issues/19229>`_,
by Pierre Roux, Kazuhiko Sakaguchi, Enrico Tassi and Quentin Vermande).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
the default reversibility status of most coercions.
The refman states that
By default coercions are not reversible
except for Record fields specified using ``:>``.
The previous code was making way too many coercion reversible by default.
The new behavior should be closer from the spec in the doc
(`#18705 <https://github.com/coq/coq/pull/18705>`_,
by Pierre Roux).
- **Changed:**
focus commands such as `1:{` and goal selection for query commands such as `1: Check`
do not need `Classic` (Ltac1) proof mode to function. In particular they function in Ltac2 mode
(`#18707 <https://github.com/coq/coq/pull/18707>`_,
fixes `#18351 <https://github.com/coq/coq/issues/18351>`_,
by Gaëtan Gilbert).
- **Changed:**
inductives declared with `: Type` or no annotation and automatically put in `Prop`
are not declared template polymorphic
(`#18867 <https://github.com/coq/coq/pull/18867>`_,
by Gaëtan Gilbert).
- **Changed:**
Clarify the warning about use of :cmd:`Let`, :cmd:`Variable`,
:cmd:`Hypothesis` and :cmd:`Context` outside sections and make it an
error by default
(`#18880 <https://github.com/coq/coq/pull/18880>`_,
by Pierre Roux).
- **Changed:**
The "fragile-hint-constr" warning is now an error by default,
as the corresponding feature will be removed in a later version
(`#18895 <https://github.com/coq/coq/pull/18895>`_,
by Pierre-Marie Pédrot).
- **Changed:**
:cmd:`Scheme` automatically registers the resulting schemes in the :cmd:`Register Scheme` database
(`#19016 <https://github.com/coq/coq/pull/19016>`_,
fixes `#3132 <https://github.com/coq/coq/issues/3132>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Typeclasses Transparent` and :cmd:`Typeclasses Opaque` default locality outside section is now :attr:`export`
(`#19069 <https://github.com/coq/coq/pull/19069>`_,
by Gaëtan Gilbert).
- **Deprecated:**
The :cmd:`Cd` command. Instead use the command line option
`-output-directory` (see :ref:`command-line-options`) or, for
extraction, :opt:`Extraction Output Directory`
(`#17403 <https://github.com/coq/coq/pull/17403>`_,
by Ali Caglayan and Hugo Herbelin).
- **Added:**
:attr:`warn` attribute generalizing the deprecation
machinery to other forms of comments
(`#18248 <https://github.com/coq/coq/pull/18248>`_,
by Hugo Herbelin and Pierre Roux).
- **Added:**
:cmd:`Register Scheme` to add entries to the scheme database used by some tactics
(`#18299 <https://github.com/coq/coq/pull/18299>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Print` :n:`@reference` now shows the implicit arguments of a
:n:`@reference` directly on the type of :n:`@reference`, using
`{...}` and `[...]` markers for respectively maximally-inserted and
non-maximally-inserted implicit arguments, as :cmd:`About` does
(`#18444 <https://github.com/coq/coq/pull/18444>`_,
by Hugo Herbelin).
- **Added:**
:n:`@import_categories` supports category `options` controlling :ref:`flags-options-tables`
(`#18536 <https://github.com/coq/coq/pull/18536>`_,
by Gaëtan Gilbert).
- **Added:**
When a name is a projection, :cmd:`About` and :cmd:`Print` now indicate it
(`#18725 <https://github.com/coq/coq/pull/18725>`_,
by Hugo Herbelin).
- **Added:**
:cmd:`Hint Projections` command that sets the transparency flag for projections
for the specified hint databases
(`#18785 <https://github.com/coq/coq/pull/18785>`_,
by Jan-Oliver Kaiser and Rodolphe Lepigre).
- **Added:**
:cmd:`Search` now admits the `is:Fixpoint` and `is:CoFixpoint` logical
kinds to search for constants defined with the `Fixpoint` and `CoFixpoint`
keywords
(`#18983 <https://github.com/coq/coq/pull/18983>`_,
by Pierre Rousselin).
- **Added:**
The :cmd:`Include` command can now include module types with a `with` clause (:n:`@with_declaration`)
to instantiate some parameters
(`#19144 <https://github.com/coq/coq/pull/19144>`_,
by Pierre Rousselin).
- **Fixed:**
Fixes missing implicit arguments coming after a :g:`->` in the main type
printed by :cmd:`Print` and :cmd:`About`
(`#18442 <https://github.com/coq/coq/pull/18442>`_,
fixes `#15020 <https://github.com/coq/coq/issues/15020>`_,
by Hugo Herbelin).
- **Fixed:**
:flag:`Cumulativity Weak Constraints` can unify universes to `Set` when :flag:`Universe Minimization ToSet` is enabled
(`#18458 <https://github.com/coq/coq/pull/18458>`_,
by Gaëtan Gilbert).
- **Fixed:**
:cmd:`Search` with modifier `is:Scheme` restricted the search to inductive types
which have schemes instead of the schemes themselves.
For instance `Search nat is:Scheme` with just the prelude loaded would return `le`
i.e. the only inductive type whose type mentions `nat`
(`#18537 <https://github.com/coq/coq/pull/18537>`_,
fixes `#18298 <https://github.com/coq/coq/issues/18298>`_,
by Gaëtan Gilbert).
- **Fixed:**
:cmd:`Search` now searches also in included module types
(`#18662 <https://github.com/coq/coq/pull/18662>`_,
fixes `#18657 <https://github.com/coq/coq/issues/18657>`_,
by Hugo Herbelin).
- **Fixed:**
:cmd:`Eval` and :cmd:`Definition` with `:= Eval` work without needing to load the Ltac plugin
(`#18852 <https://github.com/coq/coq/pull/18852>`_,
fixes `#12948 <https://github.com/coq/coq/issues/12948>`_,
by Gaëtan Gilbert).
- **Fixed:**
:cmd:`Scheme` declares non-recursive schemes for :n:`@scheme_type` `Case` and `Elimination`
(`#19017 <https://github.com/coq/coq/pull/19017>`_,
fixes `#10816 <https://github.com/coq/coq/issues/10816>`_,
by Gaëtan Gilbert).
- **Fixed:**
:flag:`Cumulativity Weak Constraints` had its meaning flipped since 8.12
(`#19201 <https://github.com/coq/coq/pull/19201>`_,
by Gaëtan Gilbert).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
signal `SIGINT` interrupts the process with " "user interrupt" error
instead of aborting. This is intended to produce better messages when interrupting Coq
(`#18716 <https://github.com/coq/coq/pull/18716>`_,
by Gaëtan Gilbert).
- **Added:**
Command line option :n:`-output-directory dir` to set the default output directory
for extraction, :cmd:`Redirect` and :cmd:`Print Universes`
(`#17392 <https://github.com/coq/coq/pull/17392>`_,
fixes `#8649 <https://github.com/coq/coq/issues/8649>`_,
by Hugo Herbelin).
- **Fixed:**
coqdoc links to section variables introduced with :cmd:`Context`
(`#18527 <https://github.com/coq/coq/pull/18527>`_,
fixes `#18516 <https://github.com/coq/coq/issues/18516>`_,
by Pierre Roux).
CoqIDE
^^^^^^
- **Changed:**
Find/replace UI was improved: margins, icons for found/not found
(`#18523 <https://github.com/coq/coq/pull/18523>`_,
fixes `#11024 <https://github.com/coq/coq/issues/11024>`_,
by Sylvain Chiron).
- **Changed:**
The default key binding modifier for the Navigation menu
was changed to Alt on non-macOS systems. The previous default,
Ctrl, hid some conventional cursor movement bindings such as Ctrl-Left,
Ctrl-Right, Ctrl-Home and Ctrl-End. The new default generally
has no effect if you've previously installed Coq on your
system. See :ref:`Shortcuts<shortcuts>` to change the default.
The Edit/Undo key binding was changed from Ctrl-U to Ctrl-Z to
be more consistent with common conventions. `View/Previous Tab`
and `View/Next Tab` were changed from `Alt-Left/Right` to
`Ctrl-PgUp/PgDn` (`Cmd-PgUp/PgDn` on macOS). To change key
bindings on your system (e.g. back to Ctrl-U), see :ref:`key_bindings`
(`#18717 <https://github.com/coq/coq/pull/18717>`_,
by Sylvain Chiron).
- **Changed:**
Changing modifiers for the View menu only applies
to toggleable items; View/Show Proof was changed to Shift-F2
(`#18717 <https://github.com/coq/coq/pull/18717>`_,
by Sylvain Chiron).
- **Added:**
Edit/Select All and Navigation/Fully Check menu items
(`#18717 <https://github.com/coq/coq/pull/18717>`_,
fixes `#16141 <https://github.com/coq/coq/issues/16141>`_,
by Sylvain Chiron).
- **Fixed:**
Opening a file with drag and drop now works correctly (fixed regression)
(`#18524 <https://github.com/coq/coq/pull/18524>`_,
fixes `#3977 <https://github.com/coq/coq/issues/3977>`_,
by Sylvain Chiron).
- **Fixed:**
Incorrect highlight locations and line numbers for errors and warnings,
especially in the presence of unicode characters. This updates the XML protocol
(`#19040 <https://github.com/coq/coq/pull/19040>`_,
fixes `#18682 <https://github.com/coq/coq/issues/18682>`_,
by Hugo Herbelin).
- **Fixed:**
Show tooltips for syntax errors
(`#19153 <https://github.com/coq/coq/pull/19153>`_,
fixes `#19152 <https://github.com/coq/coq/issues/19152>`_,
by Jim Fehrle).
.. _820_renaming_stdlib:
Standard library
^^^^^^^^^^^^^^^^
- **Changed:** names of "push" lemmas for :g:`List.length` to follow the same
convention as push lemmas for other operations. For example, :g:`app_length`
became :g:`length_app`. The standard library was migrated using the following
script:
.. code-block:: sh
find theories -name '*.v' | xargs sed -i -E '
s/\<app_length\>/length_app/g;
s/\<rev_length\>/length_rev/g;
s/\<map_length\>/length_map/g;
s/\<fold_left_length\>/fold_left_S_O/g;
s/\<split_length_l\>/length_fst_split/g;
s/\<split_length_r\>/length_snd_split/g;
s/\<combine_length\>/length_combine/g;
s/\<prod_length\>/length_prod/g;
s/\<firstn_length\>/length_firstn/g;
s/\<skipn_length\>/length_skipn/g;
s/\<seq_length\>/length_seq/g;
s/\<concat_length\>/length_concat/g;
s/\<flat_map_length\>/length_flat_map/g;
s/\<list_power_length\>/length_list_power/g;
'
(`#18564 <https://github.com/coq/coq/pull/18564>`_,
by Andres Erbsen).
- **Changed:**
``Coq.CRelationClasses.arrow``, ``Coq.CRelationClasses.iffT`` and
``Coq.CRelationClasses.flip`` are now :cmd:`Typeclasses Opaque`
(`#18910 <https://github.com/coq/coq/pull/18910>`_,
by Pierre-Marie Pédrot).
- **Removed:**
The library files ``Coq.NArith.Ndigits``, ``Coq.NArith.Ndist``, and ``Coq.Strings.ByteVector``
which were deprecated since 8.19
(`#18936 <https://github.com/coq/coq/pull/18936>`_,
by Andres Erbsen).
- **Deprecated:**
The library files
* ``Coq.Numbers.Integer.Binary.ZBinary``
* ``Coq.Numbers.Integer.NatPairs.ZNatPairs``
* ``Coq.Numbers.Natural.Binary.NBinary``
have been deprecated.
Users should require ``Coq.Arith.PeanoNat`` or ``Coq.Arith.NArith.BinNat``
if they want implementations of natural numbers and
``Coq.Arith.ZArith.BinInt`` if they want an implementation of integers
(`#18500 <https://github.com/coq/coq/pull/18500>`_,
by Pierre Rousselin).
- **Deprecated:**
The library file ``Coq.Numbers.NatInt.NZProperties`` is deprecated.
Users can require ``Coq.Numbers.NatInt.NZMulOrder`` instead and replace the
module ``NZProperties.NZProp`` with ``NZMulOrder.NZMulOrderProp``
(`#18501 <https://github.com/coq/coq/pull/18501>`_,
by Pierre Rousselin).
- **Deprecated:**
The library file ``Coq.Arith.Bool_nat`` has been deprecated
(`#18538 <https://github.com/coq/coq/pull/18538>`_,
by Pierre Rousselin).
- **Deprecated:**
The library file ``Coq.Numbers.NatInt.NZDomain`` is deprecated
(`#18539 <https://github.com/coq/coq/pull/18539>`_,
by Pierre Rousselin).
- **Deprecated:**
The library files ``Coq.Numbers.Integers.Abstract.ZDivEucl``
and ``Coq.ZArith.Zeuclid`` are deprecated
(`#18544 <https://github.com/coq/coq/pull/18544>`_,
by Pierre Rousselin).
- **Deprecated:**
The library files ``Coq.Numbers.Natural.Abstract.NIso``
and ``Coq.Numbers.Natural.Abstract.NDefOps`` are deprecated
(`#18668 <https://github.com/coq/coq/pull/18668>`_,
by Pierre Rousselin).
- **Deprecated:** ``Bool.Bvector``. Users are encouraged to consider ``list bool`` instead. Please open an issue if you would like to keep using ``Bvector``.
(`#18947 <https://github.com/coq/coq/pull/18947>`_,
by Andres Erbsen).
- **Added:**
A warning on :g:`Vector.t` to make its new users aware that using
this dependently typed representation of fixed-length lists is more
technically difficult, compared to bundling lists with a proof of their
length. This is not a deprecation and there is no intent to remove it
from the standard library. Use option `-w -stdlib-vector`
to silence the warning
(`#18032 <https://github.com/coq/coq/pull/18032>`_,
by Pierre Roux, reviewed by Andres Erbsen, Jim Fehrle, Emilio Jesús Gallego Arias, Gaëtan Gilbert, Hugo Herbelin, Olivier Laurent, Yishuai Li, Pierre-Marie Pédrot and Michael Soegtrop).
- **Added:**
lemmas :g:`NoDup_app`, :g:`NoDup_iff_ForallOrdPairs`, :g:`NoDup_map_NoDup_ForallPairs` and :g:`NoDup_concat`
(`#18172 <https://github.com/coq/coq/pull/18172>`_,
by Stefan Haani and Andrej Dudenhefner).
- **Added:** lemmas
:g:`In_iff_nth_error`
:g:`nth_error_app`,
:g:`nth_error_cons_0`,
:g:`nth_error_cons_succ`,
:g:`nth_error_rev`,
:g:`nth_error_firstn`,
:g:`nth_error_skipn`,
:g:`hd_error_skipn`,
:g:`nth_error_seq`
(`#18563 <https://github.com/coq/coq/pull/18563>`_,
by Andres Erbsen)
- **Added:** to :g:`N` and :g:`Nat` lemmas
:g:`strong_induction_le`,
:g:`binary_induction`,
:g:`strong_induction_le`,
:g:`even_even`,
:g:`odd_even`,
:g:`odd_odd`,
:g:`even_odd`,
:g:`b2n_le_1`,
:g:`testbit_odd_succ'`,
:g:`testbit_even_succ'`,
:g:`testbit_div2`,
:g:`div2_0`,
:g:`div2_1`,
:g:`div2_le_mono`,
:g:`div2_even`,
:g:`div2_odd'`,
:g:`le_div2_diag_l`,
:g:`div2_le_upper_bound`,
:g:`div2_le_lower_bound`,
:g:`lt_div2_diag_l`,
:g:`le_div2`,
:g:`lt_div2`,
:g:`div2_decr`,
:g:`land_even_l`,
:g:`land_even_r`,
:g:`land_odd_l`,
:g:`land_odd_r`,
:g:`land_even_even`,
:g:`land_odd_even`,
:g:`land_even_odd`,
:g:`land_odd_odd`,
:g:`land_le_l`,
:g:`land_le_r`,
:g:`ldiff_even_l`,
:g:`ldiff_odd_l`,
:g:`ldiff_even_r`,
:g:`ldiff_odd_r`,
:g:`ldiff_even_even`,
:g:`ldiff_odd_even`,
:g:`ldiff_even_odd`,
:g:`ldiff_odd_odd`,
:g:`ldiff_le_l`,
:g:`shiftl_lower_bound`,
:g:`shiftr_upper_bound`,
:g:`ones_0`,
:g:`ones_succ`,
:g:`pow_lower_bound`
(`#18628 <https://github.com/coq/coq/pull/18628>`_,
by Pierre Rousselin).
- **Fixed:**
:g:`Z.euclidean_division_equations_cleanup` has been reordered so that
:tacn:`zify` (and :tacn:`lia`, :tacn:`nia`, etc) are no longer as slow when the
context contains many assumptions of the form :g:`0 <= ... < ...`
(`#18818 <https://github.com/coq/coq/pull/18818>`_,
fixes `#18770 <https://github.com/coq/coq/issues/18770>`_,
by Jason Gross).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Bump minimal Dune version required to build Coq to 3.6.1
(`#18359 <https://github.com/coq/coq/pull/18359>`_,
by Emilio Jesus Gallego Arias).
- **Removed:**
Support for ``.vio`` files and for ``.vio2vo`` transformation has
been removed, compilation to ``.vos`` is the supported method for
quick compilation now
(`#18424 <https://github.com/coq/coq/pull/18424>`_,
fixes `#4007 <https://github.com/coq/coq/issues/4007>`_
and `#4013 <https://github.com/coq/coq/issues/4013>`_
and `#4123 <https://github.com/coq/coq/issues/4123>`_
and `#5308 <https://github.com/coq/coq/issues/5308>`_
and `#5223 <https://github.com/coq/coq/issues/5223>`_
and `#6720 <https://github.com/coq/coq/issues/6720>`_
and `#8402 <https://github.com/coq/coq/issues/8402>`_
and `#9637 <https://github.com/coq/coq/issues/9637>`_
and `#11471 <https://github.com/coq/coq/issues/11471>`_
and `#18380 <https://github.com/coq/coq/issues/18380>`_,
by Emilio Jesus Gallego Arias).
- **Added:**
The `coq-doc` opam / Dune package will now build and install Coq's
documentation (`#17808 <https://github.com/coq/coq/pull/17808>`_, by
Emilio Jesus Gallego Arias).
- **Added:**
Coq is now compatible with `memprof-limits` interruption
methods. This means that Coq will be recompiled when the library is
installed / removed from an OPAM switch.
(`#18906 <https://github.com/coq/coq/pull/18906>`_,
fixes `#17760 <https://github.com/coq/coq/issues/17760>`_,
by Emilio Jesus Gallego Arias).
- **Added:**
ability to exit from `Drop.` in Coq toplevel by a simple `Ctrl + D`,
without leaving the OCaml toplevel on the stack.
Also add a custom OCaml toplevel directory `#go` which does the same
action as `go ()`, but with a more native syntax
(`#18771 <https://github.com/coq/coq/pull/18771>`_,
by Anton Danilkin).
Extraction
^^^^^^^^^^
- **Added:**
Extension for OCaml extraction:
Commands to extract foreign function calls to C (external)
and ML function exposition (Callback.register) for calling
being able to call them by C functions
(`#18270 <https://github.com/coq/coq/pull/18270>`_,
fixes `#18212 <https://github.com/coq/coq/issues/18212>`_,
by Mario Frank).
- **Fixed:**
Wrongly self-referencing extraction of primitive projections to OCaml in functors
(`#17321 <https://github.com/coq/coq/pull/17321>`_,
fixes `#16288 <https://github.com/coq/coq/issues/16288>`_,
by Hugo Herbelin). Note that OCaml wrappers assuming that the
applicative syntax of projections is provided may have
to use the dot notation instead.
Changes in 8.20.1
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Fixed:**
Possible guard checker anomaly on fixpoints containing an inner
fixpoint that is reducible (because of its main argument reducing to a
constructor). This is a regression in 8.20
(`#19671 <https://github.com/coq/coq/pull/19671>`_,
fixes `#19661 <https://github.com/coq/coq/issues/19661>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Fixed:**
spurious warning about incompatible prefixes in presence of ``as
pattern`` :n:`@syntax_modifier`
(`#19653 <https://github.com/coq/coq/pull/19653>`_,
fixes `#19541 <https://github.com/coq/coq/issues/19541>`_,
by Pierre Roux).
- **Fixed:**
spurious warning about incompatible prefixes in presence of
recursive notations
(`#19673 <https://github.com/coq/coq/pull/19673>`_,
fixes `#19658 <https://github.com/coq/coq/issues/19658>`_,
by Pierre Roux).
Tactics
^^^^^^^
- **Fixed:**
a regression in `Hint Extern` matching primitive projections
(`#19675 <https://github.com/coq/coq/pull/19675>`_,
fixes `#19668 <https://github.com/coq/coq/issues/19668>`_,
by Jan-Oliver Kaiser).
Version 8.19
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.19 extends the kernel universe polymorphism to
polymorphism over sorts (e.g. `Prop`, `SProp`) along with a few new
features, a host of improvements to the notation system, the Ltac2
standard library, and the removal of some standard library files after
a long deprecation period.
We highlight some of the most impactful changes here:
- :ref:`sort-polymorphism` makes it possible to share common constructs
over `Type` `Prop` and `SProp`.
- The notation :g:`term%_scope` to set a scope only temporarily
(in addition to :g:`term%scope` for opening a
scope applying to all subterms).
- :tacn:`lazy`, :tacn:`simpl`, :tacn:`cbn` and :tacn:`cbv` and the associated :cmd:`Eval`
and :tacn:`eval` reductions learned to do head reduction when given flag `head`.
- :ref:`New Ltac2 APIs <819Ltac2>`, improved Ltac2 `exact` and
dynamic building of Ltac2 term patterns.
- New performance evaluation facilities: :cmd:`Instructions` to
count CPU instructions used by a command (Linux only) and
:ref:`profiling` system to produce trace files.
- New command :cmd:`Attributes` to assign attributes such as
:attr:`deprecated` to a library file.
Notable breaking changes:
- :tacn:`replace` with `by tac` does not automatically attempt to solve
the generated equality subgoal using the hypotheses.
Use `by first [assumption | symmetry;assumption | tac]`
if you need the previous behaviour.
- :ref:`Removed old deprecated files <819Stdlib>` from the standard library.
See the `Changes in 8.19.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Coq's `reference manual for 8.19 <https://coq.github.io/doc/v8.19/refman>`_,
`documentation of the 8.19 standard library <https://coq.github.io/doc/v8.19/stdlib>`_
and `developer documentation of the 8.19 ML API <https://coq.github.io/doc/v8.19/api>`_
are also available.
Maxime Dénès and Thierry Martinez with support from Erik Martin-Dorel
and Théo Zimmermann moved the CI away from `gitlab.com <http://gitlab.com>`_
to use Inria supported runner machines through
`gitlab.inria.fr <https://gitlab.inria.fr>`_.
Théo Zimmermann with help from Ali Caglayan and Jason Gross maintained
`coqbot <https://github.com/coq/bot>`_ used to run Coq's CI and other
pull request management tasks.
Jason Gross maintained the `bug minimizer <https://github.com/JasonGross/coq-tools>`_
and its `automatic use through coqbot <https://github.com/coq/coq/wiki/Coqbot-minimize-feature>`_.
Jaime Arias and Erik Martin-Dorel maintained the
`Coq Docker images <https://hub.docker.com/r/coqorg/coq>`_
and Cyril Cohen, Vincent Laporte, Pierre Roux and Théo Zimmermann
maintained the `Nix toolbox <https://github.com/coq-community/coq-nix-toolbox>`_
used by many Coq projects for continuous integration.
Ali Caglayan, Emilio Jesús Gallego Arias, Rudi Grinberg and
Rodolphe Lepigre maintained the
`Dune build system for OCaml and Coq <https://github.com/ocaml/dune/>`_
used to build Coq itself and many Coq projects.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Guillaume Melquiond, Karl Palmskog and Enrico Tassi with
contributions from many users. A list of packages is `available on the Coq website <https://coq.inria.fr/coq-package-index>`_.
Our current maintainers are Yves Bertot, Frédéric Besson, Ana Borges,
Ali Caglayan, Tej Chajed, Cyril Cohen, Pierre Corbineau, Pierre
Courtieu, Andres Erbsen, Jim Fehrle, Julien Forest, Emilio Jesús
Gallego Arias, Gaëtan Gilbert, Georges Gonthier, Benjamin Grégoire,
Jason Gross, Hugo Herbelin, Vincent Laporte, Olivier Laurent, Assia
Mahboubi, Kenji Maillard, Guillaume Melquiond, Pierre-Marie Pédrot,
Clément Pit-Claudel, Pierre Roux, Kazuhiko Sakaguchi, Vincent Semeria,
Michael Soegtrop, Arnaud Spiwack, Matthieu Sozeau, Enrico Tassi,
Laurent Théry, Anton Trunov, Li-yao Xia and Théo Zimmermann. See the
`Coq Team face book <https://coq.inria.fr/coq-team.html>`_ page for
more details.
The 40 contributors to the 8.19 version are:
quarkcool, Khalid Abdullah, Tanaka Akira, Isaac van Bakel,
Frédéric Besson, Lasse Blaauwbroek, Ana Borges, Ali Caglayan, Nikolaos
Chatzikonstantinou, Maxime Dénès, Andrej Dudenhefner, Andres Erbsen,
Jim Fehrle, Gaëtan Gilbert, Jason Gross, Stefan Haan, Hugo Herbelin,
Emilio Jesús Gallego Arias, Pierre Jouvelot, Ralf Jung, Jan-Oliver
Kaiser, Robbert Krebbers, Jean-Christophe Léchenet, Rodolphe Lepigre,
Yann Leray, Yishuai Li, Guillaume Melquiond, Guillaume
Munch-Maccagnoni, Sotaro Okada, Karl Palmskog, Pierre-Marie Pédrot, Jim Portegies,
Pierre Rousselin, Pierre Roux, Michael Soegtrop, David Swasey, Enrico
Tassi, Shengyi Wang and Théo Zimmermann.
The Coq community at large helped improve this new version via
the GitHub issue and pull request system, the coq-club@inria.fr mailing list,
the `Discourse forum <https://coq.discourse.group/>`_ and the
`Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.19's development spanned 4 months from the release of Coq 8.18.0
(6 months since the branch for 8.18.0).
Gaëtan Gilbert and Matthieu Sozeau are the release managers of Coq 8.19.
This release is the result of 285 merged PRs, closing 70 issues.
| Nantes, January 2024
| Gaëtan Gilbert for the Coq development team
Changes in 8.19.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Added:**
:ref:`sort-polymorphism` makes it possible to share common constructs
over `Type` `Prop` and `SProp`
(`#17836 <https://github.com/coq/coq/pull/17836>`_,
`#18331 <https://github.com/coq/coq/pull/18331>`_,
by Gaëtan Gilbert).
- **Fixed:**
Primitives being incorrectly considered convertible to anything by module subtyping
(`#18507 <https://github.com/coq/coq/pull/18507>`_,
fixes `#18503 <https://github.com/coq/coq/issues/18503>`_,
by Gaëtan Gilbert).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
:token:`term_forall_or_fun`, :token:`term_let`, :token:`term_fix`,
:token:`term_cofix` and :token:`term_if` from :token:`term` at level 200
to :token:`term10` at level 10. This is a first step towards getting rid
of the recovery mechanism of camlp5/coqpp. The impact will mostly be
limited to rare cases of additional parentheses around the above
(`#18014 <https://github.com/coq/coq/pull/18014>`_,
by Hugo Herbelin).
- **Changed:**
Declarations of the form :g:`(id := body)` in :cmd:`Context` outside a
section in a :cmd:`Module Type` do not any more try to declare a class
instance. Assumptions whose type is a class and declared using
:cmd:`Context` outside a section in a :cmd:`Module Type` are now
declared as global, instead of local
(`#18254 <https://github.com/coq/coq/pull/18254>`_,
by Hugo Herbelin).
- **Fixed:**
Anomaly in the presence of duplicate variables within a disjunctive pattern
(`#17857 <https://github.com/coq/coq/pull/17857>`_ and `#18005 <https://github.com/coq/coq/pull/18005>`_,
fixes `#17854 <https://github.com/coq/coq/issues/17854>`_ and `#18004 <https://github.com/coq/coq/issues/18004>`_,
by Hugo Herbelin).
- **Fixed:**
Printing of constructors and of :g:`in` clause of :g:`match` now respects the
:flag:`Printing Implicit` and :flag:`Printing All` flags
(`#18176 <https://github.com/coq/coq/pull/18176>`_,
fixes `#18163 <https://github.com/coq/coq/issues/18163>`_,
by Hugo Herbelin).
- **Fixed:**
Wrong shift of argument names when using :cmd:`Arguments` in nested sections
(`#18393 <https://github.com/coq/coq/pull/18393>`_,
fixes `#12755 <https://github.com/coq/coq/issues/12755>`_
and `#18392 <https://github.com/coq/coq/issues/18392>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Changed:**
More informative message when a notation cannot be intepreted as a reference
(`#18104 <https://github.com/coq/coq/pull/18104>`_,
addresses `#18096 <https://github.com/coq/coq/issues/18096>`_,
by Hugo Herbelin).
- **Changed:**
In casts like :g:`term : t` where :g:`t` is bound to some
scope :g:`t_scope`, via :cmd:`Bind Scope`, the :g:`term` is now
interpreted in scope :g:`t_scope`. In particular when :g:`t`
is :g:`Type` the :g:`term` is interpreted in :g:`type_scope`
and when :g:`t` is a product the :g:`term` is interpreted
in :g:`fun_scope`
(`#6134 <https://github.com/coq/coq/pull/6134>`_,
fixes `#14959 <https://github.com/coq/coq/issues/14959>`_,
by Hugo Herbelin, reviewed by Maxime Dénès, Jim Fehrle, Emilio Gallego, Gaëtan Gilbert, Jason Gross, Pierre-Marie Pédrot, Pierre Roux, Bas Spitters and Théo Zimmermann).
- **Added:**
the notation :g:`term%_scope` to set a scope only temporarily
(in addition to :g:`term%scope` for opening a
scope applying to all subterms)
(`#14928 <https://github.com/coq/coq/pull/14928>`_,
fixes `#11486 <https://github.com/coq/coq/issues/11486>`_
and `#12157 <https://github.com/coq/coq/issues/12157>`_
and `#14305 <https://github.com/coq/coq/issues/14305>`_,
by Hugo Herbelin, reviewed by Pierre Roux).
- **Removed**
the ability to declare scopes whose name starts with `_`
(would be ambiguous with the new :g:`%_scope` notation)
(`#14928 <https://github.com/coq/coq/pull/14928>`_,
by Pierre Roux, reviewed by Hugo Herbelin).
- **Deprecated**
the notation :n:`term%scope` in :cmd:`Arguments` command.
In a few version, we'll make it an error and in next version give it
the same semantics as in terms (i.e., deep scope opening for all
subterms rather than just temporary opening)
(`#14928 <https://github.com/coq/coq/pull/14928>`_,
fixes `#11486 <https://github.com/coq/coq/issues/11486>`_
and `#12157 <https://github.com/coq/coq/issues/12157>`_
and `#14305 <https://github.com/coq/coq/issues/14305>`_,
by Hugo Herbelin, reviewed by Pierre Roux).
- **Added:**
Quoted strings can be used as tokens in notations; double quotes can be
used in symbols in :g:`only printing` notations; see :ref:`Basic notations <BasicNotations>`
for details (`#17123 <https://github.com/coq/coq/pull/17123>`_, by Hugo
Herbelin).
- **Added:**
Parsing support for notations with recursive binders involving not only
variables bound by :n:`fun` or :n:`forall` but also by :n:`let` or
:n:`match`
(`#17856 <https://github.com/coq/coq/pull/17856>`_,
fixes `#17845 <https://github.com/coq/coq/issues/17845>`_,
by Hugo Herbelin).
- **Added:**
Declaring more than once the level of a notation variable is now an error
(`#17988 <https://github.com/coq/coq/pull/17988>`_,
fixes `#17985 <https://github.com/coq/coq/issues/17985>`_,
by Hugo Herbelin).
- **Fixed:**
Various bugs and limitations to using custom binders in non-recursive and recursive notations
(`#17115 <https://github.com/coq/coq/pull/17115>`_,
fixes parts of `#17094 <https://github.com/coq/coq/issues/17094>`_,
by Hugo Herbelin).
- **Fixed:**
An invalid case of eta-expansion in notation pretty-printer
(`#17841 <https://github.com/coq/coq/pull/17841>`_,
fixes `#15221 <https://github.com/coq/coq/issues/15221>`_,
by Hugo Herbelin).
- **Fixed:**
:flag:`Printing Parentheses` now works also when an explicit level is
set for the right-hand side of a right-open notation
(`#17844 <https://github.com/coq/coq/pull/17844>`_,
fixes `#15322 <https://github.com/coq/coq/issues/15322>`_,
by Hugo Herbelin).
- **Fixed:**
anomaly when a notation variable denoting a binder occurs nested
more than once in a recursive pattern (`#17861
<https://github.com/coq/coq/pull/17861>`_, fixes `#17860
<https://github.com/coq/coq/issues/17860>`_, by Hugo Herbelin).
- **Fixed:**
Anomaly when trying to disable a non-existent custom notation
(`#17891 <https://github.com/coq/coq/pull/17891>`_,
fixes `#17782 <https://github.com/coq/coq/issues/17782>`_,
by Hugo Herbelin).
- **Fixed:**
appropriate error instead of anomaly in the presence of notations
with constructors applied to too many arguments in pattern-matching
(`#17892 <https://github.com/coq/coq/pull/17892>`_,
fixes `#17071 <https://github.com/coq/coq/issues/17071>`_,
by Hugo Herbelin).
- **Fixed:**
support constructors with parameters in number or string notations for patterns
(`#17902 <https://github.com/coq/coq/pull/17902>`_,
fixes `#11237 <https://github.com/coq/coq/issues/11237>`_,
by Hugo Herbelin).
- **Fixed:**
Chains of entry coercions possibly printed in the wrong order depending
on the order in which they were declared
(`#18230 <https://github.com/coq/coq/pull/18230>`_,
fixes `#18223 <https://github.com/coq/coq/issues/18223>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
- **Changed:**
`open_constr` in Ltac1 and Ltac2 does not perform evar normalization.
Normalization may be recovered using `let c := open_constr:(...) in constr:(c)`
if necessary for performance
(`#17704 <https://github.com/coq/coq/pull/17704>`_,
by Gaëtan Gilbert).
- **Changed:**
:tacn:`abstract` now supports existential variables
(`#17745 <https://github.com/coq/coq/pull/17745>`_,
by Gaëtan Gilbert).
- **Changed:**
instances declared with :flag:`Typeclasses Unique Instances` do not allow backtracking even when the goal contains evars
(`#17789 <https://github.com/coq/coq/pull/17789>`_,
fixes `#6714 <https://github.com/coq/coq/issues/6714>`_,
by Jan-Oliver Kaiser).
- **Changed:**
In :tacn:`rewrite_strat`, the syntax for the :g:`choice` strategy has
changed slightly. You may need to add parentheses around its arguments
(one such case found in our continuous integration tests)
(`#17832 <https://github.com/coq/coq/pull/17832>`_,
by Hugo Herbelin, Jim Fehrle and Jason Gross).
- **Changed:**
:tacn:`replace` with `by tac` does not automatically attempt to solve
the generated equality subgoal using the hypotheses.
Use `by first [assumption | symmetry;assumption | tac]`
if you need the previous behaviour
(`#17964 <https://github.com/coq/coq/pull/17964>`_,
fixes `#17959 <https://github.com/coq/coq/issues/17959>`_,
by Gaëtan Gilbert).
- **Changed:**
``Z.euclidean_division_equations_cleanup`` now breaks up hypotheses of the
form `0 <= _ < _` for better cleanup in ``zify``
(`#17984 <https://github.com/coq/coq/pull/17984>`_,
by Jason Gross).
- **Changed:**
:tacn:`simpl` now refolds applied constants unfolding to reducible
fixpoints into the original constant even when this constant
would become partially applied
(`#17991 <https://github.com/coq/coq/pull/17991>`_,
by Hugo Herbelin).
- **Added:**
Ltac2 tactic `Std.resolve_tc` to resolve typeclass evars appearing in a given term
(`#13071 <https://github.com/coq/coq/pull/13071>`_,
by Gaëtan Gilbert and Maxime Dénès).
- **Added:**
:tacn:`lazy`, :tacn:`simpl`, :tacn:`cbn` and :tacn:`cbv` and the associated :cmd:`Eval`
and :tacn:`eval` reductions learned to do head reduction when given flag `head`
(eg `Eval lazy head in (fun x => Some ((fun y => y) x)) 0` produces `Some ((fun y => y) 0)`)
(`#17503 <https://github.com/coq/coq/pull/17503>`_,
by Gaëtan Gilbert; :tacn:`cbv` case added in `#18190 <https://github.com/coq/coq/pull/18190>`_,
by Hugo Herbelin).
- **Fixed:**
ensure that opaque primitive projections are correctly handled by "Evarconv"
unification
(`#17788 <https://github.com/coq/coq/pull/17788>`_,
fixes `#17774 <https://github.com/coq/coq/issues/17774>`_,
by Rodolphe Lepigre).
- **Fixed:**
Useless duplications with :cmd:`Hint Cut` and :cmd:`Hint Mode`
(`#17887 <https://github.com/coq/coq/pull/17887>`_,
fixes `#17417 <https://github.com/coq/coq/issues/17417>`_,
by Hugo Herbelin).
- **Fixed:**
`zify` / `Z.euclidean_division_equations_cleanup` now no longer instantiates
dependent hypotheses. This will by necessity make
`Z.to_euclidean_division_equations` a bit weaker, but the previous behavior
was overly sensitive to hypothesis ordering. See `#17935
<https://github.com/coq/coq/pull/17935>`_ for a recipe to recapture the power
of the previous behavior in a more robust albeit slower way (`#17935
<https://github.com/coq/coq/pull/17935>`_, fixes `#17936
<https://github.com/coq/coq/issues/17936>`_, by Jason Gross).
- **Fixed:**
:tacn:`simpl` now working on reducible named mutual fixpoints with parameters
(`#17993 <https://github.com/coq/coq/pull/17993>`_,
fixes `#12521 <https://github.com/coq/coq/issues/12521>`_
and part of `#3488 <https://github.com/coq/coq/issues/3488>`_,
by Hugo Herbelin).
- **Fixed:**
support for reasoning up to polymorphic universe variables in
:tacn:`congruence` and :tacn:`f_equal`
(`#18106 <https://github.com/coq/coq/pull/18106>`_,
fixes `#5481 <https://github.com/coq/coq/issues/5481>`_
and `#9979 <https://github.com/coq/coq/issues/9979>`_,
by Hugo Herbelin).
- **Fixed:**
Only run zify saturation on existing hypotheses of the goal
(`#18152 <https://github.com/coq/coq/pull/18152>`_,
fixes `#18151 <https://github.com/coq/coq/issues/18151>`_,
by Frédéric Besson and Rodolphe Lepigre).
- **Fixed:**
A stack overflow due to a non-tail recursive function in `lia`
(`#18159 <https://github.com/coq/coq/pull/18159>`_,
fixes `#18158 <https://github.com/coq/coq/issues/18158>`_,
by Jan-Oliver Kaiser and Rodolphe Lepigre).
- **Fixed:**
Apply substitution in Case stack node for cbv reify
(`#18195 <https://github.com/coq/coq/pull/18195>`_,
fixes `#18194 <https://github.com/coq/coq/issues/18194>`_,
by Yann Leray).
- **Fixed:**
Anomaly of :tacn:`simpl` on partially applied named mutual fixpoints
(`#18243 <https://github.com/coq/coq/pull/18243>`_,
fixes `#18239 <https://github.com/coq/coq/issues/18239>`_,
by Hugo Herbelin).
- **Changed:**
:tacn:`simpl` tries to reduce named mutual fixpoints also when they return functions
(`#18243 <https://github.com/coq/coq/pull/18243>`_,
by Hugo Herbelin).
Ltac language
^^^^^^^^^^^^^
- **Fixed:**
Fix broken "r <num>" and "r <string>" commands in the coqtop
Ltac debugger, which also affected the Proof General Ltac debugger
(`#18068 <https://github.com/coq/coq/pull/18068>`_,
fixes `#18067 <https://github.com/coq/coq/issues/18067>`_,
by Jim Fehrle).
.. _819Ltac2:
Ltac2 language
^^^^^^^^^^^^^^
- **Changed:**
`Array.empty`, `Message.Format.stop` and `Pattern.empty_context` are not thunked
(`#17534 <https://github.com/coq/coq/pull/17534>`_,
by Gaëtan Gilbert).
- **Changed:**
Ltac2 `exact` and `eexact` elaborate their argument using the type of the goal as expected type,
instead of elaborating with no expected type then unifying the resulting type with the goal
(`#18157 <https://github.com/coq/coq/pull/18157>`_,
fixes `#12827 <https://github.com/coq/coq/issues/12827>`_,
by Gaëtan Gilbert).
- **Changed:**
argument order for the Ltac2 combinators `List.fold_left` `List.fold_right`
and `Array.fold_right` changed to be the same as in OCaml
(`#18197 <https://github.com/coq/coq/pull/18197>`_,
fixes `#16485 <https://github.com/coq/coq/issues/16485>`_,
by Gaëtan Gilbert).
- **Changed:**
`Ltac2.Std.red_flags` added field `rStrength` to support head-only reduction
(`#18273 <https://github.com/coq/coq/pull/18273>`_,
fixes `#18209 <https://github.com/coq/coq/issues/18209>`_,
by Gaëtan Gilbert).
- **Added:**
Ltac2 supports pattern quotations when building `pattern` values.
This allows building dynamic patterns, eg `Ltac2 eq_pattern a b := pattern:($pattern:a = $pattern:b)`
(`#17667 <https://github.com/coq/coq/pull/17667>`_,
by Gaëtan Gilbert).
- **Added:**
new standard library modules `Ltac2.Unification` and `Ltac2.TransparentState`
providing access to "Evarconv" unification, including the configuration of the
transparency state
(`#17777 <https://github.com/coq/coq/pull/17777>`_,
by Rodolphe Lepigre).
- **Added:**
``Ltac2.Constr.is_float``, ``Ltac2.Constr.is_uint63``, ``Ltac2.Constr.is_array``
(`#17894 <https://github.com/coq/coq/pull/17894>`_,
by Jason Gross).
- **Added:**
new Ltac2 standard library modules `Ltac2.Ref`, `Ltac2.Lazy` and `Ltac2.RedFlags`
- **Added:**
new Ltac2 standard library functions to `Ltac2.Control`, `Ltac2.Array`, and
`Ltac2.List`
(`#18095 <https://github.com/coq/coq/pull/18095>`_,
fixes `#10112 <https://github.com/coq/coq/issues/10112>`_,
by Rodolphe Lepigre).
- **Added:**
Support for the ``setoid_rewrite`` tactic
(`#18102 <https://github.com/coq/coq/pull/18102>`_,
by quarkcool).
- **Added:**
:cmd:`Ltac2 Globalize` and :cmd:`Ltac2 Check` useful to investigate the expansion of Ltac2 notations
(`#18139 <https://github.com/coq/coq/pull/18139>`_,
by Gaëtan Gilbert).
- **Added:**
A new flag :flag:`Ltac2 In Ltac1 Profiling` (unset by default) to control
whether Ltac2 stack frames are included in Ltac profiles
(`#18293 <https://github.com/coq/coq/pull/18293>`_,
by Rodolphe Lepigre).
- **Added:**
`Ltac2.Message.Format.ikfprintf` useful to implement conditional printing
efficiently (i.e. without building an unused message when not printing)
(`#18311 <https://github.com/coq/coq/pull/18311>`_,
fixes `#18292 <https://github.com/coq/coq/issues/18292>`_,
by Gaëtan Gilbert).
- **Fixed:**
Ltac2 mutable references are not considered values anymore
(`#18082 <https://github.com/coq/coq/pull/18082>`_,
by Gaëtan Gilbert).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
:cmd:`Let` with :cmd:`Qed` produces an opaque side definition
instead of being treated as a transparent `let` after the section is closed.
The previous behaviour can be recovered using :attr:`clearbody` and :cmd:`Defined`
(`#17576 <https://github.com/coq/coq/pull/17576>`_,
by Gaëtan Gilbert).
- **Changed:**
automatic lowering of record types to `Prop` now matches the behavior for inductives:
no lowering when universe polymorphism is on, more lowering with recursive records
(`#17795 <https://github.com/coq/coq/pull/17795>`_,
fixes `#17801 <https://github.com/coq/coq/issues/17801>`_
and `#17796 <https://github.com/coq/coq/issues/17796>`_
and `#17801 <https://github.com/coq/coq/issues/17801>`_
and `#17805 <https://github.com/coq/coq/issues/17805>`_,
by Gaëtan Gilbert).
- **Added:**
:opt:`Extraction Output Directory` option for specifying the
directory in which extracted files are written
(`#16126 <https://github.com/coq/coq/pull/16126>`_,
fixes `#9148 <https://github.com/coq/coq/issues/9148>`_,
by Ali Caglayan).
- **Added:**
`-profile` command line argument and `PROFILE` variable in `coq_makefile` to control a new :ref:`profiling` system
(`#17702 <https://github.com/coq/coq/pull/17702>`_,
by Gaëtan Gilbert).
- **Added:**
new command modifier :cmd:`Instructions` that executes the given command and
displays the number of CPU instructions it took to execute it. This command
is currently only supported on Linux systems, but it does not fail on other
systems, where it simply shows an error message instead of the count.
(`#17744 <https://github.com/coq/coq/pull/17744>`_,
by Rodolphe Lepigre).
- **Added:**
support for instruction counts to the `-profile` option.
(`#17744 <https://github.com/coq/coq/pull/17744>`_,
by Rodolphe Lepigre).
- **Added:**
New command :cmd:`Attributes` to assign attributes such as
:attr:`deprecated` to a library file
(`#18193 <https://github.com/coq/coq/pull/18193>`_,
fixes `#8032 <https://github.com/coq/coq/issues/8032>`_,
by Hugo Herbelin).
- **Fixed:**
Anomaly with :cmd:`Search` in the context of a goal
(`#17987 <https://github.com/coq/coq/pull/17987>`_,
fixes `#17963 <https://github.com/coq/coq/issues/17963>`_,
by Hugo Herbelin).
- **Fixed:**
The printer for :cmd:`Guarded` was possibly raising an anomaly
in the presence of existential variables
(`#18008 <https://github.com/coq/coq/pull/18008>`_,
fixes `#18006 <https://github.com/coq/coq/issues/18006>`_,
by Hugo Herbelin).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
Add a `coqdep` option `-w` to adjust warnings and allow turning then into
errors like the corresponding `coqc` option
(`#17946 <https://github.com/coq/coq/pull/17946>`_,
fixes `#10156 <https://github.com/coq/coq/issues/10156>`_,
by David Swasey and Rodolphe Lepigre).
- **Fixed:**
properly delayed variable expansion when `coq_makefile` uses
the combined rule for `.vo` and `.glob` targets,
i.e. on GNU Make 4.4 and later.
(`#18077 <https://github.com/coq/coq/pull/18077>`_,
fixes `#18076 <https://github.com/coq/coq/issues/18076>`_,
by Gaëtan Gilbert).
- **Fixed:**
Spurious `coqdep` warnings due to missing path normalization for plugins
(`#18165 <https://github.com/coq/coq/pull/18165>`_,
by Rodolphe Lepigre).
- **Fixed:**
Regression in option :g:`--external` of `coqdoc`, whose two arguments
were inadvertently swapped
(`#18448 <https://github.com/coq/coq/pull/18448>`_,
fixes `#18434 <https://github.com/coq/coq/issues/18434>`_,
by Hugo Herbelin).
.. _819Stdlib:
Standard library
^^^^^^^^^^^^^^^^
- **Changed:**
reimplemented `Ncring_tac` reification (used by :tacn:`nsatz`, `cring`, but not :tacn:`ring`)
in Ltac instead of typeclasses
(`#18325 <https://github.com/coq/coq/pull/18325>`_,
by Gaëtan Gilbert).
- **Removed:** :g:`Numbers.Cyclic.ZModulo` from the standard library. This
file was deprecated in 8.17 and has no known use cases. It is retained in
the test suite to ensure consistency of :g:`CyclicAxioms`
(`#17258 <https://github.com/coq/coq/pull/17258>`_,
by Andres Erbsen).
- **Removed:** :g:`ZArith.Zdigits` in favor of :g:`Z.testbit`
(`#18025 <https://github.com/coq/coq/pull/18025>`_,
by Andres Erbsen).
- **Removed:**
long deprecated files in `Arith`: `Div2.v`, `Even.v`, `Gt.v`,
`Le.v`, `Lt.v`, `Max.v`, `Minus.v`, `Min.v`, `Mult.v`, `Plus.v`,
`Arith_prebase.v`
(`#18164 <https://github.com/coq/coq/pull/18164>`_,
by Pierre Rousselin).
- **Deprecated:** :g:`NArith.Ndigits` and :g:`NArith.Ndist` due to disuse.
For most uses of `Ndigits`, `N.testbit` and similar functions seem more
desirable. If you would like to continue using these files, please consider
volunteering to maintain them, within stdlib or otherwise
(`#17732 <https://github.com/coq/coq/pull/17732>`_,
by Andres Erbsen).
- **Deprecated:** :g:`Strings.ByteVector` in favor of :g:`Init.Byte`
(`#18022 <https://github.com/coq/coq/pull/18022>`_,
by Andres Erbsen).
- **Deprecated:** :g:`Numbers.NaryFunctions` due to disuse. If you are
interested in continuting to use this module, please consider volunteering to
maintain it, in stdlib or otherwise
(`#18026 <https://github.com/coq/coq/pull/18026>`_,
by Andres Erbsen).
- **Added:**
Lemma `cardinal_Add_In` says that inserting an existing key with a new
value doesn't change the size of a map, lemma `Add_transpose_neqkey` says
that unequal keys can be inserted into a map in any order
(`#12096 <https://github.com/coq/coq/pull/12096>`_,
by Isaac van Bakel and Jean-Christophe Léchenet).
- **Added:**
lemmas :g:`app_eq_cons`, :g:`app_inj_pivot` and :g:`rev_inj`
(`#17787 <https://github.com/coq/coq/pull/17787>`_,
by Stefan Haan, with help of Olivier Laurent).
- **Added:**
``unfold_nth_error``, ``nth_error_nil``, ``nth_error_cons``, ``nth_error_O``,
``nth_error_S`` to ``Coq.Lists.List``
(`#17998 <https://github.com/coq/coq/pull/17998>`_,
by Jason Gross).
- **Added:**
``Reflexive``, ``Symmetric``, ``Transitive``, ``Antisymmetric``,
``Asymmetric`` instances for ``Rle``, ``Rge``, ``Rlt``, ``Rgt``
(`#18059 <https://github.com/coq/coq/pull/18059>`_,
by Jason Gross).
Extraction
^^^^^^^^^^
- **Fixed:**
In the error message about extraction of sort-polymorphic
singleton inductive types, do not specifically refer to OCaml as
other languages are also concerned
(`#17889 <https://github.com/coq/coq/pull/17889>`_,
fixes `#17817 <https://github.com/coq/coq/issues/17817>`_,
by Hugo Herbelin).
Changes in 8.19.1
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Fixed:**
incorrect abstraction of sort variables for opaque constants
leading to an inconsistency
(`#18596 <https://github.com/coq/coq/pull/18596>`_
and `#18630 <https://github.com/coq/coq/pull/18630>`_,
fixes `#18594 <https://github.com/coq/coq/issues/18594>`_,
by Gaëtan Gilbert).
- **Fixed:**
memory corruption with :tacn:`vm_compute` (rare but more likely with OCaml 5.1)
(`#18599 <https://github.com/coq/coq/pull/18599>`_,
by Guillaume Melquiond).
Notations
^^^^^^^^^
- **Changed:**
:warn:`Found no matching notation to enable or disable` is a warning instead of an error
(`#18670 <https://github.com/coq/coq/pull/18670>`_,
by Pierre Roux).
Tactics
^^^^^^^
- **Fixed:**
undeclared universe with multiple uses of :tacn:`abstract`
(`#18640 <https://github.com/coq/coq/pull/18640>`_,
fixes `#18636 <https://github.com/coq/coq/issues/18636>`_,
by Gaëtan Gilbert).
Ltac2 language
^^^^^^^^^^^^^^
- **Fixed:**
incorrect printing of constructor values with multiple arguments,
and over-parenthesizing of constructor printing
(`#18560 <https://github.com/coq/coq/pull/18560>`_,
fixes `#18556 <https://github.com/coq/coq/issues/18556>`_,
by Gaëtan Gilbert).
- **Fixed:**
incorrect declared type for `Ltac2.FMap.fold`
(`#18649 <https://github.com/coq/coq/pull/18649>`_,
fixes `#18635 <https://github.com/coq/coq/issues/18635>`_,
by Gaëtan Gilbert).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
missing `conf-` dependencies of the opam packages:
`coq-core` depends on `conf-linux-libc-dev` when compiled on linux,
and `coq` depends on `conf-python-3` and `conf-time` to run the test suite
(`#18565 <https://github.com/coq/coq/pull/18565>`_,
by Gaëtan Gilbert).
- **Fixed:**
avoid comitting symlinks to git which caused build failures on some Windows setups
(`#18550 <https://github.com/coq/coq/pull/18550>`_,
fixes `#18548 <https://github.com/coq/coq/issues/18548>`_,
by Gaëtan Gilbert).
Changes in 8.19.2
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
Regression from Coq 8.18 in the presence of a defined field in
a primitive :n:`Record`
(`#19088 <https://github.com/coq/coq/pull/19088>`_,
fixes `#19082 <https://github.com/coq/coq/issues/19082>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Fixed:**
Printer sometimes failing to use a prefix or infix custom notation
whose right-hand side refers to a different custom entry
(`#18089 <https://github.com/coq/coq/pull/18089>`_,
fixes `#18914 <https://github.com/coq/coq/issues/18914>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
- **Fixed:**
:tacn:`abstract` failing in the presence of admitted goals in the surrounding proof
(`#18945 <https://github.com/coq/coq/pull/18944>`_,
fixes `#18942 <https://github.com/coq/coq/issues/18942>`_,
by Gaëtan Gilbert).
Ltac2 language
^^^^^^^^^^^^^^
- **Fixed:**
anomalies when using Ltac2 in VsCoq due to incorrect state handling of Ltac2 notations
(`#19096 <https://github.com/coq/coq/pull/19096>`_,
fixes `coq-community/vscoq#772 <https://github.com/coq-community/vscoq/issues/772>`_,
by Gaëtan Gilbert)
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
anomaly when using :cmd:`Include` on a module containing a record
declared with :flag:`Primitive Projections`
(`#18772 <https://github.com/coq/coq/pull/18772>`_,
fixes `#18769 <https://github.com/coq/coq/issues/18769>`_,
by Jan-Oliver Kaiser)
- **Fixed:**
anomaly from :cmd:`Fixpoint` with no arguments
(`#18741 <https://github.com/coq/coq/pull/18741>`_,
by Hugo Herbelin)
CoqIDE
^^^^^^
- **Fixed:**
Position error/warning tooltips correctly when multibyte UTF-8 characters are present
(`#19137 <https://github.com/coq/coq/pull/19137>`_,
fixes `#19136 <https://github.com/coq/coq/issues/19136>`_,
by Jim Fehrle).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
compatibility with OCaml versions where `effect` is a keyword
(`#18863 <https://github.com/coq/coq/pull/18863>`_,
by Remy Seassau)
- **Added:**
Coq is now compatible with `memprof-limits` interruption
methods. This means that Coq will be recompiled when the library is
installed / removed from an OPAM switch.
(`#18906 <https://github.com/coq/coq/pull/18906>`_,
fixes `#17760 <https://github.com/coq/coq/issues/17760>`_,
by Emilio Jesus Gallego Arias).
Version 8.18
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.18 integrates two soundness fixes to the Coq kernel along
with a host of improvements. We highlight a few impactful changes:
- the default :ref:`locality <818HintLocality>` of `Hint` and :cmd:`Instance`
commands was switched to :attr:`export`.
- the universe unification algorithm can now delay the commitment to a
sort (the algorithm used to pick `Type`). Thanks to this feature many `Prop`
and `SProp` annotations can be now omitted.
- Ltac2 supports array literals, maps and sets of primitive datatypes such
as names (of constants, inductive types, etc) and fine-grained
control over profiling.
- The warning system offers new categories, enabling finer (de)activation of specific warnings.
This should be particularly useful to handle deprecations.
- Many new lemmas useful for teaching analysis with Coq are now part of
the standard library about real numbers.
- The `#[deprecated]` attribute can now be applied to definitions.
The 41 contributors to the 8.18 version are:
Reynald Affeldt, Tanaka Akira, Matthieu Baty, Yves Bertot,
Lasse Blaauwbroek, Ana Borges, Kate Deplaix, Ali Caglayan, Cyril Cohen, Maxime Dénès,
Andrej Dudenhefner, Andres Erbsen, Jim Fehrle, Yannick Forster,
Paolo G. Giarrusso, Gaëtan Gilbert, Jason Gross, Samuel Gruetter,
Stefan Haan, Hugo Herbelin, Yoshihiro Imai, Emilio Jesús Gallego Arias,
Olivier Laurent, Meven Lennon-Bertrand, Rodolphe Lepigre, Yishuai Li,
Guillaume Melquiond, Karl Palmskog, Pierre-Marie Pédrot, Stefan Radziuk,
Ramkumar Ramachandra, Pierre Rousselin, Pierre Roux, Julin Shaji,
Kazuhiko Sakaguchi, Weng Shiwei, Michael Soegtrop, Matthieu Sozeau,
Enrico Tassi, Hao Yang, Théo Zimmermann.
We are very grateful to the Coq community for their help in creating 8.18
in the 6 months since the release of
Coq 8.17.0. Maxime Dénès and Enrico Tassi were the release managers.
| Sophia-Antipolis, September 2023,
| Enrico Tassi for the Coq development team
Changes in 8.18.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Changed:**
the `bad-relevance` warning is now an error by default
(`#17172 <https://github.com/coq/coq/pull/17172>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
the kernel now checks that case elimination of private inductive types (cf :attr:`private(matching)`) is not used outside their defining module.
Previously this was only checked in elaboration and the check could be avoided through some tactics, breaking consistency in the presence of axioms which rely on the elimination restriction to be consistent
(`#17452 <https://github.com/coq/coq/pull/17452>`_,
fixes `#9608 <https://github.com/coq/coq/issues/9608>`_,
by Gaëtan Gilbert).
- **Fixed:**
a bug enabling :tacn:`native_compute` to yield arbitrary floating-point values
(`#17872 <https://github.com/coq/coq/pull/17872>`_,
fixes `#17871 <https://github.com/coq/coq/issues/17871>`_,
by Guillaume Melquiond and Pierre Roux, bug found by Jason Gross).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
enhance the universe unification algorithm, which is now
able to delay the definition of a sort. This allows omitting
some explicit `Prop` and `SProp` annotations when writing terms.
Some minor backwards compatibility issues can arise in rare cases,
which can be solved with more explicit sort annotations
(`#16903 <https://github.com/coq/coq/pull/16903>`_,
by Pierre-Marie Pédrot).
- **Changed:**
match compilation for primitive record avoids producing an encoding overhead for matches that are equivalent to a primitive projection
(`#17008 <https://github.com/coq/coq/pull/17008>`_,
by Gaëtan Gilbert).
- **Added:**
volatile casts :n:`@term :> @type` which do not leave a trace in the elaborated term.
They are used by :flag:`Printing Match All Subterms` to display otherwise hidden subterms of match constructs
(`#16992 <https://github.com/coq/coq/pull/16992>`_,
fixes `#16918 <https://github.com/coq/coq/issues/16918>`_,
by Gaëtan Gilbert).
- **Added:**
when printing uninterpreted terms (for instance through :cmd:`Print Ltac` on `Ltac foo := exact some_term`),
extensions to the term language (for instance :ref:`tactics-in-terms`) are now printed correctly instead of as holes (`_`)
(`#17221 <https://github.com/coq/coq/pull/17221>`_,
by Gaëtan Gilbert).
- **Added:**
Support for the :attr:`local`, :attr:`global` and :attr:`export`
locality attributes for the single "field" of :ref:`definitional
typeclasses <singleton-class>` when using the ``:>`` and ``::``
syntaxes for coercion and substructures
(`#17754 <https://github.com/coq/coq/pull/17754>`_,
fixes `#17451 <https://github.com/coq/coq/issues/17451>`_,
by Pierre Roux).
- **Added:**
a hook in the coercion mechanism to enable programming coercions in
external metalanguages such as Ltac, Ltac2, Elpi or OCaml plugins
(`#17794 <https://github.com/coq/coq/pull/17794>`_,
by Pierre Roux).
- **Fixed:**
canonical instance matching `match` terms
(`#17206 <https://github.com/coq/coq/pull/17206>`_,
fixes `#17079 <https://github.com/coq/coq/issues/17079>`_,
by Gaëtan Gilbert).
- **Fixed:**
universe constraint inference in module subtyping can trigger constant unfoldings
(`#17305 <https://github.com/coq/coq/pull/17305>`_,
fixes `#17303 <https://github.com/coq/coq/issues/17303>`_,
by Gaëtan Gilbert).
Notations
^^^^^^^^^
- **Removed:**
The `\'[=\'` keyword. `\'[=\'`
tokens in notation definitions should be replaced with the pair of
tokens `\'[\' \'=\'`. If compatibility with Coq < 8.18
is needed, replace `[=` in uses of the notation with
an added space (`[ =`)
(`#16788 <https://github.com/coq/coq/pull/16788>`_,
fixes `#16785 <https://github.com/coq/coq/issues/16785>`_,
by Pierre Roux).
- **Added:**
Support for :flag:`Printing Parentheses` in custom notations
(`#17117 <https://github.com/coq/coq/pull/17117>`_, by Hugo
Herbelin).
- **Added:**
Improve printing of reverse coercions. When a term :g:`x`
is elaborated to :g:`x'` through a reverse coercion,
return the term :g:`reverse_coercion x' x` that is convertible
to :g:`x'` but displayed :g:`x` thanks to the coercion
:g:`reverse_coercion`
(`#17484 <https://github.com/coq/coq/pull/17484>`_,
by Pierre Roux).
- **Fixed:**
Add support to parse a recursive pattern as a sequence of terms in a
recursive notation even when this recursive pattern is used in
position of binders; it was formerly raising an anomaly (`#16937
<https://github.com/coq/coq/pull/16937>`_, fixes `#12467
<https://github.com/coq/coq/issues/12467>`_, by Hugo Herbelin).
- **Fixed:**
Improved ability to print notations involving anonymous binders
(`#17050 <https://github.com/coq/coq/pull/17050>`_,
by Hugo Herbelin).
- **Fixed:**
anomaly with notations abbreviating a local variable or record field name
(`#17217 <https://github.com/coq/coq/pull/17217>`_,
fixes `#14975 <https://github.com/coq/coq/issues/14975>`_,
by Hugo Herbelin).
- **Fixed:**
Ensure in all cases that a parsing rule is declared when the :n:`only parsing` flag is given
(`#17318 <https://github.com/coq/coq/pull/17317>`_,
fixes `#17316 <https://github.com/coq/coq/issues/17316>`_,
by Hugo Herbelin).
- **Fixed:**
In :cmd:`Number Notation`, "abstract after N" was applied when number >= N.
Now it is applied when number > N
(`#17478 <https://github.com/coq/coq/pull/17478>`_,
by Jim Fehrle).
Tactics
^^^^^^^
- **Changed:**
in the fringe case where the ``with`` clause of a call to :tacn:`specialize`
depends on a variable bound in the type, the tactic will now fail instead of
silently producing a shelved evar
(`#17322 <https://github.com/coq/coq/pull/17322>`_,
by Pierre-Marie Pédrot).
- **Changed:**
extensions to the term syntax through generic arguments (typically `ltac:()`, `ltac2:()` or ltac2's `$`)
produce errors when used in term patterns (for instance patterns used to filter hints) instead of being treated as holes (`_`)
(`#17352 <https://github.com/coq/coq/pull/17352>`_,
by Gaëtan Gilbert).
- **Changed:**
the :tacn:`case` tactic and its variants always generate a
pattern-matching node, regardless of their argument. In
particular, they are now guaranteed to generate as many goals
as there are constructors in the inductive type. Previously,
they used to reduce to the corresponding branch when the argument
βι-normalized to a constructor, resulting in a single goal
(`#17541 <https://github.com/coq/coq/pull/17541>`_,
by Pierre-Marie Pédrot).
- **Changed:**
:tacn:`injection` continues working using sigma types when `Eqdep_dec` has not been required even if an equality scheme was found, instead of failing
(`#17670 <https://github.com/coq/coq/pull/17670>`_,
by Gaëtan Gilbert).
- **Changed:**
the unification heuristics for implicit arguments of the :tacn:`case` tactic.
We unconditionally recommend using :tacn:`destruct` instead, and even more so
in case of incompatibility
(`#17564 <https://github.com/coq/coq/pull/17564>`_,
by Pierre-Marie Pédrot).
- **Removed:**
the no-argument form of the :tacn:`instantiate` tactic, deprecated since 8.16
(`#16910 <https://github.com/coq/coq/pull/16910>`_,
by Pierre-Marie Pédrot).
- **Removed:**
undocumented tactics `hresolve_core` and `hget_evar`
(`#17035 <https://github.com/coq/coq/pull/17035>`_,
by Gaëtan Gilbert).
- **Deprecated:**
the `elimtype` and `casetype` tactics
(`#16904 <https://github.com/coq/coq/pull/16904>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
`revert dependent`, which is a misleadingly named alias of :tacn:`generalize dependent`
(`#17669 <https://github.com/coq/coq/pull/17669>`_,
by Gaëtan Gilbert).
- **Fixed:**
The :tacn:`simpl` tactic now respects the :n:`simpl never` flag even
when the subject function is referred to through another definition
(`#13448 <https://github.com/coq/coq/pull/13448>`_,
fixes `#13428 <https://github.com/coq/coq/issues/13428>`_,
by Yves Bertot).
- **Fixed:**
unification is less sensitive to whether a subterm is
an indirection through a defined existential variable or a direct term node.
This results in less constant unfoldings in rare cases
(`#16960 <https://github.com/coq/coq/pull/16960>`_,
by Gaëtan Gilbert).
- **Fixed:**
untypable proof states generated by setoid_rewrite, which may cause some backwards-incompatibilities
(`#17304 <https://github.com/coq/coq/pull/17304>`_,
fixes `#17295 <https://github.com/coq/coq/issues/17295>`_,
by Lasse Blaauwbroek).
- **Fixed:**
intropatterns destructing a term whose type is a product
cannot silently create shelved evars anymore. Instead, it
fails with an unsolvable variable. This can be fixed in a
backwards compatible way by using the e-variant of the parent
tactic
(`#17564 <https://github.com/coq/coq/pull/17564>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
the :tacn:`field_simplify` tactic, so that it no longer
introduces side-conditions when working on a hypothesis
(`#17591 <https://github.com/coq/coq/pull/17591>`_,
by Guillaume Melquiond).
- **Fixed:**
the :tacn:`tauto` tactic and its variants now try to match types
up to universe unification. This makes them compatible with
universe-polymorphic code
(`#8905 <https://github.com/coq/coq/pull/8905>`_,
fixes `#4721 <https://github.com/coq/coq/issues/4721>`_
and `#5351 <https://github.com/coq/coq/issues/5351>`_,
by Pierre-Marie Pédrot).
Ltac2 language
^^^^^^^^^^^^^^
- **Added:**
Support for parsing Ltac2 array literals ``[| ... |]``
(`#16859 <https://github.com/coq/coq/pull/16859>`_,
fixes `#13976 <https://github.com/coq/coq/issues/13976>`_,
by Samuel Gruetter).
- **Added:**
Finite set and map APIs for identifier, string, int, constant, inductive and constructor keys
(`#17347 <https://github.com/coq/coq/pull/17347>`_,
c.f. `#16409 <https://github.com/coq/coq/issues/16409>`_,
by Gaëtan Gilbert).
- **Added:**
Ltac2 preterm antiquotation `$preterm:`
(`#17359 <https://github.com/coq/coq/pull/17359>`_,
fixes `#13977 <https://github.com/coq/coq/issues/13977>`_,
by Gaëtan Gilbert).
- **Added:**
:flag:`Ltac Profiling` also profiles Ltac2 tactics.
Ltac2 also provides tactics `start_profiling` `stop_profiling` and `show_profile` for finer grained control
(`#17371 <https://github.com/coq/coq/pull/17371>`_,
fixes `#10111 <https://github.com/coq/coq/issues/10111>`_,
by Gaëtan Gilbert).
- **Added:**
primitives to build and compare values in `Ltac2.Init.cast`
(`#17468 <https://github.com/coq/coq/pull/17468>`_,
by Gaëtan Gilbert).
- **Added:**
It is possible to define 0-argument externals
(`#17475 <https://github.com/coq/coq/pull/17475>`_,
by Gaëtan Gilbert).
- **Added:**
Ltac2 quotations :ref:`ltac2val:(ltac2 tactic) <ltac2in1>` in Ltac1 which produce Ltac1 values
(as opposed to `ltac2:()` quotations which are only useful for their side effects)
(`#17575 <https://github.com/coq/coq/pull/17575>`_,
by Gaëtan Gilbert).
- **Fixed:**
nested notations involving :ref:`term-antiquotations`
(`#17232 <https://github.com/coq/coq/pull/17232>`_,
fixes `#15864 <https://github.com/coq/coq/issues/15864>`_,
by Gaëtan Gilbert).
- **Fixed:**
Parsing level of :g:`by` clause of Ltac2's :g:`assert`
(`#17508 <https://github.com/coq/coq/pull/17508>`_,
fixes `#17491 <https://github.com/coq/coq/issues/17491>`_,
by Samuel Gruetter).
- **Fixed:**
`multi_match!`, `multi_match! goal` and the underlying
`Ltac2.Pattern.multi_match0` and `Ltac2.Pattern.multi_goal_match0`
now preserve exceptions from backtracking after a branch succeeded
instead of replacing them with `Match_failure`
(e.g. `multi_match! constr:(tt) with tt => () end; Control.zero Not_found`
now fails with `Not_found` instead of `Match_failure`)
(`#17597 <https://github.com/coq/coq/pull/17597>`_,
fixes `#17594 <https://github.com/coq/coq/issues/17594>`_,
by Gaëtan Gilbert).
Commands and options
^^^^^^^^^^^^^^^^^^^^
.. _818HintLocality:
- **Changed:**
the default locality of `Hint` and :cmd:`Instance` commands was
switched to :attr:`export`
(`#16258 <https://github.com/coq/coq/pull/16258>`_,
by Pierre-Marie Pédrot).
- **Changed:** warning `non-primitive-record` is now in category
`records` instead of `record`. This was the only use of `record` but
the plural version is also used by `cannot-define-projection`
`future-coercion-class-constructor` and
`future-coercion-class-field`. (`#16989
<https://github.com/coq/coq/pull/16989>`_, by Gaëtan Gilbert).
- **Changed:**
:cmd:`Eval` prints information about existential variables like :cmd:`Check`
(`#17274 <https://github.com/coq/coq/pull/17274>`_,
by Gaëtan Gilbert).
- **Changed:**
The names of deprecation warnings now depend on the version
in which they were introduced, using their "since" field.
This enables deprecation warnings to be selectively enabled,
disabled, or treated as an error, according to the version number
provided in the :attr:`deprecated` attribute
(`#17489 <https://github.com/coq/coq/pull/17489>`_,
fixes `#16287 <https://github.com/coq/coq/issues/16287>`_,
by Pierre Roux, reviewed by Ali Caglayan, Théo Zimmermann and Gaëtan Gilbert).
- **Changed:**
warnings can now have multiple categories allowing for finer user control on which warning to enable, disable or treat as an error
(`#17585 <https://github.com/coq/coq/pull/17585>`_,
by Gaëtan Gilbert).
- **Changed:**
:attr:`Template polymorphic <universes(template)>` inductive types are
not implicitly added to the :table:`Keep Equalities` table anymore when
defined. This may change the behavior of equality-related tactics on
such types
(`#17718 <https://github.com/coq/coq/pull/17718>`_,
by Pierre-Marie Pédrot).
- **Changed:**
:opt:`Warnings` and :attr:`warnings` now emit a warning when trying
to enable an unknown warning (there is still no warning when
disabling an unknown warning as this behavior is useful for
compatibility, or when enabling an unknown warning through the
command line `-w` as the warning may be in a yet to be loaded
plugin) (`#17747 <https://github.com/coq/coq/pull/17747>`_, by
Gaëtan Gilbert).
- **Removed:**
the flag `Apply With Renaming` which was deprecated
since 8.15
(`#16909 <https://github.com/coq/coq/pull/16909>`_,
by Pierre-Marie Pédrot).
- **Removed:**
the `Typeclasses Filtered Unification` flag, deprecated
since 8.16
(`#16911 <https://github.com/coq/coq/pull/16911>`_,
by Pierre-Marie Pédrot).
- **Removed:**
:attr:`program` attribute is not accepted anymore with commands
:cmd:`Add Relation`, :cmd:`Add Parametric Relation`, :cmd:`Add
Setoid`, :cmd:`Add Parametric Setoid`, :cmd:`Add Morphism`,
:cmd:`Add Parametric Morphism`, :cmd:`Declare Morphism`. Previously,
it was accepted but ignored
(`#17042 <https://github.com/coq/coq/pull/17042>`_,
by Théo Zimmermann).
- **Removed:**
the `Elaboration StrictProp Cumulativity` and
`Cumulative SProp` flags. These flags became
counterproductive after the introduction of sort variables
in unification
(`#17114 <https://github.com/coq/coq/pull/17114>`_,
fixes `#17108 <https://github.com/coq/coq/issues/17108>`_,
by Pierre-Marie Pédrot).
- **Removed:**
The ``Add LoadPath``, ``Add Rec LoadPath``, ``Add ML Path``, and
``Remove LoadPath`` commands have been removed following deprecation. Users
are encouraged to use the existing mechanisms in ``coq_makefile`` or
``dune`` to configure workspaces of Coq theories
(`#17394 <https://github.com/coq/coq/pull/17394>`_,
by Emilio Jesus Gallego Arias).
- **Deprecated:**
`Export` modifier for :cmd:`Set`. Use attribute :attr:`export` instead
(`#17333 <https://github.com/coq/coq/pull/17333>`_,
by Gaëtan Gilbert).
- **Deprecated:**
the :attr:`nonuniform` attribute,
now subsumed by :attr:`warnings` with "-uniform-inheritance"
(`#17716 <https://github.com/coq/coq/pull/17716>`_,
by Pierre Roux).
- **Deprecated:**
Using :cmd:`Qed` with :cmd:`Let`. End the proof with :cmd:`Defined` and use :attr:`clearbody`
instead to get the same behavior
(`#17544 <https://github.com/coq/coq/pull/17544>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`About` now prints information when a constant or inductive is syntactically equal to another through module aliasing
(`#16796 <https://github.com/coq/coq/pull/16796>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Final Obligation` command
(`#16817 <https://github.com/coq/coq/pull/16817>`_,
by Gaëtan Gilbert).
- **Added:**
The :attr:`deprecated` attribute is now supported for definition-like constructions
(`#16890 <https://github.com/coq/coq/pull/16890>`_,
fixes `#12266 <https://github.com/coq/coq/issues/12266>`_,
by Maxime Dénès and Gaëtan Gilbert).
- **Added:**
attributes :attr:`warnings` and alias :attr:`warning` to set warnings locally for a command
(`#16902 <https://github.com/coq/coq/pull/16902>`_,
fixes `#15893 <https://github.com/coq/coq/issues/15893>`_,
by Gaëtan Gilbert).
- **Added:**
flag :flag:`Printing Unfolded Projection As Match` (off by default) to be able to distinguish unfolded and folded primitive projections
(`#16994 <https://github.com/coq/coq/pull/16994>`_,
by Gaëtan Gilbert).
- **Added:**
option `-time-file`, like `time` but outputting to a file
(`#17430 <https://github.com/coq/coq/pull/17430>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Validate Proof` runs the type checker on the current proof,
complementary with :cmd:`Guarded` which runs the guard checker
(`#17467 <https://github.com/coq/coq/pull/17467>`_,
by Gaëtan Gilbert).
- **Added:**
:attr:`clearbody` for :cmd:`Let` to clear the body of a let-in in an interactive
proof without kernel enforcement. (This is the behavior that was previously
provided by using :cmd:`Qed`, which is now deprecated for `Let`\s.)
(`#17544 <https://github.com/coq/coq/pull/17544>`_,
by Gaëtan Gilbert).
- **Added:**
option `-time-file`, like `time` but outputting to a file
(`#17430 <https://github.com/coq/coq/pull/17430>`_,
by Gaëtan Gilbert).
- **Fixed:**
universe monomorphic inductives and records do not ignore :flag:`Universe Minimization ToSet`
(`#17285 <https://github.com/coq/coq/pull/17285>`_,
fixes `#13927 <https://github.com/coq/coq/issues/13927>`_,
by Gaëtan Gilbert).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
Do not pass the ``-rectypes`` flag by default in
``coq_makefile`` when compiling OCaml code, since
it is no longer required by Coq. To re-enable passing
the flag, put ``CAMLFLAGS+=-rectypes`` in the local makefile,
e.g., ``CoqMakefile.local`` (see :ref:`rocqmakefilelocal`)
(`#17038 <https://github.com/coq/coq/pull/17038>`_,
by Karl Palmskog with help from Gaëtan Gilbert).
- **Changed:**
disable inclusion of variable binders in coqdoc indexes by default,
and provide a new coqdoc option `--binder-index` for including them
(`#17045 <https://github.com/coq/coq/pull/17045>`_,
fixes `#13155 <https://github.com/coq/coq/issues/13155>`_,
by Karl Palmskog).
- **Added:**
`coqdoc` handles multiple links to the same source. For
example when declaring an inductive type `t` all occurences
of `t` itself and its elimination principles like `t_ind`
point to its declaration
(`#17118 <https://github.com/coq/coq/pull/17118>`_,
by Enrico Tassi).
- **Added:**
Command line options :n:`-require lib` (replacing
:n:`-load-vernac-object lib`) and :n:`-require-from root lib`
respectively equivalent to vernacular commands :n:`Require lib` and
:n:`From root Require lib`
(`#17364 <https://github.com/coq/coq/pull/17364>`_, by Hugo Herbelin).
- **Added:**
`coqtimelog2html` command-line tool used to render the timing files produced with `-time`
(which is passed by `coq_makefile` when environment variable `TIMING` is defined)
(`#17411 <https://github.com/coq/coq/pull/17411>`_,
by Gaëtan Gilbert).
- **Fixed:**
`coq_makefile` avoids generating a command containing all files to install in a make rule,
which could surpass the maximum single argument size in some developments
(`#17697 <https://github.com/coq/coq/pull/17697>`_,
fixes `#17721 <https://github.com/coq/coq/issues/17721>`_,
by Gaëtan Gilbert).
CoqIDE
^^^^^^
- **Changed:**
XML Protocol now sends (and expects) full Coq locations, including
line and column information. This makes some IDE operations (such as
UTF-8 decoding) more efficient. Clients of the XML protocol can just
ignore the new fields if they are not useful for them
(`#17382 <https://github.com/coq/coq/pull/17382>`_,
fixes `#17023 <https://github.com/coq/coq/issues/17023>`_,
by Emilio Jesus Gallego Arias).
Standard library
^^^^^^^^^^^^^^^^
- **Changed:**
implementation of :g:`Vector.nth` to follow OCaml and compute strict subterms
(`#16731 <https://github.com/coq/coq/pull/16731>`_,
fixes `#16738 <https://github.com/coq/coq/issues/16738>`_,
by Andrej Dudenhefner).
- **Changed:**
drop the unnecessary second assumption :g:`NoDup l'` from :g:`set_diff_nodup` in ``ListSet.v``,
with `-compat 8.17` providing the old version of :g:`set_diff_nodup` for compatibility
(`#16926 <https://github.com/coq/coq/pull/16926>`_,
by Karl Palmskog with help from Traian Florin Şerbănuţă and Andres Erbsen).
- **Changed:** Moved instances from :g:`DecidableClass` to files that prove
the relevant decidability facts: :g:`Bool`, :g:`PeanoNat`, and :g:`BinInt`
(`#17021 <https://github.com/coq/coq/pull/17021>`_,
by Andres Erbsen).
- **Changed:** `Hint Extern` `btauto.Algebra.bool` locality from :attr:`global` to :attr:`export`
(`#17281 <https://github.com/coq/coq/pull/17281>`_,
by Andres Erbsen).
- **Changed:**
:g:`xorb` to a simpler definition
(`#17427 <https://github.com/coq/coq/pull/17427>`_,
by Guillaume Melquiond).
- **Changed** lemmas in `Reals/RIneq.v`
- :g:`completeness_weak` renamed as :g:`upper_bound_thm`,
- :g:`le_epsilon` renamed as :g:`Rle_epsilon`,
- :g:`Rplus_eq_R0` renamed as :g:`Rplus_eq_0`,
- :g:`Req_EM_T` renamed as :g:`Req_dec_T`,
- :g:`Rinv_r_simpl_m` renamed as :g:`Rmult_inv_r_id_m`,
- :g:`Rinv_r_simpl_l` renamed as :g:`Rmult_inv_r_id_l`,
- :g:`Rinv_r_simpl_r` renamed as :g:`Rmult_inv_m_id_r`,
- :g:`tech_Rgt_minus` renamed as :g:`Rgt_minus_pos`,
- :g:`tech_Rplus` renamed as :g:`Rplus_le_lt_0_neq_0`,
- :g:`IZR_POS_xI` modified with `2` instead of `1 + 1`,
- :g:`IZR_POS_xO` modified with `2` instead of `1 + 1`,
- :g:`Rge_refl` modified with `>=` instead of `<=`
(`#17036 <https://github.com/coq/coq/pull/17036>`_,
by Pierre Rousselin, reviewer Laurent Théry).
- **Removed:**
:g:`Datatypes.prod_curry`, :g:`Datatypes.prod_uncurry`, :g:`Datatypes.prodT_curry`, :g:`Datatypes.prodT_uncurry`, :g:`Combinators.prod_curry_uncurry`, :g:`Combinators.prod_uncurry_curry`,
:g:`Bool.leb`, :g:`Bool.leb_implb`,
:g:`List.skipn_none`,
:g:`Zdiv.Z_div_mod_eq`, :g:`Zdiv.div_Zdiv`, :g:`Zdiv.mod_Zmod`,
:g:`FloatOps.frexp`, :g:`FloatOps.ldexp`, :g:`FloatLemmas.frexp_spec`, :g:`FloatLemmas.ldexp_spec`,
:g:`RList.Rlist`, :g:`Rlist.cons`, :g:`Rlist.nil`, :g:`RList.Rlength`,
:g:`Rtrigo_calc.cos3PI4`, :g:`Rtrigo_calc.sin3PI4`,
:g:`MSetRBT.filter_app`
after deprecation for at least two Coq versions
(`#16920 <https://github.com/coq/coq/pull/16920>`_,
by Olivier Laurent).
- **Deprecated:**
:g:`List.app_nil_end`, :g:`List.app_assoc_reverse`, :g:`List.ass_app`, :g:`List.app_ass`
(`#16920 <https://github.com/coq/coq/pull/16920>`_,
by Olivier Laurent).
- **Deprecated:**
`Coq.Lists.List.Forall2_refl` (`Coq.Lists.List.Forall2_nil` has the same type)
(`#17646 <https://github.com/coq/coq/pull/17646>`_,
by Gaëtan Gilbert).
- **Deprecated:** :g:`ZArith.Zdigits` in favor of :g:`Z.testbit`. If you are
aware of a use case of this module and would be interested in a drop-in
replacement, please comment on the PR with information about the context that
would benefit from such functinality
(`#17733 <https://github.com/coq/coq/pull/17733>`_,
by Andres Erbsen).
- **Deprecated:** Deprecation warnings are now generated for
:g:`Numbers.Cyclic.Int31.Cyclic31`, :g:`NNumbers.Cyclic.Int31.Int31`, and
:g:`NNumbers.Cyclic.Int31.Ring31`. These modules have been deprecated since
Coq 8.10. The modules under :g:`Numbers.Cyclic.Int63` remain available
(`#17734 <https://github.com/coq/coq/pull/17734>`_,
by Andres Erbsen).
- **Deprecated**
lemmas in `Reals/RIneq.v`
:g:`inser_trans_R`,
:g:`IZR_neq`,
:g:`double`,
:g:`double_var`,
:g:`Rinv_mult_simpl`,
:g:`Rle_Rinv`,
:g:`Rlt_Rminus`,
:g:`Rminus_eq_0`,
:g:`Rminus_gt_0_lt`,
:g:`Ropp_div`,
:g:`Ropp_minus_distr'`,
:g:`Rplus_sqr_eq_0_l`,
:g:`sum_inequa_Rle_lt_depr`,
:g:`S_O_plus_INR_depr`,
:g:`single_z_r_R1_depr`,
:g:`tech_single_z_r_R1_depr`,
(`#17036 <https://github.com/coq/coq/pull/17036>`_,
by Pierre Rousselin, reviewer Laurent Théry).
- **Added:**
lemmas :g:`L_inj`, :g:`R_inj`, :g:`L_R_neq`, :g:`case_L_R`, :g:`case_L_R'` to ``Fin.v``,
and :g:`nil_spec`, :g:`nth_append_L`, :g:`nth_append_R`, :g:`In_nth`, :g:`nth_replace_eq`, :g:`nth_replace_neq`,
:g:`replace_append_L`, :g:`replace_append_R`, :g:`append_const`, :g:`map_append`, :g:`map2_ext`, :g:`append_inj`,
:g:`In_cons_iff`, :g:`Forall_cons_iff`, :g:`Forall_map`, :g:`Forall_append`, :g:`Forall_nth`, :g:`Forall2_nth`, :g:`Forall2_append`,
:g:`map_shiftin`, :g:`fold_right_shiftin`, :g:`In_shiftin`, :g:`Forall_shiftin`, :g:`rev_nil`, :g:`rev_cons`, :g:`rev_shiftin`,
:g:`rev_rev`, :g:`map_rev`, :g:`fold_left_rev_right`, :g:`In_rev`, :g:`Forall_rev` to ``VectorSpec.v``
(`#16765 <https://github.com/coq/coq/pull/16765>`_,
closes `#6459 <https://github.com/coq/coq/issues/6459>`_,
by Andrej Dudenhefner).
- **Added:**
lemmas :g:`iter_swap_gen`, :g:`iter_swap`, :g:`iter_succ`, :g:`iter_succ_r`,
:g:`iter_add`, :g:`iter_ind`, :g:`iter_rect`, :g:`iter_invariant` for `Nat.iter`
(`#17013 <https://github.com/coq/coq/pull/17013>`_,
by Stefan Haan with help from Jason Gross).
- **Added:** module :g:`Zbitwise` with basic relationships between bitwise and
arithmetic operations on integers
(`#17022 <https://github.com/coq/coq/pull/17022>`_,
by Andres Erbsen).
- **Added:**
lemmas :g:`forallb_filter`, :g:`forallb_filter_id`, :g:`partition_as_filter`,
:g:`filter_length`, :g:`filter_length_le` and :g:`filter_length_forallb`
(`#17027 <https://github.com/coq/coq/pull/17027>`_,
by Stefan Haan with help from Olivier Laurent and Andres Erbsen).
- **Added:**
lemmas in `Reals/RIneq.v`:
:g:`eq_IZR_contrapositive`,
:g:`INR_0`,
:g:`INR_1`,
:g:`INR_archimed`,
:g:`INR_unbounded`,
:g:`IPR_2_xH`,
:g:`IPR_2_xI`,
:g:`IPR_2_xO`,
:g:`IPR_eq`,
:g:`IPR_ge_1`,
:g:`IPR_gt_0`,
:g:`IPR_IPR_2`,
:g:`IPR_le`,
:g:`IPR_lt`,
:g:`IPR_not_1`,
:g:`IPR_xH`,
:g:`IPR_xI`,
:g:`IPR_xO`,
:g:`le_IPR`,
:g:`lt_1_IPR`,
:g:`lt_IPR`,
:g:`minus_IPR`,
:g:`mult_IPR`,
:g:`not_1_IPR`,
:g:`not_IPR`,
:g:`plus_IPR`,
:g:`pow_IPR`,
:g:`Rdiv_0_l`,
:g:`Rdiv_0_r`,
:g:`Rdiv_1_l`,
:g:`Rdiv_1_r`,
:g:`Rdiv_def`,
:g:`Rdiv_diag_eq`,
:g:`Rdiv_diag`,
:g:`Rdiv_diag_uniq`,
:g:`Rdiv_eq_compat_l`,
:g:`Rdiv_eq_compat_r`,
:g:`Rdiv_eq_reg_l`,
:g:`Rdiv_eq_reg_r`,
:g:`Rdiv_mult_distr`,
:g:`Rdiv_mult_l_l`,
:g:`Rdiv_mult_l_r`,
:g:`Rdiv_mult_r_l`,
:g:`Rdiv_mult_r_r`,
:g:`Rdiv_neg_neg`,
:g:`Rdiv_neg_pos`,
:g:`Rdiv_opp_l`,
:g:`Rdiv_pos_cases`,
:g:`Rdiv_pos_neg`,
:g:`Rdiv_pos_pos`,
:g:`Rexists_between`,
:g:`Rge_gt_or_eq_dec`,
:g:`Rge_gt_or_eq`,
:g:`Rge_lt_dec`,
:g:`Rge_lt_dec`,
:g:`Rgt_le_dec`,
:g:`Rgt_minus_pos`,
:g:`Rgt_or_le`,
:g:`Rgt_or_not_gt`,
:g:`Rinv_0_lt_contravar`,
:g:`Rinv_eq_compat`,
:g:`Rinv_eq_reg`,
:g:`Rinv_lt_0_contravar`,
:g:`Rinv_neg`,
:g:`Rinv_pos`,
:g:`Rle_gt_dec`,
:g:`Rle_half_plus`,
:g:`Rle_lt_or_eq`,
:g:`Rle_or_gt`,
:g:`Rle_or_not_le`,
:g:`Rlt_0_2`,
:g:`Rlt_0_minus`,
:g:`Rlt_ge_dec`,
:g:`Rlt_half_plus`,
:g:`Rlt_minus_0`,
:g:`Rlt_or_ge`,
:g:`Rlt_or_not_lt`,
:g:`Rminus_def`,
:g:`Rminus_diag`,
:g:`Rminus_eq_compat_l`,
:g:`Rminus_eq_compat_r`,
:g:`Rminus_plus_distr`,
:g:`Rminus_plus_l_l`,
:g:`Rminus_plus_l_r`,
:g:`Rminus_plus_r_l`,
:g:`Rminus_plus_r_r`,
:g:`Rmult_div_assoc`,
:g:`Rmult_div_l`,
:g:`Rmult_div_r`,
:g:`Rmult_div_swap`,
:g:`Rmult_gt_reg_r`,
:g:`Rmult_inv_l`,
:g:`Rmult_inv_m_id_r`,
:g:`Rmult_inv_r`,
:g:`Rmult_inv_r_id_l`,
:g:`Rmult_inv_r_id_m`,
:g:`Rmult_inv_r_uniq`,
:g:`Rmult_neg_cases`,
:g:`Rmult_neg_neg`,
:g:`Rmult_neg_pos`,
:g:`Rmult_pos_cases`,
:g:`Rmult_pos_neg`,
:g:`Rmult_pos_pos`,
:g:`Ropp_div_distr_l`,
:g:`Ropp_eq_reg`,
:g:`Ropp_neg`,
:g:`Ropp_pos`,
:g:`Rplus_0_l_uniq`,
:g:`Rplus_eq_0`,
:g:`Rplus_ge_reg_r`,
:g:`Rplus_gt_reg_r`,
:g:`Rplus_minus_assoc`,
:g:`Rplus_minus_l`,
:g:`Rplus_minus_r`,
:g:`Rplus_minus_swap`,
:g:`Rplus_neg_lt`,
:g:`Rplus_neg_neg`,
:g:`Rplus_neg_npos`,
:g:`Rplus_nneg_ge`,
:g:`Rplus_nneg_nneg`,
:g:`Rplus_nneg_pos`,
:g:`Rplus_npos_le`,
:g:`Rplus_npos_neg`,
:g:`Rplus_npos_npos`,
:g:`Rplus_pos_gt`,
:g:`Rplus_pos_nneg`,
:g:`Rplus_pos_pos`,
:g:`Rsqr_def`
lemmas in `Reals/R_Ifp.v`:
:g:`Int_part_spec`,
:g:`Rplus_Int_part_frac_part`,
:g:`Int_part_frac_part_spec`
(`#17036 <https://github.com/coq/coq/pull/17036>`_,
by Pierre Rousselin, reviewer Laurent Théry).
- **Added:** lemmas :g:`concat_length`, :g:`flat_map_length`,
:g:`flat_map_constant_length`, :g:`list_power_length` to `Lists.List`
(`#17082 <https://github.com/coq/coq/pull/17082>`_,
by Stefan Haan with help from Olivier Laurent).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Sphinx 4.5.0 or above is now required to build the reference manual, so now /
can be used as a quick search shortcut and Esc as a shortcut to remove search
highlighting
(`#17772 <https://github.com/coq/coq/pull/17772>`_,
fixes `#15778 <https://github.com/coq/coq/issues/15778>`_,
by Ana Borges).
Extraction
^^^^^^^^^^
- **Fixed:**
Anomaly when extracting within a module or module type
(`#17344 <https://github.com/coq/coq/pull/17344>`_,
fixes `#10739 <https://github.com/coq/coq/issues/10739>`_,
by Hugo Herbelin).
Version 8.17
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.17 integrates a soundness fix to the Coq kernel along
with a few new features and a host of improvements to the Ltac2 language
and libraries. We highlight some of the most impactful changes here:
- :ref:`Fixed <817VmCompute>` a logical inconsistency due to :tacn:`vm_compute` in
presence of side-effects in the enviroment (e.g. using `Back` or `Fail`).
- It is now possible to dynamically :ref:`enable or disable <817Notations>` notations.
- Support :ref:`multiple scopes <817Scopes>` in :cmd:`Arguments` and :cmd:`Bind Scope`.
- The tactics chapter of the manual has :ref:`many improvements <817TacticsRefman>`
in presentation and wording. The documented grammar is semi-automatically checked
for consistency with the implementation.
- :ref:`Fixes <817Eauto>` to the :tacn:`auto` and :tacn:`eauto` tactics, to respect hint priorities and the documented use
of :tacn:`simple apply`. This is a potentially breaking change.
- :ref:`New Ltac2 <817Ltac2>` APIs, deep pattern-matching with ``as`` clauses and handling of literals,
support for record types and preterms.
- :ref:`Move <817ClassFieldSyntax>` from :g:`:>` to :g:`::` syntax for declaring typeclass fields as instances, fixing
a confusion with declaration of coercions.
- :ref:`Standard library <817Stdlib>` improvements.
- While Coq supports OCaml 5, users are likely to experience slowdowns ranging from +10% to +50% compared to OCaml 4.
Moreover, the :tacn:`native_compute` machinery is not available when Coq is compiled with OCaml 5.
Therefore, OCaml 5 support should still be considered experimental and not production-ready.
See the `Changes in 8.17.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Coq's `reference manual for 8.17 <https://coq.github.io/doc/v8.17/refman>`_,
`documentation of the 8.17 standard library <https://coq.github.io/doc/v8.17/stdlib>`_
and `developer documentation of the 8.17 ML API <https://coq.github.io/doc/v8.17/api>`_
are also available.
Ali Caglayan, Emilio Jesús Gallego Arias, Gaëtan Gilbert
and Théo Zimmermann worked on maintaining and improving the
continuous integration system and package building infrastructure.
Erik Martin-Dorel has maintained the `Coq Docker images
<https://hub.docker.com/r/coqorg/coq>`_ that are used in many Coq
projects for continuous integration.
Maxime Dénès, Paolo G. Giarrusso, Huỳnh Trần Khanh, and Laurent Théry have
maintained the VsCoq extension for VS Code.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Karl Palmskog, Matthieu Sozeau and Enrico Tassi with
contributions from many users. A list of packages is available at
https://coq.inria.fr/opam/www/.
The `Coq Platform <https://github.com/coq/platform>`_ has been maintained
by Michael Soegtrop, with help from Karl Palmskog, Pierre Roux, Enrico Tassi and
Théo Zimmermann.
Our current maintainers are Yves Bertot, Frédéric Besson, Ana Borges,
Ali Caglayan, Tej Chajed, Cyril Cohen, Pierre Corbineau, Pierre Courtieu, Maxime Dénès,
Andres Erbsen, Jim Fehrle, Julien Forest, Emilio Jesús Gallego Arias, Gaëtan Gilbert,
Georges Gonthier, Benjamin Grégoire, Jason Gross, Hugo Herbelin,
Vincent Laporte, Olivier Laurent, Assia Mahboubi, Kenji Maillard,
Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel, Pierre Roux,
Kazuhiko Sakaguchi, Vincent Semeria, Michael Soegtrop, Arnaud Spiwack,
Matthieu Sozeau, Enrico Tassi, Laurent Théry, Anton Trunov, Li-yao Xia
and Théo Zimmermann. See the `Coq Team face book <https://coq.inria.fr/coq-team.html>`_
page for more details.
The 45 contributors to the 8.17 version are:
Reynald Affeldt, Tanaka Akira, Lasse Blaauwbroek, Stephan Boyer, Ali Caglayan, Cyril Cohen, Maxime Dénès, Andrej Dudenhefner, Andres Erbsen, František Farka, Jim Fehrle, Paolo G. Giarrusso, Gaëtan Gilbert, Jason Gross, Alban Gruin, Stefan Haan, Hugo Herbelin, Wolf Honore, Bodo Igler, Jerry James, Emilio Jesús Gallego Arias, Ralf Jung, Jan-Oliver Kaiser, Wojciech Karpiel, Chantal Keller, Thomas Klausner, Olivier Laurent, Yishuai Li, Guillaume Melquiond, Karl Palmskog, Sudha Parimala, Pierre-Marie Pédrot, Valentin Robert, Pierre Roux, Julin S, Dmitry Shachnev, Michael Soegtrop, Matthieu Sozeau, Naveen Srinivasan, Sergei Stepanenko, Karolina Surma, Enrico Tassi, Li-yao Xia
and Théo Zimmermann.
The Coq community at large helped improve this new version via
the GitHub issue and pull request system, the coq-club@inria.fr mailing list,
the `Discourse forum <https://coq.discourse.group/>`_ and the
`Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.17's development spanned 5 months from the release of
Coq 8.16.0. Théo Zimmermann is the release manager of Coq 8.17.
This release is the result of 414 merged PRs, closing 105 issues.
| Nantes, February 2023,
| Matthieu Sozeau for the Coq development team
Changes in 8.17.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
.. _817VmCompute:
- **Fixed:**
inconsistency linked to :tacn:`vm_compute`. The fix removes a vulnerable cache, thus it may result in slowdowns when :tacn:`vm_compute` is used repeatedly, if you encounter such slowdowns please report your use case
(`#16958 <https://github.com/coq/coq/pull/16958>`_,
fixes `#16957 <https://github.com/coq/coq/issues/16957>`_,
by Gaëtan Gilbert).
- **Fixed:**
Unexpected anomaly when checking termination of fixpoints
containing :g:`match` expressions with inaccessible branches
(`#17116 <https://github.com/coq/coq/pull/17116>`_,
fixes `#17073 <https://github.com/coq/coq/issues/17073>`_,
by Hugo Herbelin).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
:warn:`Unused variable <Unused variable ‘ident’ might be a misspelled constructor. Use _ or _‘ident’ to silence this warning.>` warning
triggers even when catching a single case. This warning used to be
triggered only when the unused variable was catching at least
two cases (`#16135 <https://github.com/coq/coq/pull/16135>`_,
by Pierre Roux).
- **Fixed:**
Pattern-matching clauses were possibly lost when matching over a
constructor from a singleton inductive type in the presence of
implicit coercions (`#17138 <https://github.com/coq/coq/pull/17138>`_,
fixes `#17137 <https://github.com/coq/coq/issues/17137>`_, by Hugo
Herbelin).
- **Fixed:**
Possible anomaly when using syntax :g:`term.(proj)` with projections defined in sections
(`#17174 <https://github.com/coq/coq/pull/17174>`_,
fixes `#17173 <https://github.com/coq/coq/issues/17173>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
- **Changed:**
When multiple tokens match the beginning of a sequence of characters,
the longest matching token not cutting a subsequence of contiguous
letters in the middle is used. Previously, this was only the longest
matching token. See :ref:`lexical conventions <lexing-unseparated-keywords>`
for details and examples
(`#16322 <https://github.com/coq/coq/pull/16322>`_,
fixes `#4712 <https://github.com/coq/coq/issues/4712>`_,
by Hugo Herbelin).
.. _817Notations:
- **Added:**
:cmd:`Enable Notation` and :cmd:`Disable Notation` commands
to enable or disable previously defined notations
(`#12324 <https://github.com/coq/coq/pull/12324>`_ and `#16945 <https://github.com/coq/coq/pull/16945>`_,
by Hugo Herbelin and Pierre Roux, extending previous work by Lionel Rieg,
review by Jim Fehrle).
.. _817Scopes:
- **Added:**
Support for multiple scopes in the :cmd:`Arguments` command
(`#16472 <https://github.com/coq/coq/pull/16472>`_,
by Pierre Roux, review by Jim Fehrle, Hugo Herbelin and Enrico Tassi).
- **Added:**
Attributes :attr:`add_top` and :attr:`add_bottom` to bind
multiple scopes through the :cmd:`Bind Scope` command
(`#16472 <https://github.com/coq/coq/pull/16472>`_,
by Pierre Roux, review by Jim Fehrle, Hugo Herbelin and Enrico Tassi).
Tactics
^^^^^^^
.. _817TacticsRefman:
- **Changed:**
Documentation in the tactics chapter to give the current correct syntax,
consolidate tactic variants for each tactic into a single,
unified description for each tactic and many wording improvements.
With this change, following similar changes to other chapters
in previous releases, the correctness of documented syntax is
assured by semi-automated tooling in all chapters except SSReflect
(`#15015 <https://github.com/coq/coq/pull/15015>`_,
`#16498 <https://github.com/coq/coq/pull/16498>`_, and
`#16659 <https://github.com/coq/coq/pull/16659>`_,
by Jim Fehrle, reviewed by Théo Zimmermann, with help from many others).
.. _817Eauto:
- **Changed:**
:tacn:`eauto` respects priorities of :cmd:`Extern <Hint Extern>` hints
(`#16289 <https://github.com/coq/coq/pull/16289>`_,
fixes `#5163 <https://github.com/coq/coq/issues/5163>`_
and `#16282 <https://github.com/coq/coq/issues/16282>`_,
by Andrej Dudenhefner).
.. warning:: Code that relies on eager evaluation of :cmd:`Extern <Hint Extern>` hints
with high assigned cost by :tacn:`eauto` will change its performance
profile or potentially break.
To approximate prior behavior, set to zero the cost of :cmd:`Extern <Hint Extern>` hints,
which may solve the goal in one step.
- **Changed:**
less discrepancies between :tacn:`auto` hint evaluation and :tacn:`simple apply`, :tacn:`exact` tactics
(`#16293 <https://github.com/coq/coq/pull/16293>`_,
fixes `#16062 <https://github.com/coq/coq/issues/16062>`_
and `#16323 <https://github.com/coq/coq/issues/16323>`_,
by Andrej Dudenhefner).
.. warning:: :tacn:`auto` may solve more goals.
As a result, non-monotone use of :tacn:`auto` such as :g:`tac1; auto. tac2.` may break.
For backwards compatibility use explicit goal management.
- **Removed:** `absurd_hyp` tactic, that was marked as obsolete 15
years ago. Use :tacn:`contradict` instead (`#16670
<https://github.com/coq/coq/pull/16670>`_, by Théo Zimmermann).
- **Removed:**
the undocumented `progress_evars` tactical
(`#16843 <https://github.com/coq/coq/pull/16842>`_,
by Théo Zimmermann).
- **Deprecated:** the default ``intuition_solver`` (see
:tacn:`intuition`) now outputs warning ``intuition-auto-with-star``
if it solves a goal with ``auto with *`` that was not solved with
just :tacn:`auto`. In a future version it will be changed to just
:tacn:`auto`. Use ``intuition tac`` locally or ``Ltac
Tauto.intuition_solver ::= tac`` globally to silence the warning in
a forward-compatible way with your choice of tactic ``tac``
(``auto``, ``auto with *``, ``auto with`` your prefered databases,
or any other tactic) (`#16026
<https://github.com/coq/coq/pull/16026>`_, by Gaëtan Gilbert).
- **Deprecated:**
`>` clear modifier that could be used in some tactics like
:tacn:`apply` and :tacn:`rewrite` but was never documented.
Open an issue if you actually depend on this feature
(`#16407 <https://github.com/coq/coq/pull/16407>`_,
by Théo Zimmermann).
- **Fixed:**
:tacn:`auto` now properly updates local hypotheses after hint application
(`#16302 <https://github.com/coq/coq/pull/16302>`_,
fixes `#15814 <https://github.com/coq/coq/issues/15814>`_
and `#6332 <https://github.com/coq/coq/issues/6332>`_,
by Andrej Dudenhefner).
- **Fixed:**
Make the behavior of :tacn:`destruct ... using ... <destruct>` more powerful and more similar to :tacn:`destruct ... <destruct>`
(`#16605 <https://github.com/coq/coq/pull/16605>`_,
by Lasse Blaauwbroek).
- **Fixed:**
typeclass inference sometimes caused remaining holes to fail to be detected
(`#16743 <https://github.com/coq/coq/pull/16743>`_,
fixes `#5239 <https://github.com/coq/coq/issues/5239>`_,
by Gaëtan Gilbert).
Ltac language
^^^^^^^^^^^^^
- **Changed:**
:cmd:`Ltac` redefinitions (with ``::=``) now respect :attr:`local`
(`#16106 <https://github.com/coq/coq/pull/16106>`_,
by Gaëtan Gilbert).
- **Changed:**
In :tacn:`match goal`, ``match goal with hyp := body : typ |- _``
is syntax sugar for ``match goal with hyp := [ body ] : typ |- _``
i.e. it matches ``typ`` with the type of the hypothesis
rather than matching the body as a cast term.
This transformation used to be done with any kind of cast (e.g. VM cast ``<:``)
and is now done only for default casts ``:``
(`#16764 <https://github.com/coq/coq/pull/16764>`_,
by Gaëtan Gilbert).
.. _817Ltac2:
Ltac2 language
^^^^^^^^^^^^^^
- **Changed:**
``Ltac2.Bool`` notations are now in a module ``Ltac2.Bool.BoolNotations``
(exported by default), so that these notations can be imported separately
(`#16536 <https://github.com/coq/coq/pull/16536>`_,
by Jason Gross).
- **Changed:**
``Constr.in_context`` enforces that the ``constr`` passed to it is a type
(`#16547 <https://github.com/coq/coq/pull/16547>`_,
fixes `#16540 <https://github.com/coq/coq/issues/16540>`_,
by Gaëtan Gilbert).
- **Changed:**
goal matching functions from ``Ltac2.Pattern`` (``matches_goal``, ``lazy_goal_match0``, ``multi_goal_match0`` and ``one_goal_match0``) have changed types to support matching hypothesis bodies
(`#16655 <https://github.com/coq/coq/pull/16655>`_,
by Gaëtan Gilbert).
- **Added:**
Deep :ref:`pattern matching <ltac2_match_on_values>` for Ltac2
(`#16023 <https://github.com/coq/coq/pull/16023>`_,
by Gaëtan Gilbert).
- **Added:**
patterns for Ltac2 matches: ``as``, records and literal integers and strings
(`#16179 <https://github.com/coq/coq/pull/16179>`_,
by Gaëtan Gilbert).
- **Added:**
APIs for working with strings: `Message.to_string`, `String.concat`, `cat`, `equal`, `compare`, `is_empty`
(`#16217 <https://github.com/coq/coq/pull/16217>`_,
by Gaëtan Gilbert).
- **Added:**
``Ltac2.Constr.Unsafe.liftn``
(`#16413 <https://github.com/coq/coq/pull/16413>`_,
by Jason Gross).
- **Added:**
``Ltac2.Constr.Unsafe.closedn``,
``Ltac2.Constr.Unsafe.is_closed``,
``Ltac2.Constr.Unsafe.occur_between``,
``Ltac2.Constr.Unsafe.occurn`` (`#16414
<https://github.com/coq/coq/pull/16414>`_, by Jason Gross).
- **Added:**
`Ltac2.List.equal`
(`#16429 <https://github.com/coq/coq/pull/16429>`_,
by Jason Gross).
- **Added:**
:cmd:`Print Ltac2`, :cmd:`Print Ltac2 Signatures` and :cmd:`Locate` can now find Ltac2 definitions
(`#16466 <https://github.com/coq/coq/pull/16466>`_,
fixes `#16418 <https://github.com/coq/coq/issues/16418>`_
and `#16415 <https://github.com/coq/coq/issues/16415>`_,
by Gaëtan Gilbert).
- **Added:**
``Ltac2.Array.for_all2`` and ``Ltac2.Array.equal``
(`#16535 <https://github.com/coq/coq/pull/16535>`_,
by Jason Gross).
- **Added:**
``Ltac2.Constant.equal``, ``Ltac2.Constant.t``, ``Ltac2.Constructor.equal``,
``Ltac2.Constructor.t``, ``Ltac2.Evar.equal``, ``Ltac2.Evar.t``,
``Ltac2.Float.equal``, ``Ltac2.Float.t``, ``Ltac2.Meta.equal``,
``Ltac2.Meta.t``, ``Ltac2.Proj.equal``, ``Ltac2.Proj.t``,
``Ltac2.Uint63.equal``, ``Ltac2.Uint63.t``, ``Ltac2.Char.equal``,
``Ltac2.Char.compare``, ``Ltac2.Constr.Unsafe.Case.equal``
(`#16537 <https://github.com/coq/coq/pull/16537>`_,
by Jason Gross).
- **Added:**
``Ltac2.Option.equal``
(`#16538 <https://github.com/coq/coq/pull/16538>`_,
by Jason Gross).
- **Added:**
syntax for Ltac2 record update ``{ foo with field := bar }``
(`#16552 <https://github.com/coq/coq/pull/16552>`_,
fixes `#10117 <https://github.com/coq/coq/issues/10117>`_,
by Gaëtan Gilbert).
- **Added:**
Ltac2 record expressions support punning, i.e. ``{ foo; M.bar }`` is equivalent to ``{ foo := foo; M.bar := bar }``
(`#16556 <https://github.com/coq/coq/pull/16556>`_,
by Gaëtan Gilbert).
- **Added:**
:tacn:`match! goal` support for matching hypothesis bodies
(`#16655 <https://github.com/coq/coq/pull/16655>`_,
fixes `#12803 <https://github.com/coq/coq/issues/12803>`_,
by Gaëtan Gilbert).
- **Added:**
quotation and syntax class for :ref:`preterms <preterm>`
(`#16740 <https://github.com/coq/coq/pull/16740>`_,
by Gaëtan Gilbert).
SSReflect
^^^^^^^^^
- **Added:**
port the additions made to `ssrfun.v` and `ssrbool.v` in math-comp
`PR #872 <https://github.com/math-comp/math-comp/pull/872>`_
and `PR #874 <https://github.com/math-comp/math-comp/pull/874>`_,
namely definitions `olift` and `pred_oapp` as well as lemmas
`all_sig2_cond`, `compA`, `obindEapp`, `omapEbind`, `omapEapp`,
`omap_comp`, `oapp_comp`, `olift_comp`, `ocan_comp`, `eqbLR`,
`eqbRL`, `can_in_pcan`, `pcan_in_inj`, `in_inj_comp`, `can_in_comp`,
`pcan_in_comp` and `ocan_in_comp`
(`#16158 <https://github.com/coq/coq/pull/16158>`_,
by Pierre Roux).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:** commands which set tactic options (currently
:opt:`Firstorder Solver` and :cmd:`Obligation Tactic`, as well as any
defined by third party plugins) now support :attr:`export` locality.
Note that such commands using :attr:`global` without :attr:`export`
or using no explicit locality outside sections apply their effects
when any module containing it (recursively) is imported. This will
change in a future version. (`#15274
<https://github.com/coq/coq/pull/15274>`_, fixes `#15072
<https://github.com/coq/coq/issues/15072>`_, by Gaëtan Gilbert).
- **Changed:**
`Hint` and :cmd:`Instance` commands with no locality attribute are deprecated.
Previous versions generated a warning, but this version generates an error by
default. This includes all `Hint` commands described in :ref:`creating_hints`,
:cmd:`Hint Rewrite`, and :cmd:`Instance`. As mentioned in the error, please
add an explicit locality to the hint command. The default was
#[:attr:`global`], but we recommend using #[:attr:`export`] where possible
(`#16004 <https://github.com/coq/coq/pull/16004>`_,
fixes `#13394 <https://github.com/coq/coq/issues/13394>`_,
by Ali Caglayan).
- **Changed:**
Transparent obligations generated by :attr:`Program <program>`
do not produce an implicit :cmd:`Hint Unfold` anymore
(`#16340 <https://github.com/coq/coq/pull/16340>`_,
by Pierre-Marie Pédrot).
- **Changed:**
:cmd:`Print Typeclasses` replaces the undocumented `Print TypeClasses` command
which displays the list of typeclasses
(`#16690 <https://github.com/coq/coq/pull/16690>`_,
fixes `#16686 <https://github.com/coq/coq/issues/16686>`_,
by Ali Caglayan).
- **Changed:**
The -async-proofs-tac-j command line option now accepts
the argument 0, which makes `par` block interpreted
without spawning any new process
(`#16837 <https://github.com/coq/coq/pull/16837>`_,
by Pierre-Marie Pédrot).
- **Removed:**
the ``Program Naming`` flag, which was introduced as an
immediately deprecated option in Coq 8.16
(`#16519 <https://github.com/coq/coq/pull/16519>`_,
by Pierre-Marie Pédrot).
- **Removed:**
undocumented and broken `Solve Obligation` command
(the :cmd:`Solve Obligations` command is untouched)
(`#16842 <https://github.com/coq/coq/pull/16842>`_,
by Théo Zimmermann).
.. _817ClassFieldSyntax:
- **Deprecated**
:g:`:>` syntax, to declare fields of :ref:`typeclasses` as instances,
since it is now replaced by :g:`::` (see :n:`@of_type_inst`).
This will allow, in a future release, making :g:`:>` declare :ref:`coercions`
as it does in :ref:`record <records>` definitions
(`#16230 <https://github.com/coq/coq/pull/16230>`_,
fixes `#16224 <https://github.com/coq/coq/issues/16224>`_,
by Pierre Roux, reviewed by Ali Caglayan, Jim Fehrle, Gaëtan Gilbert
and Pierre-Marie Pédrot).
- **Added:**
An improved description of :cmd:`Proof using` and section variables
(`#16168 <https://github.com/coq/coq/pull/16168>`_,
by Jim Fehrle).
- **Added:**
:g:`::` syntax (see :n:`@of_type_inst`) to declare fields of records as :ref:`typeclass <typeclasses>` instances
(`#16230 <https://github.com/coq/coq/pull/16230>`_,
fixes `#16224 <https://github.com/coq/coq/issues/16224>`_,
by Pierre Roux, reviewed by Ali Caglayan, Jim Fehrle, Gaëtan Gilbert
and Pierre-Marie Pédrot).
- **Added:**
The :cmd:`Print Keywords` command, which prints all the currently-defined parser keywords and tokens
(`#16438 <https://github.com//pull/16438>`_,
fixes `#16375 <https://github.com/coq/coq/issues/16375>`_,
by Gaëtan Gilbert).
- **Added:**
:cmd:`Print Grammar` can print arbitrary nonterminals or the whole grammar instead of a small adhoc list of nonterminals
(`#16440 <https://github.com/coq/coq/pull/16440>`_,
by Gaëtan Gilbert).
- **Fixed:**
:flag:`Fast Name Printing` flag no longer causes
variable name capture when displaying a goal
(`#16395 <https://github.com/coq/coq/pull/16395>`_,
fixes `#14141 <https://github.com/coq/coq/issues/14141>`_,
by Wojciech Karpiel).
- **Fixed:**
:tacn:`vm_compute` ignored the ``bytecode-compiler`` command line flag
(`#16931 <https://github.com/coq/coq/pull/16931>`_,
fixes `#16929 <https://github.com/coq/coq/issues/16929>`_,
by Gaëtan Gilbert).
- **Fixed:**
The :cmd:`Proof Mode` command now gives an error if the
specified proof mode doesn't exist. The command was not
previously documented
(`#16981 <https://github.com/coq/coq/pull/16981>`_,
fixes `#16602 <https://github.com/coq/coq/issues/16602>`_,
by Jim Fehrle).
- **Fixed:**
Backtracking over grammar modifications from plugins (such as added commands)
(`#17069 <https://github.com/coq/coq/pull/17069>`_,
fixes `#12575 <https://github.com/coq/coq/issues/12575>`_,
by Gaëtan Gilbert).
- **Fixed:**
Anomaly instead of regular error on unsupported applied :g:`fix` in :cmd:`Function`
(`#17113 <https://github.com/coq/coq/pull/17113>`_,
fixes `#17110 <https://github.com/coq/coq/issues/17110>`_,
by Hugo Herbelin).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Added:**
New documentation section :ref:`configuration_basics` covering use cases such
as setting up Coq with opam, where/how to set up source code for your projects
and use of _CoqProject
(`#15888 <https://github.com/coq/coq/pull/15888>`_,
by Jim Fehrle).
- **Added:**
In _CoqProject files, expand paths that are directories
to include appropriate files in (sub)directories
(`#16308 <https://github.com/coq/coq/pull/16308>`_,
by Jim Fehrle).
- **Fixed:** issues when using ``coq_makefile`` to build targets
requiring both ``.vo`` and ``.glob`` files (typically documentation
targets), where ``make`` would run multiple ``coqc`` processes on
the same source file with racy behaviour (only fixed when using a
``make`` supporting "grouped targets" such as GNU Make 4.3) (`#16757
<https://github.com/coq/coq/pull/16757>`_, by Gaëtan Gilbert).
- **Fixed:**
Properly process legacy attributes such as ``Global``
and ``Polymorphic`` in coqdoc to avoid omissions
when using the ``-g`` (Gallina only) option
(`#17090 <https://github.com/coq/coq/pull/17090>`_,
fixes `#15933 <https://github.com/coq/coq/issues/15933>`_,
by Karl Palmskog).
.. _817Stdlib:
Standard library
^^^^^^^^^^^^^^^^
- **Changed:**
Class :g:`Saturate` in ``ZifyCLasses.v``, :g:`PRes` now also takes operands
(`#16355 <https://github.com/coq/coq/pull/16355>`_,
by František Farka on behalf of BedRock Systems, Inc.).
- **Changed:**
For uniformity of naming and ease of remembering, `R_dist` and
theorems mentioning `R_dist` in their name become available with spelling `Rdist`
(`#16874 <https://github.com/coq/coq/pull/16874>`_,
by Hugo Herbelin).
- **Removed:**
from :g:`Nat` and :g:`N` superfluous lemmas :g:`rs_rs'`, :g:`rs'_rs''`, :g:`rbase`, :g:`A'A_right`,
:g:`ls_ls'`, :g:`ls'_ls''`, :g:`rs'_rs''`, :g:`lbase`, :g:`A'A_left`, and also
redundant non-negativity assumptions in :g:`gcd_unique`, :g:`gcd_unique_alt`,
:g:`divide_gcd_iff`, and :g:`gcd_mul_diag_l`
(`#16203 <https://github.com/coq/coq/pull/16203>`_,
by Andrej Dudenhefner).
- **Deprecated:**
notation ``_ ~= _`` for ``JMeq`` in
``Coq.Program.Equality`` (`#16436
<https://github.com/coq/coq/pull/16436>`_, by Gaëtan Gilbert).
- **Deprecated:**
lemma :g:`Finite_alt` in ``FinFun.v``, which is a weaker version of
the newly added lemma :g:`Finite_dec`
(`#16489 <https://github.com/coq/coq/pull/16489>`_,
fixes `#16479 <https://github.com/coq/coq/issues/16479>`_,
by Bodo Igler, with help from Olivier Laurent).
- **Deprecated:**
:g:`Zmod`,
:g:`Zdiv_eucl_POS`,
:g:`Zmod_POS_bound`,
:g:`Zmod_pos_bound`,
and :g:`Zmod_neg_bound`
in `ZArith.Zdiv`
(`#16892 <https://github.com/coq/coq/pull/16892>`_,
by Andres Erbsen).
- **Deprecated:** :g:`Cyclic.ZModulo.ZModulo` because there have been no known
use cases for this module and because it does not implement `Z/nZ` for
arbitrary `n` as one might expect based on the name. The same construction
will remain a part of the Coq test suite to ensure consistency of
`CyclicAxioms`
(`#16914 <https://github.com/coq/coq/pull/16914>`_,
by Andres Erbsen).
- **Added:**
lemmas :g:`Permutation_incl_cons_inv_r`, :g:`Permutation_pigeonhole`, :g:`Permutation_pigeonhole_rel` to ``Permutation.v``, and :g:`Forall2_cons_iff`, :g:`Forall2_length`, :g:`Forall2_impl`, :g:`Forall2_flip`, :g:`Forall_Exists_exists_Forall2` to ``List.v``
(`#15986 <https://github.com/coq/coq/pull/15986>`_,
by Andrej Dudenhefner, with help from Dominique Larchey-Wendling and Olivier Laurent).
- **Added:**
modules :g:`Nat.Div0` and :g:`Nat.Lcm0` in :g:`PeanoNat`, and :g:`N.Div0` and :g:`N.Lcm0` in :g:`BinNat`
containing lemmas regarding :g:`div` and :g:`mod`, which take into account `n div 0 = 0` and `n mod 0 = n`.
Strictly weaker lemmas are deprecated, and will be removed in the future.
After the weaker lemmas are removed, the modules :g:`Div0` and :g:`Lcm0` will be deprecated,
and their contents included directly into :g:`Nat` and :g:`N`.
Locally, you can use :g:`Module Nat := Nat.Div0.` or :g:`Module Nat := Nat.Lcm0.` to approximate this inclusion
(`#16203 <https://github.com/coq/coq/pull/16203>`_,
fixes `#16186 <https://github.com/coq/coq/issues/16186>`_,
by Andrej Dudenhefner).
- **Added:**
lemma :g:`measure_induction` in :g:`Nat` and :g:`N` analogous to :g:`Wf_nat.induction_ltof1`,
which is compatible with the `using` clause for the :tacn:`induction` tactic
(`#16203 <https://github.com/coq/coq/pull/16203>`_,
by Andrej Dudenhefner).
- **Added:**
three lemmata related to finiteness and decidability of equality:
:g:`Listing_decidable_eq`, :g:`Finite_dec`
to ``FinFun.v`` and lemma :g:`NoDup_list_decidable` to ``ListDec.v``
(`#16489 <https://github.com/coq/coq/pull/16489>`_,
fixes `#16479 <https://github.com/coq/coq/issues/16479>`_,
by Bodo Igler, with help from Olivier Laurent and Andrej Dudenhefner).
- **Added:**
lemma :g:`not_NoDup` to ``ListDec.v`` and :g:`NoDup_app_remove_l`, :g:`NoDup_app_remove_r` to ``List.v``
(`#16588 <https://github.com/coq/coq/pull/16588>`_,
by Stefan Haan with a lot of help from Olivier Laurent and Ali Caglayan).
- **Added:**
the `skipn_skipn` lemma in `Lists/List.v`
(`#16632 <https://github.com/coq/coq/pull/16632>`_,
by Stephan Boyer).
- **Added:**
lemmas :g:`nth_error_ext`, :g:`map_repeat`, :g:`rev_repeat` to ``List.v``,
and :g:`to_list_nil_iff`, :g:`to_list_inj` to ``VectorSpec.v``
(`#16756 <https://github.com/coq/coq/pull/16756>`_,
by Stefan Haan).
- **Added:** transparent :g:`extgcd` to replace opaque :g:`euclid`,
:g:`euclid_rec`, :g:`Euclid`, and :g:`Euclid_intro` in :g:`Znumtheory`.
Deprecated compatibility wrappers are provided
(`#16915 <https://github.com/coq/coq/pull/16915>`_,
by Andres Erbsen).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Coq is now built entirely using the Dune build system. Packagers and
users that build Coq manually must use the new build
instructions in the documentation
(`#15560 <https://github.com/coq/coq/pull/15560>`_,
by Ali Caglayan, Emilio Jesus Gallego Arias, and Rudi Grinberg).
- **Changed:**
Coq is not compiled with OCaml's ``-rectypes`` option anymore.
This means plugins which do not exploit it can also stop passing it to OCaml
(`#16007 <https://github.com/coq/coq/pull/16007>`_,
by Gaëtan Gilbert).
- **Changed:**
Building Coq now requires Dune >= 2.9
(`#16118 <https://github.com/coq/coq/pull/16118>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
Coq Makefile targets `pretty-timed`, `make-pretty-timed`,
`make-pretty-timed-before`, `make-pretty-timed-after`, `print-pretty-timed`,
`print-pretty-timed-diff`, `print-pretty-single-time-diff` now generate more
readable timing tables when absolute paths are used in `_CoqProject` / the
arguments to `coq_makefile`, by stripping off the absolute prefix
(`#16268 <https://github.com/coq/coq/pull/16268>`_,
by Jason Gross).
- **Changed:**
Coq's configure script now defaults to `-native-compiler no`.
Previously, the default was `-native-compiler ondemand`, except on
Windows. The behavior for users installing through opam does not change,
i.e., it is `-native-compiler no` if the `coq-native` package is not
installed, and `-native-compiler yes` otherwise
(`#16997 <https://github.com/coq/coq/pull/16997>`_,
by Théo Zimmermann).
- **Removed:**
the ``-coqide`` switch to ``configure`` in Coq's build infrastructure
(it stopped controlling what got compiled in the move to dune)
(`#16512 <https://github.com/coq/coq/pull/16512>`_,
by Gaëtan Gilbert).
- **Removed:**
the ``-nomacintegration`` configure flag for CoqIDE.
Now CoqIDE will always build with the proper
platform-specific integration if available
(`#16531 <https://github.com/coq/coq/pull/16531>`_,
by Emilio Jesus Gallego Arias).
- **Added:**
Coq now supports OCaml 5; note that OCaml 5 is not compatible with
Coq's native reduction machine
(`#15494 <https://github.com/coq/coq/pull/15494>`_,
`#16925 <https://github.com/coq/coq/pull/16925>`_,
`#16947 <https://github.com/coq/coq/pull/16947>`_,
`#16959 <https://github.com/coq/coq/pull/16959>`_,
`#16988 <https://github.com/coq/coq/pull/16988>`_,
`#16991 <https://github.com/coq/coq/pull/16991>`_,
`#16996 <https://github.com/coq/coq/pull/16996>`_,
`#16997 <https://github.com/coq/coq/pull/16997>`_,
`#16999 <https://github.com/coq/coq/pull/16999>`_,
`#17010 <https://github.com/coq/coq/pull/17010>`_, and
`#17015 <https://github.com/coq/coq/pull/17015>`_
by Emilio Jesus Gallego Arias, Gaëtan Gilbert, Guillaume Melquiond,
Pierre-Marie Pédrot, and others).
- **Added:**
OCaml 4.14 is now officially supported
(`#15867 <https://github.com/coq/coq/pull/15867>`_,
by Gaëtan Gilbert).
Miscellaneous
^^^^^^^^^^^^^
- **Changed:**
Module names are now added to the loadpath in
alphabetical order for each (sub-)directory.
Previously they were added in the order of
the directory entries (as shown by "ls -U")
(`#16725 <https://github.com/coq/coq/pull/16725>`_,
by Jim Fehrle).
Changes in 8.17.1
~~~~~~~~~~~~~~~~~
A variety of bug fixes and improvements to error messages, including:
- **Fixed:**
in some cases, coqdep emitted incorrect paths for META files which prevented dune builds for plugins from working correctly
(`#17270 <https://github.com/coq/coq/pull/17270>`_,
fixes `#16571 <https://github.com/coq/coq/issues/16571>`_,
by Rodolphe Lepigre).
- **Fixed:**
Shadowing of record fields in extraction to OCaml
(`#17324 <https://github.com/coq/coq/pull/17324>`_,
fixes `#12813 <https://github.com/coq/coq/issues/12813>`_
and `#14843 <https://github.com/coq/coq/issues/14843>`_
and `#16677 <https://github.com/coq/coq/issues/16677>`_,
by Hugo Herbelin).
- **Fixed:**
an impossible to turn off debug message "backtracking and redoing byextend on ..."
(`#17495 <https://github.com/coq/coq/pull/17495>`_,
fixes `#17488 <https://github.com/coq/coq/issues/17488>`_,
by Gaëtan Gilbert).
- **Fixed:**
major memory regression affecting MathComp 2
(`#17743 <https://github.com/coq/coq/pull/17743>`_,
by Enrico Tassi and Pierre Roux).
Version 8.16
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.16 integrates changes to the Coq kernel and performance improvements along
with a few new features. We highlight some of the most impactful changes here:
- The guard checker (see :cmd:`Guarded`) now ensures strong :ref:`normalization <816Normalization>`
under any reduction strategy.
- Irrelevant terms (in the ``SProp`` sort) are now squashed to a dummy
value during :ref:`conversion <816SPropConversion>`, fixing a subject reduction issue and making proof
conversion faster.
- Introduction of :ref:`reversible coercions <816ReversibleCoercions>`, which
allow coercions relying on meta-level resolution such as type-classes or canonical
structures. Also :ref:`allow coercions <816UniformInh>` that do not fullfill the :term:`uniform inheritance condition`.
- :ref:`Generalized rewriting <816GeneralizeRew>` support for rewriting with ``Type``-valued relations and in
``Type`` contexts, using the ``Classes.CMorphisms`` library.
- Added the :ref:`boolean equality <816BooleanEquality>` scheme command for decidable inductive types.
- Added a :ref:`Print Notation <816PrintNotation>` command.
- Incompatibilities in :ref:`name generation <816ProgramObls>` for Program obligations,
:tacn:`eauto` treatment of :ref:`tactic failure levels <816EautoLevels>`, use of ``ident``
:ref:`in notations <816IdentNotations>`, parsing of :ref:`module expressions <816ModuleExprs>`.
- Standard library :ref:`reorganization and deprecations <816Stdlib>`.
- Improve the treatment of standard library numbers by :cmd:`Extraction`.
See the `Changes in 8.16.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Coq's `reference manual for 8.16 <https://coq.github.io/doc/v8.16/refman>`_,
`documentation of the 8.16 standard library <https://coq.github.io/doc/v8.16/stdlib>`_
and `developer documentation of the 8.16 ML API <https://coq.github.io/doc/v8.16/api>`_
are also available.
Ali Caglayan, Emilio Jesús Gallego Arias, Gaëtan Gilbert
and Théo Zimmermann worked on maintaining and improving the
continuous integration system and package building infrastructure.
Erik Martin-Dorel has maintained the `Coq Docker images
<https://hub.docker.com/r/coqorg/coq>`_ that are used in many Coq
projects for continuous integration.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Karl Palmskog, Matthieu Sozeau and Enrico Tassi with
contributions from many users. A list of packages is available at
https://coq.inria.fr/opam/www/.
The `Coq Platform <https://github.com/coq/platform>`_ has been maintained
by Michael Soegtrop, with help from Karl Palmskog, Enrico Tassi and
Théo Zimmermann.
Our current maintainers are Yves Bertot, Frédéric Besson, Ana Borges,
Ali Caglayan, Tej Chajed, Cyril Cohen, Pierre Corbineau, Pierre Courtieu, Maxime Dénès,
Jim Fehrle, Julien Forest, Emilio Jesús Gallego Arias, Gaëtan Gilbert,
Georges Gonthier, Benjamin Grégoire, Jason Gross, Hugo Herbelin,
Vincent Laporte, Olivier Laurent, Assia Mahboubi, Kenji Maillard,
Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel, Pierre Roux,
Kazuhiko Sakaguchi, Vincent Semeria, Michael Soegtrop, Arnaud Spiwack,
Matthieu Sozeau, Enrico Tassi, Laurent Théry, Anton Trunov, Li-yao Xia
and Théo Zimmermann. See the `Coq Team face book <https://coq.inria.fr/coq-team.html>`_
page for more details.
The 57 contributors to the 8.16 versions are Tanaka Akira, Frédéric Besson, Martin Bodin, Ana Borges,
Ali Caglayan, Minki Cho, Cyril Cohen, Juan Conejero, "stop-cran", Adrian Dapprich, Maxime Dénès,
Stéphane Desarzens, Christian Doczkal, Andrej Dudenhefner, Andres Erbsen, Jim Fehrle,
Emilio Jesús Gallego Arias, Attila Gáspár, Paolo G. Giarrusso, Gaëtan Gilbert, Rudi Grinberg, Jason Gross, Hugo Herbelin,
Wolf Honore, Jasper Hugunin, Bart Jacobs, Pierre Jouvelot,
Ralf Jung, Grant Jurgensen, Jan-Oliver Kaiser, Wojciech Karpiel, Thomas Klausner,
Ethan Kuefner, Fabian Kunze, Olivier Laurent, Yishuai Li, Erik Martin-Dorel, Guillaume Melquiond,
Jean-Francois Monin, Pierre-Marie Pédrot, Rudy Peterson, Clément Pit-Claudel, Seth Poulsen,
Ramkumar Ramachandra, Pierre Roux, Takafumi Saikawa, Kazuhiko Sakaguchi, Gabriel Scherer,
Vincent Semeria, Kartik Singhal, Michael Soegtrop, Matthieu Sozeau, Enrico Tassi, Laurent Théry,
Anton Trunov, Li-yao Xia and Théo Zimmermann.
The Coq community at large helped improve this new version via
the GitHub issue and pull request system, the coq-club@inria.fr mailing list,
the `Discourse forum <https://coq.discourse.group/>`_ and the
`Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.16's development spanned 6 months from the release of
Coq 8.15.0. Pierre-Marie Pédrot is the release manager of Coq 8.16.
This release is the result of 356 merged PRs, closing 99 issues.
| Nantes, June 2022,
| Matthieu Sozeau for the Coq development team
Changes in 8.16.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
.. _816Normalization:
- **Changed:**
Fixpoints are now expected to be guarded even in subterms erasable
by reduction, thus getting rid of an artificial obstacle
preventing to lift the assumption of weak normalization of Coq to an
assumption of strong normalization; for instance (barring
implementation bugs) termination of the type-checking algorithm of
Coq is now restored (of course, as usual, up to the assumption of
the consistency of set theory and type theory, i.e., equivalently,
up to the weak normalization of type theory, a "physical"
assumption, which has not been contradicted for decades and which
specialists commonly believe to be a truth)
(`#15434 <https://github.com/coq/coq/pull/15434>`_, incidentally
fixes the complexity issue `#5702
<https://github.com/coq/coq/issues/5702>`_, by Hugo Herbelin).
- **Changed:**
Flag :n:`Unset Guard Checking` nevertheless requires fixpoints to
have an argument marked as decreasing in a type which is inductive
(`#15668 <https://github.com/coq/coq/pull/15668>`_,
fixes `#15621 <https://github.com/coq/coq/issues/15621>`_,
by Hugo Herbelin).
- **Removed:**
:ref:`Template-polymorphism` is now forbidden for mutual inductive types
(`#15965 <https://github.com/coq/coq/pull/15965>`_,
by Gaëtan Gilbert).
- **Fixed:**
Inlining of non-logical objects (notations, hints, ...) was missing
when applying a functor returning one of its arguments as e.g. in
:n:`Module F (E:T) := E`
(`#15412 <https://github.com/coq/coq/pull/15412>`_,
fixes `#15403 <https://github.com/coq/coq/issues/15403>`_,
by Hugo Herbelin).
.. _816SPropConversion:
- **Fixed:**
We introduce a new irrelevant term in the reduction machine.
It is used to shortcut computation of terms living in a strict
proposition, and behaves as an exception. This restores subject
reduction, and also makes conversion of large terms in SProp
cheap
(`#15575 <https://github.com/coq/coq/pull/15575>`_,
fixes `#14015 <https://github.com/coq/coq/issues/14015>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
performance blowups while inferring variance information for :ref:`cumulative` inductive types
(`#15662 <https://github.com/coq/coq/pull/15662>`_,
fixes `#11741 <https://github.com/coq/coq/issues/11741>`_,
by Gaëtan Gilbert).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Added:**
New clause :n:`as @ident` to the :cmd:`Record` command to specify
the name of the main argument to use by default in the type of
projections
(`#14563 <https://github.com/coq/coq/pull/14563>`_,
by Hugo Herbelin).
.. _816ReversibleCoercions:
- **Added:**
:term:`Reversible coercions <reversible coercion>` are coercions which cannot be
represented by a regular coercion (a Gallina function)
but rather a meta procedure, such as type class inference
or canonical structure resolution
(`#15693 <https://github.com/coq/coq/pull/15693>`_,
by Cyril Cohen, Pierre Roux, Enrico Tassi,
reviewed by Ali Caglayan, Jim Fehrle and Gaëtan Gilbert).
.. _816UniformInh:
- **Added:**
support for coercions not fulfilling
the uniform inheritance condition,
allowing more freedom for the parameters that are now inferred
using unification, canonical structures or typeclasses
(`#15789 <https://github.com/coq/coq/pull/15789>`_,
fixes `#2828 <https://github.com/coq/coq/issues/2828>`_,
`#4593 <https://github.com/coq/coq/issues/4593>`_,
`#3115 <https://github.com/coq/coq/issues/3115>`_,
`#5222 <https://github.com/coq/coq/issues/5222>`_,
`#9696 <https://github.com/coq/coq/issues/9696>`_
and `#8540 <https://github.com/coq/coq/issues/8540>`_,
by Pierre Roux, reviewed by Ali Caglayan, Enrico Tassi, Kazuhiko Sakaguchi and Jim Fehrle).
- **Fixed:**
interpretation of `{struct}` fixpoint annotations when the principal argument comes from an implicit generalization
(`#15581 <https://github.com/coq/coq/pull/15581>`_,
fixes `#13157 <https://github.com/coq/coq/issues/13157>`_,
by Gaëtan Gilbert).
Notations
^^^^^^^^^
.. _816IdentNotations:
- **Removed:**
``_`` in ``ident`` entries in notations, which was deprecated
in favor of ``name`` in 8.13. When you see messages like
.. code::
Error: Notation "[ rel _ _ : _ | _ ]" is already defined at level 0
with arguments name, name, constr, constr while it is now required to be
at level 0 with arguments ident, ident, constr, constr.
replace ``ident`` with ``name`` in the :cmd:`Notation` command.
To ease the change, you can fix the ``deprecated-ident-entry`` warnings
in Coq 8.15 (or 8.14 or 8.13). The warning can be turned into an error with
``-arg -w -arg +deprecated-ident-entry`` in the ``_CoqProject`` file
(`#15754 <https://github.com/coq/coq/pull/15754>`_,
by Pierre Roux).
- **Added:**
When defining a recursive notation referring to another recursive
notation, expressions of the form :n:`x .. y` can be used where a
sequence of binders is expected
(`#15291 <https://github.com/coq/coq/pull/15291>`_,
grants `#7911 <https://github.com/coq/coq/issues/7911>`_,
by Hugo Herbelin).
- **Fixed:**
Coercions are disabled when typechecking parsers and printers
of :cmd:`Number Notation`
(`#15884 <https://github.com/coq/coq/pull/15884>`_,
fixes `#15843 <https://github.com/coq/coq/issues/15843>`_,
by Pierre Roux).
Tactics
^^^^^^^
- **Changed:**
The ``RewriteRelation`` type class is now used to declare relations
inferable by the :tacn:`setoid_rewrite` tactic to construct
``Proper`` instances. This can break developments that relied on
existing ``Reflexive`` instances to infer relations. The fix is
to simply add a (backwards compatible) ``RewriteRelation`` declaration
for the relation. This change allows to set stricter modes on the
relation type classes ``Reflexive``, ``Symmetric``, etc.
(`#13969 <https://github.com/coq/coq/pull/13969>`_,
fixes `#7916 <https://github.com/coq/coq/issues/7916>`_,
by Matthieu Sozeau).
- **Changed:**
The :tacn:`setoid_rewrite` tactic can now properly recognize
homogeneous relations applied to types in different universes
(`#14138 <https://github.com/coq/coq/pull/14138>`_,
fixes `#13618 <https://github.com/coq/coq/issues/13618>`_,
by Matthieu Sozeau).
.. _816EautoLevels:
- **Changed:**
The :tacn:`eauto` tactic does not propagate internal Ltac failures
with level > 0 anymore. Any failure caused by a hint now behaves as if it
were a level 0 error
(`#15215 <https://github.com/coq/coq/pull/15215>`_,
fixes `#15214 <https://github.com/coq/coq/issues/15214>`_,
by Pierre-Marie Pédrot).
- **Changed:**
:tacn:`rewrite` when used to rewrite in multiple hypotheses (eg `rewrite foo in H,H'`) requires that the term (`foo`) does not depend on the hypotheses it rewrites.
When using `rewrite in *`, this means we only rewrite in hypotheses which do not appear in the term
(`#15426 <https://github.com/coq/coq/pull/15426>`_,
fixes `#3051 <https://github.com/coq/coq/issues/3051>`_
and `#15448 <https://github.com/coq/coq/issues/15448>`_,
by Gaëtan Gilbert).
- **Changed:**
When it fails, :tacn:`assert_succeeds` fails with the argument tactic's original error instead of ``Tactic failure: <tactic closure> fails.``
(`#15728 <https://github.com/coq/coq/pull/15728>`_,
fixes `#10970 <https://github.com/coq/coq/issues/10970>`_,
by Gaëtan Gilbert).
- **Deprecated:**
the :tacn:`instantiate` tactic without arguments. Since the move to
the monadic tactic engine in 8.5, it was behaving as the identity
(`#15277 <https://github.com/coq/coq/pull/15277>`_,
by Pierre-Marie Pédrot).
.. _816GeneralizeRew:
- **Added:**
generalized rewriting now supports rewriting with (possibly polymorphic)
relations valued in ``Type``. Use ``Classes.CMorphisms`` instead of
``Classes.Morphisms`` to declare ``Proper`` instances for :tacn:`rewrite`
(or :tacn:`setoid_rewrite`) to use when rewriting with ``Type`` valued
relations
(`#14137 <https://github.com/coq/coq/pull/14137>`_,
fixes `#4632 <https://github.com/coq/coq/issues/4632>`_,
`#5384 <https://github.com/coq/coq/issues/5384>`_,
`#5521 <https://github.com/coq/coq/issues/5521>`_,
`#6278 <https://github.com/coq/coq/issues/6278>`_,
`#7675 <https://github.com/coq/coq/issues/7675>`_,
`#8739 <https://github.com/coq/coq/issues/8739>`_,
`#11011 <https://github.com/coq/coq/issues/11011>`_,
`#12240 <https://github.com/coq/coq/issues/12240>`_,
and `#15279 <https://github.com/coq/coq/issues/15279>`_,
by Matthieu Sozeau helped by Ali Caglayan).
- **Added:**
Tactics to obtain a micromega :term:`cone expression` (aka witness)
from an already reified goal.
Using those tactics, the user can develop their own micromega tactics
for their own types, using their own parsers
(`#15921 <https://github.com/coq/coq/pull/15921>`_,
by Pierre Roux, reviewed by Frédéric Besson and Jim Fehrle).
- **Fixed:**
:tacn:`typeclasses eauto` used with multiple hint databases respects priority differences for hints from separate databases
(`#15289 <https://github.com/coq/coq/pull/15289>`_,
fixes `#5304 <https://github.com/coq/coq/issues/5304>`_,
by Gaëtan Gilbert).
- **Fixed:**
:tacn:`cbn` has better support for combining `simpl nomatch`, `!` and `/` specifiers (c.f. :cmd:`Arguments`)
(`#15657 <https://github.com/coq/coq/pull/15657>`_,
fixes `#3989 <https://github.com/coq/coq/issues/3989>`_
and `#15206 <https://github.com/coq/coq/issues/15206>`_,
by Gaëtan Gilbert).
Tactic language
^^^^^^^^^^^^^^^
- **Changed:**
Ltac `match` does not fail when the term to match contains an unfolded primitive projection
(`#15559 <https://github.com/coq/coq/pull/15559>`_,
fixes `#15554 <https://github.com/coq/coq/issues/15554>`_,
by Gaëtan Gilbert).
- **Added:**
``Ltac2`` understands :token:`toplevel_selector` and obeys :opt:`Default Goal Selector`.
Note that ``par:`` is buggy when combined with :tacn:`abstract`. Unlike ``Ltac1`` even ``par: abstract tac`` is not properly treated
(`#15378 <https://github.com/coq/coq/pull/15378>`_,
by Gaëtan Gilbert).
- **Added:**
Ltac2 `Int` functions `div`, `mod`, `asr`, `lsl`, `lsr`, `land`, `lor` , `lxor` and `lnot`
(`#15637 <https://github.com/coq/coq/pull/15637>`_,
by Michael Soegtrop).
- **Fixed:**
Ltac2 `apply` and `eapply` not unifying with implicit arguments;
unification inconsistent with `exact` and `eexact`
(`#15741 <https://github.com/coq/coq/pull/15741>`_,
by Ramkumar Ramachandra).
SSReflect
^^^^^^^^^
- **Fixed:**
:tacn:`have`, :tacn:`suff` and :tacn:`wlog` support goals in `SProp`
(`#15121 <https://github.com/coq/coq/pull/15121>`_,
by Enrico Tassi).
Commands and options
^^^^^^^^^^^^^^^^^^^^
.. _816ModuleExprs:
- **Changed:**
:cmd:`Module` now only allows parentheses around module arguments. For instance, ``Module M := (F X).`` is now a parsing error
(`#15355 <https://github.com/coq/coq/pull/15355>`_,
by Gaëtan Gilbert).
- **Changed:**
:cmd:`Fail` no longer catches anomalies, which it has done since Coq version 8.11.
Now it only catches user errors
(`#15366 <https://github.com/coq/coq/pull/15366>`_,
by Hugo Herbelin).
- **Changed:**
:ref:`program_definition` in universe monomorphic mode does not accept non-extensible universe declarations
(`#15424 <https://github.com/coq/coq/pull/15424>`_,
fixes `#15410 <https://github.com/coq/coq/issues/15410>`_,
by Gaëtan Gilbert).
.. _816ProgramObls:
- **Changed:**
The algorithm for name generation of anonymous variables
for ``Program`` subproofs is now the same as the one
used in the general case. This can create incompatibilities
in scripts relying on such autogenerated names. The old
scheme can be reactivated using the deprecated flag
``Program Naming``
(`#15442 <https://github.com/coq/coq/pull/15442>`_,
by Pierre-Marie Pédrot).
- **Removed:**
`Universal Lemma Under Conjunction` flag, that was deprecated in 8.15
(`#15268 <https://github.com/coq/coq/pull/15268>`_,
by Théo Zimmermann).
- **Removed:**
:cmd:`Abort` no longer takes an :n:`@ident` as an argument (it has been ignored since 8.5)
(`#15669 <https://github.com/coq/coq/pull/15669>`_,
by Gaëtan Gilbert).
- **Removed:**
`Simplex` flag, that was deprecated in 8.14.
:tacn:`lia` and :tacn:`lra` will always use the simplex solver (that was already the default behaviour)
(`#15690 <https://github.com/coq/coq/pull/15690>`_,
by Frédéric Besson).
- **Deprecated:**
``Add LoadPath`` and ``Add Rec LoadPath``. If this command is an
important feature for you, please open an issue on `GitHub <https://github.com/coq/coq/issues>`
and explain your workflow
(`#15652 <https://github.com/coq/coq/pull/15652>`_,
by Gaëtan Gilbert).
- **Deprecated:**
the `Typeclasses Filtered Unification` flag. Due to
a buggy implementation, it is unlikely this is used in the wild
(`#15752 <https://github.com/coq/coq/pull/15752>`_,
by Pierre-Marie Pédrot).
.. _816BooleanEquality:
- **Added:**
:cmd:`Scheme Boolean Equality` command to generate the boolean
equality for an inductive type whose equality is
decidable. It is useful when Coq is able to generate the boolean
equality but isn't powerful enough to prove the decidability of
equality (unlike :cmd:`Scheme Equality`, which tries to
prove the decidability of the type)
(`#15526 <https://github.com/coq/coq/pull/15526>`_,
by Hugo Herbelin).
- **Added:**
New more extensive algorithm based on the "parametricity"
translation for canonically generating Boolean equalities associated
to a decidable inductive type
(`#15527 <https://github.com/coq/coq/pull/15527>`_,
by Hugo Herbelin).
- **Added:**
:cmd:`From … Dependency` command to
declare a dependency of a ``.v`` file on an external file.
The ``coqdep`` tool generates build dependencies accordingly
(`#15650 <https://github.com/coq/coq/pull/15650>`_,
fixes `#15600 <https://github.com/coq/coq/issues/15600>`_,
by Enrico Tassi).
.. _816PrintNotation:
- **Added:**
:cmd:`Print Notation` command that prints the level and
associativity of a given notation definition string
(`#15683 <https://github.com/coq/coq/pull/15683>`_,
fixes `#14907 <https://github.com/coq/coq/issues/14907>`_
and `#4436 <https://github.com/coq/coq/issues/4436>`_
and `#7730 <https://github.com/coq/coq/issues/7730>`_,
by Ali Caglayan and Ana Borges, with help from Emilio Jesus Gallego Arias).
- **Added:**
a warning when trying to deprecate a definition
(`#15760 <https://github.com/coq/coq/pull/15760>`_,
by Pierre Roux).
- **Added:**
A deprecation warning that the :g:`Class >` syntax, which currently
does nothing, will in the future declare :ref:`coercions <coercions>`
as it does when used in :cmd:`Record` commands
(`#15802 <https://github.com/coq/coq/pull/15802>`_,
by Pierre Roux, reviewed by Gaëtan Gilbert, Ali Caglayan,
Jason Gross, Jim Fehrle and Théo Zimmermann).
- **Added:**
the :attr:`nonuniform` boolean attribute that silences the
non-uniform-inheritance warning when user needs to declare such a
coercion on purpose
(`#15853 <https://github.com/coq/coq/pull/15853>`_,
by Pierre Roux, reviewed by Gaëtan Gilbert and Jim Fehrle).
- **Added:** All commands which can import modules (e.g. ``Module
Import M.``, ``Module F (Import X : T).``, ``Require Import M.``,
etc) now support :token:`import_categories`. :cmd:`Require Import`
and :cmd:`Require Export` also support :token:`filtered_import`
(`#15945 <https://github.com/coq/coq/pull/15945>`_, fixes `#14872
<https://github.com/coq/coq/issues/14872>`_, by Gaëtan Gilbert).
- **Fixed:**
Make `Require Import M.` equivalent to `Require M. Import M.`
(`#15347 <https://github.com/coq/coq/pull/15347>`_,
fixes `#3556 <https://github.com/coq/coq/issues/3556>`_,
by Maxime Dénès).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Added:**
coq_makefile variable `COQPLUGININSTALL` to configure the installation of ML plugins
(`#15788 <https://github.com/coq/coq/pull/15788>`_,
by Cyril Cohen and Enrico Tassi).
- **Added:**
Added :n:`-bytecode-compiler {| yes | no }` flag for ``coqchk`` enabling
:tacn:`vm_compute` during checks, which is off by default
(`#15886 <https://github.com/coq/coq/pull/15886>`_,
by Ali Caglayan).
- **Fixed:**
``coqdoc`` confused by the presence of command :cmd:`Load` in a file
(`#15511 <https://github.com/coq/coq/pull/15511>`_,
fixes `#15497 <https://github.com/coq/coq/issues/15497>`_,
by Hugo Herbelin).
CoqIDE
^^^^^^
- **Added:**
Documentation of editing failed async mode proofs,
how to configure key bindings and various previously
undocumented details
(`#16070 <https://github.com/coq/coq/pull/16070>`_,
by Jim Fehrle).
Standard library
^^^^^^^^^^^^^^^^
.. _816Stdlib:
- **Changed:**
the ``signature`` scope of ``Classes.CMorphisms`` into ``signatureT``
(`#15446 <https://github.com/coq/coq/pull/15446>`_,
by Olivier Laurent).
- **Changed:**
the locality of typeclass instances `Permutation_app'` and `Permutation_cons` from :attr:`global` to :attr:`export`
(`#15597 <https://github.com/coq/coq/pull/15597>`_,
fixes `#15596 <https://github.com/coq/coq/issues/15596>`_,
by Gaëtan Gilbert).
- **Removed:**
``Int63``, which was deprecated in favor of ``Uint63`` in 8.14
(`#15754 <https://github.com/coq/coq/pull/15754>`_,
by Pierre Roux).
- **Deprecated:**
some obsolete files from the ``Arith`` part of the standard library
(``Div2``, ``Even``, ``Gt``, ``Le``, ``Lt``, ``Max``, ``Min``, ``Minus``, ``Mult``, ``NPeano``, ``Plus``).
Import ``Arith_base`` instead of these files. References to items in the deprecated files should be replaced
with references to ``PeanoNat.Nat`` as suggested by the warning messages.
Concerning the definitions of parity properties (even and odd), it is recommended to use ``Nat.Even`` and ``Nat.Odd``.
If an inductive definition of parity is required, the mutually inductive ``Nat.Even_alt`` and ``Nat.Odd_alt`` can be used. However, induction principles for ``Nat.Odd`` and ``Nat.Even`` are available as ``Nat.Even_Odd_ind`` and ``Nat.Odd_Even_ind``.
The equivalence between the non-inductive and mutually inductive definitions of parity can be found in ``Nat.Even_alt_Even`` and ``Nat.Odd_alt_Odd``.
All ``Hint`` declarations in the ``arith`` database have been moved to ``Arith_prebase`` and
``Arith_base``. To use the results about Peano arithmetic, we recommend importing
``PeanoNat`` (or ``Arith_base`` to base it on the ``arith`` hint database) and using the ``Nat`` module.
``Arith_prebase`` has been introduced temporarily to ensure compatibility, but it will be removed at the end of the
deprecation phase, e.g. in 8.18. Its use is thus discouraged
(`#14736 <https://github.com/coq/coq/pull/14736>`_, `#15411 <https://github.com/coq/coq/pull/15411>`_,
by Olivier Laurent, with help of Karl Palmskog).
- **Deprecated:**
`identity` inductive (replaced by the equivalent `eq`).
`Init.Logic_Type` is removed (the only remaining definition `notT` is moved
to `Init.Logic`)
(`#15256 <https://github.com/coq/coq/pull/15256>`_,
by Olivier Laurent).
- **Deprecated:**
`P_Rmin`: use more general `Rmin_case` instead
(`#15388 <https://github.com/coq/coq/pull/15388>`_,
fixes `#15382 <https://github.com/coq/coq/issues/15382>`_,
by Olivier Laurent).
- **Added:**
lemma `count_occ_rev`
(`#15397 <https://github.com/coq/coq/pull/15397>`_,
by Olivier Laurent).
- **Added:**
``Nat.EvenT`` and ``Nat.OddT`` (almost the same as ``Nat.Even`` and ``Nat.Odd`` but with output in ``Type``.
Decidability of parity (with output ``Type``) is provided ``EvenT_OddT_dec`` as well as induction principles ``Nat.EvenT_OddT_rect`` and ``Nat.OddT_EvenT_rect`` (with output ``Type``)
(`#15427 <https://github.com/coq/coq/pull/15427>`_,
by Olivier Laurent).
- **Added:**
Added a proof of ``sin x < x`` for positive ``x`` and ``x < sin x`` for negative ``x``
(`#15599 <https://github.com/coq/coq/pull/15599>`_,
by stop-cran).
- **Added:**
decidability typeclass instances for Z.le, Z.lt, Z.ge and Z.gt, added lemmas Z.geb_ge and Z.gtb_gt
(`#15620 <https://github.com/coq/coq/pull/15620>`_,
by Michael Soegtrop).
- **Added:**
lemmas ``Rinv_inv``, ``Rinv_mult``, ``Rinv_opp``, ``Rinv_div``, ``Rdiv_opp_r``,
``Rsqr_div'``, ``Rsqr_inv'``, ``sqrt_inv``, ``Rabs_inv``, ``pow_inv``,
``powerRZ_inv'``, ``powerRZ_neg'``, ``powerRZ_mult``, ``cv_infty_cv_0``,
which are variants of existing lemmas, but without any hypothesis
(`#15644 <https://github.com/coq/coq/pull/15644>`_,
by Guillaume Melquiond).
- **Added:**
a Leibniz equality test for primitive floats
(`#15719 <https://github.com/coq/coq/pull/15719>`_,
by Pierre Roux, reviewed by Guillaume Melquiond).
- **Added:**
support for primitive floats in Scheme Boolean Equality
(`#15719 <https://github.com/coq/coq/pull/15719>`_,
by Pierre Roux, reviewed by Hugo Herbelin).
- **Added:**
lemma :g:`le_add_l` to ``NAddOrder.v``. Use :g:`Nat.le_add_l` as replacement for the deprecated :g:`Plus.le_plus_r`
(`#16184 <https://github.com/coq/coq/pull/16184>`_,
by Andrej Dudenhefner).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Bumped lablgtk3 lower bound to 3.1.2
(`#15947 <https://github.com/coq/coq/pull/15947>`_,
by Pierre-Marie Pédrot).
- **Changed:**
Load plugins using `findlib <http://projects.camlcity.org/projects/findlib.html>`_.
This requires projects built with ``coq_makefile`` to either provide a
hand written ``META`` file or use the ``-generate-meta-for-package`` option
when applicable. As a consequence :cmd:`Declare ML Module` now uses plugin
names according to ``findlib``, e.g. `coq-aac-tactics.plugin`.
``coqdep`` accepts ``-m META`` and uses the file to resolve plugin names to
actual file names
(`#15220 <https://github.com/coq/coq/pull/15220>`_,
fixes `#7698 <https://github.com/coq/coq/issues/7698>`_,
by Enrico Tassi).
- **Changed:**
Minimum supported zarith version is now 1.11
(`#15483 <https://github.com/coq/coq/pull/15483>`_
and `#16005 <https://github.com/coq/coq/pull/16005>`_
and `#16030 <https://github.com/coq/coq/pull/16030>`_,
closes `#15496 <https://github.com/coq/coq/issues/15496>`_,
by Gaëtan Gilbert and Théo Zimmermann and Jason Gross).
- **Changed:**
Bump the minimum OCaml version to 4.09.0.
As a consequence the minimum supported ocamlfind version is now
1.8.1 (`#15947 <https://github.com/coq/coq/pull/15947>`_
and `#16046 <https://github.com/coq/coq/pull/16046>`_,
fixes `#14260 <https://github.com/coq/coq/issues/14260>`_
and `#16015 <https://github.com/coq/coq/pull/16015>`_,
by Pierre-Marie Pédrot and Théo Zimmermann).
Extraction
^^^^^^^^^^
.. _816Extraction:
- **Changed:**
`ExtrOCamlInt63` no longer extracts `comparison` to `int` in OCaml;
the extraction of `Uint63.compare` and `Sint63.compare` was also adapted accordingly
(`#15294 <https://github.com/coq/coq/pull/15294>`_,
fixes `#15280 <https://github.com/coq/coq/issues/15280>`_,
by Li-yao Xia).
- **Changed:**
Extraction from :g:`nat` to OCaml :g:`int` uses Stdlib instead of Pervasives
(`#15333 <https://github.com/coq/coq/pull/15333>`_,
by Rudy Nicolo Peterson).
- **Changed:**
The empty inductive type is now extracted to OCaml empty type
available since OCaml 4.07
(`#15967 <https://github.com/coq/coq/pull/15967>`_,
by Pierre Roux).
- **Added:**
More extraction definitions for division and comparison of Z and N
(`#15098 <https://github.com/coq/coq/pull/15098>`_,
by Li-yao Xia).
- **Fixed:**
Type :n:`int` in files :n:`Number.v`, :n:`Decimal.v` and
:n:`Hexadecimal.v` have been renamed to :n:`signed_int` (together
with a compatibility alias :n:`int`) so that they can be used in
extraction without conflicting with OCaml's :n:`int` type
(`#13460 <https://github.com/coq/coq/pull/13460>`_,
fixes `#7017 <https://github.com/coq/coq/issues/7017>`_
and `#13288 <https://github.com/coq/coq/issues/13288>`_,
by Hugo Herbelin).
Changes in 8.16.1
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Fixed:**
conversion of Prod values in the native compiler
(`#16651 <https://github.com/coq/coq/pull/16651>`_,
fixes `#16645 <https://github.com/coq/coq/issues/16645>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
Coq 8.16.0 missed `SProp` check for opaque names in conversion
(`#16768 <https://github.com/coq/coq/pull/16768>`_,
fixes `#16752 <https://github.com/coq/coq/issues/16752>`_,
by Hugo Herbelin).
- **Fixed:**
Pass the correct environment to compute η-expansion of cofixpoints
in VM and native compilation
(`#16845 <https://github.com/coq/coq/pull/16845>`_,
fixes `#16831 <https://github.com/coq/coq/issues/16831>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
inconsistency with conversion of primitive arrays, and associated incomplete strong normalization of primitive arrays with ``lazy``
(`#16850 <https://github.com/coq/coq/pull/16850>`_,
fixes `#16829 <https://github.com/coq/coq/issues/16829>`_,
by Gaëtan Gilbert,
reported by Maxime Buyse and Andres Erbsen).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
:cmd:`Print Assumptions` treats opaque definitions with missing proofs (as found in ``.vos`` files, see :ref:`compiled-interfaces`) as axioms instead of ignoring them
(`#16434 <https://github.com/coq/coq/pull/16434>`_,
fixes `#16411 <https://github.com/coq/coq/issues/16411>`_,
by Gaëtan Gilbert).
CoqIDE
^^^^^^
- **Fixed:**
"Interrupt computations" now works correctly on Windows—except
if you start CoqIDE as a background process, e.g. with `coqide &` in `bash`,
in which case it won't work at all
(`#16142 <https://github.com/coq/coq/pull/16142>`_,
fixes `#13550 <https://github.com/coq/coq/issues/13550>`_,
by Jim Fehrle).
Version 8.15
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.15 integrates many bug fixes, deprecations and cleanups as well
as a few new features. We highlight some of the most impactful changes here:
- The :tacn:`apply with <apply>` tactic :ref:`no longer renames arguments <815ApplyWith>`
unless compatibility flag `Apply With Renaming` is set.
- :ref:`Improvements <815Auto>` to the :tacn:`auto` tactic family,
fixing the :cmd:`Hint Unfold` behavior, and generalizing the use
of discrimination nets.
- The :tacn:`typeclasses eauto` tactic has a new :ref:`best_effort <815BestEffort>`
option allowing it to return *partial* solutions to a proof search problem,
depending on the mode declarations associated to each constraint.
This mode is used by typeclass resolution during type inference to
provide more precise error messages.
- Many :ref:`commands and options <815Commands>` were deprecated or removed
after deprecation and more consistently support locality attributes.
- The :cmd:`Import` command is extended with :token:`import_categories`
to :ref:`select the components <815Import>` of a module to import or not, including
features such as hints, coercions, and notations.
- A :ref:`visual Ltac debugger <815LtacDebugger>` is now available in CoqIDE.
See the `Changes in 8.15.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Coq's `reference manual for 8.15 <https://coq.github.io/doc/v8.15/refman>`_,
`documentation of the 8.15 standard library <https://coq.github.io/doc/v8.15/stdlib>`_
and `developer documentation of the 8.15 ML API <https://coq.github.io/doc/v8.15/api>`_
are also available.
Emilio Jesús Gallego Arias, Gaëtan Gilbert, Michael
Soegtrop and Théo Zimmermann worked on maintaining and improving the
continuous integration system and package building infrastructure.
Erik Martin-Dorel has maintained the `Coq Docker images
<https://hub.docker.com/r/coqorg/coq>`_ that are used in many Coq
projects for continuous integration.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Karl Palmskog, Matthieu Sozeau and Enrico Tassi with
contributions from many users. A list of packages is available at
https://coq.inria.fr/opam/www/.
The `Coq Platform <https://github.com/coq/platform>`_ has been maintained
by Michael Soegtrop and Enrico Tassi.
Our current maintainers are Yves Bertot, Frédéric Besson, Ali Caglayan, Tej
Chajed, Cyril Cohen, Pierre Corbineau, Pierre Courtieu, Maxime Dénès,
Jim Fehrle, Julien Forest, Emilio Jesús Gallego Arias, Gaëtan Gilbert,
Georges Gonthier, Benjamin Grégoire, Jason Gross, Hugo Herbelin,
Vincent Laporte, Olivier Laurent, Assia Mahboubi, Kenji Maillard,
Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel, Pierre Roux,
Kazuhiko Sakaguchi, Vincent Semeria, Michael Soegtrop, Arnaud Spiwack,
Matthieu Sozeau, Enrico Tassi, Laurent Théry, Anton Trunov, Li-yao Xia
and Théo Zimmermann. See the `Coq Team face book <https://coq.inria.fr/coq-team.html>`_
page for more details.
The 41 contributors to this version are
Tanaka Akira, Frédéric Besson, Juan Conejero, Ali Caglayan, Cyril Cohen, Adrian Dapprich, Maxime Dénès,
Stéphane Desarzens, Christian Doczkal, Andrej Dudenhefner, Jim Fehrle, Emilio Jesús Gallego Arias,
Attila Gáspár, Gaëtan Gilbert, Jason Gross, Hugo Herbelin, Jasper Hugunin, Bart Jacobs, Ralf Jung, Grant Jurgensen,
Jan-Oliver Kaiser, Wojciech Karpiel, Fabian Kunze, Olivier Laurent, Yishuai Li, Erik Martin-Dorel,
Guillaume Melquiond, Jean-Francois Monin, Pierre-Marie Pédrot, Rudy Peterson, Clément Pit-Claudel,
Seth Poulsen, Pierre Roux, Takafumi Saikawa, Kazuhiko Sakaguchi, Michael Soegtrop, Matthieu Sozeau,
Enrico Tassi, Laurent Théry, Anton Trunov and Théo Zimmerman.
The Coq community at large helped improve the design of this new version via
the GitHub issue and pull request system, the Coq development mailing list
coqdev@inria.fr, the coq-club@inria.fr mailing list, the `Discourse forum
<https://coq.discourse.group/>`_ and the `Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.15's development spanned 3 months from the release of
Coq 8.14.0. Gaëtan Gilbert is the release manager of Coq 8.15.
This release is the result of 384 merged PRs, closing 143 issues.
| Nantes, January 2022,
| Matthieu Sozeau for the Coq development team
Changes in 8.15.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Fixed:**
Name clash in a computation of the type of parameters of functorial
module types; this computation was provided for the purpose of
clients using the algebraic form of module types such as :cmd:`Print
Module Type`
(`#15385 <https://github.com/coq/coq/pull/15385>`_,
fixes `#9555 <https://github.com/coq/coq/issues/9555>`_,
by Hugo Herbelin).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
:cmd:`Instance` warns about the default locality immediately rather than waiting until the instance is ready to be defined.
This changes which command warns when the instance has a separate proof: the :cmd:`Instance` command itself warns instead of the proof closing command (such as :cmd:`Defined`)
(`#14705 <https://github.com/coq/coq/pull/14705>`_,
by Gaëtan Gilbert).
- **Removed:**
Arguments of section variables may no longer be renamed with :cmd:`Arguments` (this was previously applied inconsistently)
(`#14573 <https://github.com/coq/coq/pull/14573>`_,
by Gaëtan Gilbert).
- **Added:**
Non-dependent implicit arguments can be provided explicitly using
the syntax :n:`(@natural := @term)` where :token:`natural` is the index
of the implicit argument among all non-dependent arguments of the
function, starting from 1
(`#11099 <https://github.com/coq/coq/pull/11099>`_,
by Hugo Herbelin).
- **Added:**
:cmd:`Succeed`, a :n:`@control_command` that verifies that the given :n:`@sentence` succeeds without changing the proof state
(`#14750 <https://github.com/coq/coq/pull/14750>`_,
by Gaëtan Gilbert).
- **Fixed:**
The :n:`@term.(@qualid {* @arg })` syntax now takes into account the position of
the main argument :n:`@term` when computing the implicit arguments of
:n:`@qualid`
(`#14606 <https://github.com/coq/coq/pull/14606>`_,
fixes `#4167 <https://github.com/coq/coq/issues/4167>`_,
by Hugo Herbelin).
- **Fixed:**
Source and target of coercions preserved by module instantiation
(`#14668 <https://github.com/coq/coq/pull/14668>`_,
fixes `#3527 <https://github.com/coq/coq/issues/3527>`_,
by Hugo Herbelin).
- **Fixed:**
Made reference manual consistent with the implementation regarding
the role of recursively non-uniform parameters of inductive types in the nested
positivity condition
(`#14967 <https://github.com/coq/coq/pull/14967>`_,
fixes `#14938 <https://github.com/coq/coq/issues/14938>`_,
by Hugo Herbelin)
Notations
^^^^^^^^^
- **Changed:**
Terms printed in error messages may be more verbose if syntactic sugar would make it appear that the obtained and expected terms only differ in existential variables
(`#14672 <https://github.com/coq/coq/pull/14672>`_,
by Gaëtan Gilbert).
- **Removed:**
the ``Numeral Notation`` command that was renamed to :cmd:`Number Notation` in 8.13
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Removed:**
primitive float notations ``<``, ``<=`` and ``==`` that were replaced by ``<?``, ``<=?`` and ``=?`` in 8.13
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Removed:**
primitive integer notations ``\%``, ``<``, ``<=`` and ``==`` that were replaced by ``mod``, ``<?``, ``<=?`` and ``=?`` in 8.13
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Added:**
Include floats in the number notation mechanism
(`#14525 <https://github.com/coq/coq/pull/14525>`_,
by Pierre Roux).
- **Added:**
Coercion entries and :n:`ident`/:n:`global` entries in custom notations now
respect the :n:`only parsing` modifier
(`#15340 <https://github.com/coq/coq/pull/15340>`_,
fixes `#15335 <https://github.com/coq/coq/issues/15335>`_,
by Hugo Herbelin).
- **Fixed:**
:cmd:`Reserved Infix` now accept further parameters in the infix notation
(`#14379 <https://github.com/coq/coq/pull/14379>`_,
fixes `#11402 <https://github.com/coq/coq/issues/11402>`_,
by Hugo Herbelin).
- **Fixed:**
Useless self reference when printing abbreviations declared in nested modules
(`#14493 <https://github.com/coq/coq/pull/14493>`_,
fixes one part of `#12777 <https://github.com/coq/coq/issues/12777>`_
and `#14486 <https://github.com/coq/coq/issues/14486>`_,
by Hugo Herbelin).
- **Fixed:**
anomalies with notation applied in `match` patterns when the
notation have a notation variable at head
(`#14713 <https://github.com/coq/coq/pull/14713>`_,
fixes `#14708 <https://github.com/coq/coq/issues/14708>`_,
by Hugo Herbelin).
- **Fixed:**
Regression in parsing error reporting in case of empty custom entry
(`#15338 <https://github.com/coq/coq/pull/15338>`_,
fixes `#15334 <https://github.com/coq/coq/issues/15334>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
.. _815ApplyWith:
- **Changed:**
``apply with`` does not rename arguments unless using compatibility flag `Apply With Renaming`
(`#13837 <https://github.com/coq/coq/pull/13837>`_,
fixes `#13759 <https://github.com/coq/coq/issues/13759>`_,
by Gaëtan Gilbert).
Porting hint: if the renaming is because of a goal variable (eg
``intros x; apply foo with (x0 := bar)`` where ``About foo.`` says
the argument is called ``x``) it is probably caused by an
interaction with implicit arguments and ``apply @foo with (x :=
bar)`` will usually be a backwards compatible fix.
.. _815Auto:
- **Changed:**
:cmd:`Hint Unfold` in discriminated databases now respects its
specification, namely that a constant may be unfolded only when
it is the head of the goal. The previous behavior was to perform
unfolding on any goal, without any limitation.
An unexpected side-effect of this was that a database that
contained ``Unfold`` hints would sometimes trigger silent
strong βι-normalization of the goal. Indeed, :tacn:`unfold`
performs such a normalization regardless of the presence of its
argument in the goal. This does introduce a bit of backwards
incompatibility, but it occurs in very specific situations
and is easily circumvented. Since by default hint bases
are not discriminated, it means that incompatibilities are
typically observed when adding unfold hints to the typeclass
database.
In order to recover the previous behavior, it is enough
to replace instances of ``Hint Unfold foo.``
with ``Hint Extern 4 => progress (unfold foo).``. A less compatible but
finer-grained change can be achieved by only adding the missing normalization
phase with ``Hint Extern 4 => progress (lazy beta iota).``
(`#14679 <https://github.com/coq/coq/pull/14679>`_,
fixes `#14874 <https://github.com/coq/coq/issues/14874>`_,
by Pierre-Marie Pédrot).
- **Changed:**
Correctly consider variables without a body to be rigid
for the pattern recognition algorithm of discriminated
hints
(`#14722 <https://github.com/coq/coq/pull/14722>`_,
by Pierre-Marie Pédrot).
- **Changed:**
Use discrimination nets for goals containing evars in all
:tacn:`auto` tactics. It essentially makes the behavior of undiscriminated
databases to be the one of discriminated databases where all constants are
considered transparent. This may be incompatible with previous behavior in
very rare cases (`#14848 <https://github.com/coq/coq/pull/14848>`_,
by Pierre-Marie Pédrot).
- **Changed:**
The ``choice`` strategy for :tacn:`rewrite_strat` is now of arbitrary arity
(`#14989 <https://github.com/coq/coq/pull/14989>`_,
fixes `#6109 <https://github.com/coq/coq/issues/6109>`_,
by Gaëtan Gilbert).
- **Changed:**
The :tacn:`exact` tactic now takes a :g:`uconstr` as argument
instead of an ad-hoc one. In very rare cases, this can change
the order of resolution of dependent evars when used over
several goals at once
(`#15171 <https://github.com/coq/coq/pull/15171>`_,
by Pierre-Marie Pédrot).
- **Changed:** :tacn:`cbn` interprets the combination of the ``!`` and
``/`` modifiers (from :cmd:`Arguments`) to mean "unfold as soon as
all arguments before the ``/`` are provided and all arguments marked
with ``!`` reduce to a constructor". This makes it unfold more often
than without the ``/`` when all arguments are provided. Previously
adding ``/`` would only prevent unfolding when insufficient
arguments are provided without adding new unfoldings.
Note that this change only takes effect in default mode (as opposed
to when ``simpl nomatch`` was used) (`#15204
<https://github.com/coq/coq/pull/15204>`_, fixes `#4555
<https://github.com/coq/coq/issues/4555>`_ and `#7674
<https://github.com/coq/coq/issues/7674>`_, by Gaëtan Gilbert).
- **Removed:**
the deprecated new auto tactic
(`#14527 <https://github.com/coq/coq/pull/14527>`_,
by Pierre-Marie Pédrot).
- **Removed:**
deprecated syntax for :tacn:`instantiate` using capitalized ``Value`` or ``Type``
(`#15193 <https://github.com/coq/coq/pull/15193>`_,
by Gaëtan Gilbert).
- **Removed:**
deprecated ``autoapply ... using`` syntax for :tacn:`autoapply`
(`#15194 <https://github.com/coq/coq/pull/15194>`_,
by Gaëtan Gilbert).
- **Deprecated:**
the `bfs eauto` tactic. Since its introduction
it has behaved exactly like the :tacn:`eauto` tactic.
Use :tacn:`typeclasses eauto` with the `bfs` flag instead
(`#15314 <https://github.com/coq/coq/pull/15314>`_,
fixes `#15300 <https://github.com/coq/coq/issues/15300>`_,
by Pierre-Marie Pédrot).
- **Added:**
The :tacn:`zify` tactic can now recognize `Pos.Nsucc_double`, `Pos.Ndouble`,
`N.succ_double`, `N.double`, `N.succ_pos`, `N.div2`, `N.pow`, `N.square`, and
`Z.to_pos`. Moreover, importing module `ZifyBool` lets it recognize `Pos.eqb`,
`Pos.leb`, `Pos.ltb`, `N.eqb`, `N.leb`, and `N.ltb`
(`#10998 <https://github.com/coq/coq/pull/10998>`_,
by Kazuhiko Sakaguchi).
.. _815BestEffort:
- **Added:**
:ref:`best_effort <TypeclassesEautoBestEffort>` option to :tacn:`typeclasses eauto`,
to return a *partial* solution to its initial proof-search problem. The goals that
can remain unsolved are determined according to the modes declared for their head
(see :cmd:`Hint Mode`). This is used by typeclass resolution during type
inference to provide more informative error messages
(`#13952 <https://github.com/coq/coq/pull/13952>`_,
fixes `#13942 <https://github.com/coq/coq/pull/13952>`_ and
`#14125 <https://github.com/coq/coq/pull/14125>`_, by Matthieu Sozeau).
- **Added:**
A new :table:`Keep Equalities` table to selectively control the
preservation of subterm equalities for the :tacn:`injection` tactic. It allows
a finer control than the boolean flag :flag:`Keep Proof Equalities` that acts
globally
(`#14439 <https://github.com/coq/coq/pull/14439>`_,
by Pierre-Marie Pédrot).
- **Added:**
:tacn:`simple congruence` tactic which works like :tacn:`congruence`
but does not unfold definitions
(`#14657 <https://github.com/coq/coq/pull/14657>`_,
fixes `#13778 <https://github.com/coq/coq/issues/13778>`_
and `#5394 <https://github.com/coq/coq/issues/5394>`_
and `#13189 <https://github.com/coq/coq/issues/13189>`_,
by Andrej Dudenhefner).
- **Added:**
Small enhancement of unification in the presence of local definitions
(`#14673 <https://github.com/coq/coq/pull/14673>`_,
fixes `#4415 <https://github.com/coq/coq/issues/4415>`_,
by Hugo Herbelin).
- **Added:**
`dfs` option in :tacn:`typeclasses eauto` to use depth-first search
(`#14693 <https://github.com/coq/coq/pull/14693>`_,
fixes `#13859 <https://github.com/coq/coq/issues/13859>`_,
by Ali Caglayan).
- **Fixed:**
More flexible hypothesis specialization in :tacn:`congruence`
(`#14650 <https://github.com/coq/coq/pull/14650>`_,
fixes `#14651 <https://github.com/coq/coq/issues/14651>`_
and `#14662 <https://github.com/coq/coq/issues/14662>`_,
by Andrej Dudenhefner).
- **Fixed:**
Added caching to congruence initialization to avoid quadratic runtime
(`#14683 <https://github.com/coq/coq/pull/14683>`_,
fixes `#5548 <https://github.com/coq/coq/issues/5548>`_,
by Andrej Dudenhefner).
- **Fixed:**
Correctly handle matching up to η-expansion in discriminated
hints
(`#14732 <https://github.com/coq/coq/pull/14731>`_,
fixes `#14731 <https://github.com/coq/coq/issues/14731>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
Old unification understands some inductive cumulativity
(`#14758 <https://github.com/coq/coq/pull/14758>`_,
fixes `#14734 <https://github.com/coq/coq/issues/14734>`_
and `#6976 <https://github.com/coq/coq/issues/6976>`_,
by Gaëtan Gilbert).
- **Fixed:**
The :tacn:`clear dependent <clear>` tactic now does not backtrack
internally, preventing an exponential blowup
(`#14984 <https://github.com/coq/coq/pull/14984>`_,
fixes `#11689 <https://github.com/coq/coq/issues/11689>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
:tacn:`setoid_rewrite` now works when the rewriting lemma has non dependent arguments and rewriting under binders
(`#14986 <https://github.com/coq/coq/pull/14986>`_,
fixes `#5369 <https://github.com/coq/coq/issues/5369>`_,
by Gaëtan Gilbert).
- **Fixed:**
Regression in 8.14.0 and 8.14.1 with action pattern :n:`%` in
:n:`as` clause of tactic :tacn:`specialize`
(`#15245 <https://github.com/coq/coq/pull/15245>`_,
fixes `#15244 <https://github.com/coq/coq/issues/15244>`_,
by Hugo Herbelin).
Tactic language
^^^^^^^^^^^^^^^
- **Fixed:**
the parsing level of the Ltac2 tactic :tacn:`now`
was set to level 6 in order to behave as it did before
8.14
(`#15250 <https://github.com/coq/coq/pull/15250>`_,
fixes `#15122 <https://github.com/coq/coq/issues/15122>`_,
by Pierre-Marie Pédrot).
SSReflect
^^^^^^^^^
- **Changed:**
rewrite generates subgoals in the expected order (side conditions first, by
default) also when rewriting with a setoid relation
(`#14314 <https://github.com/coq/coq/pull/14314>`_,
fixes `#5706 <https://github.com/coq/coq/issues/5706>`_,
by Enrico Tassi).
- **Removed:**
The ssrsearch plugin and the ssr Search command
(`#13760 <https://github.com/coq/coq/pull/13760>`_,
by Jim Fehrle).
- **Added:**
port the additions made to `ssrbool.v` in math-comp `PR #757 <https://github.com/math-comp/math-comp/pull/757>`_,
namely `reflect` combinators `negPP`, `orPP`, `andPP` and `implyPP`
(`#15059 <https://github.com/coq/coq/pull/15059>`_,
by Christian Doczkal).
- **Fixed:**
SSR patterns now work with primitive values such as ints, floats or arrays
(`#14660 <https://github.com/coq/coq/pull/14660>`_,
fixes `#12770 <https://github.com/coq/coq/issues/12770>`_,
by Juan Conejero).
- **Fixed:**
A bug where :tacn:`suff` would fail due to use of :tacn:`apply` under the hood
(`#14687 <https://github.com/coq/coq/pull/14687>`_,
fixes `#14678 <https://github.com/coq/coq/issues/14678>`_,
by Ali Caglayan helped by Enrico Tassi).
Commands and options
^^^^^^^^^^^^^^^^^^^^
.. _815Commands:
- **Changed:**
:cmd:`About` and :cmd:`Print` now display all known argument names
(`#14596 <https://github.com/coq/coq/pull/14596>`_,
grants `#13830 <https://github.com/coq/coq/issues/13830>`_,
by Hugo Herbelin).
- **Changed:**
:cmd:`Typeclasses Transparent` and :cmd:`Typeclasses Opaque` support ``#[local]``, ``#[export]`` and ``#[global]`` attributes
(`#14685 <https://github.com/coq/coq/pull/14685>`_,
fixes `#14513 <https://github.com/coq/coq/issues/14513>`_,
by Gaëtan Gilbert).
- **Changed:**
In extraction to OCaml, empty types in :n:`Type` (such as
:n:`Empty_set`) are now extracted to an abstract type (empty by
construction) rather than to the OCaml's :n:`unit` type
(`#14802 <https://github.com/coq/coq/pull/14802>`_,
fixes a remark at `#14801 <https://github.com/coq/coq/issues/14801>`_,
by Hugo Herbelin).
- **Changed:**
Closed modules now live in a separate namespace from open modules and sections
(`#15078 <https://github.com/coq/coq/pull/15078>`_,
fixes `#14529 <https://github.com/coq/coq/issues/14529>`_,
by Gaëtan Gilbert).
- **Removed:**
boolean attributes ``monomorphic``, ``noncumulative`` and ``notemplate`` that were replaced by ``polymorphic=no``, ``cumulative=no`` and ``template=no`` in 8.13
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Removed:**
command ``Grab Existential Variables`` that was deprecated in 8.13. Use :cmd:`Unshelve` that is mostly equivalent, up to the reverse order of the resulting subgoals
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Removed:**
command ``Existential`` that was deprecated in 8.13. Use :cmd:`Unshelve` and :tacn:`exact`
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Removed:**
the `-outputstate` command line argument and the corresponding
vernacular commands `Write State` and `Restore State`
(`#14940 <https://github.com/coq/coq/pull/14940>`_,
by Pierre-Marie Pédrot)
- **Deprecated:** ambiguous :cmd:`Proof using` and :cmd:`Collection` usage
(`#15056 <https://github.com/coq/coq/pull/15056>`_,
fixes `#13296 <https://github.com/coq/coq/issues/13296>`_,
by Wojciech Karpiel).
- **Deprecated:**
`Universal Lemma Under Conjunction` flag that was introduced for
compatibility with Coq versions prior to 8.4 (`#15272
<https://github.com/coq/coq/pull/15272>`_, by Théo Zimmermann).
- **Deprecated:** using :cmd:`Hint Cut`, :cmd:`Hint Mode`, :cmd:`Hint
Transparent`, :cmd:`Hint Opaque`, :cmd:`Typeclasses Transparent` or
:cmd:`Typeclasses Opaque` without an explicit locality outside
sections. (`#14697 <https://github.com/coq/coq/pull/14697>`_, by
Pierre-Marie Pédrot, and `#14685
<https://github.com/coq/coq/pull/14685>`_, by Gaëtan Gilbert)
- **Added:**
The :flag:`Mangle Names Light` flag, which changes the behavior of
:flag:`Mangle Names`. For example, the name `foo` becomes `_0` with
:flag:`Mangle Names`, but with :flag:`Mangle Names Light` set, it will
become `_foo`
(`#14695 <https://github.com/coq/coq/pull/14695>`_,
fixes `#14548 <https://github.com/coq/coq/issues/14548>`_,
by Ali Caglayan).
- **Added:** The :cmd:`Hint Cut`, :cmd:`Hint Mode`, :cmd:`Hint
Transparent`, :cmd:`Hint Opaque`, :cmd:`Typeclasses Transparent` and
:cmd:`Typeclasses Opaque` commands now accept the :attr:`local`,
:attr:`export` and :attr:`global` locality attributes inside
sections. With either attribute, the commands will trigger the
`non-local-section-hint` warning if the arguments refer to local
section variables (`#14697
<https://github.com/coq/coq/pull/14697>`_, by Pierre-Marie Pédrot,
and `#14685 <https://github.com/coq/coq/pull/14685>`_, fixes `#14513
<https://github.com/coq/coq/issues/14513>`_, by Gaëtan Gilbert).
- **Added:**
:attr:`projections(primitive)` attribute to make a record use
primitive projections
(`#14699 <https://github.com/coq/coq/pull/14699>`_,
fixes `#13150 <https://github.com/coq/coq/issues/13150>`_,
by Ali Caglayan).
.. _815Import:
- **Added:** Syntax for :token:`import_categories` providing selective
import of module components (eg ``Import(notations) M`` (`#14892
<https://github.com/coq/coq/pull/14892>`_, by Gaëtan Gilbert).
- **Added:**
:cmd:`Search` understands modifier ``in`` as an alias of ``inside``
(`#15139 <https://github.com/coq/coq/pull/15139>`_,
fixes `#14930 <https://github.com/coq/coq/issues/14930>`_,
by Gaëtan Gilbert).
This is intended to ease transition for ssreflect Search users.
- **Fixed:** interaction of Program's obligation state and modules and
sections: obligations started in a parent module or section are not
available to be solved until the submodules and subsections are
closed (`#14780 <https://github.com/coq/coq/pull/14780>`_, fixes
`#14446 <https://github.com/coq/coq/issues/14446>`_, by Gaëtan
Gilbert).
- **Fixed:**
:cmd:`Eval` and :cmd:`Compute` now beta-iota-simplify the type
of the result, like :cmd:`Check` does
(`#14901 <https://github.com/coq/coq/pull/14901>`_,
fixes `#14899 <https://github.com/coq/coq/issues/14899>`_,
by Hugo Herbelin)
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
Coqdoc options ``--coqlib`` and ``--coqlib_path`` have been renamed
to ``--coqlib_url`` and ``--coqlib`` to make them more consistent with
flags used by other Coq executables
(`#14059 <https://github.com/coq/coq/pull/14059>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
Syntax of `_CoqProject` files: `-arg` is now handled by :ref:`coq_makefile
<rocq_makefile>` and not by `make`. Unquoted `#` now start line comments
(`#14558 <https://github.com/coq/coq/pull/14558>`_,
by Stéphane Desarzens, with help from Jim Fehrle and Enrico Tassi).
- **Changed:**
:cmd:`Require` now selects files whose logical name
exactly matches the required name, making it possible to unambiguously select
a given file: if several :n:`-Q` or :n:`-R` options bind the same
logical name to a different file, the option appearing last on the
command line takes precedence. Moreover, it is now an error to
require a file using a partial logical name which does not resolve
to a non-ambiguous path (`#14718
<https://github.com/coq/coq/pull/14718>`_, by Hugo Herbelin).
- **Changed:** ``coq_makefile`` now declares variable ``COQBIN`` to avoid warnings in
``make --warn`` mode (`#14787 <https://github.com/coq/coq/pull/14787>`_, by
Clément Pit-Claudel).
- **Changed:**
``coqchk`` respects the :flag:`Kernel Term Sharing` flag instead of forcing it on
(`#14957 <https://github.com/coq/coq/pull/14957>`_,
by Gaëtan Gilbert)
- **Removed:**
These options of :ref:`coq_makefile <rocq_makefile>`: `-extra`, `-extra-phony`,
`-custom`, `-no-install`, `-install`, `-no-opt`, `-byte`.
Support for subdirectories is also removed
(`#14558 <https://github.com/coq/coq/pull/14558>`_,
by Stéphane Desarzens, with help from Jim Fehrle and Enrico Tassi).
- **Added:**
:ref:`coq_makefile <rocq_makefile>` now takes the `-docroot` option as alternative to the
`INSTALLCOQDOCROOT` variable
(`#14558 <https://github.com/coq/coq/pull/14558>`_,
by Stéphane Desarzens, with help from Jim Fehrle and Enrico Tassi).
- **Fixed:**
Various `coqdep` issues with the `From` clause of :cmd:`Require` and
a few inconsistencies between `coqdep` and `coqc` disambiguation
of :cmd:`Require`
(`#14718 <https://github.com/coq/coq/pull/14718>`_,
fixes `#11631 <https://github.com/coq/coq/issues/11631>`_
and `#14539 <https://github.com/coq/coq/issues/14539>`_,
by Hugo Herbelin).
- **Fixed:**
``coq_makefile`` has improved logic when dealing with incorrect ``_CoqProject`` files
(`#13541 <https://github.com/coq/coq/pull/13541>`_,
fixes `#9319 <https://github.com/coq/coq/issues/9319>`_,
by Fabian Kunze).
- **Fixed:**
``coqdep`` was confusing periods occurring in comments with periods ending Coq sentences
(`#14996 <https://github.com/coq/coq/pull/14996>`_,
fixes `#7393 <https://github.com/coq/coq/issues/7393>`_,
by Hugo Herbelin).
CoqIDE
^^^^^^
- **Changed:**
CoqIDE unicode keys for brackets (e.g. `\langle`) now bind to unicode mathematical symbols rather than unicode CJK brackets
(`#14452 <https://github.com/coq/coq/pull/14452>`_,
by Bart Jacobs).
- **Changed:**
All occurrences of the name `CoqIde` to `CoqIDE`. This may cause issues with
installing and uninstalling desktop icons, causing apparent duplicates
(`#14696 <https://github.com/coq/coq/pull/14696>`_, fixes `#14310
<https://github.com/coq/coq/issues/14310>`_, by Ali Caglayan).
.. _815LtacDebugger:
- **Added:**
Initial version of a visual debugger in CoqIDE. Supports setting breakpoints
visually and jumping to the stopping point plus continue, step over,
step in and step out operations. Displays the call stack and
variable values for each stack frame. Currently only for Ltac.
See the documentation :ref:`here <rocqide-debugger>`
(`#14644 <https://github.com/coq/coq/pull/14644>`_,
fixes `#13967 <https://github.com/coq/coq/issues/13967>`_,
by Jim Fehrle)
- **Fixed:**
It is now possible to deactivate the unicode completion
mechanism in CoqIDE
(`#14863 <https://github.com/coq/coq/pull/14863>`_,
by Pierre-Marie Pédrot).
Standard library
^^^^^^^^^^^^^^^^
- **Changed:**
Permutation-related Proper instances are now at default priority instead of priority ``10``
(`#14574 <https://github.com/coq/coq/pull/14574>`_,
fixes `#14571 <https://github.com/coq/coq/issues/14571>`_,
by Gaëtan Gilbert).
- **Changed:**
The new type of `epsilon_smallest` is
`(exists n : nat, P n) -> { n : nat | P n /\ forall k, P k -> n <= k }`.
Here the minimality of `n` is expressed by `forall k, P k -> n <= k`
corresponding to the intuitive meaning of minimality
"the others are greater", whereas the previous version used
the negative equivalent formulation `forall k, k < n -> ~P k`.
Scripts using `epsilon_smallest` can easily be adapted using
lemmas `le_not_lt` and `lt_not_le` from the standard library
(`#14601 <https://github.com/coq/coq/pull/14601>`_,
by Jean-Francois Monin).
- **Changed:**
``ltb`` and ``leb`` functions for ``ascii``, into comparison-based definition
(`#14234 <https://github.com/coq/coq/pull/14234>`_,
by Yishuai Li).
- **Removed:**
the file ``Numeral.v`` that was replaced by ``Number.v`` in 8.13
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Removed:**
some ``*_invol`` functions that were renamed ``*_involutive`` for consistency with the remaining of the stdlib in 8.13
(`#14819 <https://github.com/coq/coq/pull/14819>`_,
by Pierre Roux).
- **Deprecated:**
``frexp`` and ``ldexp`` in `FloatOps.v`, renamed ``Z.frexp`` and ``Z.ldexp``
(`#15085 <https://github.com/coq/coq/pull/15085>`_,
by Pierre Roux).
- **Added:**
A proof that incoherent equivalences can be adjusted to adjoint equivalences in ``Logic.Adjointification``
(`#13408 <https://github.com/coq/coq/pull/13408>`_,
by Jasper Hugunin).
- **Added:**
``ltb`` and ``leb`` functions for ``string``, and some lemmas about them;
- **Added:**
simple non dependent product ``slexprod`` in
``Relations/Relation_Operators.v`` and its proof of well-foundness
``wf_slexprod`` in ``Wellfounded/Lexicographic_Product.v``
(`#14809 <https://github.com/coq/coq/pull/14809>`_,
by Laurent Thery).
- **Added:**
The notations ``(x; y)``, ``x.1``, ``x.2`` for sigT are now exported and available after ``Import SigTNotations.``
(`#14813 <https://github.com/coq/coq/pull/14813>`_, by Laurent Théry).
- **Added:**
The function ``sigT_of_prod`` turns a pair ``A * B`` into ``{_ : A & B}``. Its inverse function is ``prod_of_sigT``. This is shown by theorems ``sigT_prod_sigT`` and ``prod_sigT_prod``
(`#14813 <https://github.com/coq/coq/pull/14813>`_, by Laurent Théry).
- **Fixed:**
``split_combine`` lemma for lists, making it usable
(`#14458 <https://github.com/coq/coq/pull/14458>`_,
by Yishuai Li).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Coq's continuous integration now provides a more accessible Windows
installer artifact in the "Checks" GitHub tab, both for pull
requests and the `master` branch.
This facilitates testing Coq's bleeding edge builds on Windows, and
should be more reliable than the previous setup (`#12425
<https://github.com/coq/coq/pull/12425>`_, by Emilio Jesus Gallego
Arias).
- **Changed:**
Coq's ``./configure`` script has gone through a major cleanup. In
particular, the following options have been removed:
- ``-force-caml-version``, ``-force-findlib-version``: Coq won't
compile with OCaml or findlib lower than the required versions;
- ``-vmbyteflags``, ``-custom``, ``-no-custom``: linking options for
toplevels are now controlled in ``topbin/dune``;
- ``-ocamlfind``: Coq will now use the toolchain specified in the
Dune configuration; this can be controlled using the workspaces
feature;
- ``-nodebug``: Coq will now follow the standard, which is to always
pass ``-g`` to OCaml; this can be modified using a custom Dune
workspace;
- ``-flambda-opts``: compilation options are now set in Coq's root
``dune`` file, can be updated using a custom Dune workspace;
- ``-local``, ``-bindir``, ``-coqdocdir``, ``-annotate``,
``-camldir``, ``-profiling``: these flags were deprecated in 8.14,
and are now removed.
Moreover, the ``-annot`` and ``-bin-annot`` flags only take effect
to set ``coq-makefile``'s defaults
(`#14189 <https://github.com/coq/coq/pull/14189>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
Configure will now detect the Dune version, and will correctly pass
``-etcdir`` and ``-docdir`` to the install procedure if Dune >= 2.9 is available.
Note that the ``-docdir`` configure option now refers to root path for documentation.
If you would like to install Coq documentation in ``foo/coq``, use
``-docdir foo``
(`#14844 <https://github.com/coq/coq/pull/14844>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
OCaml 4.13 is now officially supported
(`#14879 <https://github.com/coq/coq/pull/14879>`_,
by Emilio Jesus Gallego Arias)
- **Changed:**
Sphinx 3.0.2 or above is now required to build the reference manual
(`#14963 <https://github.com/coq/coq/pull/14263>`_,
by Théo Zimmermann)
Extraction
^^^^^^^^^^
- **Changed:** replaced ``Big`` module with ``Big_int_Z`` functions from ``zarith``.
OCaml code extracted with the following modules should be linked to the
`Zarith <https://github.com/ocaml/Zarith>`_ library.
+ ``ExtrOcamlNatBigInt``
+ ``ExtrOcamlZBigInt``
Removed ``ExtrOcamlBigIntConv`` module.
(`#8252 <https://github.com/coq/coq/pull/8252>`_, by Yishuai Li).
- **Fixed:**
compilation errors in ExtrOcamlString and ExtrOcamlNativeString
(`#15075 <https://github.com/coq/coq/pull/15075>`_,
fixes `#15076 <https://github.com/coq/coq/issues/15076>`_,
by Yishuai Li).
Changes in 8.15.1
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
- **Fixed:**
cases of incompletenesses in the guard condition for fixpoints in
the presence of cofixpoints or primitive projections
(`#15498 <https://github.com/coq/coq/pull/15498>`_,
fixes `#15451 <https://github.com/coq/coq/issues/15451>`_,
by Hugo Herbelin).
- **Fixed:**
inconsistency when using module subtyping with squashed inductives
(`#15839 <https://github.com/coq/coq/pull/15839>`_,
fixes `#15838 <https://github.com/coq/coq/issues/15838>`_ (reported by Pierre-Marie Pédrot),
by Gaëtan Gilbert).
Notations
^^^^^^^^^
- **Fixed:**
Check for prior declaration of a custom entry was missing for notations in only printing mode
(`#15628 <https://github.com/coq/coq/pull/15628>`_,
fixes `#15619 <https://github.com/coq/coq/issues/15619>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
- **Fixed:**
:tacn:`rewrite_strat` regression in 8.15.0 related to `Transitive` instances
(`#15577 <https://github.com/coq/coq/pull/15577>`_,
fixes `#15568 <https://github.com/coq/coq/issues/15568>`_,
by Gaëtan Gilbert).
- **Fixed:**
When :tacn:`setoid_rewrite` succeeds in rewriting at some occurrence but the resulting equality is the identity, it now tries rewriting in subterms of that occurrence instead of giving up
(`#15612 <https://github.com/coq/coq/pull/15612>`_,
fixes `#8080 <https://github.com/coq/coq/issues/8080>`_,
by Gaëtan Gilbert).
- **Fixed:**
Ill-typed goals created by :tacn:`clearbody` in the presence of
transitive dependencies in the body of a hypothesis
(`#15634 <https://github.com/coq/coq/pull/15634>`_,
fixes `#15606 <https://github.com/coq/coq/issues/15606>`_,
by Hugo Herbelin).
- **Fixed:**
:tacn:`cbn` knows to refold fixpoints when :cmd:`Arguments` with ``/`` and ``!`` was used
(`#15653 <https://github.com/coq/coq/pull/15653>`_,
fixes `#15567 <https://github.com/coq/coq/issues/15567>`_,
by Gaëtan Gilbert).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Fixed:**
a bug where :n:`coqc -vok` was not creating an empty '.vok' file
(`#15745 <https://github.com/coq/coq/pull/15745>`_,
by Ramkumar Ramachandra).
CoqIDE
^^^^^^
- **Fixed:**
Line numbers shown in the Errors panel were incorrect;
they didn't match the error locations in the script panel
(`#15532 <https://github.com/coq/coq/pull/15532>`_,
fixes `#15531 <https://github.com/coq/coq/issues/15531>`_,
by Jim Fehrle).
- **Fixed:**
anomaly when using proof diffs with no focused goal
(`#15633 <https://github.com/coq/coq/pull/15633>`_,
fixes `#15578 <https://github.com/coq/coq/issues/15578>`_,
by Jim Fehrle).
- **Fixed:**
Attempted edits to the processed part of a buffer while
Coq is busy processing a request are now ignored to
ensure "processed" highlighting is accurate
(`#15714 <https://github.com/coq/coq/pull/15714>`_,
fixes `#15733 <https://github.com/coq/coq/issues/15733>`_
and `#15675 <https://github.com/coq/coq/issues/15675>`_
and `#15725 <https://github.com/coq/coq/issues/15725>`_,
by Jim Fehrle).
Miscellaneous
^^^^^^^^^^^^^
- **Fixed:**
Ensure that the names of arguments of inductive schemes are distinct
so that the new Coq 8.15 preservation of argument names in the ``with``
clause of tactics in `#13837 <https://github.com/coq/coq/pull/13837>`_
works as in Coq 8.14 for these schemes
(`#15537 <https://github.com/coq/coq/pull/15537>`_,
fixes `#15420 <https://github.com/coq/coq/issues/15420>`_,
by Hugo Herbelin).
Changes in 8.15.2
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Tactics
^^^^^^^
- **Added:**
:tacn:`intuition` and :tacn:`dintuition` use ``Tauto.intuition_solver`` (defined as ``auto with *``) instead of hardcoding ``auto with *``.
This makes it possible to change the default solver with ``Ltac Tauto.intuition_solver ::= ...``
(`#15866 <https://github.com/coq/coq/pull/15866>`_,
fixes `#7725 <https://github.com/coq/coq/issues/7725>`_,
by Gaëtan Gilbert).
- **Fixed:**
uncaught exception ``UnableToUnify`` with bidirectionality hints
(`#16066 <https://github.com/coq/coq/pull/16066>`_,
fixes `#16063 <https://github.com/coq/coq/issues/16063>`_,
by Gaëtan Gilbert).
CoqIDE
^^^^^^
- **Fixed:**
multiple CoqIDE bugs
(`#15938 <https://github.com/coq/coq/pull/15938>`_,
fixes `#15861 <https://github.com/coq/coq/issues/15861>`_,
`#15939 <https://github.com/coq/coq/pull/15939>`_,
fixes `#15882 <https://github.com/coq/coq/issues/15882>`_,
`#15964 <https://github.com/coq/coq/pull/15964>`_,
fixes `#15799 <https://github.com/coq/coq/issues/15799>`_,
`#15984 <https://github.com/coq/coq/pull/15984>`_,
partially fixes `#15873 <https://github.com/coq/coq/issues/15873>`_,
`#15996 <https://github.com/coq/coq/pull/15996>`_,
`#15912 <https://github.com/coq/coq/pull/15912>`_,
fixes `#15903 <https://github.com/coq/coq/issues/15903>`_,
all by Jim Fehrle).
Standard library
^^^^^^^^^^^^^^^^
- **Fixed:**
an incorrect implementation of SFClassify, allowing for a proof of False since
8.11.0, due to Axioms present in Float.Axioms
(`#16101 <https://github.com/coq/coq/pull/16101>`_,
fixes `#16096 <https://github.com/coq/coq/issues/16096>`_,
by Ali Caglayan).
Version 8.14
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.14 integrates many usability improvements, as well
as an important change in the core language. The main changes include:
- The :ref:`internal representation <814CaseRepresentation>` of `match` has changed
to a more space-efficient and cleaner structure, allowing the fix of a completeness
issue with cumulative inductive types in the type-checker.
The internal representation is now closer to the user-level view of `match`,
where the argument context of branches and the inductive binders `in` and `as`
do not carry type annotations.
- A :ref:`new <814CoqNative>` `coqnative` binary performs separate native compilation
of libraries, starting from a `.vo` file. It is supported by `coq_makefile`.
- :ref:`Improvements <814TCCanon>` to typeclasses and canonical structure
resolution, allowing more terms to be considered as classes or keys.
- More control over :ref:`notations <814Notations>` declarations and support
for primitive types in string and number notations.
- :ref:`Removal <814Tactics>` of deprecated tactics, notably `omega`, which has
been replaced by a greatly improved `lia`, along with many bug fixes.
- New :ref:`Ltac2 <814Ltac2>` APIs for interaction with Ltac1, manipulation of
inductive types and printing.
- Many :ref:`changes and additions <814Stdlib>` to the standard library in the numbers,
vectors and lists libraries. A new signed primitive integers library `Sint63`
is available in addition to the unsigned `Uint63` library.
See the `Changes in 8.14.0`_ section below for the detailed list of changes,
including potentially breaking changes marked with **Changed**.
Coq's `reference manual <https://coq.github.io/doc/v8.14/refman>`_,
`documentation of the standard library <https://coq.github.io/doc/v8.14/stdlib>`_
and `developer documentation of the ML API <https://coq.github.io/doc/v8.14/api>`_
are also available.
Emilio Jesús Gallego Arias, Gaëtan Gilbert, Michael
Soegtrop and Théo Zimmermann worked on maintaining and improving the
continuous integration system and package building infrastructure.
Erik Martin-Dorel has maintained the `Coq Docker images
<https://hub.docker.com/r/coqorg/coq>`_ that are used in many Coq
projects for continuous integration.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Karl Palmskog, Matthieu Sozeau and Enrico Tassi with
contributions from many users. A list of packages is available at
https://coq.inria.fr/opam/www/.
The `Coq Platform <https://github.com/coq/platform>`_ has been maintained
by Michael Soegtrop and Enrico Tassi.
Our current maintainers are Yves Bertot, Frédéric Besson, Ali Caglayan, Tej
Chajed, Cyril Cohen, Pierre Corbineau, Pierre Courtieu, Maxime Dénès,
Jim Fehrle, Julien Forest, Emilio Jesús Gallego Arias, Gaëtan Gilbert,
Georges Gonthier, Benjamin Grégoire, Jason Gross, Hugo Herbelin,
Vincent Laporte, Olivier Laurent, Assia Mahboubi, Kenji Maillard,
Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel, Pierre Roux,
Kazuhiko Sakaguchi, Vincent Semeria, Michael Soegtrop, Arnaud Spiwack,
Matthieu Sozeau, Enrico Tassi, Laurent Théry, Anton Trunov, Li-yao Xia
and Théo Zimmermann. See the `Coq Team face book <https://coq.inria.fr/coq-team.html>`_
page for more details.
The 54 contributors to this version are Reynald Affeldt,
Arthur Azevedo de Amorim, Yves Bertot, Frédéric Besson, Lasse Blaauwbroek, Ana Borges,
Ali Caglayan, Cyril Cohen, Pierre Courtieu, Maxime Dénès, Stéphane Desarzens, Andrej Dudenhefner,
Jim Fehrle, Yannick Forster, Simon Friis Vindum, Gaëtan Gilbert, Jason Gross, Samuel Gruetter, Stefan Haan,
Hugo Herbelin, Jasper Hugunin, Emilio Jesús Gallego Arias, Jacques-Henri Jourdan,
Ralf Jung, Jan-Oliver Kaiser, Fabian Kunze, Vincent Laporte, Olivier Laurent,
Yishuai Li, Barry M. Trager, Kenji Maillard, Erik Martin-Dorel, Guillaume Melquiond,
Isaac Oscar Gariano, Pierre-Marie Pédrot, Rudy Peterson, Clément Pit-Claudel, Pierre Roux,
Takafumi Saikawa, Kazuhiko Sakaguchi, Gabriel Scherer, Vincent Semeria, shenlebantongying,
Avi Shinnar, slrnsc, Michael Soegtrop, Matthieu Sozeau, Enrico Tassi, Hendrik Tews, Anton Trunov,
Karolin Varner, Li-yao Xia, Beta Ziliani and Théo Zimmermann.
The Coq community at large helped improve the design of this new version via
the GitHub issue and pull request system, the Coq development mailing list
coqdev@inria.fr, the coq-club@inria.fr mailing list, the `Discourse forum
<https://coq.discourse.group/>`_ and the `Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.14's development spanned 9 months from the release of
Coq 8.13.0. Guillaume Melquiond is the release manager of Coq 8.14.
This release is the result of 522 merged PRs, closing ~150 issues.
| Nantes, September 2021,
| Matthieu Sozeau for the Coq development team
Changes in 8.14.0
~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
.. _814CaseRepresentation:
- **Changed:**
The term representation of pattern-matchings now uses a compact form that
provides a few static guarantees such as eta-expansion of branches and return
clauses and is usually more efficient. The most visible user change is that for
the time being, the :tacn:`destruct` tactic and its variants generate dummy
cuts (β redexes) in the branches of the generated proof.
This can also generate very uncommon backwards incompatibilities, such as a
change of occurrence numbering for subterms, or breakage of unification in
complex situations involving pattern-matchings whose underlying inductive type
declares let-bindings in parameters, arity or constructor types. For ML plugin
developers, an in-depth description of the new representation, as well as
porting tips, can be found in dev/doc/case-repr.md
(`#13563 <https://github.com/coq/coq/pull/13563>`_,
fixes `#3166 <https://github.com/coq/coq/issues/3166>`_,
by Pierre-Marie Pédrot).
- **Changed:**
Linking of native-code libraries used by :tacn:`native_compute` is now delayed
until an actual call to the :tacn:`native_compute` machinery is
performed. This should make Coq more responsive on some systems
(`#13853 <https://github.com/coq/coq/pull/13853>`_, fixes `#13849
<https://github.com/coq/coq/issues/13849>`_, by Guillaume Melquiond).
- **Removed:** The ability to change typing flags inside
sections to prevent exploiting a weakness in :cmd:`Print
Assumptions` (`#14395 <https://github.com/coq/coq/pull/14395>`_,
fixes `#14317 <https://github.com/coq/coq/issues/14317>`_, by Gaëtan
Gilbert).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _814TCCanon:
- **Changed:**
The hints mode ``!`` matches a term iff the applicative head is not an existential variable.
It now also matches projections applied to any term or a `match` on any term
(`#14392 <https://github.com/coq/coq/pull/14392>`_,
by Matthieu Sozeau).
- **Removed:**
The little used `:>` type cast, which was only interpreted in Program-mode
(`#13911 <https://github.com/coq/coq/pull/13911>`_,
by Jim Fehrle and Théo Zimmermann).
- **Added:**
Enable canonical `fun _ => _` projections,
see :ref:`canonicalstructures` for details
(`#14041 <https://github.com/coq/coq/pull/14041>`_,
by Jan-Oliver Kaiser and Pierre Roux,
reviewed by Cyril Cohen and Enrico Tassi).
- **Added:**
:cmd:`Canonical Structure` declarations now accept dependent function types
`forall _, _` as keys
(`#14386 <https://github.com/coq/coq/pull/14386>`_,
by Jan-Oliver Kaiser and Kazuhiko Sakaguchi).
- **Added:**
Ability to declare primitive projections as class, for dependent typeclass resolutions
(`#9711 <https://github.com/coq/coq/pull/9711>`_,
fixes `#12975 <https://github.com/coq/coq/issues/12975>`_,
by Matthieu Sozeau).
- **Fixed:**
Multiple printing of same warning about unused variables catching several cases
(`#14261 <https://github.com/coq/coq/pull/14261>`_,
fixes `#14207 <https://github.com/coq/coq/issues/14207>`_,
by Hugo Herbelin).
- **Fixed:**
Constants :g:`id` and :g:`not` were unduly set opaque in some parts
of the unification algorithm
(`#14371 <https://github.com/coq/coq/pull/14371>`_,
fixes `#14374 <https://github.com/coq/coq/issues/14374>`_,
by Hugo Herbelin).
Notations
^^^^^^^^^
.. _814Notations:
- **Changed:**
Flag :flag:`Printing Notations` no longer controls
whether strings and numbers are printed raw
(`#13840 <https://github.com/coq/coq/pull/13840>`_,
by Enrico Tassi).
- **Changed:**
The error ``Argument X was previously inferred to be in scope
XXX_scope but is here used in YYY_scope.`` is now the warning
``[inconsistent-scopes,syntax]`` and can be silenced by
specifying the scope of the argument
(`#13965 <https://github.com/coq/coq/pull/13965>`_,
by Enrico Tassi).
- **Removed:**
Decimal-only number notations which were deprecated in 8.12
(`#13842 <https://github.com/coq/coq/pull/13842>`_, by Pierre Roux).
- **Added:**
:cmd:`Number Notation` and :cmd:`String Notation` now support
parsing and printing of primitive floats, primitive arrays
and type constants of primitive types
(`#13519 <https://github.com/coq/coq/pull/13519>`_,
fixes `#13484 <https://github.com/coq/coq/issues/13484>`_
and `#13517 <https://github.com/coq/coq/issues/13517>`_,
by Fabian Kunze, with help of Jason Gross)
- **Added:**
Flag :flag:`Printing Raw Literals` to control whether
strings and numbers are printed raw
(`#13840 <https://github.com/coq/coq/pull/13840>`_,
by Enrico Tassi).
- **Added:**
Let the user specify a scope for abbreviation arguments, e.g.
``Notation abbr X := t (X in scope my_scope)``
(`#13965 <https://github.com/coq/coq/pull/13965>`_,
by Enrico Tassi).
- **Added:**
Look-ahead of tokens is changed from sequential to tree-based,
allowing more automatic rule factorizations in notations
(`#14070 <https://github.com/coq/coq/pull/14070>`_,
by Hugo Herbelin).
- **Fixed:**
Non-local custom entries survive module closing and are
declared when a file is Required
(`#14183 <https://github.com/coq/coq/pull/14183>`_,
fixes `#13654 <https://github.com/coq/coq/issues/13654>`_,
by Gaëtan Gilbert).
- **Fixed:**
:g:`ident` modifier in custom entry notations gave fatal errors at printing time
(`#14257 <https://github.com/coq/coq/pull/14257>`_,
fixes `#14211 <https://github.com/coq/coq/issues/14211>`_,
by Hugo Herbelin).
- **Fixed:**
Anomaly when overriding a notation with different applicability in
:g:`match` patterns
(`#14377 <https://github.com/coq/coq/pull/14377>`_,
fixes `#13966 <https://github.com/coq/coq/issues/13966>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
.. _814Tactics:
- **Changed:**
More systematic checks that occurrences of an :n:`at` clause are
valid in tactics such as :tacn:`rewrite` or :tacn:`pattern`
(`#13568 <https://github.com/coq/coq/pull/13568>`_,
fixes `#13566 <https://github.com/coq/coq/issues/13566>`_,
by Hugo Herbelin).
- **Removed:**
:tacn:`fail` and :tacn:`gfail`, which formerly accepted negative
values as a parameter, now give syntax errors for negative
values (`#13469 <https://github.com/coq/coq/pull/13469>`_,
by Jim Fehrle).
- **Removed:**
Deprecated flag ``Bracketing Last Introduction Pattern`` affecting the
behavior of trailing disjunctive introduction patterns is
definitively removed
(`#13509 <https://github.com/coq/coq/pull/13509>`_,
by Hugo Herbelin).
- **Removed:**
The `omega` tactic (deprecated in 8.12) and four `* Omega *` flags.
Use `lia` instead
(`#13741 <https://github.com/coq/coq/pull/13741>`_,
by Jim Fehrle, who addressed the final details, building on much work by
Frédéric Besson, who greatly improved :tacn:`lia`, Maxime Dénès,
Vincent Laporte and with the help of many package maintainers, among others).
- **Removed:**
convert_concl_no_check. Use :tacn:`change_no_check` instead
(`#13761 <https://github.com/coq/coq/pull/13761>`_,
by Jim Fehrle).
- **Removed:**
double induction tactic. Replace :n:`double induction @ident @ident`
with :n:`induction @ident; induction @ident` (or
:n:`induction @ident ; destruct @ident` depending on the exact needs).
Replace :n:`double induction @natural__1 @natural__2` with
:n:`induction @natural__1; induction natural__3` where :n:`natural__3` is the result
of :n:`natural__2 - natural__1`
(`#13762 <https://github.com/coq/coq/pull/13762>`_,
by Jim Fehrle).
- **Deprecated:**
In :tacn:`change` and :tacn:`change_no_check`, the
`at ... with ...` form is deprecated. Use
`with ... at ...` instead. For `at ... with ... in H |-`,
use `with ... in H at ... |-`
(`#13696 <https://github.com/coq/coq/pull/13696>`_,
by Jim Fehrle).
- **Deprecated:**
The micromega option `Simplex`, which is currently set by default
(`#13781 <https://github.com/coq/coq/pull/13781>`_, by Frédéric Besson).
- **Deprecated:**
the undocumented `new auto` tactic
(`#14528 <https://github.com/coq/coq/pull/14528>`_,
by Pierre-Marie Pédrot).
- **Added:**
:tacn:`lia` supports the boolean operator `Bool.implb` (`#13715 <https://github.com/coq/coq/pull/13715>`_, by Frédéric Besson).
- **Added:**
``zify`` (``lia``/``nia``) support for :g:`div`, :g:`mod`, :g:`pow`
for :g:`Nat` (via ``ZifyNat`` module) and :g:`N` (via ``ZifyN`` module).
The signature of :g:`Z_div_mod_eq_full` has no assumptions
(`#14037 <https://github.com/coq/coq/pull/14037>`_,
fixes `#11447 <https://github.com/coq/coq/issues/11447>`_,
by Andrej Dudenhefner, Jason Gross, and Frédéric Besson).
- **Added:**
Ltac2 now has a `unify` tactic
(`#14089 <https://github.com/coq/coq/pull/14089>`_,
fixes `#14083 <https://github.com/coq/coq/issues/14083>`_,
by Samuel Gruetter).
- **Added:**
:tacn:`inversion_sigma` can now be applied to a specified hypothesis
and additionally supports intropatterns, so it can be used much like
:tacn:`induction` and :tacn:`inversion`. Additionally,
:tacn:`inversion_sigma` now supports the types :n:`ex` (:n:`exists x
: A, P x`) and :n:`ex2` (:n:`exists2 x : A, P x & Q x`) in cases
where the first argument :n:`A` is a :n:`Prop` (`#14174
<https://github.com/coq/coq/pull/14174>`_, by Jason Gross).
- **Added:**
``zify`` (``lia``/``nia``) support for ``Sint63``
(`#14408 <https://github.com/coq/coq/pull/14408>`_,
by Ana Borges, with help from Frédéric Besson).
- **Fixed:**
Possible collision between a user-level name and an internal name when
using the :n:`%` introduction pattern
(`#13512 <https://github.com/coq/coq/pull/13512>`_,
fixes `#13413 <https://github.com/coq/coq/issues/13413>`_,
by Hugo Herbelin).
- **Fixed:**
:tacn:`simpl` and :tacn:`hnf` now reduce primitive functions
on primitive integers, floats and arrays
(`#13699 <https://github.com/coq/coq/pull/13699>`_,
fixes `#13579 <https://github.com/coq/coq/issues/13579>`_,
by Pierre Roux).
- **Fixed:**
Setoid rewriting now remembers the (invisible) binder names of non-dependent product types. SSReflect's rewrite tactic expects these names to be retained when using ``rewrite foo in H``.
This also fixes SSR ``rewrite foo in H *`` erroneously reverting ``H``
(`#13882 <https://github.com/coq/coq/pull/13882>`_,
fixes `#12011 <https://github.com/coq/coq/issues/12011>`_,
by Gaëtan Gilbert).
- **Fixed:**
Properly expand projection parameters in hint discrimination
nets. (`#14033 <https://github.com/coq/coq/pull/14033>`_,
fixes `#9000 <https://github.com/coq/coq/issues/9000>`_,
`#14009 <https://github.com/coq/coq/issues/14009>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
anomalies caused by empty strings in Ltac notations are now errors
(`#14378 <https://github.com/coq/coq/pull/14378>`_,
fixes `#14124 <https://github.com/coq/coq/issues/14124>`_,
by Hugo Herbelin).
- **Fixed:**
Print a message instead of a Diff_Failure anomaly when
old and new goals can't be matched; show the goal without
diff highlights
(`#14457 <https://github.com/coq/coq/pull/14457>`_,
fixes `#14425 <https://github.com/coq/coq/issues/14425>`_,
by Jim Fehrle).
- **Fixed:**
Anomaly of :tacn:`destruct` on terms with dependent variables unused in goal
(`#15099 <https://github.com/coq/coq/pull/15099>`_,
fixes `#11504 <https://github.com/coq/coq/issues/11504>`_
and `#14090 <https://github.com/coq/coq/issues/14090>`_,
by Lasse Blaauwbroek and Hugo Herbelin).
- **Fixed:**
Correct convertibility of multiple terms selected by patterns in
tactics such as :tacn:`set` when these terms have subterms in
`SProp`
(`#14610 <https://github.com/coq/coq/pull/14610>`_,
fixes `#14609 <https://github.com/coq/coq/issues/14609>`_,
by Hugo Herbelin).
Tactic language
^^^^^^^^^^^^^^^
.. _814Ltac2:
- **Changed:**
Renamed Ltac2 ``Bool.eq`` into ``Bool.equal`` for uniformity.
The old function is now a deprecated alias
(`#14128 <https://github.com/coq/coq/pull/14128>`_,
by Pierre-Marie Pédrot).
- **Added:**
A ``printf`` macro to Ltac2. It can be made accessible by
importing the ``Ltac2.Printf`` module. See the documentation
there for more information
(`#13236 <https://github.com/coq/coq/pull/13236>`_,
fixes `#10108 <https://github.com/coq/coq/issues/10108>`_,
by Pierre-Marie Pédrot).
- **Added:**
A function ``Ltac1.lambda`` allowing to embed Ltac2 functions
into Ltac1 runtime values
(`#13442 <https://github.com/coq/coq/pull/13442>`_,
fixes `#12871 <https://github.com/coq/coq/issues/12871>`_,
by Pierre-Marie Pédrot).
- **Added:**
Ltac2 commands defining terms now accept the :attr:`deprecated`
attribute
(`#13774 <https://github.com/coq/coq/pull/13774>`_,
fixes `#12317 <https://github.com/coq/coq/issues/12317>`_,
by Pierre-Marie Pédrot).
- **Added:**
Allow the presence of type casts for function return values, let bindings and
global definitions in Ltac2
(`#13914 <https://github.com/coq/coq/pull/13914>`_,
by Pierre-Marie Pédrot).
- **Added:**
The Ltac2 API `Ltac2.Ind` for manipulating inductive types
(`#13920 <https://github.com/coq/coq/pull/13920>`_,
fixes `#10095 <https://github.com/coq/coq/issues/10095>`_,
by Pierre-Marie Pédrot).
- **Added:**
Allow scope delimiters in Ltac2 ``open_constr:(...)`` quotation
(`#13939 <https://github.com/coq/coq/pull/13939>`_,
fixes `#12806 <https://github.com/coq/coq/issues/12806>`_,
by Pierre-Marie Pédrot).
- **Added:**
A FFI to convert between Ltac1 and Ltac2 identifiers
(`#13997 <https://github.com/coq/coq/pull/13997>`_,
fixes `#13996 <https://github.com/coq/coq/issues/13996>`_,
by Pierre-Marie Pédrot).
- **Added:**
Lazy evaluating boolean operators ``lazy_and``, ``lazy_or``, ``lazy_impl`` and infix notations ``&&`` and ``||`` to the Ltac2 `Bool.v` library l
(`#14081 <https://github.com/coq/coq/pull/14081>`_,
fixes `#13964 <https://github.com/coq/coq/issues/13964>`_,
by Michael Soegtrop).
- **Fixed:**
Ltac2 notations now correctly take into account their assigned level
(`#14094 <https://github.com/coq/coq/pull/14094>`_,
fixes `#11866 <https://github.com/coq/coq/issues/11866>`_,
by Pierre-Marie Pédrot).
SSReflect
^^^^^^^^^
- **Added:**
A test that the notations `{in _, _}` and `{pred _}` from `ssrbool.v` are displayed correctly
(`#13473 <https://github.com/coq/coq/pull/13473>`_,
by Cyril Cohen).
- **Added:**
Lemmas about interaction between :n:`{in _, _}`, :n:`{on _, _}`, and :n:`sig`
have been backported from Mathematical Components 1.12.0
(`#13490 <https://github.com/coq/coq/pull/13490>`_,
by Kazuhiko Sakaguchi).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
:cmd:`Hint Rewrite` now supports locality attributes (including :attr:`export`) like other :ref:`Hint <creating_hints>` commands
(`#13725 <https://github.com/coq/coq/pull/13725>`_,
fixes `#13724 <https://github.com/coq/coq/issues/13724>`_,
by Gaëtan Gilbert).
- **Changed:**
In :cmd:`Record`, alpha-rename the variable associated with the record to avoid
alpha-renaming parameters of projections
(`#13852 <https://github.com/coq/coq/pull/13852>`_,
fixes `#13727 <https://github.com/coq/coq/issues/13727>`_,
by Li-yao Xia).
- **Changed:**
Improve the :cmd:`Coercion` command to reduce the number of ambiguous paths to
report. A pair of multiple inheritance paths that can be reduced to smaller
adjoining pairs will not be reported as ambiguous paths anymore
(`#13909 <https://github.com/coq/coq/pull/13909>`_,
by Kazuhiko Sakaguchi).
- **Changed:**
The printing order of :cmd:`Print Classes` and :cmd:`Print Graph`, due to the
changes for the internal tables of coercion classes and coercion paths
(`#13912 <https://github.com/coq/coq/pull/13912>`_,
by Kazuhiko Sakaguchi).
- **Removed:**
The Hide Obligations flag, deprecated in 8.12
(`#13758 <https://github.com/coq/coq/pull/13758>`_,
by Jim Fehrle).
- **Removed:**
SearchHead command. Use the `headconcl:` clause of :cmd:`Search` instead
(`#13763 <https://github.com/coq/coq/pull/13763>`_,
by Jim Fehrle).
- **Removed:**
`Show Zify Spec`, `Add InjTyp` and 11 similar `Add *` commands.
For `Show Zify Spec`, use `Show Zify UnOpSpec` or `Show Zify BinOpSpec` instead.
For `Add *`, `Use Add Zify *` intead of `Add *`
(`#13764 <https://github.com/coq/coq/pull/13764>`_,
by Jim Fehrle).
- **Deprecated:**
Like hints, typeclass instances added outside of sections
without an explicit locality now generate a deprecation warning. See
:ref:`Hint <creating_hints>`
(`#14208 <https://github.com/coq/coq/pull/14208>`_,
fixes `#13562 <https://github.com/coq/coq/issues/13562>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
the `Regular Subst Tactic` flag
(`#14336 <https://github.com/coq/coq/pull/14336>`_,
by Pierre-Marie Pédrot).
- **Added:**
:opt:`Debug` to control debug messages, functioning similarly to the warning system
(`#13202 <https://github.com/coq/coq/pull/13202>`_,
by Maxime Dénès and Gaëtan Gilbert).
The following flags have been converted (such that ``Set Flag`` becomes ``Set Debug "flag"``):
- ``Debug Unification`` to ``unification``
- ``Debug HO Unification`` to ``ho-unification``
- ``Debug Tactic Unification`` to ``tactic-unification``
- ``Congruence Verbose`` to ``congruence``
- ``Debug Cbv`` to ``cbv``
- ``Debug RAKAM`` to ``RAKAM``
- ``Debug Ssreflect`` to ``ssreflect``
- **Added:**
The Ltac2 grammar can now be printed using the
Print Grammar ltac2 command
(`#14093 <https://github.com/coq/coq/pull/14093>`_,
fixes `#14092 <https://github.com/coq/coq/issues/14092>`_,
by Pierre-Marie Pédrot).
- **Added:**
:cmd:`Instance` now accepts the :attr:`export` locality
attribute
(`#14148 <https://github.com/coq/coq/pull/14148>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
extraction failure of a parameterized type in :g:`Prop` exported in
an module interface as an assumption in :g:`Type`
(`#14102 <https://github.com/coq/coq/pull/14102>`_,
fixes `#14100 <https://github.com/coq/coq/issues/14100>`_,
by Hugo Herbelin).
- **Fixed:**
Print Assumptions now treats delayed opaque proofs generated
by vos compilation as if they were axioms
(`#14382 <https://github.com/coq/coq/pull/14382>`_,
fixes `#13589 <https://github.com/coq/coq/issues/13589>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
Incorrect de Bruijn index handling in vernac class declaration,
preventing users from marking existing instances of existing classes
which are primitive projections
(`#14664 <https://github.com/coq/coq/pull/14664>`_,
fixes `#14652 <https://github.com/coq/coq/issues/14652>`_,
by Ali Caglayan and Hugo Herbelin).
Command-line tools
^^^^^^^^^^^^^^^^^^
- **Changed:**
`coqc` now enforces that at most a single `.v` file can be passed in
the command line. Support for multiple `.v` files in the form of
`coqc f1.v f2.v` didn't properly work in 8.13, tho it was accepted
(`#13876 <https://github.com/coq/coq/pull/13876>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
``coqdep`` now reports an error if files specified on the
command line don't exist or if it encounters unreadable files.
Unknown options now generate a warning. Previously these
conditions were ignored
(`#14024 <https://github.com/coq/coq/pull/14024>`_,
fixes `#14023 <https://github.com/coq/coq/issues/14023>`_,
by Hendrik Tews).
- **Changed:**
Makefiles produced by ``coq_makefile`` now use ``.DELETE_ON_ERROR``
(`#14238 <https://github.com/coq/coq/pull/14238>`_,
by Gaëtan Gilbert).
- **Removed:**
Previously deprecated command line options
``-sprop-cumulative`` and ``-input-state`` and its alias ``-is``
(`#13822 <https://github.com/coq/coq/pull/13822>`_,
by Gaëtan Gilbert).
- **Added:**
``coq_makefile``\-made ``Makefile``\s now support inclusion of a
``.local-late`` file at the end, allowing the user to access
more variables (`#12411 <https://github.com/coq/coq/pull/12411>`_, fixes
`#10912 <https://github.com/coq/coq/issues/10912>`_, by Jason Gross).
- **Fixed:**
Failure of extraction in the presence of inductive types with local
definitions in parameters
(`#13624 <https://github.com/coq/coq/pull/13624>`_,
fixes `#13581 <https://github.com/coq/coq/issues/13581>`_,
by Hugo Herbelin).
- **Fixed:**
File name was missing in coqdoc error position reporting
(`#14285 <https://github.com/coq/coq/pull/14285>`_,
fixes `#14283 <https://github.com/coq/coq/issues/14283>`_,
by Arthur Charguéraud and Hugo Herbelin).
Native Compilation
^^^^^^^^^^^^^^^^^^
.. _814CoqNative:
- **Changed:**
`coq_makefile` now uses the `coqnative` binary to generate
native compilation files. Project files also understand directly the
`-native-compiler` flag without having to wrap it with `-arg`
(`#14265 <https://github.com/coq/coq/pull/14265>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
the `-native-compiler` option for coqc. It is now recommended
to use the :ref:`rocqnative` binary instead to generate native
compilation files ahead of time
(`#14309 <https://github.com/coq/coq/pull/14309>`_,
by Pierre-Marie Pédrot).
- **Added:**
A standalone `coqnative` binary that performs native compilation
out of `vo` files, allowing to split library compilation from
native compilation. See :ref:`rocqnative`. The hybrid build
system was adapted to perform a split compilation on the stdlib
(`#13287 <https://github.com/coq/coq/pull/13287>`_,
by Pierre-Marie Pédrot).
CoqIDE
^^^^^^
.. _814CoqIDE:
- **Added:**
Ltac debugger support in CoqIDE (see :flag:`Ltac Debug`).
Debugger output and prompts appear in the Messages panel
(`#13783 <https://github.com/coq/coq/pull/13783>`_,
by Jim Fehrle and Emilio J. Gallego Arias).
- **Added:**
Shift-return in the Find dialog now searches backwards (`#13810 <https://github.com/coq/coq/pull/13810>`_,
by slrnsc).
Standard library
^^^^^^^^^^^^^^^^
.. _814Stdlib:
- **Changed:**
Minor Changes to ``Rpower``:
Generalizes ``exp_ineq1`` to hold for all non-zero numbers.
Adds ``exp_ineq1_le``, which holds for all reals (but is a ``<=`` instead of a ``<``)
(`#13582 <https://github.com/coq/coq/pull/13582>`_,
by Avi Shinnar and Barry Trager, with help from Laurent Théry).
- **Changed:**
set :g:`n mod 0 = n` uniformly for :g:`nat`, :g:`N`, :g:`Z`, :g:`int63`, :g:`sint63`, :g:`int31`
such that :g:`m = (m / n) * n + (m mod n)` holds (also for :g:`n = 0`)
.. warning:: code that relies on :g:`n mod 0 = 0` will break;
for compatibility with both :g:`n mod 0 = n` and :g:`n mod 0 = 0` you can use
:g:`n mod 0 = ltac:(match eval hnf in (1 mod 0) with |0 => exact 0 |_ => exact n end)`
(`#14086 <https://github.com/coq/coq/pull/14086>`_,
by Andrej Dudenhefner with help of Guillaume Melquiond, Jason Gross, and Kazuhiko Sakaguchi).
- **Changed:**
The standard library now contains a more complete theory of equality
on types of the form :g:`exists x : A, P x` and :g:`exists2 x : A, P
x & Q x` when we have :g:`A : Prop`. To bring this theory more in
line with the existing theory about sigma types,
:g:`eq_ex_uncurried`, :g:`eq_ex2_uncurried`, :g:`eq_ex`,
:g:`eq_ex2`, :g:`eq_ex_hprop`, :g:`eq_ex2_hprop` have been renamed
into :g:`eq_ex_intro_uncurried`, :g:`eq_ex_intro2_uncurried`,
:g:`eq_ex_intro`, :g:`eq_ex_intro2`, :g:`eq_ex_intro_hprop`,
:g:`eq_ex_intro2_hprop` respectively and the implicit status of
these lemmas has changed slightly (`#14174
<https://github.com/coq/coq/pull/14174>`_, by Jason Gross).
- **Changed**
Moved 39 lemmas and notations about the rationals `Q` from the constructive reals private file `theories/Reals/Cauchy/QExtra.v` to appropriate files in `theories/QArith`.
The now public lemmas are mostly about compatibility of multiplication and power with relational operators and simple convenience lemmas e.g. for reduction of `Q` values.
The following moved lemmas have been renamed:
`Q_factorDenom` to `Qmult_frac_l`,
`Q_reduce_fl` to `Qreduce_num_l`,
`Qle_neq` to `Qlt_leneq`,
`Qmult_lt_le_compat_nonneg` to `Qmult_le_lt_compat_pos`,
`Qpower_pos_lt` to `Qpower_0_lt`,
`Qpower_lt_1_increasing` to `Qpower_1_lt_pos`,
`Qpower_lt_1_increasing'` to `Qpower_1_lt`,
`Qpower_le_1_increasing` to `Qpower_1_le_pos`,
`Qpower_le_1_increasing'` to `Qpower_1_le`,
`Qzero_eq` to `Qreduce_zero`,
`Qpower_lt_compat` to `Qpower_lt_compat_l`,
`Qpower_le_compat` to `Qpower_le_compat_l`,
`Qpower_lt_compat_inv` to `Qpower_lt_compat_l_inv`,
`Qpower_le_compat_inv` to `Qpower_le_compat_l_inv`,
`Qpower_decomp'` to `Qpower_decomp_pos` and
`QarchimedeanExp2_Pos` to `Qarchimedean_power2_pos`.
The following lemmas have been renamed and the sides of the equality swapped:
`Qinv_swap_pos` to `Qinv_pos`,
`Qinv_swap_neg` to `Qinv_neg` and.
The following lemmas have been deleted:
`Q_factorNum_l` and `Q_factorNum`.
The lemma `Qopp_lt_compat` has been moved from `theories/QArith/Qround.v` to `theories/QArith/QArith_base.v`.
About 10 additional lemmas have been added for similar cases as the moved lemmas.
Compatibility notations are not provided because QExtra is considered internal (excluded from the library documentation)
(`#14293 <https://github.com/coq/coq/pull/14293>`_,
by Michael Soegtrop).
- **Changed:**
Importing `ZArith` no longer has the side-effect of closing `Z_scope`
(`#14343 <https://github.com/coq/coq/pull/14343>`_,
fixes `#13307 <https://github.com/coq/coq/issues/13307>`_,
by Ralf Jung).
- **Removed:**
``IF_then_else`` definition and corresponding ``IF P then Q else R`` notation
(`#13871 <https://github.com/coq/coq/pull/13871>`_,
by Yishuai Li).
- **Removed:**
from ``List.v`` deprecated/unexpected dependencies ``Setoid``, ``Le``, ``Gt``, ``Minus``, ``Lt``
(`#13986 <https://github.com/coq/coq/pull/13986>`_,
by Andrej Dudenhefner).
- **Deprecated:**
Unsigned primitive integers are now named ``uint63`` instead of ``int63``.
The ``Int63`` module is replaced by ``Uint63``. The full list of changes
is described in the PR
(`#13895 <https://github.com/coq/coq/pull/13895>`_,
by Ana Borges).
- **Added:**
``leb`` and ``ltb`` functions for ``ascii``
(`#13080 <https://github.com/coq/coq/pull/13080>`_,
by Yishuai Li).
- **Added:**
Library for signed primitive integers, Sint63. The following operations were added to the kernel: division, remainder, comparison functions, and arithmetic shift right. Everything else works the same for signed and unsigned ints
(`#13559 <https://github.com/coq/coq/pull/13559>`_,
fixes `#12109 <https://github.com/coq/coq/issues/12109>`_,
by Ana Borges, Guillaume Melquiond and Pierre Roux).
- **Added:**
Lemmas about vectors related with ``to_list``: ``length_to_list``, ``of_list_to_list_opp``, ``to_list_nil``, ``to_list_cons``, ``to_list_hd``, ``to_list_last``, ``to_list_const``, ``to_list_nth_order``, ``to_list_tl``, ``to_list_append``, ``to_list_rev_append_tail``, ``to_list_rev_append``, ``to_list_rev``, ``to_list_map``, ``to_list_fold_left``, ``to_list_fold_right``, ``to_list_Forall``, ``to_list_Exists``, ``to_list_In``, ``to_list_Forall2``
(`#13671 <https://github.com/coq/coq/pull/13671>`_,
by Olivier Laurent).
- **Added:**
Lemmas about ``count_occ``: ``count_occ_app``, ``count_occ_elt_eq``, ``count_occ_elt_neq``, ``count_occ_bound``, ``count_occ_repeat_eq``, ``count_occ_repeat_neq``, ``count_occ_unique``, ``count_occ_repeat_excl``, ``count_occ_sgt``, ``Permutation_count_occ``
(`#13804 <https://github.com/coq/coq/pull/13804>`_,
by Olivier Laurent with help of Jean-Christophe Léchenet).
- **Added:**
Lemmas to ``List``: ``Exists_map``, ``Exists_concat``, ``Exists_flat_map``, ``Forall_map``, ``Forall_concat``, ``Forall_flat_map``, ``nth_error_map``, ``nth_repeat``, ``nth_error_repeat``
(`#13955 <https://github.com/coq/coq/pull/13955>`_,
by Andrej Dudenhefner, with help from Olivier Laurent).
- **Added:**
``Cantor.v`` containing the Cantor pairing function and its inverse.
``Cantor.to_nat : nat * nat -> nat`` and ``Cantor.of_nat : nat -> nat * nat``
are the respective bijections between ``nat * nat`` and ``nat``
(`#14008 <https://github.com/coq/coq/pull/14008>`_,
by Andrej Dudenhefner).
- **Added:**
Lemmas to ``Q``: ``Qeq_from_parts``, ``Qden_cancel``, ``Qnum_cancel``, ``Qreduce_l``, ``Qreduce_r``, ``Qmult_inject_Z_l``, ``Qmult_inject_Z_r`` QArith_base
Reduction of rationals; establishing equality for Qden/Qnum separately
(`#14087 <https://github.com/coq/coq/pull/14087>`_,
by Karolin Varner).
- **Added:**
``Coq.Structures.OrdersEx.String_as_OT`` and
``Coq.Structures.OrdersEx.Ascii_as_OT`` to make strings and ascii ordered
types (using lexical order). (`#14096
<https://github.com/coq/coq/pull/14096>`_, by Jason Gross).
- **Added:**
Lemmas :g:`app_eq_app`, :g:`Forall_nil_iff`, :g:`Forall_cons_iff` to ``List.v``
(`#14153 <https://github.com/coq/coq/pull/14153>`_,
closes `#1803 <https://github.com/coq/coq/issues/1803>`_,
by Andrej Dudenhefner, with help from Olivier Laurent).
- **Added:**
``Z``, ``positive`` and ``N`` constants can now be printed in hexadecimal by
opening ``hex_Z_scope``, ``hex_positive_scope``, and ``hex_N_scope``
respectively (`#14263 <https://github.com/coq/coq/pull/14263>`_, by Jason
Gross).
- **Added:**
Absolute value function for Sint63
(`#14384 <https://github.com/coq/coq/pull/14384>`_,
by Ana Borges).
- **Added:**
Lemmas showing :g:`firstn` and :g:`skipn` commute with :g:`map`
(`#14406 <https://github.com/coq/coq/pull/14406>`_,
by Rudy Peterson).
- **Fixed:**
Haskell extraction is now compatible with GHC versions >= 9.0. Some ``#if``
statements have been added to extract ``unsafeCoerce`` to its new location in
newer versions of GHC. (`#14345 <https://github.com/coq/coq/pull/14345>`_,
fixes `#14256 <https://github.com/coq/coq/issues/14256>`_, by Jason Gross).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _814Dune:
- **Changed:**
Coq's configure script now requires absolute paths for the `-prefix`
option
(`#12567 <https://github.com/coq/coq/pull/12567>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
The regular Coq package has been split in two: coq-core, with
OCaml-based libraries and tools; and coq-stdlib, which contains the
Gallina-based standard library. The package Coq now depends on both
for compatiblity
(`#12567 <https://github.com/coq/coq/pull/12567>`_,
by Emilio Jesus Gallego Arias, review by Vincent Laporte, Guillaume
Melquiond, Enrico Tassi, and Théo Zimmerman).
- **Changed:**
Coq's OCaml parts and tools [``coq-core``] are now built using Dune.
The main user-facing change is that Dune >= 2.5 is now required to
build Coq. This was a large and complex change. If you are packager
you may find some minor differences if you were using a lot of custom
optimizations. Note that, in particular, the configure option
``-datadir`` is not customizable anymore, and ``-bindir`` has been
removed in favor of ``$prefix/bin``. Moreover, the install procedure
will ignore ``-docdir`` and ``-etcdir``, unless you patch the makefile
and use Dune >= 2.9.
We usually recommended using a recent Dune version, if possible.
For developers and plugin authors, see the entry in
`dev/doc/changes.md`. For packagers and users, see `dev/doc/INSTALL.make.md`
(`#13617 <https://github.com/coq/coq/pull/13617>`_,
by Emilio Jesús Gallego Arias, Rudi Grinberg, and Théo Zimmerman;
review and testing by Gaëtan Gilbert, Guillaume Melquiond, and
Enrico Tassi)
- **Changed:**
Undocumented variables ``OLDROOT`` and ``COQPREFIXINSTALL`` which
added a prefix path to ``make install`` have been removed. Now, ``make
install`` does support the more standard ``DESTDIR`` variable, akin
to what ``coq_makefile`` does
(`#14258 <https://github.com/coq/coq/pull/14258>`_,
by Emilio Jesus Gallego Arias).
- **Added:**
Support OCaml 4.12
(`#13885 <https://github.com/coq/coq/pull/13885>`_,
by Emilio Jesus Gallego Arias, review by Gaëtan Gilbert and Théo Zimmerman).
Miscellaneous
^^^^^^^^^^^^^
- **Changed:**
The representation of micromega caches was slightly
altered for efficiency purposes. As a consequence
all stale caches must be cleaned up
(`#13405 <https://github.com/coq/coq/pull/13405>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
Fix the timeout facility on Unix to allow for nested timeouts.
Previous behavior on nested timeouts was that an "inner" timeout would replace an "outer"
timeout, so that the outer timeout would no longer fire. With the new behavior, Unix and Windows
implementations should be (approximately) equivalent
(`#13586 <https://github.com/coq/coq/pull/13586>`_,
by Lasse Blaauwbroek).
Changes in 8.14.1
~~~~~~~~~~~~~~~~~
Kernel
^^^^^^
- **Fixed:**
Fix the implementation of persistent arrays used by the VM and native compute
so that it uses a uniform representation. Previously, storing primitive floats
inside primitive arrays could cause memory corruption
(`#15081 <https://github.com/coq/coq/pull/15081>`_,
closes `#15070 <https://github.com/coq/coq/issues/15070>`_,
by Pierre-Marie Pédrot).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
Missing registration of universe constraints in :cmd:`Module Type` elaboration
(`#14666 <https://github.com/coq/coq/pull/14666>`_,
fixes `#14505 <https://github.com/coq/coq/issues/14505>`_,
by Hugo Herbelin).
Tactics
^^^^^^^
- **Fixed:**
:tacn:`abstract` more robust with respect to Ltac `constr` bindings containing
existential variables
(`#14671 <https://github.com/coq/coq/pull/14671>`_,
fixes `#10796 <https://github.com/coq/coq/issues/10796>`_,
by Hugo Herbelin).
- **Fixed:**
correct support of trailing :n:`let` by tactic :tacn:`specialize`
(`#15046 <https://github.com/coq/coq/pull/15046>`_,
fixes `#15043 <https://github.com/coq/coq/issues/15043>`_,
by Hugo Herbelin).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Fixed:**
anomaly with :flag:`Extraction Conservative Types` when extracting
pattern-matching on singleton types
(`#14669 <https://github.com/coq/coq/pull/14669>`_,
fixes `#3527 <https://github.com/coq/coq/issues/3527>`_,
by Hugo Herbelin).
- **Fixed:**
a regular error instead of an anomaly when calling :cmd:`Separate
Extraction` in a module
(`#14670 <https://github.com/coq/coq/pull/14670>`_,
fixes `#10796 <https://github.com/coq/coq/issues/10796>`_,
by Hugo Herbelin).
Version 8.13
------------
Summary of changes
~~~~~~~~~~~~~~~~~~
Coq version 8.13 integrates many usability improvements, as well
as extensions of the core language.
The main changes include:
- :ref:`Introduction <813PrimArrays>` of :ref:`primitive persistent arrays<primitive-arrays>`
in the core language, implemented using imperative persistent arrays.
- Introduction of :ref:`definitional proof irrelevance <813UIP>` for the equality type
defined in the SProp sort.
- Cumulative record and inductive type declarations can now
:ref:`specify <813VarianceDecl>` the variance of their universes.
- Various bugfixes and uniformization of behavior with respect to the use of
implicit arguments and the handling of existential variables in
declarations, unification and tactics.
- New warning for :ref:`unused variables <813UnusedVar>` in catch-all match
branches that match multiple distinct patterns.
- New :ref:`warning <813HintWarning>` for `Hint` commands outside
sections without a locality attribute, whose goal is to eventually
remove the fragile default behavior of importing hints only when
using `Require`. The recommended fix is to declare hints as `export`,
instead of the current default `global`, meaning that they are imported
through `Require Import` only, not `Require`.
See the following `rationale and guidelines <https://coq.discourse.group/t/change-of-default-locality-for-hint-commands-in-coq-8-13/1140>`_
for details.
- General support for :ref:`boolean attributes <813BooleanAttrs>`.
- Many improvements to the handling of :ref:`notations <813Notations>`,
including number notations, recursive notations and notations with bindings.
A new algorithm chooses the most precise notation available to print an expression,
which might introduce changes in printing behavior.
- Tactic :ref:`improvements <813Tactics>` in :tacn:`lia` and its :tacn:`zify` preprocessing step,
now supporting reasoning on boolean operators such as :g:`Z.leb` and supporting
primitive integers :g:`Int63`.
- Typing flags can now be specified :ref:`per-constant / inductive <813TypingFlags>`.
- Improvements to the reference manual including updated syntax
descriptions that match Coq's grammar in several chapters, and splitting parts of
the tactics chapter to independent sections.
See the `Changes in 8.13+beta1`_ section and following sections for the
detailed list of changes, including potentially breaking changes marked
with **Changed**.
Coq's documentation is available at https://coq.github.io/doc/v8.13/refman (reference
manual), and https://coq.github.io/doc/v8.13/stdlib (documentation of
the standard library). Developer documentation of the ML API is available
at https://coq.github.io/doc/v8.13/api.
Maxime Dénès, Emilio Jesús Gallego Arias, Gaëtan Gilbert, Michael
Soegtrop and Théo Zimmermann worked on maintaining and improving the
continuous integration system and package building infrastructure.
Erik Martin-Dorel has maintained the `Coq Docker images
<https://hub.docker.com/r/coqorg/coq>`_ that are used in many Coq
projects for continuous integration.
The opam repository for Coq packages has been maintained by
Guillaume Claret, Karl Palmskog, Matthieu Sozeau and Enrico Tassi with
contributions from many users. A list of packages is available at
https://coq.inria.fr/opam/www/.
Our current 32 maintainers are Yves Bertot, Frédéric Besson, Tej
Chajed, Cyril Cohen, Pierre Corbineau, Pierre Courtieu, Maxime Dénès,
Jim Fehrle, Julien Forest, Emilio Jesús Gallego Arias, Gaëtan Gilbert,
Georges Gonthier, Benjamin Grégoire, Jason Gross, Hugo Herbelin,
Vincent Laporte, Olivier Laurent, Assia Mahboubi, Kenji Maillard,
Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel,
Kazuhiko Sakaguchi, Vincent Semeria, Michael Soegtrop, Arnaud Spiwack,
Matthieu Sozeau, Enrico Tassi, Laurent Théry, Anton Trunov, Li-yao Xia
and Théo Zimmermann.
The 51 contributors to this version are Reynald Affeldt, Tanaka Akira, Frédéric
Besson, Lasse Blaauwbroek, Clément Blaudeau, Martin Bodin, Ali Caglayan, Tej Chajed,
Cyril Cohen, Julien Coolen, Matthew Dempsky, Maxime Dénès, Andres Erbsen,
Jim Fehrle, Emilio Jesús Gallego Arias, Attila Gáspár, Paolo G. Giarrusso, Gaëtan Gilbert,
Jason Gross, Benjamin Grégoire, Hugo Herbelin, Wolf Honore, Jasper Hugunin, Ignat Insarov,
Ralf Jung, Fabian Kunze, Vincent Laporte, Olivier Laurent, Larry D. Lee Jr,
Thomas Letan, Yishuai Li, James Lottes, Jean-Christophe Léchenet,
Kenji Maillard, Erik Martin-Dorel, Yusuke Matsushita, Guillaume Melquiond,
Carl Patenaude-Poulin, Clément Pit-Claudel, Pierre-Marie Pédrot, Pierre Roux,
Kazuhiko Sakaguchi, Vincent Semeria, Michael Soegtrop, Matthieu Sozeau,
Enrico Tassi, Anton Trunov, Edward Wang, Li-yao Xia, Beta Ziliani and Théo Zimmermann.
The Coq community at large helped improve the design of this new version via
the GitHub issue and pull request system, the Coq development mailing list
coqdev@inria.fr, the coq-club@inria.fr mailing list, the `Discourse forum
<https://coq.discourse.group/>`_ and the `Coq Zulip chat <https://coq.zulipchat.com>`_.
Version 8.13's development spanned 5 months from the release of
Coq 8.12.0. Enrico Tassi and Maxime Dénès are the release managers of Coq 8.13.
This release is the result of 400 merged PRs, closing ~100 issues.
| Nantes, November 2020,
| Matthieu Sozeau for the Coq development team
|
Changes in 8.13+beta1
~~~~~~~~~~~~~~~~~~~~~
.. contents::
:local:
Kernel
^^^^^^
.. _813UIP:
- **Added:**
Definitional UIP, only when :flag:`Definitional UIP` is enabled.
This models definitional uniqueness of identity proofs for the equality
type in SProp. It is deactivated by default as it can lead to
non-termination in combination with impredicativity.
Use of this flag is also printed by :cmd:`Print Assumptions`. See
documentation of the flag for details
(`#10390 <https://github.com/coq/coq/pull/10390>`_,
by Gaëtan Gilbert).
.. _813PrimArrays:
- **Added:**
Built-in support for persistent arrays, which expose a functional
interface but are implemented using an imperative data structure, for
better performance
(`#11604 <https://github.com/coq/coq/pull/11604>`_,
by Maxime Dénès and Benjamin Grégoire, with help from Gaëtan Gilbert).
Primitive arrays are irrelevant in their single
polymorphic universe (same as a polymorphic cumulative list
inductive would be) (`#13356
<https://github.com/coq/coq/pull/13356>`_, fixes `#13354
<https://github.com/coq/coq/issues/13354>`_, by Gaëtan Gilbert).
- **Fixed:**
A loss of definitional equality for declarations obtained through
:cmd:`Include` when entering the scope of a :cmd:`Module` or
:cmd:`Module Type` was causing :cmd:`Search` not to see the included
declarations
(`#12537 <https://github.com/coq/coq/pull/12537>`_, fixes `#12525
<https://github.com/coq/coq/pull/12525>`_ and `#12647
<https://github.com/coq/coq/pull/12647>`_, by Hugo Herbelin).
- **Fixed:**
Fix an incompleteness in the typechecking of `match` for
cumulative inductive types. This could result in breaking subject
reduction
(`#13501 <https://github.com/coq/coq/pull/13501>`_,
fixes `#13495 <https://github.com/coq/coq/issues/13495>`_,
by Matthieu Sozeau).
Specification language, type inference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _813BooleanAttrs:
- **Changed:**
:term:`Boolean attributes <boolean attribute>` are now specified using
key/value pairs, that is to say :n:`@ident__attr{? = {| yes | no } }`.
If the value is missing, the default is :n:`yes`. The old syntax is still
supported, but produces the ``deprecated-attribute-syntax`` warning.
Deprecated attributes are ``universes(monomorphic)``,
``universes(notemplate)`` and ``universes(noncumulative)``, which are
respectively replaced by :attr:`universes(polymorphic=no) <universes(polymorphic)>`,
:attr:`universes(template=no) <universes(template)>`
and :attr:`universes(cumulative=no) <universes(cumulative)>`.
Attributes :attr:`program` and :attr:`canonical` are also affected,
with the syntax :n:`@ident__attr(false)` being deprecated in favor of
:n:`@ident__attr=no`
(`#13312 <https://github.com/coq/coq/pull/13312>`_,
by Emilio Jesus Gallego Arias).
- **Changed:** Heuristics for universe minimization to :g:`Set`: also
use constraints ``Prop <= i`` (`#10331
<https://github.com/coq/coq/pull/10331>`_, by Gaëtan Gilbert with
help from Maxime Dénès and Matthieu Sozeau, fixes `#12414
<https://github.com/coq/coq/issues/12414>`_).
- **Changed:** The type given to :cmd:`Instance` is no longer automatically
generalized over unbound and :ref:`generalizable <implicit-generalization>` variables.
Use ``Instance : `{type}`` instead of :n:`Instance : @type` to get the old behavior, or
enable the compatibility flag ``Instance Generalized Output``
(`#13188 <https://github.com/coq/coq/pull/13188>`_, fixes `#6042
<https://github.com/coq/coq/issues/6042>`_, by Gaëtan Gilbert).
- **Changed:**
Tweaked the algorithm giving default names to arguments.
Should reduce the frequency that argument names get an
unexpected suffix.
Also makes :flag:`Mangle Names` not mess up argument names
(`#12756 <https://github.com/coq/coq/pull/12756>`_,
fixes `#12001 <https://github.com/coq/coq/issues/12001>`_
and `#6785 <https://github.com/coq/coq/issues/6785>`_,
by Jasper Hugunin).
- **Removed:**
Undocumented and experimental forward class hint feature ``:>>``.
Use ``:>`` (see :n:`@of_type`) instead
(`#13106 <https://github.com/coq/coq/pull/13106>`_,
by Pierre-Marie Pédrot).
.. _813VarianceDecl:
- **Added:** Commands :cmd:`Inductive`, :cmd:`Record` and synonyms now
support syntax `Inductive foo@{=i +j *k l}` to specify variance
information for their universes (in :ref:`Cumulative <cumulative>`
mode) (`#12653 <https://github.com/coq/coq/pull/12653>`_, by Gaëtan
Gilbert).
.. _813UnusedVar:
- **Added:**
Warning on unused variables in pattern-matching branches of
:n:`match` serving as catch-all branches for at least two distinct
patterns
(`#12768 <https://github.com/coq/coq/pull/12768>`_,
fixes `#12762 <https://github.com/coq/coq/issues/12762>`_,
by Hugo Herbelin).
- **Added:**
Definition and (Co)Fixpoint now support the :attr:`using` attribute.
It has the same effect as :cmd:`Proof using`, which is only available in
interactive mode
(`#13183 <https://github.com/coq/coq/pull/13183>`_,
by Enrico Tassi).
.. _813TypingFlags:
- **Added:**
Typing flags can now be specified per-constant / inductive, this
allows to fine-grain specify them from plugins or attributes. See
:ref:`controlling-typing-flags` for details on attribute syntax
(`#12586 <https://github.com/coq/coq/pull/12586>`_,
by Emilio Jesus Gallego Arias).
- **Added:**
Inference of return predicate of a :g:`match` by inversion takes
sort elimination constraints into account
(`#13290 <https://github.com/coq/coq/pull/13290>`_,
grants `#13278 <https://github.com/coq/coq/issues/13278>`_,
by Hugo Herbelin).
- **Fixed:**
Implicit arguments taken into account in defined fields of a record type declaration
(`#13166 <https://github.com/coq/coq/pull/13166>`_,
fixes `#13165 <https://github.com/coq/coq/issues/13165>`_,
by Hugo Herbelin).
- **Fixed:**
Allow use of typeclass inference for the return predicate of a :n:`match`
(was deactivated in versions 8.10 to 8.12, `#13217 <https://github.com/coq/coq/pull/13217>`_,
fixes `#13216 <https://github.com/coq/coq/issues/13216>`_,
by Hugo Herbelin).
- **Fixed:**
A case of unification raising an anomaly IllTypedInstance
(`#13376 <https://github.com/coq/coq/pull/13376>`_,
fixes `#13266 <https://github.com/coq/coq/issues/13266>`_,
by Hugo Herbelin).
- **Fixed:**
Using :n:`{wf ...}` in local fixpoints is an error, not an anomaly
(`#13383 <https://github.com/coq/coq/pull/13383>`_,
fixes `#11816 <https://github.com/coq/coq/issues/11816>`_,
by Hugo Herbelin).
- **Fixed:**
Issue when two expressions involving different projections and one is
primitive need to be unified
(`#13386 <https://github.com/coq/coq/pull/13386>`_,
fixes `#9971 <https://github.com/coq/coq/issues/9971>`_,
by Hugo Herbelin).
- **Fixed:**
A bug producing ill-typed instances of existential variables when let-ins
interleaved with assumptions
(`#13387 <https://github.com/coq/coq/pull/13387>`_,
fixes `#12348 <https://github.com/coq/coq/issues/13387>`_,
by Hugo Herbelin).
.. _813Notations:
Notations
^^^^^^^^^
- **Changed:**
In notations (except in custom entries), the misleading :n:`@syntax_modifier`
:n:`@ident ident` (which accepted either an identifier or
a :g:`_`) is deprecated and should be replaced by :n:`@ident name`. If
the intent was really to only parse identifiers, this will
eventually become possible, but only as of Coq 8.15.
In custom entries, the meaning of :n:`@ident ident` is silently changed
from parsing identifiers or :g:`_` to parsing only identifiers
without warning, but this presumably affects only rare, recent and
relatively experimental code
(`#11841 <https://github.com/coq/coq/pull/11841>`_,
fixes `#9514 <https://github.com/coq/coq/pull/9514>`_,
by Hugo Herbelin).
- **Changed:**
Improved support for notations/abbreviations with mixed terms and patterns (such as the forcing modality)
(`#12099 <https://github.com/coq/coq/pull/12099>`_,
by Hugo Herbelin).
- **Changed**
Rational and real constants are parsed differently.
The exponent is now encoded separately from the fractional part
using ``Z.pow_pos``. This way, parsing large exponents can no longer
blow up and constants are printed in a form closer to the one in which they
were parsed (i.e., ``102e-2`` is reprinted as such and not ``1.02``)
(`#12218 <https://github.com/coq/coq/pull/12218>`_,
by Pierre Roux).
- **Changed:**
Scope information is propagated in indirect applications to a
reference prefixed with :g:`@`; this covers for instance the case
:g:`r.(@p) t` where scope information from :g:`p` is now taken into
account for interpreting :g:`t` (`#12685
<https://github.com/coq/coq/pull/12685>`_, by Hugo Herbelin).
- **Changed:**
New model for ``only parsing`` and ``only printing`` notations with
support for at most one parsing-and-printing or only-parsing
notation per notation and scope, but an arbitrary number of
only-printing notations
(`#12950 <https://github.com/coq/coq/pull/12950>`_,
fixes `#4738 <https://github.com/coq/coq/issues/4738>`_
and `#9682 <https://github.com/coq/coq/issues/9682>`_
and part 2 of `#12908 <https://github.com/coq/coq/issues/12908>`_,
by Hugo Herbelin).
- **Changed:**
Redeclaring a notation also reactivates its printing rule; in
particular a second :cmd:`Import` of the same module reactivates the
printing rules declared in this module. In theory, this leads to
changes in behavior for printing. However, this is mitigated in
general by the adoption in `#12986
<https://github.com/coq/coq/pull/12986>`_ of a priority given to
notations which match a larger part of the term to print
(`#12984 <https://github.com/coq/coq/pull/12984>`_,
fixes `#7443 <https://github.com/coq/coq/issues/7443>`_
and `#10824 <https://github.com/coq/coq/issues/10824>`_,
by Hugo Herbelin).
- **Changed:**
Use of notations for printing now gives preference
to notations which match a larger part of the term to abbreviate
(`#12986 <https://github.com/coq/coq/pull/12986>`_,
by Hugo Herbelin).
- **Removed**
OCaml parser and printer for real constants have been removed.
Real constants are now handled with proven Coq code
(`#12218 <https://github.com/coq/coq/pull/12218>`_,
by Pierre Roux).
- **Deprecated**
``Numeral.v`` is deprecated, please use ``Number.v`` instead
(`#12218 <https://github.com/coq/coq/pull/12218>`_,
by Pierre Roux).
- **Deprecated:**
`Numeral Notation`, please use :cmd:`Number Notation` instead
(`#12979 <https://github.com/coq/coq/pull/12979>`_,
by Pierre Roux).
- **Added:**
``Printing Float`` flag to print primitive floats as hexadecimal
instead of decimal values. This is included in the :flag:`Printing All` flag
(`#11986 <https://github.com/coq/coq/pull/11986>`_,
by Pierre Roux).
- **Added:**
:ref:`Number Notation <number-notations>` and :ref:`String Notation
<string-notations>` commands now
support parameterized inductive and non-inductive types
(`#12218 <https://github.com/coq/coq/pull/12218>`_,
fixes `#12035 <https://github.com/coq/coq/issues/12035>`_,
by Pierre Roux, review by Jason Gross and Jim Fehrle for the
reference manual).
- **Added:**
Added support for encoding notations of the form :g:`x ⪯ y ⪯ .. ⪯ z ⪯ t`.
This feature is considered experimental
(`#12765 <https://github.com/coq/coq/pull/12765>`_,
by Hugo Herbelin).
- **Added:**
The :n:`@binder` entry of :cmd:`Notation` can now be used in
notations expecting a single (non-recursive) binder
(`#13265 <https://github.com/coq/coq/pull/13265>`_,
by Hugo Herbelin, see section :ref:`notations-and-binders` of the
reference manual).
- **Fixed:**
Issues in the presence of notations recursively referring to another
applicative notations, such as missing scope propagation, or failure
to use a notation for printing
(`#12960 <https://github.com/coq/coq/pull/12960>`_,
fixes `#9403 <https://github.com/coq/coq/issues/9403>`_
and `#10803 <https://github.com/coq/coq/issues/10803>`_,
by Hugo Herbelin).
- **Fixed:**
Capture the names of global references by
binders in the presence of notations for binders
(`#12965 <https://github.com/coq/coq/pull/12965>`_,
fixes `#9569 <https://github.com/coq/coq/issues/9569>`_,
by Hugo Herbelin).
- **Fixed:**
Preventing notations for constructors to involve binders
(`#13092 <https://github.com/coq/coq/pull/13092>`_,
fixes `#13078 <https://github.com/coq/coq/issues/13078>`_,
by Hugo Herbelin).
- **Fixed:** Notations understand universe names without getting
confused by different imported modules between declaration and use
locations (`#13415 <https://github.com/coq/coq/pull/13415>`_, fixes
`#13303 <https://github.com/coq/coq/issues/13303>`_, by Gaëtan
Gilbert).
.. _813Tactics:
Tactics
^^^^^^^
- **Changed:**
In :tacn:`refine`, new existential variables unified with existing ones are no
longer considered as fresh. The behavior of :tacn:`simple refine <refine>` no
longer depends on
the orientation of evar-evar unification problems, and new existential variables
are always turned into (unshelved) goals. This can break compatibility in
some cases (`#7825 <https://github.com/coq/coq/pull/7825>`_, by Matthieu
Sozeau, with help from Maxime Dénès, review by Pierre-Marie Pédrot and
Enrico Tassi, fixes `#4095 <https://github.com/coq/coq/issues/4095>`_ and
`#4413 <https://github.com/coq/coq/issues/4413>`_).
- **Changed:**
Giving an empty list of occurrences after :n:`in` in tactics is no
longer permitted. Omitting the :n:`in` gives the same behavior
(`#13237 <https://github.com/coq/coq/pull/13236>`_,
fixes `#13235 <https://github.com/coq/coq/issues/13235>`_,
by Hugo Herbelin).
- **Removed:**
:n:`at @occs_nums` clauses in tactics such as :tacn:`unfold`
no longer allow negative values. A "-" before the
list (for set complement) is still supported. Ex: "at -1 -2"
is no longer supported but "at -1 2" is
(`#13403 <https://github.com/coq/coq/pull/13403>`_,
by Jim Fehrle).
- **Removed:**
A number of tactics that formerly accepted negative
numbers as parameters now give syntax errors for negative
values. These include {e}constructor, do, timeout,
9 {e}auto tactics and psatz*
(`#13417 <https://github.com/coq/coq/pull/13417>`_,
by Jim Fehrle).
- **Removed:**
The deprecated and undocumented `prolog` tactic was removed
(`#12399 <https://github.com/coq/coq/pull/12399>`_,
by Pierre-Marie Pédrot).
- **Removed:** `info` tactic that was deprecated in 8.5
(`#12423 <https://github.com/coq/coq/pull/12423>`_, by Jim Fehrle).
- **Deprecated:**
Undocumented :n:`eauto @nat_or_var @nat_or_var` syntax in favor of new `bfs eauto`.
Also deprecated 2-integer syntax for :tacn:`debug eauto` and :tacn:`info_eauto`
(Use `bfs eauto` with the :flag:`Info Eauto` or :flag:`Debug Eauto` flags instead.)
(`#13381 <https://github.com/coq/coq/pull/13381>`_,
by Jim Fehrle).
- **Added:**
:tacn:`lia` is extended to deal with boolean operators e.g. `andb` or `Z.leb`
(as `lia` gets more powerful, this may break proof scripts relying on `lia` failure,
`#11906 <https://github.com/coq/coq/pull/11906>`_, by Frédéric Besson).
- **Added:**
:tacn:`apply … in <apply>` supports several hypotheses
(`#12246 <https://github.com/coq/coq/pull/12246>`_,
by Hugo Herbelin; grants
`#9816 <https://github.com/coq/coq/pull/9816>`_).
- **Added:**
The :tacn:`zify` tactic can now be extended by redefining the `zify_pre_hook`
tactic. (`#12552 <https://github.com/coq/coq/pull/12552>`_,
by Kazuhiko Sakaguchi).
- **Added:**
The :tacn:`zify` tactic provides support for primitive integers (module :g:`ZifyInt63`)
(`#12648 <https://github.com/coq/coq/pull/12648>`_, by Frédéric Besson).
- **Fixed:**
Avoid exposing an internal name of the form :n:`_tmp` when applying the
:n:`_` introduction pattern which would break a dependency
(`#13337 <https://github.com/coq/coq/pull/13337>`_,
fixes `#13336 <https://github.com/coq/coq/issues/13336>`_,
by Hugo Herbelin).
- **Fixed:**
The case of tactics, such as :tacn:`eapply`, producing existential variables
under binders with an ill-formed instance
(`#13373 <https://github.com/coq/coq/pull/13373>`_,
fixes `#13363 <https://github.com/coq/coq/issues/13363>`_,
by Hugo Herbelin).
Tactic language
^^^^^^^^^^^^^^^
- **Added:**
An if-then-else syntax to Ltac2
(`#13232 <https://github.com/coq/coq/pull/13232>`_,
fixes `#10110 <https://github.com/coq/coq/issues/10110>`_,
by Pierre-Marie Pédrot).
- **Fixed:**
Printing of the quotation qualifiers when printing :g:`Ltac` functions
(`#13028 <https://github.com/coq/coq/pull/13028>`_,
fixes `#9716 <https://github.com/coq/coq/issues/9716>`_
and `#13004 <https://github.com/coq/coq/issues/13004>`_,
by Hugo Herbelin).
SSReflect
^^^^^^^^^
- **Added:**
SSReflect intro pattern ltac views ``/[dup]``, ``/[swap]`` and ``/[apply]``
(`#13317 <https://github.com/coq/coq/pull/13317>`_,
by Cyril Cohen).
- **Fixed:**
Working around a bug of interaction between + and /(ltac:(...)) cf
`#13458 <https://github.com/coq/coq/issues/13458>`_
(`#13459 <https://github.com/coq/coq/pull/13459>`_,
by Cyril Cohen).
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
Drop prefixes from grammar non-terminal names,
e.g. "constr:global" -> "global", "Prim.name" -> "name".
Visible in the output of :cmd:`Print Grammar` and :cmd:`Print Custom Grammar`
(`#13096 <https://github.com/coq/coq/pull/13096>`_,
by Jim Fehrle).
- **Changed:**
When declaring arbitrary terms as hints, unsolved
evars are not abstracted implicitly anymore and instead
raise an error
(`#13139 <https://github.com/coq/coq/pull/13139>`_,
by Pierre-Marie Pédrot).
- **Removed:**
In the :cmd:`Extraction Language` command, remove `Ocaml` as a valid value.
Use `OCaml` instead. This was deprecated in Coq 8.8, `#6261 <https://github.com/coq/coq/pull/6261>`_
(`#13016 <https://github.com/coq/coq/pull/13016>`_, by Jim Fehrle).
.. _813HintWarning:
- **Deprecated:**
Hint locality currently defaults to :attr:`local` in a section and
:attr:`global` otherwise, but this will change in a future release.
Hints added outside of sections without an explicit
locality now generate a deprecation warning. We recommend
using :attr:`export` where possible
(`#13384 <https://github.com/coq/coq/pull/13384>`_,
by Pierre-Marie Pédrot).
- **Deprecated:**
``Grab Existential Variables`` and ``Existential`` commands
(`#12516 <https://github.com/coq/coq/pull/12516>`_,
by Maxime Dénès).
- **Added:**
The :attr:`export` locality can now be used for all Hint commands,
including :cmd:`Hint Cut`, :cmd:`Hint Mode`, :cmd:`Hint Transparent` /
:cmd:`Opaque <Hint Opaque>` and
:cmd:`Remove Hints`
(`#13388 <https://github.com/coq/coq/pull/13388>`_,
by Pierre-Marie Pédrot).
- **Added:**
Support for automatic insertion of coercions in :cmd:`Search`
patterns. Additionally, head patterns are now automatically
interpreted as types
(`#13255 <https://github.com/coq/coq/pull/13255>`_,
fixes `#13244 <https://github.com/coq/coq/issues/13244>`_,
by Hugo Herbelin).
- **Added:**
The :cmd:`Proof using` command can now be used without loading the
Ltac plugin (`-noinit` mode)
(`#13339 <https://github.com/coq/coq/pull/13339>`_,
by Théo Zimmermann).
- **Added:**
Clarify in the documentation that ``Add ML Path`` is not exported to compiled files
(`#13345 <https://github.com/coq/coq/pull/13345>`_,
fixes `#13344 <https://github.com/coq/coq/issues/13344>`_,
by Hugo Herbelin).
Tools
^^^^^
- **Changed:**
Option `-native-compiler` of the configure script now impacts the
default value of the `-native-compiler` option of coqc. The
`-native-compiler` option of the configure script supports a new `ondemand`
value, which becomes the default, thus preserving the previous default
behavior.
The stdlib is still precompiled when configuring with `-native-compiler
yes`. It is not precompiled otherwise.
This an implementation of point 2 of
`CEP #48 <https://github.com/coq/ceps/pull/48>`_
(`#13352 <https://github.com/coq/coq/pull/13352>`_,
by Pierre Roux).
- **Changed:**
Added the ability for coq_makefile to directly set the installation folders,
through the `COQLIBINSTALL` and `COQDOCINSTALL` variables.
See :ref:`rocqmakefilelocal`
(`#12389 <https://github.com/coq/coq/pull/12389>`_, by Martin Bodin, review of Enrico Tassi).
- **Removed:** The option ``-I`` of coqchk was removed (it was
deprecated in Coq 8.8) (`#12613
<https://github.com/coq/coq/pull/12613>`_, by Gaëtan Gilbert).
- **Fixed:**
``coqchk`` no longer reports names from inner modules of opaque modules as
axioms (`#12862 <https://github.com/coq/coq/pull/12862>`_, fixes `#12845
<https://github.com/coq/coq/issues/12845>`_, by Jason Gross).
CoqIDE
^^^^^^
- **Added:**
Support showing diffs for :cmd:`Show Proof` in CoqIDE from the :n:`View` menu.
See :ref:`showing_proof_diffs`
(`#12874 <https://github.com/coq/coq/pull/12874>`_,
by Jim Fehrle and Enrico Tassi)
- **Added:**
Support for flag :flag:`Printing Goal Names` in View menu
(`#13145 <https://github.com/coq/coq/pull/13145>`_,
by Hugo Herbelin).
Standard library
^^^^^^^^^^^^^^^^
- **Changed:**
In the reals theory changed the epsilon in the definition of the modulus of convergence for CReal from 1/n (n in positive) to 2^z (z in Z)
so that a precision coarser than one is possible. Also added an upper bound to CReal to enable more efficient computations
(`#12186 <https://github.com/coq/coq/pull/12186>`_,
by Michael Soegtrop).
- **Changed:**
Int63 notations now match up with the rest of the standard library: :g:`a \%
m`, :g:`m == n`, :g:`m < n`, :g:`m <= n`, and :g:`m ≤ n` have been replaced
with :g:`a mod m`, :g:`m =? n`, :g:`m <? n`, :g:`m <=? n`, and :g:`m ≤? n`.
The old notations are still available as deprecated notations. Additionally,
there is now a ``Coq.Numbers.Cyclic.Int63.Int63.Int63Notations`` module that
users can import to get the ``Int63`` notations without unqualifying the
various primitives (`#12479 <https://github.com/coq/coq/pull/12479>`_, fixes
`#12454 <https://github.com/coq/coq/issues/12454>`_, by Jason Gross).
- **Changed:**
PrimFloat notations now match up with the rest of the standard library: :g:`m
== n`, :g:`m < n`, and :g:`m <= n` have been replaced with :g:`m =? n`, :g:`m
<? n`, and :g:`m <=? n`. The old notations are still available as deprecated
notations. Additionally, there is now a
``Coq.Floats.PrimFloat.PrimFloatNotations`` module that users can import to
get the ``PrimFloat`` notations without unqualifying the various primitives
(`#12556 <https://github.com/coq/coq/pull/12556>`_, fixes `#12454
<https://github.com/coq/coq/issues/12454>`_, by Jason Gross).
- **Changed:** the sort of cyclic numbers from Type to Set.
For backward compatibility, a dynamic sort was defined in the 3 packages bignums, coqprime and color.
See for example commit 6f62bda in bignums
(`#12801 <https://github.com/coq/coq/pull/12801>`_,
by Vincent Semeria).
- **Changed:**
``Require Import Coq.nsatz.NsatzTactic`` now allows using :tacn:`nsatz`
with `Z` and `Q` without having to supply instances or using ``Require Import Coq.nsatz.Nsatz``, which
transitively requires unneeded files declaring axioms used in the reals
(`#12861 <https://github.com/coq/coq/pull/12861>`_,
fixes `#12860 <https://github.com/coq/coq/issues/12860>`_,
by Jason Gross).
- **Deprecated:**
``prod_curry`` and ``prod_uncurry``, in favor of ``uncurry`` and ``curry``
(`#12716 <https://github.com/coq/coq/pull/12716>`_,
by Yishuai Li).
- **Added:**
New lemmas about ``repeat`` in ``List`` and ``Permutation``: ``repeat_app``, ``repeat_eq_app``, ``repeat_eq_cons``, ``repeat_eq_elt``, ``Forall_eq_repeat``, ``Permutation_repeat``
(`#12799 <https://github.com/coq/coq/pull/12799>`_,
by Olivier Laurent).
- **Added:**
Extend some list lemmas to both directions: `app_inj_tail_iff`, `app_inv_head_iff`, `app_inv_tail_iff`
(`#12094 <https://github.com/coq/coq/pull/12094>`_,
fixes `#12093 <https://github.com/coq/coq/issues/12093>`_,
by Edward Wang).
- **Added:**
``Decidable`` instance for negation
(`#12420 <https://github.com/coq/coq/pull/12420>`_,
by Yishuai Li).
- **Fixed:**
`Coq.Program.Wf.Fix_F_inv` and `Coq.Program.Wf.Fix_eq` are now axiom-free, and no longer assuming proof irrelevance
(`#13365 <https://github.com/coq/coq/pull/13365>`_,
by Li-yao Xia).
Infrastructure and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **Changed:**
When compiled with OCaml >= 4.10.0, Coq will use the new best-fit GC
policy, which should provide some performance benefits. Coq's policy
is optimized for speed, but could increase memory consumption in
some cases. You are welcome to tune it using the ``OCAMLRUNPARAM``
variable and report back on good settings so we can improve the defaults
(`#13040 <https://github.com/coq/coq/pull/13040>`_,
fixes `#11277 <https://github.com/coq/coq/issues/11277>`_,
by Emilio Jesus Gallego Arias).
- **Changed:**
Coq now uses the `zarith <https://github.com/ocaml/Zarith>`_
library, based on GNU's gmp instead of ``num`` which is
deprecated upstream. The custom ``bigint`` module is
no longer provided
(`#11742 <https://github.com/coq/coq/pull/11742>`_,
`#13007 <https://github.com/coq/coq/pull/13007>`_,
by Emilio Jesus Gallego Arias and Vicent Laporte, with help from
Frédéric Besson).
Changes in 8.13.0
~~~~~~~~~~~~~~~~~
Commands and options
^^^^^^^^^^^^^^^^^^^^
- **Changed:**
The warning `custom-entry-overriden` has been renamed to `custom-entry-overridden` (with two d's) | |