aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.gitlab-ci.yml59
-rw-r--r--.merlin.in1
-rw-r--r--.ocamlformat2
-rw-r--r--INSTALL.md35
-rw-r--r--META.coq.in4
-rw-r--r--Makefile.build12
-rw-r--r--Makefile.ci2
-rw-r--r--azure-pipelines.yml4
-rw-r--r--config/dune2
-rw-r--r--configure.ml39
-rw-r--r--coq.opam3
-rw-r--r--coq.opam.docker3
-rw-r--r--coqpp/coqpp_main.ml4
-rw-r--r--default.nix7
-rw-r--r--dev/bench/gitlab-bench.yml5
-rwxr-xr-xdev/bench/gitlab.sh40
-rwxr-xr-xdev/build/windows/makecoq_mingw.sh2
-rwxr-xr-xdev/ci/azure-opam.sh2
-rwxr-xr-xdev/ci/ci-basic-overlay.sh14
-rw-r--r--dev/ci/ci-common.sh4
-rwxr-xr-xdev/ci/ci-iris.sh36
-rwxr-xr-xdev/ci/ci-lambda_rust.sh30
-rwxr-xr-xdev/ci/ci-mathcomp.sh2
-rw-r--r--dev/ci/docker/bionic_coq/Dockerfile14
-rw-r--r--dev/ci/nix/default.nix1
-rw-r--r--dev/ci/nix/simple-io.nix5
-rw-r--r--dev/ci/user-overlays/12968-maximedenes-delay-frozen-evarconv.sh6
-rw-r--r--dev/dune-workspace.all4
-rw-r--r--dev/include_printers2
-rw-r--r--dev/nixpkgs.nix4
-rw-r--r--dev/top_printers.dbg1
-rw-r--r--dev/top_printers.ml8
-rw-r--r--dev/top_printers.mli3
-rw-r--r--doc/README.md7
-rw-r--r--doc/changelog/02-specification-language/07825-rechable-from-evars.rst9
-rw-r--r--doc/changelog/03-notations/12979-doc-numbers.rst4
-rw-r--r--doc/changelog/04-tactics/12993-remove-cutrewrite.rst4
-rw-r--r--doc/changelog/06-ssreflect/12857-changelog-for-12857.rst8
-rw-r--r--doc/changelog/07-commands-and-options/13016-remove-Ocaml-value.rst4
-rw-r--r--doc/changelog/08-tools/13063-fix-no-output-sync-make-file.rst6
-rw-r--r--doc/changelog/10-standard-library/12094-app_inj_tail.rst5
-rw-r--r--doc/changelog/11-infrastructure-and-dependencies/12972-ocaml+4_11.rst4
-rw-r--r--doc/changelog/11-infrastructure-and-dependencies/13007-zarith+goodbye_num.rst4
-rw-r--r--doc/changelog/11-infrastructure-and-dependencies/13011-sphinx-3.rst5
-rw-r--r--doc/sphinx/README.rst28
-rw-r--r--doc/sphinx/README.template.rst14
-rw-r--r--doc/sphinx/addendum/extraction.rst4
-rw-r--r--doc/sphinx/addendum/micromega.rst31
-rw-r--r--doc/sphinx/addendum/nsatz.rst2
-rw-r--r--doc/sphinx/addendum/program.rst11
-rw-r--r--doc/sphinx/addendum/type-classes.rst22
-rw-r--r--doc/sphinx/changes.rst6
-rw-r--r--doc/sphinx/language/coq-library.rst2
-rw-r--r--doc/sphinx/language/core/assumptions.rst2
-rw-r--r--doc/sphinx/language/core/basic.rst43
-rw-r--r--doc/sphinx/language/core/modules.rst2
-rw-r--r--doc/sphinx/language/core/records.rst2
-rw-r--r--doc/sphinx/language/core/sorts.rst2
-rw-r--r--doc/sphinx/language/core/variants.rst4
-rw-r--r--doc/sphinx/language/extensions/match.rst12
-rw-r--r--doc/sphinx/proof-engine/ltac.rst71
-rw-r--r--doc/sphinx/proof-engine/ltac2.rst30
-rw-r--r--doc/sphinx/proof-engine/proof-handling.rst30
-rw-r--r--doc/sphinx/proof-engine/ssreflect-proof-language.rst52
-rw-r--r--doc/sphinx/proof-engine/tactics.rst331
-rw-r--r--doc/sphinx/proof-engine/vernacular-commands.rst36
-rw-r--r--doc/sphinx/user-extensions/syntax-extensions.rst150
-rw-r--r--doc/sphinx/using/libraries/funind.rst8
-rw-r--r--doc/tools/coqrst/coqdomain.py24
-rw-r--r--doc/tools/docgram/README.md1
-rw-r--r--doc/tools/docgram/common.edit_mlg89
-rw-r--r--doc/tools/docgram/dune3
-rw-r--r--doc/tools/docgram/fullGrammar39
-rw-r--r--doc/tools/docgram/orderedGrammar170
-rw-r--r--engine/evarutil.ml21
-rw-r--r--engine/evarutil.mli8
-rw-r--r--engine/evd.ml171
-rw-r--r--engine/evd.mli8
-rw-r--r--engine/namegen.ml8
-rw-r--r--engine/proofview_monad.ml5
-rw-r--r--engine/proofview_monad.mli6
-rw-r--r--engine/termops.ml8
-rw-r--r--interp/stdarg.ml4
-rw-r--r--interp/stdarg.mli3
-rw-r--r--kernel/uGraph.ml6
-rw-r--r--lib/acyclicGraph.ml42
-rw-r--r--parsing/cLexer.ml8
-rw-r--r--parsing/g_constr.mlg4
-rw-r--r--parsing/g_prim.mlg13
-rw-r--r--parsing/pcoq.ml3
-rw-r--r--parsing/tok.ml22
-rw-r--r--parsing/tok.mli4
-rw-r--r--plugins/cc/g_congruence.mlg4
-rw-r--r--plugins/extraction/g_extraction.mlg6
-rw-r--r--plugins/ltac/coretactics.mlg2
-rw-r--r--plugins/ltac/extratactics.mlg8
-rw-r--r--plugins/ltac/g_class.mlg2
-rw-r--r--plugins/ltac/g_ltac.mlg2
-rw-r--r--plugins/ltac/g_obligations.mlg12
-rw-r--r--plugins/ltac/leminv.ml17
-rw-r--r--plugins/ltac/pptactic.ml2
-rw-r--r--plugins/ltac/profile_ltac_tactics.mlg4
-rw-r--r--plugins/ltac/rewrite.ml2
-rw-r--r--plugins/ltac/tacinterp.ml3
-rw-r--r--plugins/micromega/certificate.ml4
-rw-r--r--plugins/micromega/coq_micromega.ml1
-rw-r--r--plugins/micromega/dune2
-rw-r--r--plugins/micromega/mfourier.ml3
-rw-r--r--plugins/micromega/numCompat.ml145
-rw-r--r--plugins/micromega/numCompat.mli11
-rw-r--r--plugins/micromega/polynomial.ml6
-rw-r--r--plugins/micromega/simplex.ml9
-rw-r--r--plugins/micromega/sos.ml39
-rw-r--r--plugins/micromega/vect.ml4
-rw-r--r--plugins/ssr/ssrparser.mlg8
-rw-r--r--plugins/syntax/g_numeral.mlg12
-rw-r--r--pretyping/evarconv.ml47
-rw-r--r--pretyping/evarconv.mli4
-rw-r--r--pretyping/evarsolve.ml54
-rw-r--r--pretyping/evarsolve.mli28
-rw-r--r--pretyping/unification.ml15
-rw-r--r--pretyping/unification.mli6
-rw-r--r--proofs/clenv.ml11
-rw-r--r--proofs/clenv.mli8
-rw-r--r--proofs/refine.ml2
-rw-r--r--tactics/auto.ml2
-rw-r--r--tactics/btermdn.ml2
-rw-r--r--tactics/btermdn.mli1
-rw-r--r--tactics/class_tactics.ml10
-rw-r--r--tactics/dn.ml20
-rw-r--r--tactics/dn.mli2
-rw-r--r--tactics/elim.ml159
-rw-r--r--tactics/elim.mli2
-rw-r--r--tactics/eqschemes.ml32
-rw-r--r--tactics/equality.ml78
-rw-r--r--tactics/equality.mli4
-rw-r--r--tactics/hints.ml59
-rw-r--r--tactics/inv.ml5
-rw-r--r--tactics/tacticals.ml9
-rw-r--r--tactics/tactics.ml27
-rw-r--r--test-suite/.csdp.cache.test-suitebin329899 -> 136962 bytes
-rw-r--r--test-suite/Makefile2
-rw-r--r--test-suite/bugs/closed/bug_12909.v8
-rw-r--r--test-suite/bugs/closed/bug_12930.v10
-rw-r--r--test-suite/bugs/closed/bug_12944.v12
-rw-r--r--test-suite/bugs/closed/bug_13003.v9
-rw-r--r--test-suite/bugs/closed/bug_4413.v8
-rw-r--r--test-suite/bugs/closed/bug_7825.v50
-rwxr-xr-xtest-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/run.sh11
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.err.log.expected1
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.expected398
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.in5629
-rwxr-xr-xtest-suite/coq-makefile/timing/precomputed-time-tests/run.sh1
-rw-r--r--test-suite/interactive/PrimNotation.v12
-rw-r--r--test-suite/output/Notations4.v2
-rw-r--r--test-suite/output/NumberNotations.out (renamed from test-suite/output/NumeralNotations.out)4
-rw-r--r--test-suite/output/NumberNotations.v (renamed from test-suite/output/NumeralNotations.v)72
-rw-r--r--test-suite/output/ZSyntax.v2
-rw-r--r--test-suite/output/bug_12159.v4
-rw-r--r--test-suite/output/bug_12887.out10
-rw-r--r--test-suite/output/bug_12887.v10
-rw-r--r--test-suite/output/sint63Notation.v4
-rw-r--r--test-suite/success/NumeralNotationsNoLocal.v2
-rw-r--r--test-suite/success/induct.v12
-rw-r--r--theories/Bool/Bool.v10
-rw-r--r--theories/Classes/CMorphisms.v12
-rw-r--r--theories/Classes/CRelationClasses.v4
-rw-r--r--theories/Classes/Morphisms.v36
-rw-r--r--theories/Classes/RelationClasses.v23
-rw-r--r--theories/Init/Decimal.v4
-rw-r--r--theories/Init/Hexadecimal.v2
-rw-r--r--theories/Init/Numeral.v2
-rw-r--r--theories/Init/Peano.v29
-rw-r--r--theories/Init/Prelude.v12
-rw-r--r--theories/Init/Tactics.v8
-rw-r--r--theories/Init/Wf.v5
-rw-r--r--theories/Lists/List.v47
-rw-r--r--theories/NArith/BinNat.v2
-rw-r--r--theories/NArith/BinNatDef.v4
-rw-r--r--theories/Numbers/AltBinNotations.v10
-rw-r--r--theories/Numbers/Cyclic/Int31/Int31.v2
-rw-r--r--theories/Numbers/NatInt/NZAdd.v2
-rw-r--r--theories/Numbers/NatInt/NZBase.v4
-rw-r--r--theories/Numbers/NatInt/NZDiv.v50
-rw-r--r--theories/Numbers/NatInt/NZGcd.v10
-rw-r--r--theories/Numbers/NatInt/NZLog.v8
-rw-r--r--theories/Numbers/NatInt/NZMul.v2
-rw-r--r--theories/Numbers/NatInt/NZMulOrder.v8
-rw-r--r--theories/Numbers/NatInt/NZOrder.v18
-rw-r--r--theories/Numbers/NatInt/NZParity.v14
-rw-r--r--theories/Numbers/NatInt/NZPow.v2
-rw-r--r--theories/Numbers/NatInt/NZSqrt.v6
-rw-r--r--theories/PArith/BinPos.v2
-rw-r--r--theories/PArith/BinPosDef.v4
-rw-r--r--theories/QArith/QArith_base.v2
-rw-r--r--theories/Reals/Rseries.v25
-rw-r--r--theories/Relations/Operators_Properties.v69
-rw-r--r--theories/Relations/Relations.v6
-rw-r--r--theories/Setoids/Setoid.v2
-rw-r--r--theories/Structures/GenericMinMax.v4
-rw-r--r--theories/Structures/Orders.v10
-rw-r--r--theories/Structures/OrdersFacts.v10
-rw-r--r--theories/Structures/OrdersTac.v4
-rw-r--r--theories/ZArith/BinInt.v2
-rw-r--r--theories/ZArith/BinIntDef.v4
-rw-r--r--tools/CoqMakefile.in2
-rw-r--r--tools/TimeFileMaker.py7
-rw-r--r--toplevel/dune3
-rw-r--r--user-contrib/Ltac2/g_ltac2.mlg2
-rw-r--r--vernac/comFixpoint.ml1
-rw-r--r--vernac/comInductive.ml12
-rw-r--r--vernac/comInductive.mli4
-rw-r--r--vernac/proof_using.ml23
-rw-r--r--vernac/record.ml6
-rw-r--r--vernac/vernacentries.ml13
216 files changed, 8046 insertions, 1661 deletions
diff --git a/.gitignore b/.gitignore
index 92e9fd2105..bdd692420f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -113,7 +113,6 @@ doc/stdlib/FullLibrary.coqdoc.tex
doc/stdlib/html/
doc/stdlib/index-body.html
doc/stdlib/index-list.html
-doc/tools/docgram/productionlistGrammar
doc/tools/docgram/editedGrammar
doc/tools/docgram/prodnGrammar
doc/unreleased.rst
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cc8a4d34c9..a3f6eab1a7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,7 +19,7 @@ stages:
variables:
# Format: $IMAGE-V$DATE [Cache is not used as of today but kept here
# for reference]
- CACHEKEY: "bionic_coq-V2020-08-28-V92"
+ CACHEKEY: "bionic_coq-V2020-09-17-V88"
IMAGE: "$CI_REGISTRY_IMAGE:$CACHEKEY"
# By default, jobs run in the base switch; override to select another switch
OPAM_SWITCH: "base"
@@ -242,6 +242,11 @@ before_script:
- make -f Makefile.ci -j "$NJOBS" "${CI_JOB_NAME#*:}"
- echo 'end:coq.test'
- set +e
+ artifacts:
+ name: "$CI_JOB_NAME"
+ paths:
+ - _build_ci
+ when: always
needs:
- build:base
dependencies:
@@ -325,22 +330,36 @@ build:base+async:
variables:
COQ_EXTRA_CONF: "-native-compiler yes -coqide opt"
COQUSERFLAGS: "-async-proofs on"
+ after_script:
+ - dmesg > dmesg.txt
timeout: 100m
allow_failure: true # See https://github.com/coq/coq/issues/9658
only:
variables:
- $UNRELIABLE =~ /enabled/
+ artifacts:
+ name: "$CI_JOB_NAME"
+ when: on_failure
+ paths:
+ - dmesg.txt
build:quick:
extends: .build-template
variables:
COQ_EXTRA_CONF: "-native-compiler no"
QUICK: "1"
+ after_script:
+ - dmesg > dmesg.txt
timeout: 100m
allow_failure: true # See https://github.com/coq/coq/issues/9637
only:
variables:
- $UNRELIABLE =~ /enabled/
+ artifacts:
+ name: "$CI_JOB_NAME"
+ when: on_failure
+ paths:
+ - dmesg.txt
windows64:
extends: .windows-template
@@ -446,6 +465,8 @@ pkg:nix:deploy:channel:
- pkg:nix:deploy
script:
- echo "$CACHIX_DEPLOYMENT_KEY" | tr -d '\r' | ssh-add - > /dev/null
+ # Remove all pr branches because they could be missing when we run git fetch --unshallow
+ - git branch --list 'pr-*' | xargs -r git branch -d
- git fetch --unshallow
- git branch -v
- git push git@github.com:coq/coq-on-cachix "${CI_COMMIT_SHA}":"refs/heads/${CI_COMMIT_REF_NAME}"
@@ -600,7 +621,7 @@ test-suite:edge:dune:dev:
- opam repo add ocaml-beta https://github.com/ocaml/ocaml-beta-repository.git
- opam update
- opam install ocaml-variants=$OCAMLVER
- - opam install dune num zarith
+ - opam install dune zarith
- eval $(opam env)
- export COQ_UNIT_TEST=noop
- make -f Makefile.dune test-suite
@@ -683,10 +704,6 @@ library:ci-bbv:
library:ci-bedrock2:
extends: .ci-template-flambda
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
variables:
NJOBS: "1"
@@ -712,10 +729,6 @@ library:ci-coq_tools:
library:ci-coqprime:
stage: stage-3
extends: .ci-template-flambda
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
needs:
- build:edge+flambda
- plugin:ci-bignums
@@ -741,10 +754,6 @@ library:ci-fcsl_pcm:
library:ci-fiat_crypto:
extends: .ci-template-flambda
stage: stage-4
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
needs:
- build:edge+flambda
- library:ci-coqprime
@@ -781,10 +790,6 @@ library:ci-fiat_crypto_ocaml:
library:ci-flocq:
extends: .ci-template-flambda
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
library:ci-corn:
extends: .ci-template-flambda
@@ -803,16 +808,12 @@ library:ci-geocoq:
library:ci-hott:
extends: .ci-template
-library:ci-lambda_rust:
+library:ci-iris:
extends: .ci-template-flambda
library:ci-math_classes:
extends: .ci-template-flambda
stage: stage-3
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
needs:
- build:edge+flambda
- plugin:ci-bignums
@@ -855,10 +856,6 @@ plugin:ci-aac_tactics:
plugin:ci-bignums:
extends: .ci-template-flambda
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
plugin:ci-coq_dpdgraph:
extends: .ci-template
@@ -871,10 +868,6 @@ plugin:ci-elpi:
plugin:ci-equations:
extends: .ci-template
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
plugin:ci-fiat_parsers:
extends: .ci-template
@@ -920,7 +913,3 @@ plugin:ci-relation_algebra:
plugin:ci-rewriter:
extends: .ci-template-flambda
- artifacts:
- name: "$CI_JOB_NAME"
- paths:
- - _build_ci
diff --git a/.merlin.in b/.merlin.in
index fa3473765d..80b0b600eb 100644
--- a/.merlin.in
+++ b/.merlin.in
@@ -54,3 +54,4 @@ S plugins/**
B plugins/**
PKG threads.posix
+PKG zarith \ No newline at end of file
diff --git a/.ocamlformat b/.ocamlformat
index a0d4ef6bbb..93f5ab4007 100644
--- a/.ocamlformat
+++ b/.ocamlformat
@@ -1,4 +1,4 @@
-version=0.14.2
+version=0.15.0
profile=ocamlformat
# to enable a whole directory, put "disable=false" in dir/.ocamlformat
diff --git a/INSTALL.md b/INSTALL.md
index 2b5986ded4..f672bb45d3 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,18 +1,21 @@
Installing From Sources
=======================
+This document presents instructions to install this branch of Coq.
+For more general installation instructions and information about known
+build system issues, please consult the wiki page:
+
+ https://github.com/coq/coq/wiki#coq-installation
+
Build Requirements
------------------
To compile Coq yourself, you need:
- [OCaml](https://ocaml.org/) (version >= 4.05.0)
- (This version of Coq has been tested up to OCaml 4.10.0)
-
-- The [num](https://github.com/ocaml/num) library; note that it is
- included in the OCaml distribution for OCaml versions < 4.06.0
+ (This version of Coq has been tested up to OCaml 4.11.1)
-- The [ZArith library](https://github.com/ocaml/Zarith) >= 1.8
+- The [ZArith library](https://github.com/ocaml/Zarith) >= 1.10
- The [findlib](http://projects.camlcity.org/projects/findlib.html) library (version >= 1.8.0)
@@ -26,18 +29,18 @@ To compile Coq yourself, you need:
- for CoqIDE, the
[lablgtk3-sourceview3](https://github.com/garrigue/lablgtk) library
- (version >= 3.0.beta8), and the corresponding GTK 3.x libraries, as
+ (version >= 3.1.0), and the corresponding GTK 3.x libraries, as
of today (gtk+3 >= 3.18 and gtksourceview3 >= 3.18)
-The IEEE-754 compliance is required by primitive floating-point
-numbers (`Require Import Floats`). Common sources of incompatibility
-are checked at configure time, preventing compilation. In the,
-unlikely, event an incompatibility remains undetected, using Floats
-would enable to prove False on this architecture.
+Primitive floating-point numbers require IEEE-754 compliance
+(`Require Import Floats`). Common sources of incompatibility
+are checked at configure time, preventing compilation. In the
+unlikely event an incompatibility remains undetected, using `Floats`
+would enable proving `False` on this architecture.
-Note that `num` and `lablgtk3-sourceview3` should be properly
-registered with `findlib/ocamlfind` as Coq's makefile will use it to
-locate the libraries during the build.
+Note that OCaml dependencies (`zarith` and `lablgtk3-sourceview3` at
+this moment) must be properly registered with `findlib/ocamlfind`
+since Coq's build system uses `findlib` to locate them.
Debian / Ubuntu users can get the necessary system packages for
CoqIDE with:
@@ -47,9 +50,9 @@ CoqIDE with:
Opam (https://opam.ocaml.org/) is recommended to install OCaml and
the corresponding packages.
- $ opam switch create coq 4.10.0+flambda
+ $ opam switch create coq 4.11.1+flambda
$ eval $(opam env)
- $ opam install num ocamlfind lablgtk3-sourceview3
+ $ opam install ocamlfind zarith lablgtk3-sourceview3
should get you a reasonable OCaml environment to compile Coq. See the
OPAM documentation for more help.
diff --git a/META.coq.in b/META.coq.in
index 5aaa8cc8a6..a6747c614b 100644
--- a/META.coq.in
+++ b/META.coq.in
@@ -223,7 +223,7 @@ package "toplevel" (
description = "Coq Toplevel"
version = "8.13"
- requires = "num, coq.stm"
+ requires = "coq.stm"
directory = "toplevel"
archive(byte) = "toplevel.cma"
@@ -327,7 +327,7 @@ package "plugins" (
description = "Coq micromega plugin"
version = "8.13"
- requires = "num, coq.plugins.ltac"
+ requires = "coq.plugins.ltac"
directory = "micromega"
archive(byte) = "micromega_plugin.cmo"
diff --git a/Makefile.build b/Makefile.build
index 061489f47f..eed3c2813a 100644
--- a/Makefile.build
+++ b/Makefile.build
@@ -302,7 +302,7 @@ $(OCAMLC) $(MLINCLUDES) $(BYTEFLAGS) $(CUSTOM) -o $@ -linkpkg $(1) $^
endef
# Main packages linked by Coq.
-SYSMOD:=-package str,unix,dynlink,threads,num,zarith
+SYSMOD:=-package str,unix,dynlink,threads,zarith
###########################################################################
# Infrastructure for the rest of the Makefile
@@ -587,11 +587,11 @@ CSDPCERTCMO:=clib/clib.cma $(addprefix plugins/micromega/, \
$(CSDPCERT): $(call bestobj, $(CSDPCERTCMO))
$(SHOW)'OCAMLBEST -o $@'
- $(HIDE)$(call bestocaml, -package num,unix)
+ $(HIDE)$(call bestocaml, -package unix)
$(CSDPCERTBYTE): $(CSDPCERTCMO)
$(SHOW)'OCAMLC -o $@'
- $(HIDE)$(call ocamlbyte, -package num,unix)
+ $(HIDE)$(call ocamlbyte, -package unix)
###########################################################################
# tests
@@ -707,7 +707,7 @@ COND_OPTFLAGS= \
plugins/micromega/%.cmi: plugins/micromega/%.mli
$(SHOW)'OCAMLC $<'
- $(HIDE)$(OCAMLC) $(COND_BYTEFLAGS) -package unix,num -c $<
+ $(HIDE)$(OCAMLC) $(COND_BYTEFLAGS) -package unix -c $<
%.cmi: %.mli
$(SHOW)'OCAMLC $<'
@@ -715,7 +715,7 @@ plugins/micromega/%.cmi: plugins/micromega/%.mli
plugins/micromega/%.cmo: plugins/micromega/%.ml
$(SHOW)'OCAMLC $<'
- $(HIDE)$(OCAMLC) $(COND_BYTEFLAGS) -package unix,num -c $<
+ $(HIDE)$(OCAMLC) $(COND_BYTEFLAGS) -package unix -c $<
%.cmo: %.ml
$(SHOW)'OCAMLC $<'
@@ -752,7 +752,7 @@ plugins/micromega/csdpcert_FORPACK:=
plugins/micromega/%.cmx: plugins/micromega/%.ml
$(SHOW)'OCAMLOPT $<'
- $(HIDE)$(OCAMLOPT) $(COND_OPTFLAGS) $(HACKMLI) $($(@:.cmx=_FORPACK)) -package unix,num -c $<
+ $(HIDE)$(OCAMLOPT) $(COND_OPTFLAGS) $(HACKMLI) $($(@:.cmx=_FORPACK)) -package unix -c $<
plugins/%.cmx: plugins/%.ml
$(SHOW)'OCAMLOPT $<'
diff --git a/Makefile.ci b/Makefile.ci
index 85e4b965f9..af78f252df 100644
--- a/Makefile.ci
+++ b/Makefile.ci
@@ -37,7 +37,7 @@ CI_TARGETS= \
ci-geocoq \
ci-coqhammer \
ci-hott \
- ci-lambda_rust \
+ ci-iris \
ci-math_classes \
ci-mathcomp \
ci-metacoq \
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 5830095861..41b5210f45 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -80,11 +80,11 @@ jobs:
opam switch set ocaml-base-compiler.$COMPILER
eval $(opam env)
opam update
- opam install -j "$NJOBS" num ocamlfind${FINDLIB_VER} ounit lablgtk3-sourceview3 zarith.1.9.1
+ opam install -j "$NJOBS" ocamlfind${FINDLIB_VER} ounit lablgtk3-sourceview3 zarith.1.10
opam list
displayName: 'Install OCaml dependencies'
env:
- COMPILER: "4.10.0"
+ COMPILER: "4.11.1"
FINDLIB_VER: ".1.8.1"
OPAMYES: "true"
diff --git a/config/dune b/config/dune
index a30fdce9aa..83d1364b0c 100644
--- a/config/dune
+++ b/config/dune
@@ -22,4 +22,4 @@
; Needed to generate include lists for coq_makefile
plugin_list
(env_var COQ_CONFIGURE_PREFIX))
- (action (chdir %{project_root} (run %{ocaml} configure.ml -no-ask -native-compiler no))))
+ (action (chdir %{project_root} (run %{ocaml} configure.ml -no-ask -native-compiler no -bin-annot))))
diff --git a/configure.ml b/configure.ml
index 2dbc01651e..7fd1acb53e 100644
--- a/configure.ml
+++ b/configure.ml
@@ -688,23 +688,22 @@ let operating_system =
else
(try Sys.getenv "OS" with Not_found -> "")
-(** Zarith and num libraries *)
-
-let check_for_numlib () =
- (if caml_version_nums >= [4;6;0] then
- let numlib,_ = tryrun camlexec.find ["query";"num"] in
- match numlib with
- | "" ->
- die "Num library not installed, required for OCaml 4.06 or later"
- | _ -> cprintf "You have the Num library installed. Good!");
+(** Zarith library *)
+
+let check_for_zarith () =
let zarith,_ = tryrun camlexec.find ["query";"zarith"] in
+ let zarith_version, _ = run camlexec.find ["query"; "zarith"; "-format"; "%v"] in
match zarith with
| "" ->
die "Zarith library not installed, required"
- | _ -> cprintf "You have the Zarith library installed. Good!"
+ | _ ->
+ let zarith_version_int = List.map int_of_string (numeric_prefix_list zarith_version) in
+ if zarith_version_int >= [1;10;0] then
+ cprintf "You have the Zarith library %s installed. Good!" zarith_version
+ else
+ die ("Zarith version 1.10 is required, you have " ^ zarith_version)
-let numlib =
- check_for_numlib ()
+let numlib = check_for_zarith ()
(** * lablgtk3 and CoqIDE *)
@@ -717,20 +716,14 @@ let get_lablgtkdir () =
let check_lablgtk_version () =
let v, _ = tryrun camlexec.find ["query"; "-format"; "%v"; "lablgtk3"] in
- (true, v)
-
-(* ejgallego: we wait to do version checks until an official release is out *)
-(* try
- let vi = numeric_prefix_list v in
- (* Temporary hack *)
- if vi = ["3";"0";"beta3"] then (false, v) else
- let vi = List.map s2i vi in
- if vi < [3; 0; 0] then
+ try
+ let vl = numeric_prefix_list v in
+ let vn = List.map int_of_string vl in
+ if vn < [3; 1; 0] then
(false, v)
else
(true, v)
with _ -> (false, v)
-*)
let pr_ide = function No -> "no" | Byte -> "only bytecode" | Opt -> "native"
@@ -758,7 +751,7 @@ let check_coqide () =
else
let (ok, version) = check_lablgtk_version () in
let found = sprintf "LablGtk3 and LablGtkSourceView3 found (%s)" version in
- if not ok then set_ide No (found^", but too old (required >= 3.0, found " ^ version ^ ")");
+ if not ok then set_ide No (found^", but too old (required >= 3.1.0, found " ^ version ^ ")");
(* We're now sure to produce at least one kind of coqide *)
lablgtkdir := shorten_camllib dir;
if !prefs.coqide = Some Byte then set_ide Byte (found^", bytecode requested");
diff --git a/coq.opam b/coq.opam
index f44223052d..77fdf14834 100644
--- a/coq.opam
+++ b/coq.opam
@@ -24,8 +24,7 @@ depends: [
"ocaml" { >= "4.05.0" }
"dune" { >= "2.5.0" }
"ocamlfind" { build }
- "num"
- "zarith" { >= "1.9.1" }
+ "zarith" { >= "1.10" }
]
build: [
diff --git a/coq.opam.docker b/coq.opam.docker
index ac1869f344..74ca68ac0b 100644
--- a/coq.opam.docker
+++ b/coq.opam.docker
@@ -23,8 +23,7 @@ version: "dev"
depends: [
"ocaml" { >= "4.05.0" }
"ocamlfind" { build }
- "num"
- "zarith" { >= "1.9.1" }
+ "zarith" { >= "1.10" }
"conf-findutils" {build}
]
diff --git a/coqpp/coqpp_main.ml b/coqpp/coqpp_main.ml
index 2735c5b5eb..5e3199e8a6 100644
--- a/coqpp/coqpp_main.ml
+++ b/coqpp/coqpp_main.ml
@@ -201,8 +201,8 @@ function
| "IDENT", s -> fprintf fmt "Tok.PIDENT (%a)" print_pat s
| "PATTERNIDENT", s -> fprintf fmt "Tok.PPATTERNIDENT (%a)" print_pat s
| "FIELD", s -> fprintf fmt "Tok.PFIELD (%a)" print_pat s
-| "NUMERAL", None -> fprintf fmt "Tok.PNUMERAL None"
-| "NUMERAL", Some s -> fprintf fmt "Tok.PNUMERAL (Some (NumTok.Unsigned.of_string %a))" print_string s
+| "NUMBER", None -> fprintf fmt "Tok.PNUMBER None"
+| "NUMBER", Some s -> fprintf fmt "Tok.PNUMBER (Some (NumTok.Unsigned.of_string %a))" print_string s
| "STRING", s -> fprintf fmt "Tok.PSTRING (%a)" print_pat s
| "LEFTQMARK", None -> fprintf fmt "Tok.PLEFTQMARK"
| "BULLET", s -> fprintf fmt "Tok.PBULLET (%a)" print_pat s
diff --git a/default.nix b/default.nix
index ef969acd31..ffee77f1f7 100644
--- a/default.nix
+++ b/default.nix
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
hostname
python3 time # coq-makefile timing tools
]
- ++ (with ocamlPackages; [ ocaml findlib num zarith ])
+ ++ (with ocamlPackages; [ ocaml findlib ])
++ optionals buildIde [
ocamlPackages.lablgtk3-sourceview3
glib gnome3.defaultIconTheme wrapGAppsHook
@@ -71,9 +71,8 @@ stdenv.mkDerivation rec {
# Since #12604, ocamlfind looks for num when building plugins
# This follows a similar change in the nixpkgs repo (cf. NixOS/nixpkgs#94230)
- propagatedBuildInputs = [
- ocamlPackages.num
- ];
+ # Same for zarith which is needed since its introduction as a dependency of Coq
+ propagatedBuildInputs = with ocamlPackages; [ zarith ];
src =
if shell then null
diff --git a/dev/bench/gitlab-bench.yml b/dev/bench/gitlab-bench.yml
index a2207081f4..4275e3d121 100644
--- a/dev/bench/gitlab-bench.yml
+++ b/dev/bench/gitlab-bench.yml
@@ -28,5 +28,10 @@ bench:
paths:
- _bench/html/**/*.v.html
- _bench/logs
+ - _bench/files.listing
+ - _bench/opam.NEW/**/*.log
+ - _bench/opam.NEW/**/*.timing
+ - _bench/opam.OLD/**/*.log
+ - _bench/opam.OLD/**/*.timing
when: always
expire_in: 1 year
diff --git a/dev/bench/gitlab.sh b/dev/bench/gitlab.sh
index 38b4e25bde..7625e4e7f7 100755
--- a/dev/bench/gitlab.sh
+++ b/dev/bench/gitlab.sh
@@ -12,6 +12,9 @@ r='\033[0m' # reset (all attributes off)
b='\033[1m' # bold
u='\033[4m' # underline
nl=$'\n'
+bt='`' # backtick
+start_code_block='```'
+end_code_block='```'
number_of_processors=$(cat /proc/cpuinfo | grep '^processor *' | wc -l)
@@ -36,6 +39,7 @@ echo $PWD
#check_variable "BUILD_URL"
#check_variable "JOB_NAME"
#check_variable "JENKINS_URL"
+check_variable "CI_JOB_URL"
check_variable "coq_pr_number"
check_variable "coq_pr_comment_id"
check_variable "new_ocaml_switch"
@@ -61,8 +65,9 @@ else
exit 1
fi
-mkdir -p "_bench"
-working_dir="$PWD/_bench"
+bench_dirname="_bench"
+mkdir -p "${bench_dirname}"
+working_dir="$PWD/${bench_dirname}"
log_dir=$working_dir/logs
mkdir "$log_dir"
@@ -109,6 +114,15 @@ else
exit 1
fi
+if which du > /dev/null; then
+ :
+else
+ echo > /dev/stderr
+ echo "ERROR: \"du\" program is not available." > /dev/stderr
+ echo > /dev/stderr
+ exit 1
+fi
+
if [ ! -e "$working_dir" ]; then
echo > /dev/stderr
echo "ERROR: \"$working_dir\" does not exist." > /dev/stderr
@@ -146,22 +160,31 @@ function coqbot_update_comment() {
if [ ! -z "${coq_pr_number}" ]; then
comment_text=""
+ artifact_text=""
if [ -z "${is_done}" ]; then
comment_text="in progress, "
+ artifact_text="eventually "
else
comment_text=""
+ artifact_text=""
fi
- comment_text="Benchmarking ${comment_text}log available [here](${BUILD_URL}/console), workspace available [here](${JENKINS_URL}/view/benchmarking/job/${JOB_NAME}/ws/${BUILD_ID})"
+ comment_text="Benchmarking ${comment_text}log available [here](${CI_JOB_URL}) ([raw log here](${CI_JOB_URL}/raw)), artifacts ${artifact_text}available for [download](${CI_JOB_URL}/artifacts/download) and [browsing](${CI_JOB_URL}/artifacts/browse)"
if [ ! -z "${comment_body}" ]; then
- comment_text="${comment_text}${nl}"'```'"${nl}${comment_body}${nl}"'```'
+ comment_text="${comment_text}${nl}${start_code_block}${nl}${comment_body}${nl}${end_code_block}"
fi
if [ ! -z "${uninstallable_packages}" ]; then
comment_text="${comment_text}${nl}The following packages failed to install: ${uninstallable_packages}"
fi
+ comment_text="${comment_text}${nl}${nl}<details><summary>Old Coq version ${old_coq_commit}</summary>"
+ comment_text="${comment_text}${nl}${nl}${start_code_block}${nl}$(git log -n 1 "${old_coq_commit}")${nl}${end_code_block}${nl}</details>"
+ comment_text="${comment_text}${nl}${nl}<details><summary>New Coq version ${new_coq_commit}</summary>"
+ comment_text="${comment_text}${nl}${nl}${start_code_block}${nl}$(git log -n 1 "${new_coq_commit}")${nl}${end_code_block}${nl}</details>"
+ comment_text="${comment_text}${nl}${nl}[Diff: ${bt}${old_coq_commit}..${new_coq_commit}${bt}](https://github.com/coq/coq/compare/${old_coq_commit}..${new_coq_commit})"
+
# if there's a comment id, we update the comment while we're
# in progress; otherwise, we wait until the end to post a new
# comment
@@ -416,6 +439,11 @@ for coq_opam_package in $sorted_coq_opam_packages; do
done
done
+# Since we do not upload all files, store a list of the files
+# available so that if we at some point want to tweak which files we
+# upload, we'll know which ones are available for upload
+du -ha "$working_dir" > "$working_dir/files.listing"
+
# The following directories in $working_dir are no longer used:
#
# - coq, opam.OLD, opam.NEW
@@ -430,7 +458,7 @@ done
#
# The next script processes all these files and prints results in a table.
-echo "INFO: workspace = https://ci.inria.fr/coq/view/benchmarking/job/$JOB_NAME/ws/$BUILD_ID"
+echo "INFO: workspace = ${CI_JOB_URL}/artifacts/browse/${bench_dirname}"
# Print the final results.
if [ -z "$installable_coq_opam_packages" ]; then
@@ -444,7 +472,7 @@ else
rendered_results="$($program_path/render_results "$log_dir" $num_of_iterations $new_coq_commit_long $old_coq_commit_long 0 user_time_pdiff $installable_coq_opam_packages)"
echo "${rendered_results}"
- echo "INFO: per line timing: https://ci.inria.fr/coq/job/$JOB_NAME/ws/$BUILD_ID/html/"
+ echo "INFO: per line timing: ${CI_JOB_URL}/artifacts/browse/${bench_dirname}/html/"
cd "$coq_dir"
echo INFO: Old Coq version
diff --git a/dev/build/windows/makecoq_mingw.sh b/dev/build/windows/makecoq_mingw.sh
index cde1d798a0..fcc585117b 100755
--- a/dev/build/windows/makecoq_mingw.sh
+++ b/dev/build/windows/makecoq_mingw.sh
@@ -1026,7 +1026,7 @@ function make_num {
function make_zarith {
make_ocaml
- if build_prep https://github.com/ocaml/Zarith/archive release-1.9.1 tar.gz 1 zarith-1.9.1; then
+ if build_prep https://github.com/ocaml/Zarith/archive release-1.10 tar.gz 1 zarith-1.10; then
logn configure ./configure
log1 make
log2 make install
diff --git a/dev/ci/azure-opam.sh b/dev/ci/azure-opam.sh
index 17d71ac52a..f2397cdcee 100755
--- a/dev/ci/azure-opam.sh
+++ b/dev/ci/azure-opam.sh
@@ -2,7 +2,7 @@
set -e -x
-OPAM_VARIANT=ocaml-variants.4.10.0+mingw64c
+OPAM_VARIANT=ocaml-variants.4.11.1+mingw64c
wget https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam64.tar.xz -O opam64.tar.xz
tar -xf opam64.tar.xz
diff --git a/dev/ci/ci-basic-overlay.sh b/dev/ci/ci-basic-overlay.sh
index 2725e6b56c..75d9efaadc 100755
--- a/dev/ci/ci-basic-overlay.sh
+++ b/dev/ci/ci-basic-overlay.sh
@@ -62,9 +62,17 @@
: "${iris_CI_GITURL:=https://gitlab.mpi-sws.org/iris/iris}"
: "${iris_CI_ARCHIVEURL:=${iris_CI_GITURL}/-/archive}"
-: "${lambda_rust_CI_REF:=master}"
-: "${lambda_rust_CI_GITURL:=https://gitlab.mpi-sws.org/iris/lambda-rust}"
-: "${lambda_rust_CI_ARCHIVEURL:=${lambda_rust_CI_GITURL}/-/archive}"
+: "${autosubst_CI_REF:=coq86-devel}"
+: "${autosubst_CI_GITURL:=https://github.com/RalfJung/autosubst}"
+: "${autosubst_CI_ARCHIVEURL:=${autosubst_CI_GITURL}/archive}"
+
+: "${iris_string_ident_CI_REF:=master}"
+: "${iris_string_ident_CI_GITURL:=https://gitlab.mpi-sws.org/iris/string-ident}"
+: "${iris_string_ident_CI_ARCHIVEURL:=${iris_string_ident_CI_GITURL}/-/archive}"
+
+: "${iris_examples_CI_REF:=master}"
+: "${iris_examples_CI_GITURL:=https://gitlab.mpi-sws.org/iris/examples}"
+: "${iris_examples_CI_ARCHIVEURL:=${iris_examples_CI_GITURL}/-/archive}"
########################################################################
# HoTT
diff --git a/dev/ci/ci-common.sh b/dev/ci/ci-common.sh
index c01bc57f72..f9187d53a6 100644
--- a/dev/ci/ci-common.sh
+++ b/dev/ci/ci-common.sh
@@ -97,9 +97,9 @@ make()
if [ -z "${MAKEFLAGS+x}" ] && [ -n "${NJOBS}" ];
then
# Not submake and parallel make requested
- command make -j "$NJOBS" "$@"
+ command make --output-sync -j "$NJOBS" "$@"
else
- command make "$@"
+ command make --output-sync "$@"
fi
}
diff --git a/dev/ci/ci-iris.sh b/dev/ci/ci-iris.sh
new file mode 100755
index 0000000000..0256906112
--- /dev/null
+++ b/dev/ci/ci-iris.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+
+ci_dir="$(dirname "$0")"
+. "${ci_dir}/ci-common.sh"
+
+# Setup iris_examples and separate dependencies first
+git_download autosubst
+git_download iris_string_ident
+git_download iris_examples
+
+# Extract required version of Iris (avoiding "+" which does not work on MacOS :( *)
+iris_CI_REF=$(grep -F '"coq-iris"' < "${CI_BUILD_DIR}/iris_examples/opam" | sed 's/.*"dev\.[0-9][0-9.-]*\.\([0-9a-z][0-9a-z]*\)".*/\1/')
+
+# Setup Iris
+git_download iris
+
+# Extract required version of std++
+stdpp_CI_REF=$(grep -F '"coq-stdpp"' < "${CI_BUILD_DIR}/iris/opam" | sed 's/.*"dev\.[0-9][0-9.-]*\.\([0-9a-z][0-9a-z]*\)".*/\1/')
+
+# Setup std++
+git_download stdpp
+
+# Build std++
+( cd "${CI_BUILD_DIR}/stdpp" && make && make install )
+
+# Build and validate Iris
+( cd "${CI_BUILD_DIR}/iris" && make && make validate && make install )
+
+# Build autosubst
+( cd "${CI_BUILD_DIR}/autosubst" && make && make install )
+
+# Build iris-string-ident
+( cd "${CI_BUILD_DIR}/iris_string_ident" && make && make install )
+
+# Build Iris examples
+( cd "${CI_BUILD_DIR}/iris_examples" && make && make install )
diff --git a/dev/ci/ci-lambda_rust.sh b/dev/ci/ci-lambda_rust.sh
deleted file mode 100755
index 1ef0c2cb8f..0000000000
--- a/dev/ci/ci-lambda_rust.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env bash
-
-ci_dir="$(dirname "$0")"
-. "${ci_dir}/ci-common.sh"
-
-install_ssreflect
-
-# Setup lambda_rust first
-git_download lambda_rust
-
-# Extract required version of Iris (avoiding "+" which does not work on MacOS :( *)
-iris_CI_REF=$(grep -F coq-iris < "${CI_BUILD_DIR}/lambda_rust/opam" | sed 's/.*"dev\.[0-9][0-9.-]*\.\([0-9a-z][0-9a-z]*\)".*/\1/')
-
-# Setup Iris
-git_download iris
-
-# Extract required version of std++
-stdpp_CI_REF=$(grep -F coq-stdpp < "${CI_BUILD_DIR}/iris/opam" | sed 's/.*"dev\.[0-9][0-9.-]*\.\([0-9a-z][0-9a-z]*\)".*/\1/')
-
-# Setup std++
-git_download stdpp
-
-# Build std++
-( cd "${CI_BUILD_DIR}/stdpp" && make && make install )
-
-# Build and validate Iris
-( cd "${CI_BUILD_DIR}/iris" && make && make validate && make install )
-
-# Build lambda_rust
-( cd "${CI_BUILD_DIR}/lambda_rust" && make && make install )
diff --git a/dev/ci/ci-mathcomp.sh b/dev/ci/ci-mathcomp.sh
index cae127ee7b..b1aa56ec4e 100755
--- a/dev/ci/ci-mathcomp.sh
+++ b/dev/ci/ci-mathcomp.sh
@@ -6,7 +6,7 @@ ci_dir="$(dirname "$0")"
git_download mathcomp
-( cd "${CI_BUILD_DIR}/mathcomp/mathcomp" && make && make install )
+( cd "${CI_BUILD_DIR}/mathcomp/mathcomp" && make && make test-suite && make install )
git_download fourcolor
diff --git a/dev/ci/docker/bionic_coq/Dockerfile b/dev/ci/docker/bionic_coq/Dockerfile
index 78c8673299..f672ead807 100644
--- a/dev/ci/docker/bionic_coq/Dockerfile
+++ b/dev/ci/docker/bionic_coq/Dockerfile
@@ -1,4 +1,4 @@
-# CACHEKEY: "bionic_coq-V2020-08-28-V92"
+# CACHEKEY: "bionic_coq-V2020-09-17-V88"
# ^^ Update when modifying this file.
FROM ubuntu:bionic
@@ -40,10 +40,8 @@ ENV NJOBS="2" \
# Base opam is the set of base packages required by Coq
ENV COMPILER="4.05.0"
-# Common OPAM packages, num to be removed once the migration to
-# micromega is complete, `num` also does not have a version number as
-# the right version to install varies with the compiler version.
-ENV BASE_OPAM="num zarith.1.9.1 ocamlfind.1.8.1 ounit2.2.2.3 odoc.1.5.0" \
+# Common OPAM packages
+ENV BASE_OPAM="zarith.1.10 ocamlfind.1.8.1 ounit2.2.2.3 odoc.1.5.1" \
CI_OPAM="menhir.20190626 ocamlgraph.1.8.8" \
BASE_ONLY_OPAM="elpi.1.11.0"
@@ -59,12 +57,12 @@ RUN opam init -a --disable-sandboxing --compiler="$COMPILER" default https://opa
# base+32bit switch, note the zarith hack
RUN opam switch create "${COMPILER}+32bit" && eval $(opam env) && \
- i386 env CC='gcc -m32' opam install zarith.1.9.1 && \
+ i386 env CC='gcc -m32' opam install zarith.1.10 && \
opam install $BASE_OPAM
# EDGE switch
-ENV COMPILER_EDGE="4.10.0" \
- BASE_OPAM_EDGE="dune.2.5.1 dune-release.1.3.3 ocamlformat.0.14.2"
+ENV COMPILER_EDGE="4.11.1" \
+ BASE_OPAM_EDGE="dune.2.5.1 dune-release.1.3.3 ocamlformat.0.15.0"
# EDGE+flambda switch, we install CI_OPAM as to be able to use
# `ci-template-flambda` with everything.
diff --git a/dev/ci/nix/default.nix b/dev/ci/nix/default.nix
index 05624ff4a1..741cb89eed 100644
--- a/dev/ci/nix/default.nix
+++ b/dev/ci/nix/default.nix
@@ -114,6 +114,7 @@ let projects = {
mtac2 = callPackage ./mtac2.nix {};
oddorder = callPackage ./oddorder.nix {};
quickchick = callPackage ./quickchick.nix {};
+ simple-io = callPackage ./simple-io.nix {};
verdi-raft = callPackage ./verdi-raft.nix {};
VST = callPackage ./VST.nix {};
}; in
diff --git a/dev/ci/nix/simple-io.nix b/dev/ci/nix/simple-io.nix
new file mode 100644
index 0000000000..3b7b6c09b1
--- /dev/null
+++ b/dev/ci/nix/simple-io.nix
@@ -0,0 +1,5 @@
+{ ocamlPackages, ssreflect, coq-ext-lib, simple-io }:
+{
+ buildInputs = with ocamlPackages; [ ocaml findlib ocamlbuild num ];
+ coqBuildInputs = [ ssreflect coq-ext-lib ];
+}
diff --git a/dev/ci/user-overlays/12968-maximedenes-delay-frozen-evarconv.sh b/dev/ci/user-overlays/12968-maximedenes-delay-frozen-evarconv.sh
new file mode 100644
index 0000000000..ee75944a52
--- /dev/null
+++ b/dev/ci/user-overlays/12968-maximedenes-delay-frozen-evarconv.sh
@@ -0,0 +1,6 @@
+if [ "$CI_PULL_REQUEST" = "12968" ] || [ "$CI_BRANCH" = "delay-frozen-evarconv" ]; then
+
+ equations_CI_REF=delay-frozen-evarconv
+ equations_CI_GITURL=https://github.com/maximedenes/Coq-Equations
+
+fi
diff --git a/dev/dune-workspace.all b/dev/dune-workspace.all
index d6348a3624..679b3d1f79 100644
--- a/dev/dune-workspace.all
+++ b/dev/dune-workspace.all
@@ -3,5 +3,5 @@
; Add custom flags here. Default developer profile is `dev`
(context (opam (switch 4.05.0)))
(context (opam (switch 4.05.0+32bit)))
-(context (opam (switch 4.10.0)))
-(context (opam (switch 4.10.0+flambda)))
+(context (opam (switch 4.11.1)))
+(context (opam (switch 4.11.1+flambda)))
diff --git a/dev/include_printers b/dev/include_printers
index 30529b5fd6..7583762970 100644
--- a/dev/include_printers
+++ b/dev/include_printers
@@ -26,6 +26,8 @@
#install_printer (* judgement *) ppj;;
#install_printer (* id set *) ppidset;;
#install_printer (* int set *) ppintset;;
+#install_printer (* id set *) ppidmapgen;;
+#install_printer (* int set *) ppintmapgen;;
#install_printer (* Reductionops machine stack *) pp_stack_t;;
diff --git a/dev/nixpkgs.nix b/dev/nixpkgs.nix
index bfb25e72dd..a582a70e0a 100644
--- a/dev/nixpkgs.nix
+++ b/dev/nixpkgs.nix
@@ -1,4 +1,4 @@
import (fetchTarball {
- url = "https://github.com/NixOS/nixpkgs/archive/17812e653d89c46d68b7b10e290b1c16758f4e47.tar.gz";
- sha256 = "1zcb70dyfqc8l2ywpbvxmpfshapdi0g365m3rhmwpagqg47pnyxs";
+ url = "https://github.com/NixOS/nixpkgs/archive/0bbeca2ff952e6a171534793ddd0fa97c8f9546a.tar.gz";
+ sha256 = "0h1y4ffvyvkqs6k2pak02pby25va7c6c1y4p8xkwlzqwswxqxvfl";
})
diff --git a/dev/top_printers.dbg b/dev/top_printers.dbg
index 60618f6491..21d6fbe9aa 100644
--- a/dev/top_printers.dbg
+++ b/dev/top_printers.dbg
@@ -28,6 +28,7 @@ install_printer Top_printers.ppnumtokunsignednat
install_printer Top_printers.ppintset
install_printer Top_printers.ppidset
install_printer Top_printers.ppidmapgen
+install_printer Top_printers.ppintmapgen
install_printer Top_printers.ppididmap
install_printer Top_printers.ppconstrunderbindersidmap
install_printer Top_printers.ppevarsubst
diff --git a/dev/top_printers.ml b/dev/top_printers.ml
index 773170207e..e4dd7ef52c 100644
--- a/dev/top_printers.ml
+++ b/dev/top_printers.ml
@@ -94,11 +94,13 @@ let pridmap pr l =
prset' pr (Id.Map.fold (fun a b l -> (a,b)::l) l [])
let ppidmap pr l = pp (pridmap pr l)
-let pridmapgen l =
- let dom = Id.Set.elements (Id.Map.domain l) in
+let prmapgen pr dom =
if dom = [] then str "[]" else
- str "[domain= " ++ hov 0 (prlist_with_sep spc Id.print dom) ++ str "]"
+ str "[domain= " ++ hov 0 (prlist_with_sep spc pr dom) ++ str "]"
+let pridmapgen l = prmapgen Id.print (Id.Set.elements (Id.Map.domain l))
let ppidmapgen l = pp (pridmapgen l)
+let printmapgen l = prmapgen int (Int.Set.elements (Int.Map.domain l))
+let ppintmapgen l = pp (printmapgen l)
let ppevarsubst = ppidmap (fun id0 -> prset (fun (c,copt,id) ->
hov 0
diff --git a/dev/top_printers.mli b/dev/top_printers.mli
index b1bb5e4702..712f66112c 100644
--- a/dev/top_printers.mli
+++ b/dev/top_printers.mli
@@ -65,6 +65,9 @@ val ppidmap : (Names.Id.Map.key -> 'a -> Pp.t) -> 'a Names.Id.Map.t -> unit
val pridmapgen : 'a Names.Id.Map.t -> Pp.t
val ppidmapgen : 'a Names.Id.Map.t -> unit
+val printmapgen : 'a Int.Map.t -> Pp.t
+val ppintmapgen : 'a Int.Map.t -> unit
+
val prididmap : Names.Id.t Names.Id.Map.t -> Pp.t
val ppididmap : Names.Id.t Names.Id.Map.t -> unit
diff --git a/doc/README.md b/doc/README.md
index 99d285320d..79d1e1b756 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -28,10 +28,9 @@ Dependencies
To produce the complete documentation in HTML, you will need Coq dependencies
listed in [`INSTALL.md`](../INSTALL.md). Additionally, the Sphinx-based
-reference manual requires Python 3, and the following Python packages
-(note the version constraints on Sphinx):
+reference manual requires Python 3, and the following Python packages:
- - sphinx >= 2.3.1 & < 3.0.0
+ - sphinx >= 2.3.1
- sphinx_rtd_theme >= 0.4.3
- beautifulsoup4 >= 4.0.6
- antlr4-python3-runtime >= 4.7.1
@@ -41,7 +40,7 @@ reference manual requires Python 3, and the following Python packages
To install them, you should first install pip and setuptools (for instance,
with `apt install python3-pip python3-setuptools` on Debian / Ubuntu) then run:
- pip3 install sphinx==2.3.1 sphinx_rtd_theme beautifulsoup4 \
+ pip3 install sphinx sphinx_rtd_theme beautifulsoup4 \
antlr4-python3-runtime==4.7.1 pexpect sphinxcontrib-bibtex
Nix users should get the correct development environment to build the
diff --git a/doc/changelog/02-specification-language/07825-rechable-from-evars.rst b/doc/changelog/02-specification-language/07825-rechable-from-evars.rst
new file mode 100644
index 0000000000..e57d5a7bc5
--- /dev/null
+++ b/doc/changelog/02-specification-language/07825-rechable-from-evars.rst
@@ -0,0 +1,9 @@
+- **Changed:**
+ In :tacn:`refine`, new existential variables unified with existing ones are no
+ longer considered as fresh. The behavior of :tacn:`simple 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>`_).
diff --git a/doc/changelog/03-notations/12979-doc-numbers.rst b/doc/changelog/03-notations/12979-doc-numbers.rst
new file mode 100644
index 0000000000..631bd6ec69
--- /dev/null
+++ b/doc/changelog/03-notations/12979-doc-numbers.rst
@@ -0,0 +1,4 @@
+- **Deprecated:**
+ :n:`Numeral Notation`, please use :ref:`Number Notation <number-notations>` instead.
+ (`#12979 <https://github.com/coq/coq/pull/12979>`_,
+ by Pierre Roux).
diff --git a/doc/changelog/04-tactics/12993-remove-cutrewrite.rst b/doc/changelog/04-tactics/12993-remove-cutrewrite.rst
new file mode 100644
index 0000000000..b719c5618e
--- /dev/null
+++ b/doc/changelog/04-tactics/12993-remove-cutrewrite.rst
@@ -0,0 +1,4 @@
+- **Removed:**
+ Deprecated ``cutrewrite`` tactic. Use :tacn:`replace` instead
+ (`#12993 <https://github.com/coq/coq/pull/12993>`_,
+ by Théo Zimmermann).
diff --git a/doc/changelog/06-ssreflect/12857-changelog-for-12857.rst b/doc/changelog/06-ssreflect/12857-changelog-for-12857.rst
new file mode 100644
index 0000000000..4350fd0238
--- /dev/null
+++ b/doc/changelog/06-ssreflect/12857-changelog-for-12857.rst
@@ -0,0 +1,8 @@
+- **Fixed:**
+ Regression in error reporting after :tacn:`case <case (ssreflect)>`.
+ A generic error message "Could not fill dependent hole in apply" was
+ reported for any error following :tacn:`case <case (ssreflect)>` or
+ :tacn:`elim <elim (ssreflect)>`
+ (`#12857 <https://github.com/coq/coq/pull/12857>`_,
+ fixes `#12837 <https://github.com/coq/coq/issues/12837>`_,
+ by Enrico Tassi).
diff --git a/doc/changelog/07-commands-and-options/13016-remove-Ocaml-value.rst b/doc/changelog/07-commands-and-options/13016-remove-Ocaml-value.rst
new file mode 100644
index 0000000000..c67b0f6e80
--- /dev/null
+++ b/doc/changelog/07-commands-and-options/13016-remove-Ocaml-value.rst
@@ -0,0 +1,4 @@
+- **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).
diff --git a/doc/changelog/08-tools/13063-fix-no-output-sync-make-file.rst b/doc/changelog/08-tools/13063-fix-no-output-sync-make-file.rst
new file mode 100644
index 0000000000..75b1e26248
--- /dev/null
+++ b/doc/changelog/08-tools/13063-fix-no-output-sync-make-file.rst
@@ -0,0 +1,6 @@
+- **Fixed:**
+ Targets such as ``print-pretty-timed`` in ``coq_makefile``-made
+ ``Makefile``\s no longer error in rare cases where ``--output-sync`` is not
+ passed to make and the timing output gets interleaved in just the wrong way
+ (`#13063 <https://github.com/coq/coq/pull/13063>`_, fixes `#13062
+ <https://github.com/coq/coq/issues/13062>`_, by Jason Gross).
diff --git a/doc/changelog/10-standard-library/12094-app_inj_tail.rst b/doc/changelog/10-standard-library/12094-app_inj_tail.rst
new file mode 100644
index 0000000000..702fbb3d64
--- /dev/null
+++ b/doc/changelog/10-standard-library/12094-app_inj_tail.rst
@@ -0,0 +1,5 @@
+- **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).
diff --git a/doc/changelog/11-infrastructure-and-dependencies/12972-ocaml+4_11.rst b/doc/changelog/11-infrastructure-and-dependencies/12972-ocaml+4_11.rst
new file mode 100644
index 0000000000..855aa360f1
--- /dev/null
+++ b/doc/changelog/11-infrastructure-and-dependencies/12972-ocaml+4_11.rst
@@ -0,0 +1,4 @@
+- **Added:**
+ Coq is now tested against OCaml 4.11.1
+ (`#12972 <https://github.com/coq/coq/pull/12972>`_,
+ by Emilio Jesus Gallego Arias).
diff --git a/doc/changelog/11-infrastructure-and-dependencies/13007-zarith+goodbye_num.rst b/doc/changelog/11-infrastructure-and-dependencies/13007-zarith+goodbye_num.rst
new file mode 100644
index 0000000000..c142eec561
--- /dev/null
+++ b/doc/changelog/11-infrastructure-and-dependencies/13007-zarith+goodbye_num.rst
@@ -0,0 +1,4 @@
+- **Removed:**
+ The `num` library is not linked to Coq anymore
+ (`#13007 <https://github.com/coq/coq/pull/13007>`_,
+ by Emilio Jesus Gallego Arias).
diff --git a/doc/changelog/11-infrastructure-and-dependencies/13011-sphinx-3.rst b/doc/changelog/11-infrastructure-and-dependencies/13011-sphinx-3.rst
new file mode 100644
index 0000000000..d17a2dff6b
--- /dev/null
+++ b/doc/changelog/11-infrastructure-and-dependencies/13011-sphinx-3.rst
@@ -0,0 +1,5 @@
+- **Fixed:**
+ The reference manual can now build with Sphinx 3
+ (`#13011 <https://github.com/coq/coq/pull/13011>`_,
+ fixes `#12332 <https://github.com/coq/coq/issues/12332>`_,
+ by Théo Zimmermann and Jim Fehrle).
diff --git a/doc/sphinx/README.rst b/doc/sphinx/README.rst
index f91874d74d..4461ff9240 100644
--- a/doc/sphinx/README.rst
+++ b/doc/sphinx/README.rst
@@ -15,10 +15,10 @@ Coq objects
Our Coq domain define multiple `objects`_. Each object has a *signature* (think *type signature*), followed by an optional body (a description of that object). The following example defines two objects: a variant of the ``simpl`` tactic, and an error that it may raise::
- .. tacv:: simpl @pattern at {+ @num}
+ .. tacv:: simpl @pattern at {+ @natural}
:name: simpl_at
- This applies ``simpl`` only to the :n:`{+ @num}` occurrences of the subterms
+ This applies ``simpl`` only to the :n:`{+ @natural}` occurrences of the subterms
matching :n:`@pattern` in the current goal.
.. exn:: Too few occurrences
@@ -46,10 +46,10 @@ Most objects should have a body (i.e. a block of indented text following the sig
Notations
---------
-The signatures of most objects can be written using a succinct DSL for Coq notations (think regular expressions written with a Lispy syntax). A typical signature might look like ``Hint Extern @num {? @pattern} => @tactic``, which means that the ``Hint Extern`` command takes a number (``num``), followed by an optional pattern, and a mandatory tactic. The language has the following constructs (the full grammar is in `TacticNotations.g </doc/tools/coqrst/notations/TacticNotations.g>`_):
+The signatures of most objects can be written using a succinct DSL for Coq notations (think regular expressions written with a Lispy syntax). A typical signature might look like ``Hint Extern @natural {? @pattern} => @tactic``, which means that the ``Hint Extern`` command takes a number (``natural``), followed by an optional pattern, and a mandatory tactic. The language has the following constructs (the full grammar is in `TacticNotations.g </doc/tools/coqrst/notations/TacticNotations.g>`_):
``@…``
- A placeholder (``@ident``, ``@num``, ``@tactic``\ …)
+ A placeholder (``@ident``, ``@natural``, ``@tactic``\ …)
``{? …}``
an optional block
@@ -80,9 +80,9 @@ As an exercise, what do the following patterns mean?
.. code::
- pattern {+, @term {? at {+ @num}}}
- generalize {+, @term at {+ @num} as @ident}
- fix @ident @num with {+ (@ident {+ @binder} {? {struct @ident'}} : @type)}
+ pattern {+, @term {? at {+ @natural}}}
+ generalize {+, @term at {+ @natural} as @ident}
+ fix @ident @natural with {+ (@ident {+ @binder} {? {struct @ident'}} : @type)}
Objects
-------
@@ -141,7 +141,7 @@ Here is the list of all objects of the Coq domain (The symbol :black_nib: indica
``.. opt::`` :black_nib: A Coq option (a setting with non-boolean value, e.g. a string or numeric value).
Example::
- .. opt:: Hyps Limit @num
+ .. opt:: Hyps Limit @natural
:name Hyps Limit
Controls the maximum number of hypotheses displayed in goals after
@@ -157,7 +157,7 @@ Here is the list of all objects of the Coq domain (The symbol :black_nib: indica
Example::
- .. prodn:: occ_switch ::= { {? {| + | - } } {* @num } }
+ .. prodn:: occ_switch ::= { {? {| + | - } } {* @natural } }
term += let: @pattern := @term in @term
| second_production
@@ -178,7 +178,7 @@ Here is the list of all objects of the Coq domain (The symbol :black_nib: indica
``.. tacn::`` :black_nib: A tactic, or a tactic notation.
Example::
- .. tacn:: do @num @expr
+ .. tacn:: do @natural @expr
:token:`expr` is evaluated to ``v`` which must be a tactic value. …
@@ -346,17 +346,15 @@ In addition to the objects and directives above, the ``coqrst`` Sphinx plugin de
creates a link to that. When referring to a placeholder that happens to be
a grammar production, ``:token:`…``` is typically preferable to ``:n:`@…```.
-``:production:`` A grammar production not included in a ``productionlist`` directive.
+``:production:`` A grammar production not included in a ``prodn`` directive.
Useful to informally introduce a production, as part of running text.
Example::
:production:`string` indicates a quoted string.
- You're not likely to use this role very commonly; instead, use a
- `production list
- <http://www.sphinx-doc.org/en/stable/markup/para.html#directive-productionlist>`_
- and reference its tokens using ``:token:`…```.
+ You're not likely to use this role very commonly; instead, use a ``prodn``
+ directive and reference its tokens using ``:token:`…```.
``:gdef:`` Marks the definition of a glossary term inline in the text. Matching :term:`XXX`
constructs will link to it. Use the form :gdef:`text <term>` to display "text"
diff --git a/doc/sphinx/README.template.rst b/doc/sphinx/README.template.rst
index 5762967c36..b4e21aa14a 100644
--- a/doc/sphinx/README.template.rst
+++ b/doc/sphinx/README.template.rst
@@ -15,10 +15,10 @@ Coq objects
Our Coq domain define multiple `objects`_. Each object has a *signature* (think *type signature*), followed by an optional body (a description of that object). The following example defines two objects: a variant of the ``simpl`` tactic, and an error that it may raise::
- .. tacv:: simpl @pattern at {+ @num}
+ .. tacv:: simpl @pattern at {+ @natural}
:name: simpl_at
- This applies ``simpl`` only to the :n:`{+ @num}` occurrences of the subterms
+ This applies ``simpl`` only to the :n:`{+ @natural}` occurrences of the subterms
matching :n:`@pattern` in the current goal.
.. exn:: Too few occurrences
@@ -46,10 +46,10 @@ Most objects should have a body (i.e. a block of indented text following the sig
Notations
---------
-The signatures of most objects can be written using a succinct DSL for Coq notations (think regular expressions written with a Lispy syntax). A typical signature might look like ``Hint Extern @num {? @pattern} => @tactic``, which means that the ``Hint Extern`` command takes a number (``num``), followed by an optional pattern, and a mandatory tactic. The language has the following constructs (the full grammar is in `TacticNotations.g </doc/tools/coqrst/notations/TacticNotations.g>`_):
+The signatures of most objects can be written using a succinct DSL for Coq notations (think regular expressions written with a Lispy syntax). A typical signature might look like ``Hint Extern @natural {? @pattern} => @tactic``, which means that the ``Hint Extern`` command takes a number (``natural``), followed by an optional pattern, and a mandatory tactic. The language has the following constructs (the full grammar is in `TacticNotations.g </doc/tools/coqrst/notations/TacticNotations.g>`_):
``@…``
- A placeholder (``@ident``, ``@num``, ``@tactic``\ …)
+ A placeholder (``@ident``, ``@natural``, ``@tactic``\ …)
``{? …}``
an optional block
@@ -80,9 +80,9 @@ As an exercise, what do the following patterns mean?
.. code::
- pattern {+, @term {? at {+ @num}}}
- generalize {+, @term at {+ @num} as @ident}
- fix @ident @num with {+ (@ident {+ @binder} {? {struct @ident'}} : @type)}
+ pattern {+, @term {? at {+ @natural}}}
+ generalize {+, @term at {+ @natural} as @ident}
+ fix @ident @natural with {+ (@ident {+ @binder} {? {struct @ident'}} : @type)}
Objects
-------
diff --git a/doc/sphinx/addendum/extraction.rst b/doc/sphinx/addendum/extraction.rst
index ce68274036..c2249b8e57 100644
--- a/doc/sphinx/addendum/extraction.rst
+++ b/doc/sphinx/addendum/extraction.rst
@@ -429,11 +429,11 @@ Additional settings
Provides a comment that is included at the beginning of the output files.
-.. opt:: Extraction Flag @num
+.. opt:: Extraction Flag @natural
:name: Extraction Flag
Controls which optimizations are used during extraction, providing a finer-grained
- control than :flag:`Extraction Optimize`. The bits of :token:`num` are used as a bit mask.
+ control than :flag:`Extraction Optimize`. The bits of :token:`natural` are used as a bit mask.
Keeping an option off keeps the extracted ML more similar to the Coq term.
Values are:
diff --git a/doc/sphinx/addendum/micromega.rst b/doc/sphinx/addendum/micromega.rst
index d7e4c9c804..ba5bac6489 100644
--- a/doc/sphinx/addendum/micromega.rst
+++ b/doc/sphinx/addendum/micromega.rst
@@ -61,19 +61,23 @@ tactics for solving arithmetic goals over :math:`\mathbb{Q}`,
The tactics solve propositional formulas parameterized by atomic
arithmetic expressions interpreted over a domain :math:`D \in \{\mathbb{Z},\mathbb{Q},\mathbb{R}\}`.
-The syntax of the formulas is the following:
+The syntax for formulas over :math:`\mathbb{Z}` is:
- .. productionlist:: F
- F : A ∣ P | True ∣ False ∣ F ∧ F ∣ F ∨ F ∣ F ↔ F ∣ F → F ∣ ¬ F | F = F
- A : p = p ∣ p > p ∣ p < p ∣ p ≥ p ∣ p ≤ p
- p : c ∣ x ∣ −p ∣ p − p ∣ p + p ∣ p × p ∣ p ^ n
+ .. note the following is not an insertprodn
-where :math:`F` is interpreted over either `Prop` or `bool`,
-:math:`c` is a numeric constant, :math:`x \in D` is a numeric variable, the
-operators :math:`−, +, ×` are respectively subtraction, addition, and product;
-:math:`p ^ n` is exponentiation by a constant :math:`n`, :math:`P` is an arbitrary proposition.
-For :math:`\mathbb{Q}`, equality is not Leibniz equality ``=`` but the equality of
-rationals ``==``.
+ .. prodn::
+ F ::= {| @A | P | True | False | @F /\\ @F | @F \\/ @F | @F <-> @F | @F -> @F | ~ @F | @F = @F }
+ A ::= {| @p = @p | @p > @p | @p < @p | @p >= @p | @p <= @p }
+ p ::= {| c | x | −@p | @p − @p | @p + @p | @p * @p | @p ^ n }
+
+where
+
+ - :token:`F` is interpreted over either `Prop` or `bool`
+ - :n:`P` is an arbitrary proposition
+ - :n:`c` is a numeric constant of :math:`D`
+ - :n:`x` :math:`\in D` is a numeric variable
+ - :n:`−`, :n:`+` and :n:`*` are respectively subtraction, addition and product
+ - :n:`p ^ n` is exponentiation by a constant :math:`n`
When :math:`F` is interpreted over `bool`, the boolean operators are
`&&`, `||`, `Bool.eqb`, `Bool.implb`, `Bool.negb` and the comparisons
@@ -81,6 +85,9 @@ in :math:`A` are also interpreted over the booleans (e.g., for
:math:`\mathbb{Z}`, we have `Z.eqb`, `Z.gtb`, `Z.ltb`, `Z.geb`,
`Z.leb`).
+For :math:`\mathbb{Q}`, use the equality of rationals ``==`` rather than
+Leibniz equality ``=``.
+
For :math:`\mathbb{Z}` (resp. :math:`\mathbb{Q}`), :math:`c` ranges over integer constants (resp. rational
constants). For :math:`\mathbb{R}`, the tactic recognizes as real constants the
following expressions:
@@ -180,7 +187,7 @@ are a way to take into account the discreteness of :math:`\mathbb{Z}` by roundin
Let :math:`p` be an integer and :math:`c` a rational constant. Then
:math:`p \ge c \rightarrow p \ge \lceil{c}\rceil`.
-For instance, from 2 x = 1 we can deduce
+For instance, from :math:`2 x = 1` we can deduce
+ :math:`x \ge 1/2` whose cut plane is :math:`x \ge \lceil{1/2}\rceil = 1`;
+ :math:`x \le 1/2` whose cut plane is :math:`x \le \lfloor{1/2}\rfloor = 0`.
diff --git a/doc/sphinx/addendum/nsatz.rst b/doc/sphinx/addendum/nsatz.rst
index ed93145622..8a64a7ed4b 100644
--- a/doc/sphinx/addendum/nsatz.rst
+++ b/doc/sphinx/addendum/nsatz.rst
@@ -64,7 +64,7 @@ Buchberger algorithm.
This computation is done after a step of *reification*, which is
performed using :ref:`typeclasses`.
-.. tacv:: nsatz with radicalmax:=@num%N strategy:=@num%Z parameters:=[{*, @ident}] variables:=[{*, @ident}]
+.. tacv:: nsatz with radicalmax:=@natural%N strategy:=@natural%Z parameters:=[{*, @ident}] variables:=[{*, @ident}]
Most complete syntax for `nsatz`.
diff --git a/doc/sphinx/addendum/program.rst b/doc/sphinx/addendum/program.rst
index b5618c5721..c6a4b4fe1a 100644
--- a/doc/sphinx/addendum/program.rst
+++ b/doc/sphinx/addendum/program.rst
@@ -196,12 +196,9 @@ Program Definition
Program Fixpoint
~~~~~~~~~~~~~~~~
-.. cmd:: Program Fixpoint @ident {* @binder } {? {@order}} : @type := @term
+.. cmd:: Program Fixpoint @fix_definition {* with @fix_definition }
- The optional order annotation follows the grammar:
-
- .. productionlist:: orderannot
- order : measure `term` [ `term` ] | wf `term` `ident`
+ The optional :n:`@fixannot` annotation can be one of:
+ :g:`measure f R` where :g:`f` is a value of type :g:`X` computed on
any subset of the arguments and the optional term
@@ -306,9 +303,9 @@ optional tactic is replaced by the default one if not specified.
Displays all remaining obligations.
-.. cmd:: Obligation @num {? of @ident}
+.. cmd:: Obligation @natural {? of @ident}
- Start the proof of obligation :token:`num`.
+ Start the proof of obligation :token:`natural`.
.. cmd:: Next Obligation {? of @ident}
diff --git a/doc/sphinx/addendum/type-classes.rst b/doc/sphinx/addendum/type-classes.rst
index 903aa266e2..11162ec96b 100644
--- a/doc/sphinx/addendum/type-classes.rst
+++ b/doc/sphinx/addendum/type-classes.rst
@@ -330,7 +330,7 @@ Summary of the commands
This command has no effect when used on a typeclass.
-.. cmd:: Instance @ident {* @binder } : @term__0 {+ @term} {? | @num} := { {*; @field_def} }
+.. cmd:: Instance @ident {* @binder } : @term__0 {+ @term} {? | @natural} := { {*; @field_def} }
This command is used to declare a typeclass instance named
:token:`ident` of the class :n:`@term__0` with parameters :token:`term` and
@@ -340,7 +340,7 @@ Summary of the commands
An arbitrary context of :token:`binders` can be put after the name of the
instance and before the colon to declare a parameterized instance. An
optional priority can be declared, 0 being the highest priority as for
- :tacn:`auto` hints. If the priority :token:`num` is not specified, it defaults to the number
+ :tacn:`auto` hints. If the priority :token:`natural` is not specified, it defaults to the number
of non-dependent binders of the instance.
This command supports the :attr:`global` attribute that can be
@@ -362,7 +362,7 @@ Summary of the commands
to fill them. It works exactly as if no body had been given and
the :tacn:`refine` tactic has been used first.
- .. cmdv:: Instance @ident {* @binder } : forall {* @binder }, @term__0 {+ @term} {? | @num } := @term
+ .. cmdv:: Instance @ident {* @binder } : forall {* @binder }, @term__0 {+ @term} {? | @natural } := @term
This syntax is used for declaration of singleton class instances or
for directly giving an explicit term of type :n:`forall {* @binder }, @term__0
@@ -381,11 +381,11 @@ Summary of the commands
Besides the :cmd:`Class` and :cmd:`Instance` vernacular commands, there are a
few other commands related to typeclasses.
-.. cmd:: Existing Instance {+ @ident} {? | @num}
+.. cmd:: Existing Instance {+ @ident} {? | @natural}
This command adds an arbitrary list of constants whose type ends with
an applied typeclass to the instance database with an optional
- priority :token:`num`. It can be used for redeclaring instances at the end of
+ priority :token:`natural`. It can be used for redeclaring instances at the end of
sections, or declaring structure projections as instances. This is
equivalent to ``Hint Resolve ident : typeclass_instances``, except it
registers instances for :cmd:`Print Instances`.
@@ -446,10 +446,10 @@ few other commands related to typeclasses.
+ When considering local hypotheses, we use the union of all the modes
declared in the given databases.
- .. tacv:: typeclasses eauto @num
+ .. tacv:: typeclasses eauto @natural
.. warning::
- The semantics for the limit :n:`@num`
+ The semantics for the limit :n:`@natural`
is different than for auto. By default, if no limit is given, the
search is unbounded. Contrary to :tacn:`auto`, introduction steps are
counted, which might result in larger limits being necessary when
@@ -581,7 +581,7 @@ Settings
Otherwise, the search strategy is depth-first search. The default is off.
:cmd:`Typeclasses eauto` is another way to set this flag.
-.. opt:: Typeclasses Depth @num
+.. opt:: Typeclasses Depth @natural
:name: Typeclasses Depth
Sets the maximum proof search depth. The default is unbounded.
@@ -593,7 +593,7 @@ Settings
also sets :opt:`Typeclasses Debug Verbosity` to 1. :cmd:`Typeclasses eauto`
is another way to set this flag.
-.. opt:: Typeclasses Debug Verbosity @num
+.. opt:: Typeclasses Debug Verbosity @natural
:name: Typeclasses Debug Verbosity
Determines how much information is shown for typeclass resolution steps during search.
@@ -604,7 +604,7 @@ Settings
Typeclasses eauto `:=`
~~~~~~~~~~~~~~~~~~~~~~
-.. cmd:: Typeclasses eauto := {? debug} {? {| (dfs) | (bfs) } } @num
+.. cmd:: Typeclasses eauto := {? debug} {? {| (dfs) | (bfs) } } @natural
:name: Typeclasses eauto
This command allows more global customization of the typeclass
@@ -618,5 +618,5 @@ Typeclasses eauto `:=`
search (the default) or breadth-first search. The search strategy
can also be set with :flag:`Typeclasses Iterative Deepening`.
- + :token:`num` This sets the depth limit of the search. The depth
+ + :token:`natural` This sets the depth limit of the search. The depth
limit can also be set with :opt:`Typeclasses Depth`.
diff --git a/doc/sphinx/changes.rst b/doc/sphinx/changes.rst
index 191eae6430..af66efa95e 100644
--- a/doc/sphinx/changes.rst
+++ b/doc/sphinx/changes.rst
@@ -2009,7 +2009,7 @@ reference manual. Here are the most important user-visible changes:
inductive types
(`#8965 <https://github.com/coq/coq/pull/8965>`_, by Jason Gross).
- - Experimental: :ref:`Numeral Notations <numeral-notations>` now parse decimal
+ - Experimental: :ref:`Number Notations <number-notations>` now parse decimal
constants such as ``1.02e+01`` or ``10.2``. Parsers added for :g:`Q` and :g:`R`.
In the rare case when such numeral notations were used
in a development along with :g:`Q` or :g:`R`, they may have to be removed or
@@ -2281,7 +2281,7 @@ Other changes in 8.10+beta1
parentheses on abbreviations shortening a strict prefix of an
application, by Hugo Herbelin).
- - :cmd:`Numeral Notation` now support inductive types in the input to
+ - :cmd:`Number Notation` now support inductive types in the input to
printing functions (e.g., numeral notations can be defined for terms
containing things like :g:`@cons nat O O`), and parsing functions now
fully normalize terms including parameters of constructors (so that,
@@ -2782,7 +2782,7 @@ changes:
next version of |Coq|, see the next subsection for a script to
ease porting, by Jason Gross and Jean-Christophe Léchenet.
- - Added the :cmd:`Numeral Notation` command for registering decimal
+ - Added the :cmd:`Number Notation` command for registering decimal
numeral notations for custom types, by Daniel de Rauglaudre, Pierre
Letouzey and Jason Gross.
diff --git a/doc/sphinx/language/coq-library.rst b/doc/sphinx/language/coq-library.rst
index c27eb216e8..765373619f 100644
--- a/doc/sphinx/language/coq-library.rst
+++ b/doc/sphinx/language/coq-library.rst
@@ -1062,7 +1062,7 @@ Floating-point constants are parsed and pretty-printed as (17-digit)
decimal constants. This ensures that the composition
:math:`\text{parse} \circ \text{print}` amounts to the identity.
-.. warn:: The constant @numeral is not a binary64 floating-point value. A closest value @numeral will be used and unambiguously printed @numeral. [inexact-float,parsing]
+.. warn:: The constant @number is not a binary64 floating-point value. A closest value @number will be used and unambiguously printed @number. [inexact-float,parsing]
Not all decimal constants are floating-point values. This warning
is generated when parsing such a constant (for instance ``0.1``).
diff --git a/doc/sphinx/language/core/assumptions.rst b/doc/sphinx/language/core/assumptions.rst
index 955f48b772..fe10e345cd 100644
--- a/doc/sphinx/language/core/assumptions.rst
+++ b/doc/sphinx/language/core/assumptions.rst
@@ -125,7 +125,7 @@ has type :n:`@type`.
.. _Axiom:
-.. cmd:: @assumption_token {? Inline {? ( @num ) } } {| {+ ( @assumpt ) } | @assumpt }
+.. cmd:: @assumption_token {? Inline {? ( @natural ) } } {| {+ ( @assumpt ) } | @assumpt }
:name: Axiom; Axioms; Conjecture; Conjectures; Hypothesis; Hypotheses; Parameter; Parameters; Variable; Variables
.. insertprodn assumption_token of_type
diff --git a/doc/sphinx/language/core/basic.rst b/doc/sphinx/language/core/basic.rst
index 1f0d696d99..45bdc019ac 100644
--- a/doc/sphinx/language/core/basic.rst
+++ b/doc/sphinx/language/core/basic.rst
@@ -111,33 +111,46 @@ Identifiers
symbols and non-breaking space. :production:`unicode_id_part`
non-exhaustively includes symbols for prime letters and subscripts.
-Numerals
- Numerals are sequences of digits with an optional fractional part
+Numbers
+ Numbers are sequences of digits with an optional fractional part
and exponent, optionally preceded by a minus sign. Hexadecimal numerals
- start with ``0x`` or ``0X``. :n:`@int` is an integer;
- a numeral without fractional nor exponent parts. :n:`@num` is a non-negative
- integer. Underscores embedded in the digits are ignored, for example
+ start with ``0x`` or ``0X``. :n:`@bigint` are integers;
+ numbers without fractional nor exponent parts. :n:`@bignat` are non-negative
+ integers. Underscores embedded in the digits are ignored, for example
``1_000_000`` is the same as ``1000000``.
- .. insertprodn numeral hexdigit
+ .. insertprodn number hexdigit
.. prodn::
- numeral ::= {? - } @decnum {? . {+ {| @digit | _ } } } {? {| e | E } {? {| + | - } } @decnum }
- | {? - } @hexnum {? . {+ {| @hexdigit | _ } } } {? {| p | P } {? {| + | - } } @decnum }
- int ::= {? - } @num
- num ::= {| @decnum | @hexnum }
- decnum ::= @digit {* {| @digit | _ } }
+ number ::= {? - } @decnat {? . {+ {| @digit | _ } } } {? {| e | E } {? {| + | - } } @decnat }
+ | {? - } @hexnat {? . {+ {| @hexdigit | _ } } } {? {| p | P } {? {| + | - } } @decnat }
+ integer ::= {? - } @natural
+ natural ::= @bignat
+ bigint ::= {? - } @bignat
+ bignat ::= {| @decnat | @hexnat }
+ decnat ::= @digit {* {| @digit | _ } }
digit ::= 0 .. 9
- hexnum ::= {| 0x | 0X } @hexdigit {* {| @hexdigit | _ } }
+ hexnat ::= {| 0x | 0X } @hexdigit {* {| @hexdigit | _ } }
hexdigit ::= {| 0 .. 9 | a .. f | A .. F }
- .. todo PR need some code fixes for hex, see PR 11948
+ :n:`@integer` and :n:`@natural` are limited to the range that fits
+ into an OCaml integer (63-bit integers on most architectures).
+ :n:`@bigint` and :n:`@bignat` have no range limitation.
+
+ The :ref:`standard library <thecoqlibrary>` provides some
+ :ref:`interpretations <notation-scopes>` for :n:`@number`. The
+ :cmd:`Number Notation` mechanism offers the user
+ a way to define custom parsers and printers for :n:`@number`.
Strings
Strings begin and end with ``"`` (double quote). Use ``""`` to represent
a double quote character within a string. In the grammar, strings are
identified with :production:`string`.
+ The :cmd:`String Notation` mechanism offers the
+ user a way to define custom parsers and printers for
+ :token:`string`.
+
Keywords
The following character sequences are keywords defined in the main Coq grammar
that cannot be used as identifiers (even when starting Coq with the `-noinit`
@@ -292,7 +305,7 @@ rest of the |Coq| manual: :term:`terms <term>` and :term:`types
.. prodn::
document ::= {* @sentence }
sentence ::= {? @attributes } @command .
- | {? @attributes } {? @num : } @query_command .
+ | {? @attributes } {? @natural : } @query_command .
| {? @attributes } {? @toplevel_selector : } @ltac_expr {| . | ... }
| @control_command
@@ -434,7 +447,7 @@ gray boxes after the labels "Flag", "Option" and "Table". In the pdf,
they appear after a boldface label. They are listed in the
:ref:`options_index`.
-.. cmd:: Set @setting_name {? {| @int | @string } }
+.. cmd:: Set @setting_name {? {| @integer | @string } }
:name: Set
If :n:`@setting_name` is a flag, no value may be provided; the flag
diff --git a/doc/sphinx/language/core/modules.rst b/doc/sphinx/language/core/modules.rst
index 29e703c223..866104d5d1 100644
--- a/doc/sphinx/language/core/modules.rst
+++ b/doc/sphinx/language/core/modules.rst
@@ -67,7 +67,7 @@ together, as well as a means of massive abstraction.
module_binder ::= ( {? {| Import | Export } } {+ @ident } : @module_type_inl )
module_type_inl ::= ! @module_type
| @module_type {? @functor_app_annot }
- functor_app_annot ::= [ inline at level @num ]
+ functor_app_annot ::= [ inline at level @natural ]
| [ no inline ]
module_type ::= @qualid
| ( @module_type )
diff --git a/doc/sphinx/language/core/records.rst b/doc/sphinx/language/core/records.rst
index 0080f1d052..cd44d06e67 100644
--- a/doc/sphinx/language/core/records.rst
+++ b/doc/sphinx/language/core/records.rst
@@ -19,7 +19,7 @@ expressions. In this sense, the :cmd:`Record` construction allows defining
.. prodn::
record_definition ::= {? > } @ident_decl {* @binder } {? : @type } {? @ident } %{ {*; @record_field } %} {? @decl_notations }
- record_field ::= {* #[ {*, @attribute } ] } @name {? @field_body } {? %| @num } {? @decl_notations }
+ record_field ::= {* #[ {*, @attribute } ] } @name {? @field_body } {? %| @natural } {? @decl_notations }
field_body ::= {* @binder } @of_type
| {* @binder } @of_type := @term
| {* @binder } := @term
diff --git a/doc/sphinx/language/core/sorts.rst b/doc/sphinx/language/core/sorts.rst
index 3517d70005..98dd9a5426 100644
--- a/doc/sphinx/language/core/sorts.rst
+++ b/doc/sphinx/language/core/sorts.rst
@@ -20,7 +20,7 @@ Sorts
| Type @%{ @universe %}
universe ::= max ( {+, @universe_expr } )
| @universe_expr
- universe_expr ::= @universe_name {? + @num }
+ universe_expr ::= @universe_name {? + @natural }
The types of types are called :gdef:`sorts <sort>`.
diff --git a/doc/sphinx/language/core/variants.rst b/doc/sphinx/language/core/variants.rst
index 8e2bf32dd6..2904250e41 100644
--- a/doc/sphinx/language/core/variants.rst
+++ b/doc/sphinx/language/core/variants.rst
@@ -22,7 +22,7 @@ Variants
:attr:`universes(noncumulative)` and :attr:`private(matching)`
attributes.
- .. exn:: The @num th argument of @ident must be @ident in @type.
+ .. exn:: The @natural th argument of @ident must be @ident in @type.
:undocumented:
Private (matching) inductive types
@@ -79,7 +79,7 @@ to apply specific treatments accordingly.
| %{%| {* @qualid := @pattern } %|%}
| _
| ( {+| @pattern } )
- | @numeral
+ | @number
| @string
Note that the :n:`@pattern ::= @pattern10 : @term` production
diff --git a/doc/sphinx/language/extensions/match.rst b/doc/sphinx/language/extensions/match.rst
index 34752a4c4d..c36b9deef3 100644
--- a/doc/sphinx/language/extensions/match.rst
+++ b/doc/sphinx/language/extensions/match.rst
@@ -879,19 +879,19 @@ generated expression and the original.
Here is a summary of the error messages corresponding to each
situation:
-.. exn:: The constructor @ident expects @num arguments.
+.. exn:: The constructor @ident expects @natural arguments.
+ The variable ident is bound several times in pattern term
+ Found a constructor of inductive type term while a constructor of term is expected
- The variable ident is bound several times in pattern termFound a constructor
- of inductive type term while a constructor of term is expectedPatterns are
- incorrect (because constructors are not applied to the correct number of the
+ Patterns are incorrect (because constructors are not applied to the correct number of
arguments, because they are not linear or they are wrongly typed).
.. exn:: Non exhaustive pattern matching.
The pattern matching is not exhaustive.
-.. exn:: The elimination predicate term should be of arity @num (for non \
- dependent case) or @num (for dependent case).
+.. exn:: The elimination predicate term should be of arity @natural (for non \
+ dependent case) or @natural (for dependent case).
The elimination predicate provided to match has not the expected arity.
diff --git a/doc/sphinx/proof-engine/ltac.rst b/doc/sphinx/proof-engine/ltac.rst
index e7ba82fb31..f18569c7fd 100644
--- a/doc/sphinx/proof-engine/ltac.rst
+++ b/doc/sphinx/proof-engine/ltac.rst
@@ -74,7 +74,7 @@ The constructs in :token:`ltac_expr` are :term:`left associative`.
ltac_expr0 ::= ( @ltac_expr )
| [> @for_each_goal ]
| @tactic_atom
- tactic_atom ::= @int
+ tactic_atom ::= @integer
| @qualid
| ()
@@ -188,7 +188,7 @@ examining the part at the end under "Entry tactic:tactic_arg".
-
* - ``integer``
- - :token:`int`
+ - :token:`integer`
- an integer
-
@@ -375,8 +375,14 @@ behavior.)
| !
| par
- Applies :token:`ltac_expr` to the selected goals. It can only be used at the top
- level of a tactic expression; it cannot be used within a tactic expression.
+ Reorders the goals and applies :token:`ltac_expr` to the selected goals. It can
+ only be used at the top level of a tactic expression; it cannot be used within a
+ tactic expression. The selected goals are reordered so they appear after the
+ lowest-numbered selected goal, ordered by goal number. :ref:`Example
+ <reordering_goals_ex>`. If the selector applies
+ to a single goal or to all goals, the reordering will not be apparent. The order of
+ the goals in the :token:`selector` is irrelevant. (This may not be what you expect;
+ see `#8481 <https://github.com/coq/coq/issues/8481>`_.)
.. todo why shouldn't "all" and "!" be accepted anywhere a @selector is accepted?
It would be simpler to explain.
@@ -391,7 +397,7 @@ behavior.)
`par`
Applies :n:`@ltac_expr` to all focused goals in parallel.
The number of workers can be controlled via the command line option
- :n:`-async-proofs-tac-j @num` to specify the desired number of workers.
+ :n:`-async-proofs-tac-j @natural` to specify the desired number of workers.
Limitations: ``par:`` only works on goals that don't contain existential
variables. :n:`@ltac_expr` must either solve the goal completely or do
nothing (i.e. it cannot make some progress).
@@ -406,8 +412,8 @@ Selectors can also be used nested within a tactic expression with the
.. prodn::
selector ::= {+, @range_selector }
| [ @ident ]
- range_selector ::= @num - @num
- | @num
+ range_selector ::= @natural - @natural
+ | @natural
Applies :token:`ltac_expr3` to the selected goals.
@@ -420,16 +426,29 @@ Selectors can also be used nested within a tactic expression with the
Limits the application of :token:`ltac_expr3` to the goal previously named :token:`ident`
by the user (see :ref:`existential-variables`).
- :n:`@num__1 - @num__2`
- Selects the goals :n:`@num__1` through :n:`@num__2`, inclusive.
+ :n:`@natural__1 - @natural__2`
+ Selects the goals :n:`@natural__1` through :n:`@natural__2`, inclusive.
- :n:`@num`
+ :n:`@natural`
Selects a single goal.
.. exn:: No such goal.
:name: No such goal. (Goal selector)
:undocumented:
+.. _reordering_goals_ex:
+
+.. example:: Selector reordering goals
+
+ .. coqtop:: reset in
+
+ Goal 1=0 /\ 2=0 /\ 3=0.
+
+ .. coqtop:: all
+
+ repeat split.
+ 1,3: idtac.
+
.. TODO change error message index entry
@@ -857,7 +876,7 @@ Print/identity tactic: idtac
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.. tacn:: idtac {* {| @ident | @string | @int } }
+.. tacn:: idtac {* {| @ident | @string | @natural } }
:name: idtac
Leaves the proof unchanged and prints the given tokens. Strings and integers are printed
@@ -869,7 +888,7 @@ Print/identity tactic: idtac
Failing
~~~~~~~
-.. tacn:: {| fail | gfail } {? @int_or_var } {* {| @ident | @string | @int } }
+.. tacn:: {| fail | gfail } {? @int_or_var } {* {| @ident | @string | @integer } }
:name: fail; gfail
:tacn:`fail` is the always-failing tactic: it does not solve any
@@ -897,17 +916,17 @@ Failing
(backtracking). If nonzero, the current :tacn:`match goal` block, :tacn:`try`,
:tacn:`repeat`, or branching command is aborted and the level is decremented. In
the case of :n:`+`, a nonzero level skips the first backtrack point, even if
- the call to :tacn:`fail` :n:`@num` is not enclosed in a :n:`+` construct,
+ the call to :tacn:`fail` :n:`@natural` is not enclosed in a :n:`+` construct,
respecting the algebraic identity.
- :n:`{* {| @ident | @string | @int } }`
+ :n:`{* {| @ident | @string | @integer } }`
The given tokens are used for printing the failure message. If :token:`ident`
is an |Ltac| variable, its contents are printed; if not, it is an error.
.. exn:: Tactic failure.
:undocumented:
- .. exn:: Tactic failure (level @num).
+ .. exn:: Tactic failure (level @natural).
:undocumented:
.. exn:: No such goal.
@@ -957,7 +976,7 @@ amount of time:
:name: timeout
:n:`@ltac_expr3` is evaluated to ``v`` which must be a tactic value. The tactic value
- ``v`` is applied normally, except that it is interrupted after :n:`@num` seconds
+ ``v`` is applied normally, except that it is interrupted after :n:`@natural` seconds
if it is still running. In this case the outcome is a failure.
:tacn:`timeout` is an :token:`l3_tactic`.
@@ -1656,8 +1675,8 @@ Proving a subgoal as a separate lemma: abstract
Does a :tacn:`solve` :n:`[ @ltac_expr2 ]` and saves the subproof as an auxiliary lemma.
if :n:`@ident__name` is specified, the lemma is saved with that name; otherwise
- the lemma is saved with the name :n:`@ident`\ `_subproof`\ :n:`{? @num }` where
- :token:`ident` is the name of the current goal (e.g. the theorem name) and :token:`num`
+ the lemma is saved with the name :n:`@ident`\ `_subproof`\ :n:`{? @natural }` where
+ :token:`ident` is the name of the current goal (e.g. the theorem name) and :token:`natural`
is chosen to get a fresh name. If the proof is closed with :cmd:`Qed`, the auxiliary lemma
is inlined in the final proof term.
@@ -1690,7 +1709,7 @@ Proving a subgoal as a separate lemma: abstract
.. tacn:: transparent_abstract @ltac_expr3 {? using @ident }
Like :tacn:`abstract`, but save the subproof in a transparent lemma with a name in
- the form :n:`@ident`\ :n:`_subterm`\ :n:`{? @num }`.
+ the form :n:`@ident`\ :n:`_subterm`\ :n:`{? @natural }`.
.. warning::
@@ -2178,7 +2197,7 @@ Backtraces
Tracing execution
~~~~~~~~~~~~~~~~~
-.. cmd:: Info @num @ltac_expr
+.. cmd:: Info @natural @ltac_expr
Applies :token:`ltac_expr` and prints a trace of the tactics that were successfully
applied, discarding branches that failed.
@@ -2186,7 +2205,7 @@ Tracing execution
This command is valid only in proof mode. It accepts :ref:`goal-selectors`.
- The number :n:`@num` is the unfolding level of tactics in the trace. At level
+ The number :n:`@natural` is the unfolding level of tactics in the trace. At level
0, the trace contains a sequence of tactics in the actual script, at level 1,
the trace will be the concatenation of the traces of these tactics, etc…
@@ -2218,12 +2237,12 @@ Tracing execution
position in the script. In particular, the calls to idtac in branches which failed are
not printed.
- .. opt:: Info Level @num
+ .. opt:: Info Level @natural
:name: Info Level
This option is an alternative to the :cmd:`Info` command.
- This will automatically print the same trace as :n:`Info @num` at each
+ This will automatically print the same trace as :n:`Info @natural` at each
tactic call. The unfolding level can be overridden by a call to the
:cmd:`Info` command.
@@ -2283,11 +2302,11 @@ performance issue.
This flag enables and disables the profiler.
-.. cmd:: Show Ltac Profile {? {| CutOff @int | @string } }
+.. cmd:: Show Ltac Profile {? {| CutOff @integer | @string } }
Prints the profile.
- :n:`CutOff @int`
+ :n:`CutOff @integer`
By default, tactics that account for less than 2% of the total time are not displayed.
`CutOff` lets you specify a different percentage.
@@ -2354,7 +2373,7 @@ performance issue.
Equivalent to the :cmd:`Reset Ltac Profile` command, which allows
resetting the profile from tactic scripts for benchmarking purposes.
-.. tacn:: show ltac profile {? {| cutoff @int | @string } }
+.. tacn:: show ltac profile {? {| cutoff @integer | @string } }
:name: show ltac profile
Equivalent to the :cmd:`Show Ltac Profile` command,
diff --git a/doc/sphinx/proof-engine/ltac2.rst b/doc/sphinx/proof-engine/ltac2.rst
index b217448711..773e393eb6 100644
--- a/doc/sphinx/proof-engine/ltac2.rst
+++ b/doc/sphinx/proof-engine/ltac2.rst
@@ -283,7 +283,7 @@ There is dedicated syntax for list and array literals.
| [ {*; @ltac2_expr5 } ]
| %{ {? {+ @tac2rec_fieldexpr } {? ; } } %}
| @ltac2_tactic_atom
- ltac2_tactic_atom ::= @int
+ ltac2_tactic_atom ::= @integer
| @string
| @qualid
| @ @ident
@@ -1159,7 +1159,7 @@ Match on values
Notations
---------
-.. cmd:: Ltac2 Notation {+ @ltac2_scope } {? : @int } := @ltac2_expr
+.. cmd:: Ltac2 Notation {+ @ltac2_scope } {? : @natural } := @ltac2_expr
:name: Ltac2 Notation
.. todo seems like name maybe should use lident rather than ident, considering:
@@ -1177,7 +1177,7 @@ Notations
:cmd:`Ltac2 Notation` provides a way to extend the syntax of Ltac2 tactics. The left-hand
side (before the `:=`) defines the syntax to recognize and gives formal parameter
- names for the syntactic values. :n:`@int` is the level of the notation.
+ names for the syntactic values. :n:`@integer` is the level of the notation.
When the notation is used, the values are substituted
into the right-hand side. The right-hand side is typechecked when the notation is used,
not when it is defined. In the following example, `x` is the formal parameter name and
@@ -1294,7 +1294,7 @@ workarounds through Ltac1 (described below).
Two examples of syntax differences:
-- There is no notation defined that's equivalent to :n:`intros until {| @ident | @num }`. There is,
+- There is no notation defined that's equivalent to :n:`intros until {| @ident | @natural }`. There is,
however, already an ``intros_until`` tactic function defined ``Std.v``, so it may be possible for a user
to add the necessary notation.
- The built-in `simpl` tactic in Ltac1 supports the use of scope keys in delta flags, e.g. :n:`simpl ["+"%nat]`
@@ -1333,7 +1333,7 @@ Syntactic classes are described with a form of S-expression:
.. prodn::
ltac2_scope ::= @string
- | @int
+ | @integer
| @name
| @name ( {+, @ltac2_scope } )
@@ -1384,14 +1384,14 @@ table further down lists the classes that that are handled plainly.
:n:`terminal(@string)`
Accepts the specified string whether it's a keyword or not, returning a value of `()`.
- :n:`tactic {? (@int) }`
- Parses an :token:`ltac2_expr`. If :token:`int` is specified, the construct
- parses a :n:`ltac2_expr@int`, for example `tactic(5)` parses :token:`ltac2_expr5`.
+ :n:`tactic {? (@integer) }`
+ Parses an :token:`ltac2_expr`. If :token:`integer` is specified, the construct
+ parses a :n:`ltac2_expr@integer`, for example `tactic(5)` parses :token:`ltac2_expr5`.
`tactic(6)` parses :token:`ltac2_expr`.
- :token:`int` must be in the range `0 .. 6`.
+ :token:`integer` must be in the range `0 .. 6`.
- You can also use `tactic` to accept an :token:`int` or a :token:`string`, but there's
- no syntactic class that accepts *only* an :token:`int` or a :token:`string`.
+ You can also use `tactic` to accept an :token:`integer` or a :token:`string`, but there's
+ no syntactic class that accepts *only* an :token:`integer` or a :token:`string`.
.. todo this doesn't work as expected: "::" is in ltac2_expr1
Ltac2 Notation "ex4" x(tactic(0)) := x.
@@ -1555,7 +1555,7 @@ Here is the syntax for the :n:`q_*` nonterminals:
.. insertprodn ltac2_destruction_arg ltac2_constr_with_bindings
.. prodn::
- ltac2_destruction_arg ::= @num
+ ltac2_destruction_arg ::= @natural
| @lident
| @ltac2_constr_with_bindings
ltac2_constr_with_bindings ::= @term {? with @ltac2_bindings }
@@ -1568,7 +1568,7 @@ Here is the syntax for the :n:`q_*` nonterminals:
| {+ @term }
ltac2_simple_binding ::= ( @qhyp := @term )
qhyp ::= $ @ident
- | @num
+ | @natural
| @lident
.. insertprodn ltac2_strategy_flag ltac2_delta_flag
@@ -1606,7 +1606,7 @@ Here is the syntax for the :n:`q_*` nonterminals:
.. prodn::
q_occurrences ::= {? @ltac2_occs }
ltac2_occs ::= at @ltac2_occs_nums
- ltac2_occs_nums ::= {? - } {+ {| @num | $ @ident } }
+ ltac2_occs_nums ::= {? - } {+ {| @natural | $ @ident } }
ltac2_concl_occ ::= * {? @ltac2_occs }
ltac2_hypident_occ ::= @ltac2_hypident {? @ltac2_occs }
ltac2_hypident ::= @ident_or_anti
@@ -1630,7 +1630,7 @@ Here is the syntax for the :n:`q_*` nonterminals:
.. prodn::
ltac2_oriented_rewriter ::= {| -> | <- } @ltac2_rewriter
- ltac2_rewriter ::= {? @num } {? {| ? | ! } } @ltac2_constr_with_bindings
+ ltac2_rewriter ::= {? @natural } {? {| ? | ! } } @ltac2_constr_with_bindings
.. insertprodn ltac2_for_each_goal ltac2_goal_tactics
diff --git a/doc/sphinx/proof-engine/proof-handling.rst b/doc/sphinx/proof-engine/proof-handling.rst
index 4480b10319..f90ebadb3a 100644
--- a/doc/sphinx/proof-engine/proof-handling.rst
+++ b/doc/sphinx/proof-engine/proof-handling.rst
@@ -156,6 +156,10 @@ list of assertion commands is given in :ref:`Assertions`. The command
``T``, then the commands ``Proof using a`` and ``Proof using T a``
are equivalent.
+ The set of declared variables always includes the variables used by
+ the statement. In other words ``Proof using e`` is equivalent to
+ ``Proof using Type + e`` for any declaration expression ``e``.
+
.. cmdv:: Proof using {+ @ident } with @tactic
Combines in a single line :cmd:`Proof with` and :cmd:`Proof using`.
@@ -255,9 +259,9 @@ Name a set of section hypotheses for ``Proof using``
-.. cmd:: Existential @num := @term
+.. cmd:: Existential @natural := @term
- This command instantiates an existential variable. :token:`num` is an index in
+ This command instantiates an existential variable. :token:`natural` is an index in
the list of uninstantiated existential variables displayed by :cmd:`Show Existentials`.
This command is intended to be used to instantiate existential
@@ -309,9 +313,9 @@ Navigation in the proof tree
This command cancels the effect of the last command. Thus, it
backtracks one step.
-.. cmdv:: Undo @num
+.. cmdv:: Undo @natural
- Repeats Undo :token:`num` times.
+ Repeats Undo :token:`natural` times.
.. cmdv:: Restart
:name: Restart
@@ -332,9 +336,9 @@ Navigation in the proof tree
Prefer the use of bullets or focusing brackets (see below).
-.. cmdv:: Focus @num
+.. cmdv:: Focus @natural
- This focuses the attention on the :token:`num` th subgoal to prove.
+ This focuses the attention on the :token:`natural` th subgoal to prove.
.. deprecated:: 8.8
@@ -369,9 +373,9 @@ Navigation in the proof tree
together with a suggestion about the right bullet or ``}`` to unfocus it
or focus the next one.
- .. cmdv:: @num: %{
+ .. cmdv:: @natural: %{
- This focuses on the :token:`num`\-th subgoal to prove.
+ This focuses on the :token:`natural`\-th subgoal to prove.
.. cmdv:: [@ident]: %{
@@ -435,7 +439,7 @@ Navigation in the proof tree
You are trying to use ``}`` but the current subproof has not been fully solved.
- .. exn:: No such goal (@num).
+ .. exn:: No such goal (@natural).
:undocumented:
.. exn:: No such goal (@ident).
@@ -555,9 +559,9 @@ Requesting information
.. exn:: No focused proof.
:undocumented:
- .. cmdv:: Show @num
+ .. cmdv:: Show @natural
- Displays only the :token:`num`\-th subgoal.
+ Displays only the :token:`natural`\-th subgoal.
.. exn:: No such goal.
:undocumented:
@@ -645,7 +649,7 @@ Requesting information
its normalized form at the current stage of the proof, useful for
debugging universe inconsistencies.
- .. cmdv:: Show Goal @num at @num
+ .. cmdv:: Show Goal @natural at @natural
:name: Show Goal
This command is only available in coqtop. Displays a goal at a
@@ -834,7 +838,7 @@ Controlling the effect of proof editing commands
------------------------------------------------
-.. opt:: Hyps Limit @num
+.. opt:: Hyps Limit @natural
:name: Hyps Limit
This option controls the maximum number of hypotheses displayed in goals
diff --git a/doc/sphinx/proof-engine/ssreflect-proof-language.rst b/doc/sphinx/proof-engine/ssreflect-proof-language.rst
index 7f270e8076..ca50a02562 100644
--- a/doc/sphinx/proof-engine/ssreflect-proof-language.rst
+++ b/doc/sphinx/proof-engine/ssreflect-proof-language.rst
@@ -617,7 +617,7 @@ Abbreviations
selected occurrences of a term.
.. prodn::
- occ_switch ::= { {? {| + | - } } {* @num } }
+ occ_switch ::= { {? {| + | - } } {* @natural } }
where:
@@ -1580,7 +1580,7 @@ whose general syntax is
i_pattern ::= {| @ident | > | _ | ? | * | + | {? @occ_switch } {| -> | <- } | [ {?| @i_item } ] | - | [: {+ @ident } ] }
.. prodn::
- i_block ::= {| [^ @ident ] | [^~ {| @ident | @num } ] }
+ i_block ::= {| [^ @ident ] | [^~ {| @ident | @natural } ] }
The ``=>`` tactical first executes :token:`tactic`, then the :token:`i_item`\s,
left to right. An :token:`s_item` specifies a
@@ -1842,8 +1842,8 @@ Block introduction
:n:`[^~ @ident ]`
*block destructing* using :token:`ident` as a suffix.
-:n:`[^~ @num ]`
- *block destructing* using :token:`num` as a suffix.
+:n:`[^~ @natural ]`
+ *block destructing* using :token:`natural` as a suffix.
Only a :token:`s_item` is allowed between the elimination tactic and
the block destructing.
@@ -2236,17 +2236,17 @@ tactics to *permute* the subgoals generated by a tactic.
These two equivalent tactics invert the order of the subgoals in focus.
- .. tacv:: last @num first
+ .. tacv:: last @natural first
- If :token:`num`\'s value is :math:`k`,
+ If :token:`natural`\'s value is :math:`k`,
this tactic rotates the :math:`n` subgoals :math:`G_1` , …, :math:`G_n`
in focus. Subgoal :math:`G_{n + 1 − k}` becomes the first, and the
circular order of subgoals remains unchanged.
- .. tacn:: first @num last
+ .. tacn:: first @natural last
:name: first (ssreflect)
- If :token:`num`\'s value is :math:`k`,
+ If :token:`natural`\'s value is :math:`k`,
this tactic rotates the :math:`n` subgoals :math:`G_1` , …, :math:`G_n`
in focus. Subgoal :math:`G_{k + 1 \bmod n}` becomes the first, and the circular order
of subgoals remains unchanged.
@@ -2319,7 +2319,7 @@ tactic should be repeated on the current subgoal.
There are four kinds of multipliers:
.. prodn::
- mult ::= {| @num ! | ! | @num ? | ? }
+ mult ::= {| @natural ! | ! | @natural ? | ? }
Their meaning is:
@@ -3110,7 +3110,7 @@ An :token:`r_item` can be:
+ A list of terms ``(t1 ,…,tn)``, each ``ti`` having a type above.
The tactic: ``rewrite r_prefix (t1 ,…,tn ).``
is equivalent to: ``do [rewrite r_prefix t1 | … | rewrite r_prefix tn ].``
- + An anonymous rewrite lemma ``(_ : term)``, where term has a type as above. tactic: ``rewrite (_ : term)`` is in fact synonym of: ``cutrewrite (term).``.
+ + An anonymous rewrite lemma ``(_ : term)``, where term has a type as above.
.. example::
@@ -4086,7 +4086,7 @@ will generally fail to perform congruence simplification, even on
rather simple cases. We therefore provide a more robust alternative in
which the function is supplied:
-.. tacn:: congr {? @num } @term
+.. tacn:: congr {? @natural } @term
:name: congr
This tactic:
@@ -4120,7 +4120,7 @@ which the function is supplied:
Lemma test (x y z : nat) : x = y -> x = z.
congr (_ = _).
- The optional :token:`num` forces the number of arguments for which the
+ The optional :token:`natural` forces the number of arguments for which the
tactic should generate equality proof obligations.
This tactic supports equalities between applications with dependent
@@ -5392,8 +5392,8 @@ In this context, the identity view can be used when no view has to be applied:
Declaring new Hint Views
~~~~~~~~~~~~~~~~~~~~~~~~
-.. cmd:: Hint View for move / @ident {? | @num }
- Hint View for apply / @ident {? | @num }
+.. cmd:: Hint View for move / @ident {? | @natural }
+ Hint View for apply / @ident {? | @natural }
This command can be used to extend the database of hints for the view
mechanism.
@@ -5410,7 +5410,7 @@ Declaring new Hint Views
views. The optional natural number is the number of implicit
arguments to be considered for the declared hint view lemma.
- .. cmdv:: Hint View for apply//@ident {? | @num }
+ .. cmdv:: Hint View for apply//@ident {? | @natural }
This variant with a double slash ``//``, declares hint views for right
hand sides of double views.
@@ -5571,9 +5571,9 @@ Module name
Natural number
-.. prodn:: natural ::= {| @num | @ident }
+.. prodn:: nat_or_ident ::= {| @natural | @ident }
-where :token:`ident` is an Ltac variable denoting a standard |Coq| numeral
+where :token:`ident` is an Ltac variable denoting a standard |Coq| number
(should not be the name of a tactic which can be followed by a
bracket ``[``, like ``do``, ``have``,…)
@@ -5614,19 +5614,19 @@ view :ref:`introduction_ssr`
intro block :ref:`introduction_ssr`
.. prodn::
- i_block ::= {| [^ @ident ] | [^~ {| @ident | @num } ] }
+ i_block ::= {| [^ @ident ] | [^~ {| @ident | @natural } ] }
intro item see :ref:`introduction_ssr`
-.. prodn:: int_mult ::= {? @num } @mult_mark
+.. prodn:: int_mult ::= {? @natural } @mult_mark
multiplier see :ref:`iteration_ssr`
-.. prodn:: occ_switch ::= { {? {| + | - } } {* @num } }
+.. prodn:: occ_switch ::= { {? {| + | - } } {* @natural } }
occur. switch see :ref:`occurrence_selection_ssr`
-.. prodn:: mult ::= {? @num } @mult_mark
+.. prodn:: mult ::= {? @natural } @mult_mark
multiplier see :ref:`iteration_ssr`
@@ -5741,7 +5741,7 @@ respectively.
unlock (see :ref:`locking_ssr`)
-.. tacn:: congr {? @num } @term
+.. tacn:: congr {? @natural } @term
congruence (see :ref:`congruence_ssr`)
@@ -5765,11 +5765,11 @@ localization see :ref:`localization_ssr`
iteration see :ref:`iteration_ssr`
-.. prodn:: tactic += @tactic ; {| first | last } {? @num } {| @tactic | [ {+| @tactic } ] }
+.. prodn:: tactic += @tactic ; {| first | last } {? @natural } {| @tactic | [ {+| @tactic } ] }
selector see :ref:`selectors_ssr`
-.. prodn:: tactic += @tactic ; {| first | last } {? @num }
+.. prodn:: tactic += @tactic ; {| first | last } {? @natural }
rotation see :ref:`selectors_ssr`
@@ -5780,11 +5780,11 @@ closing see :ref:`terminators_ssr`
Commands
~~~~~~~~
-.. cmd:: Hint View for {| move | apply } / @ident {? | @num }
+.. cmd:: Hint View for {| move | apply } / @ident {? | @natural }
view hint declaration (see :ref:`declaring_new_hints_ssr`)
-.. cmd:: Hint View for apply // @ident {? @num }
+.. cmd:: Hint View for apply // @ident {? @natural }
right hand side double , view hint declaration (see :ref:`declaring_new_hints_ssr`)
diff --git a/doc/sphinx/proof-engine/tactics.rst b/doc/sphinx/proof-engine/tactics.rst
index f3dc9a6cb1..e276a0edcb 100644
--- a/doc/sphinx/proof-engine/tactics.rst
+++ b/doc/sphinx/proof-engine/tactics.rst
@@ -54,14 +54,14 @@ Invocation of tactics
~~~~~~~~~~~~~~~~~~~~~
A tactic is applied as an ordinary command. It may be preceded by a
-goal selector (see Section :ref:`ltac-semantics`). If no selector is
+goal selector (see Section :ref:`goal-selectors`). If no selector is
specified, the default selector is used.
.. _tactic_invocation_grammar:
- .. productionlist:: sentence
- tactic_invocation : `toplevel_selector` : `tactic`.
- : `tactic`.
+ .. prodn::
+ tactic_invocation ::= @toplevel_selector : @tactic.
+ | @tactic.
.. todo: fully describe selectors. At the moment, ltac has a fairly complete description
@@ -98,14 +98,14 @@ The general form of a term with a bindings list is
.. _bindings_list_grammar:
- .. productionlist:: bindings_list
- ref : `ident`
- : `num`
- bindings_list : (`ref` := `term`) ... (`ref` := `term`)
- : `term` ... `term`
+ .. prodn::
+ ref ::= @ident
+ | @natural
+ bindings_list ::= {+ (@ref := @term) }
+ | {+ @term }
+ In a bindings list of the form :n:`{+ (@ref:= @term)}`, :n:`@ref` is either an
- :n:`@ident` or a :n:`@num`. The references are determined according to the type of
+ :n:`@ident` or a :n:`@natural`. The references are determined according to the type of
:n:`@term`. If :n:`@ref` is an identifier, this identifier has to be bound in the
type of :n:`@term` and the binding provides the tactic with an instance for the
parameter of this name. If :n:`@ref` is a number ``n``, it refers to
@@ -137,30 +137,28 @@ introduced by tactics. They also let you split an introduced hypothesis into
multiple hypotheses or subgoals. Common tactics that accept intro patterns
include :tacn:`assert`, :tacn:`intros` and :tacn:`destruct`.
-.. productionlist:: coq
- intropattern_list : `intropattern` ... `intropattern`
- : `empty`
- empty :
- intropattern : *
- : **
- : `simple_intropattern`
- simple_intropattern : `simple_intropattern_closed` [ % `term` ... % `term` ]
- simple_intropattern_closed : `naming_intropattern`
- : _
- : `or_and_intropattern`
- : `rewriting_intropattern`
- : `injection_intropattern`
- naming_intropattern : `ident`
- : ?
- : ?`ident`
- or_and_intropattern : [ `intropattern_list` | ... | `intropattern_list` ]
- : ( `simple_intropattern` , ... , `simple_intropattern` )
- : ( `simple_intropattern` & ... & `simple_intropattern` )
- rewriting_intropattern : ->
- : <-
- injection_intropattern : [= `intropattern_list` ]
- or_and_intropattern_loc : `or_and_intropattern`
- : `ident`
+.. prodn::
+ intropattern_list ::= {* @intropattern }
+ intropattern ::= *
+ | **
+ | @simple_intropattern
+ simple_intropattern ::= @simple_intropattern_closed {* % @term0 }
+ simple_intropattern_closed ::= @naming_intropattern
+ | _
+ | @or_and_intropattern
+ | @rewriting_intropattern
+ | @injection_intropattern
+ naming_intropattern ::= @ident
+ | ?
+ | ?@ident
+ or_and_intropattern ::= [ {*| @intropattern_list } ]
+ | ( {*, @simple_intropattern } )
+ | ( {*& @simple_intropattern } )
+ rewriting_intropattern ::= ->
+ | <-
+ injection_intropattern ::= [= @intropattern_list ]
+ or_and_intropattern_loc ::= @or_and_intropattern
+ | ident
Note that the intro pattern syntax varies between tactics.
Most tactics use :n:`@simple_intropattern` in the grammar.
@@ -480,13 +478,13 @@ Occurrence sets and occurrence clauses
An occurrence clause is a modifier to some tactics that obeys the
following syntax:
- .. productionlist:: coq
- occurrence_clause : in `goal_occurrences`
- goal_occurrences : [`ident` [`at_occurrences`], ... , `ident` [`at_occurrences`] [|- [* [`at_occurrences`]]]]
- : * |- [* [`at_occurrences`]]
- : *
- at_occurrences : at `occurrences`
- occurrences : [-] `num` ... `num`
+ .. prodn::
+ occurrence_clause ::= in @goal_occurrences
+ goal_occurrences ::= {*, @ident {? @at_occurrences } } {? |- {? * {? @at_occurrences } } }
+ | * |- {? * {? @at_occurrences } }
+ | *
+ at_occurrences ::= at @occurrences
+ occurrences ::= {? - } {* @natural }
The role of an occurrence clause is to select a set of occurrences of a term
in a goal. In the first case, the :n:`@ident {? at {* num}}` parts indicate
@@ -734,12 +732,13 @@ Applying theorems
does not succeed because it would require the conversion of ``id ?foo`` and
:g:`O`.
+ .. _simple_apply_ex:
.. example::
.. coqtop:: all
Definition id (x : nat) := x.
- Parameter H : forall y, id y = y.
+ Parameter H : forall x y, id x = y.
Goal O = O.
Fail simple apply H.
@@ -909,13 +908,8 @@ Applying theorems
.. tacv:: simple apply @term in @ident
This behaves like :tacn:`apply … in` but it reasons modulo conversion
- only on subterms that contain no variables to instantiate. For instance,
- if :g:`id := fun x:nat => x` and :g:`H: forall y, id y = y -> True` and
- :g:`H0 : O = O` then :g:`simple apply H in H0` does not succeed because it
- would require the conversion of :g:`id ?x` and :g:`O` where :g:`?x` is
- an existential variable to instantiate.
- Tactic :n:`simple apply @term in @ident` does not
- either traverse tuples as :n:`apply @term in @ident` does.
+ only on subterms that contain no variables to instantiate and does not
+ traverse tuples. See :ref:`the corresponding example <simple_apply_ex>`.
.. tacv:: {? simple} apply {+, @term {? with @bindings_list}} in @ident {? as @simple_intropattern}
{? simple} eapply {+, @term {? with @bindings_list}} in @ident {? as @simple_intropattern}
@@ -923,11 +917,11 @@ Applying theorems
This summarizes the different syntactic variants of :n:`apply @term in @ident`
and :n:`eapply @term in @ident`.
-.. tacn:: constructor @num
+.. tacn:: constructor @natural
:name: constructor
This tactic applies to a goal such that its conclusion is an inductive
- type (say :g:`I`). The argument :token:`num` must be less or equal to the
+ type (say :g:`I`). The argument :token:`natural` must be less or equal to the
numbers of constructor(s) of :g:`I`. Let :n:`c__i` be the i-th
constructor of :g:`I`, then :g:`constructor i` is equivalent to
:n:`intros; apply c__i`.
@@ -944,7 +938,7 @@ Applying theorems
:g:`constructor n` where ``n`` is the number of constructors of the head
of the goal.
- .. tacv:: constructor @num with @bindings_list
+ .. tacv:: constructor @natural with @bindings_list
Let ``c`` be the i-th constructor of :g:`I`, then
:n:`constructor i with @bindings_list` is equivalent to
@@ -1075,9 +1069,9 @@ Managing the local context
.. exn:: No such hypothesis in current goal.
:undocumented:
- .. tacv:: intros until @num
+ .. tacv:: intros until @natural
- This repeats :tacn:`intro` until the :token:`num`\-th non-dependent
+ This repeats :tacn:`intro` until the :token:`natural`\-th non-dependent
product.
.. example::
@@ -1093,7 +1087,7 @@ Managing the local context
.. exn:: No such hypothesis in current goal.
- This happens when :token:`num` is 0 or is greater than the number of
+ This happens when :token:`natural` is 0 or is greater than the number of
non-dependent products of the goal.
.. tacv:: intro {? @ident__1 } after @ident__2
@@ -1578,7 +1572,7 @@ name of the variable (here :g:`n`) is chosen based on :g:`T`.
This is equivalent to :n:`generalize @term; ... ; generalize @term`.
Note that the sequence of term :sub:`i` 's are processed from n to 1.
-.. tacv:: generalize @term at {+ @num}
+.. tacv:: generalize @term at {+ @natural}
This is equivalent to :n:`generalize @term` but it generalizes only over the
specified occurrences of :n:`@term` (counting from left to right on the
@@ -1589,7 +1583,7 @@ name of the variable (here :g:`n`) is chosen based on :g:`T`.
This is equivalent to :n:`generalize @term` but it uses :n:`@ident` to name
the generalized hypothesis.
-.. tacv:: generalize {+, @term at {+ @num} as @ident}
+.. tacv:: generalize {+, @term at {+ @natural} as @ident}
This is the most general form of :n:`generalize` that combines the previous
behaviors.
@@ -1621,16 +1615,16 @@ name of the variable (here :g:`n`) is chosen based on :g:`T`.
name the variable in the current goal and in the context of the
existential variable. This can lead to surprising behaviors.
-.. tacv:: instantiate (@num := @term)
+.. tacv:: instantiate (@natural := @term)
This variant allows to refer to an existential variable which was not named
- by the user. The :n:`@num` argument is the position of the existential variable
+ by the user. The :n:`@natural` argument is the position of the existential variable
from right to left in the goal. Because this variant is not robust to slight
changes in the goal, its use is strongly discouraged.
-.. tacv:: instantiate ( @num := @term ) in @ident
- instantiate ( @num := @term ) in ( value of @ident )
- instantiate ( @num := @term ) in ( type of @ident )
+.. tacv:: instantiate ( @natural := @term ) in @ident
+ instantiate ( @natural := @term ) in ( value of @ident )
+ instantiate ( @natural := @term ) in ( type of @ident )
These allow to refer respectively to existential variables occurring in a
hypothesis or in the body or the type of a local definition.
@@ -1730,13 +1724,13 @@ analysis on inductive or co-inductive objects (see :ref:`inductive-definitions`)
of :tacn:`destruct`, it is erased (to avoid erasure, use parentheses, as
in :n:`destruct (@ident)`).
- .. tacv:: destruct @num
+ .. tacv:: destruct @natural
- :n:`destruct @num` behaves as :n:`intros until @num`
+ :n:`destruct @natural` behaves as :n:`intros until @natural`
followed by destruct applied to the last introduced hypothesis.
.. note::
- For destruction of a numeral, use syntax :n:`destruct (@num)` (not
+ For destruction of a number, use syntax :n:`destruct (@natural)` (not
very interesting anyway).
.. tacv:: destruct @pattern
@@ -1829,10 +1823,10 @@ analysis on inductive or co-inductive objects (see :ref:`inductive-definitions`)
This tactic behaves as :n:`intros until @ident; case @ident` when :n:`@ident`
is a quantified variable of the goal.
-.. tacv:: simple destruct @num
+.. tacv:: simple destruct @natural
- This tactic behaves as :n:`intros until @num; case @ident` where :n:`@ident`
- is the name given by :n:`intros until @num` to the :n:`@num` -th
+ This tactic behaves as :n:`intros until @natural; case @ident` where :n:`@ident`
+ is the name given by :n:`intros until @natural` to the :n:`@natural` -th
non-dependent premise of the goal.
.. tacv:: case_eq @term
@@ -1863,12 +1857,12 @@ analysis on inductive or co-inductive objects (see :ref:`inductive-definitions`)
@ident; induction @ident`. If :n:`@ident` is not anymore dependent in the
goal after application of :n:`induction`, it is erased (to avoid erasure,
use parentheses, as in :n:`induction (@ident)`).
- + If :n:`@term` is a :n:`@num`, then :n:`induction @num` behaves as
- :n:`intros until @num` followed by :n:`induction` applied to the last
+ + If :n:`@term` is a :n:`@natural`, then :n:`induction @natural` behaves as
+ :n:`intros until @natural` followed by :n:`induction` applied to the last
introduced hypothesis.
.. note::
- For simple induction on a numeral, use syntax induction (num)
+ For simple induction on a number, use syntax induction (number)
(not very interesting anyway).
+ In case term is a hypothesis :n:`@ident` of the context, and :n:`@ident`
@@ -2026,10 +2020,10 @@ analysis on inductive or co-inductive objects (see :ref:`inductive-definitions`)
This tactic behaves as :n:`intros until @ident; elim @ident` when
:n:`@ident` is a quantified variable of the goal.
-.. tacv:: simple induction @num
+.. tacv:: simple induction @natural
- This tactic behaves as :n:`intros until @num; elim @ident` where :n:`@ident`
- is the name given by :n:`intros until @num` to the :n:`@num`-th non-dependent
+ This tactic behaves as :n:`intros until @natural; elim @ident` where :n:`@ident`
+ is the name given by :n:`intros until @natural` to the :n:`@natural`-th non-dependent
premise of the goal.
.. tacn:: double induction @ident @ident
@@ -2039,7 +2033,7 @@ analysis on inductive or co-inductive objects (see :ref:`inductive-definitions`)
:n:`induction @ident; induction @ident` (or
:n:`induction @ident ; destruct @ident` depending on the exact needs).
-.. tacv:: double induction @num__1 @num__2
+.. tacv:: double induction @natural__1 @natural__2
This tactic is deprecated and should be replaced by
:n:`induction num1; induction num3` where :n:`num3` is the result
@@ -2148,9 +2142,9 @@ and an explanation of the underlying technique.
.. exn:: Not a discriminable equality.
:undocumented:
-.. tacv:: discriminate @num
+.. tacv:: discriminate @natural
- This does the same thing as :n:`intros until @num` followed by
+ This does the same thing as :n:`intros until @natural` followed by
:n:`discriminate @ident` where :n:`@ident` is the identifier for the last
introduced hypothesis.
@@ -2159,12 +2153,12 @@ and an explanation of the underlying technique.
This does the same thing as :n:`discriminate @term` but using the given
bindings to instantiate parameters or hypotheses of :n:`@term`.
-.. tacv:: ediscriminate @num
+.. tacv:: ediscriminate @natural
ediscriminate @term {? with @bindings_list}
:name: ediscriminate; _
This works the same as :tacn:`discriminate` but if the type of :token:`term`, or the
- type of the hypothesis referred to by :token:`num`, has uninstantiated
+ type of the hypothesis referred to by :token:`natural`, has uninstantiated
parameters, these parameters are left as existential variables.
.. tacv:: discriminate
@@ -2237,9 +2231,9 @@ and an explanation of the underlying technique.
This error is given when one side of the equality is not a constructor.
- .. tacv:: injection @num
+ .. tacv:: injection @natural
- This does the same thing as :n:`intros until @num` followed by
+ This does the same thing as :n:`intros until @natural` followed by
:n:`injection @ident` where :n:`@ident` is the identifier for the last
introduced hypothesis.
@@ -2248,12 +2242,12 @@ and an explanation of the underlying technique.
This does the same as :n:`injection @term` but using the given bindings to
instantiate parameters or hypotheses of :n:`@term`.
- .. tacv:: einjection @num
+ .. tacv:: einjection @natural
einjection @term {? with @bindings_list}
:name: einjection; _
This works the same as :n:`injection` but if the type of :n:`@term`, or the
- type of the hypothesis referred to by :n:`@num`, has uninstantiated
+ type of the hypothesis referred to by :n:`@natural`, has uninstantiated
parameters, these parameters are left as existential variables.
.. tacv:: injection
@@ -2265,10 +2259,10 @@ and an explanation of the underlying technique.
:undocumented:
.. tacv:: injection @term {? with @bindings_list} as {+ @simple_intropattern}
- injection @num as {+ @simple_intropattern}
+ injection @natural as {+ @simple_intropattern}
injection as {+ @simple_intropattern}
einjection @term {? with @bindings_list} as {+ @simple_intropattern}
- einjection @num as {+ @simple_intropattern}
+ einjection @natural as {+ @simple_intropattern}
einjection as {+ @simple_intropattern}
These variants apply :n:`intros {+ @simple_intropattern}` after the call to
@@ -2280,10 +2274,10 @@ and an explanation of the underlying technique.
corresponds to a hypothesis.
.. tacv:: injection @term {? with @bindings_list} as @injection_intropattern
- injection @num as @injection_intropattern
+ injection @natural as @injection_intropattern
injection as @injection_intropattern
einjection @term {? with @bindings_list} as @injection_intropattern
- einjection @num as @injection_intropattern
+ einjection @natural as @injection_intropattern
einjection as @injection_intropattern
These are equivalent to the previous variants but using instead the
@@ -2332,9 +2326,9 @@ and an explanation of the underlying technique.
:g:`Prop`). This behavior can be turned off by using the
:flag:`Keep Proof Equalities` setting.
-.. tacv:: inversion @num
+.. tacv:: inversion @natural
- This does the same thing as :n:`intros until @num` then :n:`inversion @ident`
+ This does the same thing as :n:`intros until @natural` then :n:`inversion @ident`
where :n:`@ident` is the identifier for the last introduced hypothesis.
.. tacv:: inversion_clear @ident
@@ -2377,9 +2371,9 @@ and an explanation of the underlying technique.
Goal forall l:list nat, contains0 (1 :: l) -> contains0 l.
intros l H; inversion H as [ | l' p Hl' [Heqp Heql'] ].
-.. tacv:: inversion @num as @or_and_intropattern_loc
+.. tacv:: inversion @natural as @or_and_intropattern_loc
- This allows naming the hypotheses introduced by :n:`inversion @num` in the
+ This allows naming the hypotheses introduced by :n:`inversion @natural` in the
context.
.. tacv:: inversion_clear @ident as @or_and_intropattern_loc
@@ -2627,7 +2621,7 @@ and an explanation of the underlying technique.
.. seealso:: :tacn:`functional inversion`
-.. tacn:: fix @ident @num
+.. tacn:: fix @ident @natural
:name: fix
This tactic is a primitive tactic to start a proof by induction. In
@@ -2635,11 +2629,11 @@ and an explanation of the underlying technique.
as the ones described in :tacn:`induction`.
In the syntax of the tactic, the identifier :n:`@ident` is the name given to
- the induction hypothesis. The natural number :n:`@num` tells on which
+ the induction hypothesis. The natural number :n:`@natural` tells on which
premise of the current goal the induction acts, starting from 1,
counting both dependent and non dependent products, but skipping local
definitions. Especially, the current lemma must be composed of at
- least :n:`@num` products.
+ least :n:`@natural` products.
Like in a fix expression, the induction hypotheses have to be used on
structurally smaller arguments. The verification that inductive proof
@@ -2648,7 +2642,7 @@ and an explanation of the underlying technique.
is correct at some time of the interactive development of a proof, use
the command ``Guarded`` (see Section :ref:`requestinginformation`).
-.. tacv:: fix @ident @num with {+ (@ident {+ @binder} [{struct @ident}] : @type)}
+.. tacv:: fix @ident @natural with {+ (@ident {+ @binder} [{struct @ident}] : @type)}
This starts a proof by mutual induction. The statements to be simultaneously
proved are respectively :g:`forall binder ... binder, type`.
@@ -2758,11 +2752,11 @@ simply :g:`t=u` dropping the implicit type of :g:`t` and :g:`u`.
+ `?` : the tactic :n:`rewrite ?@term` performs the rewrite of :token:`term` as many
times as possible (perhaps zero time). This form never fails.
- + :n:`@num?` : works similarly, except that it will do at most :token:`num` rewrites.
+ + :n:`@natural?` : works similarly, except that it will do at most :token:`natural` rewrites.
+ `!` : works as `?`, except that at least one rewrite should succeed, otherwise
the tactic fails.
- + :n:`@num!` (or simply :n:`@num`) : precisely :token:`num` rewrites of :token:`term` will be done,
- leading to failure if these :token:`num` rewrites are not possible.
+ + :n:`@natural!` (or simply :n:`@natural`) : precisely :token:`natural` rewrites of :token:`term` will be done,
+ leading to failure if these :token:`natural` rewrites are not possible.
.. tacv:: erewrite @term
:name: erewrite
@@ -2819,13 +2813,6 @@ simply :g:`t=u` dropping the implicit type of :g:`t` and :g:`u`.
only in the conclusion of the goal. The clause argument must not contain
any ``type of`` nor ``value of``.
- .. tacv:: cutrewrite {? {| <- | -> } } (@term__1 = @term__2) {? in @ident }
- :name: cutrewrite
-
- .. deprecated:: 8.5
-
- Use :tacn:`replace` instead.
-
.. tacn:: subst @ident
:name: subst
@@ -2946,15 +2933,15 @@ simply :g:`t=u` dropping the implicit type of :g:`t` and :g:`u`.
This replaces the occurrences of :n:`@term` by :n:`@term’` in the current goal.
The term :n:`@term` and :n:`@term’` must be convertible.
- .. tacv:: change @term at {+ @num} with @term’
+ .. tacv:: change @term at {+ @natural} with @term’
- This replaces the occurrences numbered :n:`{+ @num}` of :n:`@term` by :n:`@term’`
+ This replaces the occurrences numbered :n:`{+ @natural}` of :n:`@term` by :n:`@term’`
in the current goal. The terms :n:`@term` and :n:`@term’` must be convertible.
.. exn:: Too few occurrences.
:undocumented:
- .. tacv:: change @term {? {? at {+ @num}} with @term} in @ident
+ .. tacv:: change @term {? {? at {+ @natural}} with @term} in @ident
This applies the :tacn:`change` tactic not to the goal but to the hypothesis :n:`@ident`.
@@ -2999,9 +2986,9 @@ Performing computations
| delta {? @delta_flag }
ref_or_pattern_occ ::= @reference {? at @occs_nums }
| @one_term {? at @occs_nums }
- occs_nums ::= {+ {| @num | @ident } }
- | - {| @num | @ident } {* @int_or_var }
- int_or_var ::= @int
+ occs_nums ::= {+ {| @natural | @ident } }
+ | - {| @natural | @ident } {* @int_or_var }
+ int_or_var ::= @integer
| @ident
unfold_occ ::= @reference {? at @occs_nums }
pattern_occ ::= @one_term {? at @occs_nums }
@@ -3237,9 +3224,9 @@ the conversion in hypotheses :n:`{+ @ident}`.
This applies :tacn:`simpl` only to the subterms matching
:n:`@pattern` in the current goal.
-.. tacv:: simpl @pattern at {+ @num}
+.. tacv:: simpl @pattern at {+ @natural}
- This applies :tacn:`simpl` only to the :n:`{+ @num}` occurrences of the subterms
+ This applies :tacn:`simpl` only to the :n:`{+ @natural}` occurrences of the subterms
matching :n:`@pattern` in the current goal.
.. exn:: Too few occurrences.
@@ -3252,10 +3239,10 @@ the conversion in hypotheses :n:`{+ @ident}`.
is the unfoldable constant :n:`@qualid` (the constant can be referred to by
its notation using :n:`@string` if such a notation exists).
-.. tacv:: simpl @qualid at {+ @num}
- simpl @string at {+ @num}
+.. tacv:: simpl @qualid at {+ @natural}
+ simpl @string at {+ @natural}
- This applies :tacn:`simpl` only to the :n:`{+ @num}` applicative subterms whose
+ This applies :tacn:`simpl` only to the :n:`{+ @natural}` applicative subterms whose
head occurrence is :n:`@qualid` (or :n:`@string`).
.. flag:: Debug RAKAM
@@ -3383,14 +3370,14 @@ the conversion in hypotheses :n:`{+ @ident}`.
:g:`(fun x:A =>` :math:`\varphi`:g:`(x)) t`. This tactic can be used, for
instance, when the tactic ``apply`` fails on matching.
-.. tacv:: pattern @term at {+ @num}
+.. tacv:: pattern @term at {+ @natural}
- Only the occurrences :n:`{+ @num}` of :n:`@term` are considered for
+ Only the occurrences :n:`{+ @natural}` of :n:`@term` are considered for
:math:`\beta`-expansion. Occurrences are located from left to right.
-.. tacv:: pattern @term at - {+ @num}
+.. tacv:: pattern @term at - {+ @natural}
- All occurrences except the occurrences of indexes :n:`{+ @num }`
+ All occurrences except the occurrences of indexes :n:`{+ @natural }`
of :n:`@term` are considered for :math:`\beta`-expansion. Occurrences are located from
left to right.
@@ -3403,12 +3390,12 @@ the conversion in hypotheses :n:`{+ @ident}`.
If :g:`t`:sub:`i` occurs in one of the generated types :g:`A`:sub:`j` these
occurrences will also be considered and possibly abstracted.
-.. tacv:: pattern {+, @term at {+ @num}}
+.. tacv:: pattern {+, @term at {+ @natural}}
- This behaves as above but processing only the occurrences :n:`{+ @num}` of
+ This behaves as above but processing only the occurrences :n:`{+ @natural}` of
:n:`@term` starting from :n:`@term`.
-.. tacv:: pattern {+, @term {? at {? -} {+, @num}}}
+.. tacv:: pattern {+, @term {? at {? -} {+, @natural}}}
This is the most general syntax that combines the different variants.
@@ -3565,9 +3552,9 @@ Automation
:tacn:`simple apply` so it is expected that sometimes :tacn:`auto` will
fail even if applying manually one of the hints would succeed.
- .. tacv:: auto @num
+ .. tacv:: auto @natural
- Forces the search depth to be :token:`num`. The maximal search depth
+ Forces the search depth to be :token:`natural`. The maximal search depth
is 5 by default.
.. tacv:: auto with {+ @ident}
@@ -3618,7 +3605,7 @@ Automation
Behaves like :tacn:`auto` but shows the tactics it tries to solve the goal,
including failing paths.
- .. tacv:: {? info_}auto {? @num} {? using {+ @qualid}} {? with {+ @ident}}
+ .. tacv:: {? info_}auto {? @natural} {? using {+ @qualid}} {? with {+ @ident}}
This is the most general form, combining the various options.
@@ -3673,7 +3660,7 @@ Automation
Note that ``ex_intro`` should be declared as a hint.
- .. tacv:: {? info_}eauto {? @num} {? using {+ @qualid}} {? with {+ @ident}}
+ .. tacv:: {? info_}eauto {? @natural} {? using {+ @qualid}} {? with {+ @ident}}
The various options for :tacn:`eauto` are the same as for :tacn:`auto`.
@@ -3836,12 +3823,12 @@ automatically created.
.. deprecated:: 8.10
- .. cmdv:: Hint Resolve @qualid {? | {? @num} {? @pattern}} : @ident
+ .. cmdv:: Hint Resolve @qualid {? | {? @natural} {? @pattern}} : @ident
:name: Hint Resolve
This command adds :n:`simple apply @qualid` to the hint list with the head
symbol of the type of :n:`@qualid`. The cost of that hint is the number of
- subgoals generated by :n:`simple apply @qualid` or :n:`@num` if specified. The
+ subgoals generated by :n:`simple apply @qualid` or :n:`@natural` if specified. The
associated :n:`@pattern` is inferred from the conclusion of the type of
:n:`@qualid` or the given :n:`@pattern` if specified. In case the inferred type
of :n:`@qualid` does not start with a product the tactic added in the hint list
@@ -3939,7 +3926,7 @@ automatically created.
overwriting the existing settings of opacity. It is advised
to use this just after a :cmd:`Create HintDb` command.
- .. cmdv:: Hint Extern @num {? @pattern} => @tactic : @ident
+ .. cmdv:: Hint Extern @natural {? @pattern} => @tactic : @ident
:name: Hint Extern
This hint type is to extend :tacn:`auto` with tactics other than :tacn:`apply` and
@@ -3982,15 +3969,15 @@ automatically created.
the following. Beware, there is no operator precedence during parsing, one can
check with :cmd:`Print HintDb` to verify the current cut expression:
- .. productionlist:: regexp
- regexp : `ident` (hint or instance identifier)
- : _ (any hint)
- : `regexp` | `regexp` (disjunction)
- : `regexp` `regexp` (sequence)
- : `regexp` * (Kleene star)
- : emp (empty)
- : eps (epsilon)
- : ( `regexp` )
+ .. prodn::
+ regexp ::= @ident (hint or instance identifier)
+ | _ (any hint)
+ | @regexp | @regexp (disjunction)
+ | @regexp @regexp (sequence)
+ | @regexp * (Kleene star)
+ | emp (empty)
+ | eps (epsilon)
+ | ( @regexp )
The `emp` regexp does not match any search path while `eps`
matches the empty path. During proof search, the path of
@@ -4368,7 +4355,7 @@ some incompatibilities.
This combines the effects of the different variants of :tacn:`firstorder`.
-.. opt:: Firstorder Depth @num
+.. opt:: Firstorder Depth @natural
:name: Firstorder Depth
This option controls the proof-search depth bound.
@@ -4405,10 +4392,10 @@ some incompatibilities.
congruence.
Qed.
-.. tacv:: congruence @num
+.. tacv:: congruence @natural
- Tries to add at most :token:`num` instances of hypotheses stating quantified equalities
- to the problem in order to solve it. A bigger value of :token:`num` does not make
+ Tries to add at most :token:`natural` instances of hypotheses stating quantified equalities
+ to the problem in order to solve it. A bigger value of :token:`natural` does not make
success slower, only failure. You might consider adding some lemmas as
hypotheses using assert in order for :tacn:`congruence` to use them.
@@ -4607,9 +4594,9 @@ symbol :g:`=`.
then :n:`simplify_eq @ident` first introduces the hypothesis in the local
context using :n:`intros until @ident`.
-.. tacv:: simplify_eq @num
+.. tacv:: simplify_eq @natural
- This does the same thing as :n:`intros until @num` then
+ This does the same thing as :n:`intros until @natural` then
:n:`simplify_eq @ident` where :n:`@ident` is the identifier for the last
introduced hypothesis.
@@ -4618,12 +4605,12 @@ symbol :g:`=`.
This does the same as :n:`simplify_eq @term` but using the given bindings to
instantiate parameters or hypotheses of :n:`@term`.
-.. tacv:: esimplify_eq @num
+.. tacv:: esimplify_eq @natural
esimplify_eq @term {? with @bindings_list}
:name: esimplify_eq; _
This works the same as :tacn:`simplify_eq` but if the type of :n:`@term`, or the
- type of the hypothesis referred to by :n:`@num`, has uninstantiated
+ type of the hypothesis referred to by :n:`@natural`, has uninstantiated
parameters, these parameters are left as existential variables.
.. tacv:: simplify_eq
@@ -4679,17 +4666,15 @@ Automating
tautologies. It solves goals of the form :g:`t = u` where `t` and `u` are
constructed over the following grammar:
- .. _btauto_grammar:
-
- .. productionlist:: sentence
- btauto_term : `ident`
- : true
- : false
- : orb `btauto_term` `btauto_term`
- : andb `btauto_term` `btauto_term`
- : xorb `btauto_term` `btauto_term`
- : negb `btauto_term`
- : if `btauto_term` then `btauto_term` else `btauto_term`
+ .. prodn::
+ btauto_term ::= @ident
+ | true
+ | false
+ | orb @btauto_term @btauto_term
+ | andb @btauto_term @btauto_term
+ | xorb @btauto_term @btauto_term
+ | negb @btauto_term
+ | if @btauto_term then @btauto_term else @btauto_term
Whenever the formula supplied is not a tautology, it also provides a
counter-example.
@@ -4748,12 +4733,16 @@ Non-logical tactics
------------------------
-.. tacn:: cycle @num
+.. tacn:: cycle @integer
:name: cycle
- This tactic puts the :n:`@num` first goals at the end of the list of goals.
- If :n:`@num` is negative, it will put the last :math:`|num|` goals at the
+ Reorders the selected goals so that the first :n:`@integer` goals appear after the
+ other selected goals.
+ If :n:`@integer` is negative, it puts the last :n:`@integer` goals at the
beginning of the list.
+ The tactic is only useful with a goal selector, most commonly `all:`.
+ Note that other selectors reorder goals; `1,3: cycle 1` is not equivalent
+ to `all: cycle 1`. See :tacn:`… : … (goal selector)`.
.. example::
@@ -4768,13 +4757,15 @@ Non-logical tactics
all: cycle 2.
all: cycle -3.
-.. tacn:: swap @num @num
+.. tacn:: swap @integer @integer
:name: swap
- This tactic switches the position of the goals of indices :n:`@num` and
- :n:`@num`. Negative values for:n:`@num` indicate counting goals
- backward from the end of the focused goal list. Goals are indexed from 1,
- there is no goal with position 0.
+ Exchanges the position of the specified goals.
+ Negative values for :n:`@integer` indicate counting goals
+ backward from the end of the list of selected goals. Goals are indexed from 1.
+ The tactic is only useful with a goal selector, most commonly `all:`.
+ Note that other selectors reorder goals; `1,3: swap 1 3` is not equivalent
+ to `all: swap 1 3`. See :tacn:`… : … (goal selector)`.
.. example::
@@ -4788,7 +4779,9 @@ Non-logical tactics
.. tacn:: revgoals
:name: revgoals
- This tactics reverses the list of the focused goals.
+ Reverses the order of the selected goals. The tactic is only useful with a goal
+ selector, most commonly `all :`. Note that other selectors reorder goals;
+ `1,3: revgoals` is not equivalent to `all: revgoals`. See :tacn:`… : … (goal selector)`.
.. example::
@@ -4916,10 +4909,10 @@ Performance-oriented tactic variants
.. tacv:: change_no_check @term with @term’
:undocumented:
- .. tacv:: change_no_check @term at {+ @num} with @term’
+ .. tacv:: change_no_check @term at {+ @natural} with @term’
:undocumented:
- .. tacv:: change_no_check @term {? {? at {+ @num}} with @term} in @ident
+ .. tacv:: change_no_check @term {? {? at {+ @natural}} with @term} in @ident
.. example::
diff --git a/doc/sphinx/proof-engine/vernacular-commands.rst b/doc/sphinx/proof-engine/vernacular-commands.rst
index 36ad4af837..6c07253bce 100644
--- a/doc/sphinx/proof-engine/vernacular-commands.rst
+++ b/doc/sphinx/proof-engine/vernacular-commands.rst
@@ -32,7 +32,7 @@ Displaying
.. exn:: @qualid not a defined object.
:undocumented:
- .. exn:: Universe instance should have length @num.
+ .. exn:: Universe instance should have length @natural.
:undocumented:
.. exn:: This object does not support universe names.
@@ -44,9 +44,9 @@ Displaying
This command displays information about the current state of the
environment, including sections and modules.
-.. cmd:: Inspect @num
+.. cmd:: Inspect @natural
- This command displays the :n:`@num` last objects of the
+ This command displays the :n:`@natural` last objects of the
current environment, including sections and modules.
.. cmd:: Print Section @qualid
@@ -60,7 +60,7 @@ Query commands
--------------
Unlike other commands, :production:`query_command`\s may be prefixed with
-a goal selector (:n:`@num:`) to specify which goal context it applies to.
+a goal selector (:n:`@natural:`) to specify which goal context it applies to.
If no selector is provided,
the command applies to the current goal. If no proof is open, then the command only applies
to accessible objects. (see Section :ref:`invocation-of-tactics`).
@@ -757,10 +757,10 @@ interactively, they cannot be part of a vernacular file loaded via
of the interactive session.
-.. cmd:: Back {? @num }
+.. cmd:: Back {? @natural }
- Undoes all the effects of the last :n:`@num @sentence`\s. If
- :n:`@num` is not specified, the command undoes one sentence.
+ Undoes all the effects of the last :n:`@natural @sentence`\s. If
+ :n:`@natural` is not specified, the command undoes one sentence.
Sentences read from a `.v` file via a :cmd:`Load` are considered a
single sentence. While :cmd:`Back` can undo tactics and commands executed
within proof mode, once you exit proof mode, such as with :cmd:`Qed`, all
@@ -772,14 +772,14 @@ interactively, they cannot be part of a vernacular file loaded via
The user wants to undo more commands than available in the history.
-.. cmd:: BackTo @num
+.. cmd:: BackTo @natural
- This command brings back the system to the state labeled :n:`@num`,
+ This command brings back the system to the state labeled :n:`@natural`,
forgetting the effect of all commands executed after this state. The
state label is an integer which grows after each successful command.
It is displayed in the prompt when in -emacs mode. Just as :cmd:`Back` (see
above), the :cmd:`BackTo` command now handles proof states. For that, it may
- have to undo some extra commands and end on a state :n:`@num′ ≤ @num` if
+ have to undo some extra commands and end on a state :n:`@natural′ ≤ @natural` if
necessary.
.. _quitting-and-debugging:
@@ -834,16 +834,16 @@ Quitting and debugging
output to the file ":n:`@string`.out".
-.. cmd:: Timeout @num @sentence
+.. cmd:: Timeout @natural @sentence
Executes :n:`@sentence`. If the operation
- has not terminated after :n:`@num` seconds, then it is interrupted and an error message is
+ has not terminated after :n:`@natural` seconds, then it is interrupted and an error message is
displayed.
- .. opt:: Default Timeout @num
+ .. opt:: Default Timeout @natural
:name: Default Timeout
- If set, each :n:`@sentence` is treated as if it was prefixed with :cmd:`Timeout` :n:`@num`,
+ If set, each :n:`@sentence` is treated as if it was prefixed with :cmd:`Timeout` :n:`@natural`,
except for :cmd:`Timeout` commands themselves. If unset,
no timeout is applied.
@@ -890,14 +890,14 @@ Controlling display
interpreted from left to right, so in case of an overlap, the flags on the
right have higher priority, meaning that `A,-A` is equivalent to `-A`.
-.. opt:: Printing Width @num
+.. opt:: Printing Width @natural
:name: Printing Width
This command sets which left-aligned part of the width of the screen is used
for display. At the time of writing this documentation, the default value
is 78.
-.. opt:: Printing Depth @num
+.. opt:: Printing Depth @natural
:name: Printing Depth
This option controls the nesting depth of the formatter used for pretty-
@@ -1028,7 +1028,7 @@ described first.
.. prodn::
strategy_level ::= opaque
- | @int
+ | @integer
| expand
| transparent
strategy_level_or_var ::= @strategy_level
@@ -1052,7 +1052,7 @@ described first.
+ ``opaque`` : level of opaque constants. They cannot be expanded by
tactics (behaves like +∞, see next item).
- + :n:`@int` : levels indexed by an integer. Level 0 corresponds to the
+ + :n:`@integer` : levels indexed by an integer. Level 0 corresponds to the
default behavior, which corresponds to transparent constants. This
level can also be referred to as ``transparent``. Negative levels
correspond to constants to be expanded before normal transparent
diff --git a/doc/sphinx/user-extensions/syntax-extensions.rst b/doc/sphinx/user-extensions/syntax-extensions.rst
index 9e8e5e5fa5..6ba53b581b 100644
--- a/doc/sphinx/user-extensions/syntax-extensions.rst
+++ b/doc/sphinx/user-extensions/syntax-extensions.rst
@@ -241,12 +241,12 @@ notation is the insertion of spaces at some places of the notation.
This is performed by adding extra spaces between the symbols and
parameters: each extra space (other than the single space needed to
separate the components) is interpreted as a space to be inserted by
-the printer. Here is an example showing how to add spaces around the
-bar of the notation.
+the printer. Here is an example showing how to add spaces next to the
+curly braces.
.. coqtop:: in
- Notation "{{ x : A | P }}" := (sig (fun x : A => P)) (at level 0, x at level 99).
+ Notation "{{ x : A | P }}" := (sig (fun x : A => P)) (at level 0, x at level 99).
.. coqtop:: all
@@ -931,7 +931,7 @@ of patterns have. The lower level is 0 and this is the level used by
default to put rules delimited with tokens on both ends. The level is
left to be inferred by Coq when using :n:`in custom @ident`. The
level is otherwise given explicitly by using the syntax
-:n:`in custom @ident at level @num`, where :n:`@num` refers to the level.
+:n:`in custom @ident at level @natural`, where :n:`@natural` refers to the level.
Levels are cumulative: a notation at level ``n`` of which the left end
is a term shall use rules at level less than ``n`` to parse this
@@ -1053,8 +1053,8 @@ Here are the syntax elements used by the various notation commands.
.. insertprodn syntax_modifier level
.. prodn::
- syntax_modifier ::= at level @num
- | in custom @ident {? at level @num }
+ syntax_modifier ::= at level @natural
+ | in custom @ident {? at level @natural }
| {+, @ident } at @level
| @ident at @level {? @binder_interp }
| @ident @explicit_subentry
@@ -1068,16 +1068,16 @@ Here are the syntax elements used by the various notation commands.
explicit_subentry ::= ident
| global
| bigint
- | strict pattern {? at level @num }
+ | strict pattern {? at level @natural }
| binder
| closed binder
| constr {? at @level } {? @binder_interp }
| custom @ident {? at @level } {? @binder_interp }
- | pattern {? at level @num }
+ | pattern {? at level @natural }
binder_interp ::= as ident
| as pattern
| as strict pattern
- level ::= level @num
+ level ::= level @natural
| next level
.. note:: No typing of the denoted expression is performed at definition
@@ -1124,8 +1124,8 @@ refer to different definitions depending on which notation scopes
are currently open. For instance, the infix symbol ``+`` can be
used to refer to distinct definitions of the addition operator,
such as for natural numbers, integers or reals.
-Notation scopes can include an interpretation for numerals and
-strings with the :cmd:`Numeral Notation` and :cmd:`String Notation` commands.
+Notation scopes can include an interpretation for numbers and
+strings with the :cmd:`Number Notation` and :cmd:`String Notation` commands.
.. insertprodn scope scope_key
@@ -1293,6 +1293,8 @@ recognized to be a ``Funclass`` instance, i.e., of type :g:`forall x:A, B` or
:g:`A -> B`.
+.. _notation-scopes:
+
Notation scopes used in the standard library of Coq
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1311,31 +1313,31 @@ Scopes` or :cmd:`Print Scope`.
``nat_scope``
This scope includes the standard arithmetical operators and relations on type
- nat. Positive integer numerals in this scope are mapped to their canonical
+ nat. Positive integer numbers in this scope are mapped to their canonical
representent built from :g:`O` and :g:`S`. The scope is delimited by the key
``nat``, and bound to the type :g:`nat` (see above).
``N_scope``
This scope includes the standard arithmetical operators and relations on
type :g:`N` (binary natural numbers). It is delimited by the key ``N`` and comes
- with an interpretation for numerals as closed terms of type :g:`N`.
+ with an interpretation for numbers as closed terms of type :g:`N`.
``Z_scope``
This scope includes the standard arithmetical operators and relations on
type :g:`Z` (binary integer numbers). It is delimited by the key ``Z`` and comes
- with an interpretation for numerals as closed terms of type :g:`Z`.
+ with an interpretation for numbers as closed terms of type :g:`Z`.
``positive_scope``
This scope includes the standard arithmetical operators and relations on
type :g:`positive` (binary strictly positive numbers). It is delimited by
- key ``positive`` and comes with an interpretation for numerals as closed
+ key ``positive`` and comes with an interpretation for numbers as closed
terms of type :g:`positive`.
``Q_scope``
This scope includes the standard arithmetical operators and relations on
type :g:`Q` (rational numbers defined as fractions of an integer and a
strictly positive integer modulo the equality of the numerator-
- denominator cross-product) and comes with an interpretation for numerals
+ denominator cross-product) and comes with an interpretation for numbers
as closed terms of type :g:`Q`.
``Qc_scope``
@@ -1346,7 +1348,7 @@ Scopes` or :cmd:`Print Scope`.
``R_scope``
This scope includes the standard arithmetical operators and relations on
type :g:`R` (axiomatic real numbers). It is delimited by the key ``R`` and comes
- with an interpretation for numerals using the :g:`IZR` morphism from binary
+ with an interpretation for numbers using the :g:`IZR` morphism from binary
integer numbers to :g:`R` and :g:`Z.pow_pos` for potential exponent parts.
``bool_scope``
@@ -1514,68 +1516,68 @@ Abbreviations
.. extracted from Gallina chapter
-Numerals and strings
---------------------
+Numbers and strings
+-------------------
.. insertprodn primitive_notations primitive_notations
.. prodn::
- primitive_notations ::= @numeral
+ primitive_notations ::= @number
| @string
-Numerals and strings have no predefined semantics in the calculus. They are
+Numbers and strings have no predefined semantics in the calculus. They are
merely notations that can be bound to objects through the notation mechanism.
-Initially, numerals are bound to Peano’s representation of natural
+Initially, numbers are bound to Peano’s representation of natural
numbers (see :ref:`datatypes`).
.. note::
- Negative integers are not at the same level as :n:`@num`, for this
+ Negative integers are not at the same level as :n:`@natural`, for this
would make precedence unnatural.
-.. _numeral-notations:
+.. _number-notations:
-Numeral notations
-~~~~~~~~~~~~~~~~~
+Number notations
+~~~~~~~~~~~~~~~~
-.. cmd:: Numeral Notation @qualid @qualid__parse @qualid__print : @scope_name {? @numeral_modifier }
- :name: Numeral Notation
+.. cmd:: Number Notation @qualid__type @qualid__parse @qualid__print : @scope_name {? @numeral_modifier }
+ :name: Number Notation
.. insertprodn numeral_modifier numeral_modifier
.. prodn::
- numeral_modifier ::= ( warning after @numeral )
- | ( abstract after @numeral )
+ numeral_modifier ::= ( warning after @bignat )
+ | ( abstract after @bignat )
This command allows the user to customize the way numeral literals
are parsed and printed.
- :n:`@qualid`
+ :n:`@qualid__type`
the name of an inductive type,
while :n:`@qualid__parse` and :n:`@qualid__print` should be the names of the
parsing and printing functions, respectively. The parsing function
:n:`@qualid__parse` should have one of the following types:
- * :n:`Numeral.int -> @qualid`
- * :n:`Numeral.int -> option @qualid`
- * :n:`Numeral.uint -> @qualid`
- * :n:`Numeral.uint -> option @qualid`
- * :n:`Z -> @qualid`
- * :n:`Z -> option @qualid`
- * :n:`Numeral.numeral -> @qualid`
- * :n:`Numeral.numeral -> option @qualid`
+ * :n:`Numeral.int -> @qualid__type`
+ * :n:`Numeral.int -> option @qualid__type`
+ * :n:`Numeral.uint -> @qualid__type`
+ * :n:`Numeral.uint -> option @qualid__type`
+ * :n:`Z -> @qualid__type`
+ * :n:`Z -> option @qualid__type`
+ * :n:`Numeral.numeral -> @qualid__type`
+ * :n:`Numeral.numeral -> option @qualid__type`
And the printing function :n:`@qualid__print` should have one of the
following types:
- * :n:`@qualid -> Numeral.int`
- * :n:`@qualid -> option Numeral.int`
- * :n:`@qualid -> Numeral.uint`
- * :n:`@qualid -> option Numeral.uint`
- * :n:`@qualid -> Z`
- * :n:`@qualid -> option Z`
- * :n:`@qualid -> Numeral.numeral`
- * :n:`@qualid -> option Numeral.numeral`
+ * :n:`@qualid__type -> Numeral.int`
+ * :n:`@qualid__type -> option Numeral.int`
+ * :n:`@qualid__type -> Numeral.uint`
+ * :n:`@qualid__type -> option Numeral.uint`
+ * :n:`@qualid__type -> Z`
+ * :n:`@qualid__type -> option Z`
+ * :n:`@qualid__type -> Numeral.numeral`
+ * :n:`@qualid__type -> option Numeral.numeral`
.. deprecated:: 8.12
Numeral notations on :g:`Decimal.uint`, :g:`Decimal.int` and
@@ -1591,59 +1593,59 @@ Numeral notations
function application, constructors, inductive type families,
sorts, and primitive integers) will be considered for printing.
- :n:`( warning after @numeral )`
+ :n:`( warning after @bignat )`
displays a warning message about a possible stack
- overflow when calling :n:`@qualid__parse` to parse a literal larger than :n:`@numeral`.
+ overflow when calling :n:`@qualid__parse` to parse a literal larger than :n:`@bignat`.
.. warn:: Stack overflow or segmentation fault happens when working with large numbers in @type (threshold may vary depending on your system limits and on the command executed).
- When a :cmd:`Numeral Notation` is registered in the current scope
- with :n:`(warning after @numeral)`, this warning is emitted when
- parsing a numeral greater than or equal to :token:`numeral`.
+ When a :cmd:`Number Notation` is registered in the current scope
+ with :n:`(warning after @bignat)`, this warning is emitted when
+ parsing a number greater than or equal to :token:`bignat`.
- :n:`( abstract after @numeral )`
+ :n:`( abstract after @bignat )`
returns :n:`(@qualid__parse m)` when parsing a literal
- :n:`m` that's greater than :n:`@numeral` rather than reducing it to a normal form.
+ :n:`m` that's greater than :n:`@bignat` rather than reducing it to a normal form.
Here :g:`m` will be a
- :g:`Numeral.int` or :g:`Numeral.uint` or :g:`Z`, depending on the
+ :g:`Numeral.int`, :g:`Numeral.uint`, :g:`Z` or :g:`Numeral.numeral`, depending on the
type of the parsing function :n:`@qualid__parse`. This allows for a
more compact representation of literals in types such as :g:`nat`,
and limits parse failures due to stack overflow. Note that a
- warning will be emitted when an integer larger than :token:`numeral`
- is parsed. Note that :n:`(abstract after @numeral)` has no effect
+ warning will be emitted when an integer larger than :token:`bignat`
+ is parsed. Note that :n:`(abstract after @bignat)` has no effect
when :n:`@qualid__parse` lands in an :g:`option` type.
.. warn:: To avoid stack overflow, large numbers in @type are interpreted as applications of @qualid__parse.
- When a :cmd:`Numeral Notation` is registered in the current scope
- with :n:`(abstract after @numeral)`, this warning is emitted when
- parsing a numeral greater than or equal to :token:`numeral`.
+ When a :cmd:`Number Notation` is registered in the current scope
+ with :n:`(abstract after @bignat)`, this warning is emitted when
+ parsing a number greater than or equal to :token:`bignat`.
Typically, this indicates that the fully computed representation
- of numerals can be so large that non-tail-recursive OCaml
+ of numbers can be so large that non-tail-recursive OCaml
functions run out of stack space when trying to walk them.
.. warn:: The 'abstract after' directive has no effect when the parsing function (@qualid__parse) targets an option type.
- As noted above, the :n:`(abstract after @num)` directive has no
+ As noted above, the :n:`(abstract after @natural)` directive has no
effect when :n:`@qualid__parse` lands in an :g:`option` type.
.. exn:: Cannot interpret this number as a value of type @type
The numeral notation registered for :token:`type` does not support
- the given numeral. This error is given when the interpretation
+ the given number. This error is given when the interpretation
function returns :g:`None`, or if the interpretation is registered
- only for integers or non-negative integers, and the given numeral
+ only for integers or non-negative integers, and the given number
has a fractional or exponent part or is negative.
.. exn:: @qualid__parse should go from Numeral.int to @type or (option @type). Instead of Numeral.int, the types Numeral.uint or Z or Int63.int or Numeral.numeral could be used (you may need to require BinNums or Numeral or Int63 first).
- The parsing function given to the :cmd:`Numeral Notation`
+ The parsing function given to the :cmd:`Number Notation`
vernacular is not of the right type.
.. exn:: @qualid__print should go from @type to Numeral.int or (option Numeral.int). Instead of Numeral.int, the types Numeral.uint or Z or Int63.int or Numeral.numeral could be used (you may need to require BinNums or Numeral or Int63 first).
- The printing function given to the :cmd:`Numeral Notation`
+ The printing function given to the :cmd:`Number Notation`
vernacular is not of the right type.
.. exn:: Unexpected term @term while parsing a numeral notation.
@@ -1657,9 +1659,11 @@ Numeral notations
Parsing functions expected to return an :g:`option` must always
return a concrete :g:`Some` or :g:`None` when applied to a
- concrete numeral expressed as a (hexa)decimal. They may not return
+ concrete number expressed as a (hexa)decimal. They may not return
opaque constants.
+.. _string-notations:
+
String notations
~~~~~~~~~~~~~~~~
@@ -1745,19 +1749,19 @@ The following errors apply to both string and numeral notations:
.. exn:: Syntax error: [prim:reference] expected after 'Notation' (in [vernac:command]).
- The type passed to :cmd:`String Notation` or :cmd:`Numeral Notation` must be a single qualified
+ The type passed to :cmd:`String Notation` or :cmd:`Number Notation` must be a single qualified
identifier.
.. exn:: Syntax error: [prim:reference] expected after [prim:reference] (in [vernac:command]).
- Both functions passed to :cmd:`String Notation` or :cmd:`Numeral Notation` must be single qualified
+ Both functions passed to :cmd:`String Notation` or :cmd:`Number Notation` must be single qualified
identifiers.
.. todo: generally we don't document syntax errors. Is this a good execption?
.. exn:: @qualid is bound to a notation that does not denote a reference.
- Identifiers passed to :cmd:`String Notation` or :cmd:`Numeral Notation` must be global
+ Identifiers passed to :cmd:`String Notation` or :cmd:`Number Notation` must be global
references, or notations which evaluate to single qualified identifiers.
.. todo note on "single qualified identifiers" https://github.com/coq/coq/pull/11718#discussion_r415076703
@@ -1776,7 +1780,7 @@ Tactic notations allow customizing the syntax of tactics.
can you run into problems if you shadow another tactic or tactic notation?
If so, how to avoid ambiguity?
-.. cmd:: Tactic Notation {? ( at level @num ) } {+ @ltac_production_item } := @ltac_expr
+.. cmd:: Tactic Notation {? ( at level @natural ) } {+ @ltac_production_item } := @ltac_expr
.. insertprodn ltac_production_item ltac_production_item
@@ -1789,7 +1793,7 @@ Tactic notations allow customizing the syntax of tactics.
This command supports the :attr:`local` attribute, which limits the notation to the
current module.
- :token:`num`
+ :token:`natural`
The parsing precedence to assign to the notation. This information is particularly
relevant for notations for tacticals. Levels can be in the range 0 .. 5 (default is 5).
@@ -1887,7 +1891,7 @@ Tactic notations allow customizing the syntax of tactics.
- :tacn:`refine`
* - ``integer``
- - :token:`int`
+ - :token:`integer`
- an integer
-
diff --git a/doc/sphinx/using/libraries/funind.rst b/doc/sphinx/using/libraries/funind.rst
index 3625eac4a5..738d64bfc3 100644
--- a/doc/sphinx/using/libraries/funind.rst
+++ b/doc/sphinx/using/libraries/funind.rst
@@ -243,16 +243,16 @@ Tactics
Function.
- .. tacv:: functional inversion @num
+ .. tacv:: functional inversion @natural
- This does the same thing as :n:`intros until @num` followed by
+ This does the same thing as :n:`intros until @natural` followed by
:n:`functional inversion @ident` where :token:`ident` is the
identifier for the last introduced hypothesis.
.. tacv:: functional inversion @ident @qualid
- functional inversion @num @qualid
+ functional inversion @natural @qualid
- If the hypothesis :token:`ident` (or :token:`num`) has a type of the form
+ If the hypothesis :token:`ident` (or :token:`natural`) has a type of the form
:n:`@qualid__1 {+ @term__i } = @qualid__2 {+ @term__j }` where
:n:`@qualid__1` and :n:`@qualid__2` are valid candidates to
functional inversion, this variant allows choosing which :token:`qualid`
diff --git a/doc/tools/coqrst/coqdomain.py b/doc/tools/coqrst/coqdomain.py
index d8caf4efe2..56464851ba 100644
--- a/doc/tools/coqrst/coqdomain.py
+++ b/doc/tools/coqrst/coqdomain.py
@@ -351,7 +351,7 @@ class TacticObject(NotationObject):
Example::
- .. tacn:: do @num @expr
+ .. tacn:: do @natural @expr
:token:`expr` is evaluated to ``v`` which must be a tactic value. …
"""
@@ -401,7 +401,7 @@ class OptionObject(NotationObject):
Example::
- .. opt:: Hyps Limit @num
+ .. opt:: Hyps Limit @natural
:name Hyps Limit
Controls the maximum number of hypotheses displayed in goals after
@@ -452,7 +452,7 @@ class ProductionObject(CoqObject):
Example::
- .. prodn:: occ_switch ::= { {? {| + | - } } {* @num } }
+ .. prodn:: occ_switch ::= { {? {| + | - } } {* @natural } }
term += let: @pattern := @term in @term
| second_production
@@ -1169,7 +1169,7 @@ class StdGlossaryIndex(Index):
return content, False
def GrammarProductionRole(typ, rawtext, text, lineno, inliner, options={}, content=[]):
- """A grammar production not included in a ``productionlist`` directive.
+ """A grammar production not included in a ``prodn`` directive.
Useful to informally introduce a production, as part of running text.
@@ -1177,10 +1177,8 @@ def GrammarProductionRole(typ, rawtext, text, lineno, inliner, options={}, conte
:production:`string` indicates a quoted string.
- You're not likely to use this role very commonly; instead, use a
- `production list
- <http://www.sphinx-doc.org/en/stable/markup/para.html#directive-productionlist>`_
- and reference its tokens using ``:token:`…```.
+ You're not likely to use this role very commonly; instead, use a ``prodn``
+ directive and reference its tokens using ``:token:`…```.
"""
#pylint: disable=dangerous-default-value, unused-argument
env = inliner.document.settings.env
@@ -1426,11 +1424,11 @@ def setup(app):
app.connect('doctree-resolved', CoqtopBlocksTransform.merge_consecutive_coqtop_blocks)
# Add extra styles
- app.add_stylesheet("ansi.css")
- app.add_stylesheet("coqdoc.css")
- app.add_javascript("notations.js")
- app.add_stylesheet("notations.css")
- app.add_stylesheet("pre-text.css")
+ app.add_css_file("ansi.css")
+ app.add_css_file("coqdoc.css")
+ app.add_js_file("notations.js")
+ app.add_css_file("notations.css")
+ app.add_css_file("pre-text.css")
# Tell Sphinx about extra settings
app.add_config_value("report_undocumented_coq_objects", None, 'env')
diff --git a/doc/tools/docgram/README.md b/doc/tools/docgram/README.md
index 14f87e5885..4d38955fa8 100644
--- a/doc/tools/docgram/README.md
+++ b/doc/tools/docgram/README.md
@@ -2,7 +2,6 @@
`doc_grammar` extracts Coq's grammar from `.mlg` files, edits it and inserts it
into `.rst` files. The tool inserts `prodn` directives for grammar productions.
-(`productionlist` are gradually being replaced by `prodn` in the manual.)
It also updates `tacn` and `cmd` directives when they can be unambiguously matched to
productions of the grammar (in practice, that's probably almost always).
`tacv` and `cmdv` directives are not updated because matching them appears to require
diff --git a/doc/tools/docgram/common.edit_mlg b/doc/tools/docgram/common.edit_mlg
index 6625e07d05..a22f7ae9f3 100644
--- a/doc/tools/docgram/common.edit_mlg
+++ b/doc/tools/docgram/common.edit_mlg
@@ -300,7 +300,7 @@ term_let: [
atomic_constr: [
| MOVETO qualid_annotated global univ_instance
-| MOVETO primitive_notations NUMERAL
+| MOVETO primitive_notations NUMBER
| MOVETO primitive_notations string
| MOVETO term_evar "_"
| REPLACE "?" "[" ident "]"
@@ -736,11 +736,6 @@ export_token: [
]
(* lexer stuff *)
-integer: [ | DELETENT ]
-RENAME: [
-| integer int (* todo: review uses in .mlg files, some should be "natural" *)
-]
-
LEFTQMARK: [
| "?"
]
@@ -749,7 +744,7 @@ digit: [
| "0" ".." "9"
]
-decnum: [
+decnat: [
| digit LIST0 [ digit | "_" ]
]
@@ -757,31 +752,29 @@ hexdigit: [
| [ "0" ".." "9" | "a" ".." "f" | "A" ".." "F" ]
]
-hexnum: [
+hexnat: [
| [ "0x" | "0X" ] hexdigit LIST0 [ hexdigit | "_" ]
]
-num: [
-| [ decnum | hexnum ]
+bignat: [
+| REPLACE NUMBER
+| WITH [ decnat | hexnat ]
]
-natural: [ | DELETENT ]
-natural: [
-| num (* todo: or should it be "nat"? *)
+integer: [
+| REPLACE bigint
+| WITH OPT "-" natural
]
-int: [
-| OPT "-" num
-]
-
-numeral: [
-| OPT "-" decnum OPT ( "." LIST1 [ digit | "_" ] ) OPT ( [ "e" | "E" ] OPT [ "+" | "-" ] decnum )
-| OPT "-" hexnum OPT ( "." LIST1 [ hexdigit | "_" ] ) OPT ( [ "p" | "P" ] OPT [ "+" | "-" ] decnum )
+number: [
+| OPT "-" decnat OPT ( "." LIST1 [ digit | "_" ] ) OPT ( [ "e" | "E" ] OPT [ "+" | "-" ] decnat )
+| OPT "-" hexnat OPT ( "." LIST1 [ hexdigit | "_" ] ) OPT ( [ "p" | "P" ] OPT [ "+" | "-" ] decnat )
]
bigint: [
-| DELETE NUMERAL
-| num
+| DELETE bignat
+| REPLACE test_minus_nat "-" bignat
+| WITH OPT "-" bignat
]
first_letter: [
@@ -797,8 +790,8 @@ ident: [
| first_letter LIST0 subsequent_letter
]
-NUMERAL: [
-| numeral
+NUMBER: [
+| number
]
(* todo: QUOTATION only used in a test suite .mlg files, is it documented/useful? *)
@@ -1033,9 +1026,6 @@ simple_tactic: [
| DELETE "unify" constr constr
| REPLACE "unify" constr constr "with" preident
| WITH "unify" constr constr OPT ( "with" preident )
-| DELETE "cutrewrite" orient constr
-| REPLACE "cutrewrite" orient constr "in" hyp
-| WITH "cutrewrite" orient constr OPT ( "in" hyp )
| DELETE "destauto"
| REPLACE "destauto" "in" hyp
| WITH "destauto" OPT ( "in" hyp )
@@ -1097,13 +1087,13 @@ simple_tactic: [
| WITH "subst" OPT ( LIST1 var )
| DELETE "subst"
| DELETE "congruence"
-| DELETE "congruence" int
+| DELETE "congruence" natural
| DELETE "congruence" "with" LIST1 constr
-| REPLACE "congruence" int "with" LIST1 constr
-| WITH "congruence" OPT int OPT ( "with" LIST1 constr )
+| REPLACE "congruence" natural "with" LIST1 constr
+| WITH "congruence" OPT natural OPT ( "with" LIST1 constr )
| DELETE "show" "ltac" "profile"
-| REPLACE "show" "ltac" "profile" "cutoff" int
-| WITH "show" "ltac" "profile" OPT [ "cutoff" int | string ]
+| REPLACE "show" "ltac" "profile" "cutoff" integer
+| WITH "show" "ltac" "profile" OPT [ "cutoff" integer | string ]
| DELETE "show" "ltac" "profile" string
(* perversely, the mlg uses "tactic3" instead of "tactic_expr3" *)
| DELETE "transparent_abstract" tactic3
@@ -1211,11 +1201,11 @@ command: [
| REPLACE "Next" "Obligation" "of" ident withtac
| WITH "Next" "Obligation" OPT ( "of" ident ) withtac
| DELETE "Next" "Obligation" withtac
-| REPLACE "Obligation" int "of" ident ":" lglob withtac
-| WITH "Obligation" int OPT ( "of" ident ) OPT ( ":" lglob withtac )
-| DELETE "Obligation" int "of" ident withtac
-| DELETE "Obligation" int ":" lglob withtac
-| DELETE "Obligation" int withtac
+| REPLACE "Obligation" natural "of" ident ":" lglob withtac
+| WITH "Obligation" natural OPT ( "of" ident ) OPT ( ":" lglob withtac )
+| DELETE "Obligation" natural "of" ident withtac
+| DELETE "Obligation" natural ":" lglob withtac
+| DELETE "Obligation" natural withtac
| REPLACE "Obligations" "of" ident
| WITH "Obligations" OPT ( "of" ident )
| DELETE "Obligations"
@@ -1235,17 +1225,17 @@ command: [
| DELETE "Show" ident
| "Show" OPT [ ident | natural ]
| DELETE "Show" "Ltac" "Profile"
-| REPLACE "Show" "Ltac" "Profile" "CutOff" int
-| WITH "Show" "Ltac" "Profile" OPT [ "CutOff" int | string ]
+| REPLACE "Show" "Ltac" "Profile" "CutOff" integer
+| WITH "Show" "Ltac" "Profile" OPT [ "CutOff" integer | string ]
| DELETE "Show" "Ltac" "Profile" string
| DELETE "Show" "Proof" (* combined with Show Proof Diffs in vernac_toplevel *)
| REPLACE "Solve" "All" "Obligations" "with" tactic
| WITH "Solve" "All" "Obligations" OPT ( "with" tactic )
| DELETE "Solve" "All" "Obligations"
-| REPLACE "Solve" "Obligation" int "of" ident "with" tactic
-| WITH "Solve" "Obligation" int OPT ( "of" ident ) "with" tactic
+| REPLACE "Solve" "Obligation" natural "of" ident "with" tactic
+| WITH "Solve" "Obligation" natural OPT ( "of" ident ) "with" tactic
| DELETE "Solve" "Obligations"
-| DELETE "Solve" "Obligation" int "with" tactic
+| DELETE "Solve" "Obligation" natural "with" tactic
| REPLACE "Solve" "Obligations" "of" ident "with" tactic
| WITH "Solve" "Obligations" OPT ( OPT ( "of" ident ) "with" tactic )
| DELETE "Solve" "Obligations" "with" tactic
@@ -1843,7 +1833,7 @@ query_command: [ ] (* re-add as a placeholder *)
sentence: [
| OPT attributes command "."
-| OPT attributes OPT ( num ":" ) query_command "."
+| OPT attributes OPT ( natural ":" ) query_command "."
| OPT attributes OPT ( toplevel_selector ":" ) tactic_expr5 [ "." | "..." ]
| control_command
]
@@ -2055,8 +2045,8 @@ tac2rec_fields: [
(* todo: weird productions, ints only after an initial "-"??:
occs_nums: [
- | LIST1 [ num | ident ]
- | "-" [ num | ident ] LIST0 int_or_var
+ | LIST1 [ natural | ident ]
+ | "-" [ natural | ident ] LIST0 int_or_var
*)
ltac2_occs_nums: [
| DELETE LIST1 nat_or_anti (* Ltac2 plugin *)
@@ -2160,9 +2150,9 @@ tac2expr5: [
RENAME: [
| Prim.string string
-| Prim.integer int
+| Prim.integer integer
| Prim.qualid qualid
-| Prim.natural num
+| Prim.natural natural
]
gmatch_list: [
@@ -2207,13 +2197,11 @@ ltac2_induction_clause: [
SPLICE: [
| clause
| noedit_mode
-| bigint
| match_list
| match_context_list
| IDENT
| LEFTQMARK
-| natural
-| NUMERAL
+| NUMBER
| STRING
| hyp
| var
@@ -2371,7 +2359,6 @@ SPLICE: [
| search_queries
| locatable
| scope_delimiter
-| bignat
| one_import_filter_name
| search_where
| message_token
diff --git a/doc/tools/docgram/dune b/doc/tools/docgram/dune
index a533a6d367..ba07e6df0d 100644
--- a/doc/tools/docgram/dune
+++ b/doc/tools/docgram/dune
@@ -12,7 +12,7 @@
(glob_files %{project_root}/parsing/*.mlg)
(glob_files %{project_root}/toplevel/*.mlg)
(glob_files %{project_root}/vernac/*.mlg)
- ; All plugins except SSReflect and Ltac2 for now (mimicking what is done in Makefile.doc)
+ ; All plugins except SSReflect for now (mimicking what is done in Makefile.doc)
(glob_files %{project_root}/plugins/btauto/*.mlg)
(glob_files %{project_root}/plugins/cc/*.mlg)
(glob_files %{project_root}/plugins/derive/*.mlg)
@@ -26,6 +26,7 @@
(glob_files %{project_root}/plugins/rtauto/*.mlg)
(glob_files %{project_root}/plugins/setoid_ring/*.mlg)
(glob_files %{project_root}/plugins/syntax/*.mlg)
+ (glob_files %{project_root}/user-contrib/Ltac2/*.mlg)
; Sphinx files
(glob_files %{project_root}/doc/sphinx/language/*.rst)
(glob_files %{project_root}/doc/sphinx/proof-engine/*.rst)
diff --git a/doc/tools/docgram/fullGrammar b/doc/tools/docgram/fullGrammar
index 7f4e92fc37..2ee8e4347e 100644
--- a/doc/tools/docgram/fullGrammar
+++ b/doc/tools/docgram/fullGrammar
@@ -162,7 +162,7 @@ appl_arg: [
atomic_constr: [
| global univ_instance
| sort
-| NUMERAL
+| NUMBER
| string
| "_"
| "?" "[" ident "]"
@@ -283,7 +283,7 @@ pattern0: [
| "_"
| "(" pattern200 ")"
| "(" pattern200 "|" LIST1 pattern200 SEP "|" ")"
-| NUMERAL
+| NUMBER
| string
]
@@ -440,12 +440,12 @@ natural: [
]
bigint: [
-| NUMERAL
-| test_minus_nat "-" NUMERAL
+| bignat
+| test_minus_nat "-" bignat
]
bignat: [
-| NUMERAL
+| NUMBER
]
bar_cbrace: [
@@ -598,7 +598,7 @@ command: [
| "Hint" "Cut" "[" hints_path "]" opthints
| "Typeclasses" "Transparent" LIST0 reference
| "Typeclasses" "Opaque" LIST0 reference
-| "Typeclasses" "eauto" ":=" debug eauto_search_strategy OPT int
+| "Typeclasses" "eauto" ":=" debug eauto_search_strategy OPT integer
| "Proof" "with" Pltac.tactic OPT [ "using" G_vernac.section_subset_expr ]
| "Proof" "using" G_vernac.section_subset_expr OPT [ "with" Pltac.tactic ]
| "Tactic" "Notation" OPT ltac_tactic_level LIST1 ltac_production_item ":=" tactic
@@ -606,14 +606,14 @@ command: [
| "Locate" "Ltac" reference
| "Ltac" LIST1 ltac_tacdef_body SEP "with"
| "Print" "Ltac" "Signatures"
-| "Obligation" integer "of" ident ":" lglob withtac
-| "Obligation" integer "of" ident withtac
-| "Obligation" integer ":" lglob withtac
-| "Obligation" integer withtac
+| "Obligation" natural "of" ident ":" lglob withtac
+| "Obligation" natural "of" ident withtac
+| "Obligation" natural ":" lglob withtac
+| "Obligation" natural withtac
| "Next" "Obligation" "of" ident withtac
| "Next" "Obligation" withtac
-| "Solve" "Obligation" integer "of" ident "with" tactic
-| "Solve" "Obligation" integer "with" tactic
+| "Solve" "Obligation" natural "of" ident "with" tactic
+| "Solve" "Obligation" natural "with" tactic
| "Solve" "Obligations" "of" ident "with" tactic
| "Solve" "Obligations" "with" tactic
| "Solve" "Obligations"
@@ -652,7 +652,7 @@ command: [
| "Print" "Rewrite" "HintDb" preident
| "Reset" "Ltac" "Profile"
| "Show" "Ltac" "Profile"
-| "Show" "Ltac" "Profile" "CutOff" int
+| "Show" "Ltac" "Profile" "CutOff" integer
| "Show" "Ltac" "Profile" string
| "Show" "Lia" "Profile" (* micromega plugin *)
| "Add" "Zify" "InjTyp" constr (* micromega plugin *)
@@ -689,6 +689,7 @@ command: [
| "Print" "Rings" (* setoid_ring plugin *)
| "Add" "Field" ident ":" constr OPT field_mods (* setoid_ring plugin *)
| "Print" "Fields" (* setoid_ring plugin *)
+| "Number" "Notation" reference reference reference ":" ident numnotoption
| "Numeral" "Notation" reference reference reference ":" ident numnotoption
| "String" "Notation" reference reference reference ":" ident
| "Ltac2" ltac2_entry (* Ltac2 plugin *)
@@ -1435,9 +1436,9 @@ constr_as_binder_kind: [
simple_tactic: [
| "btauto"
| "congruence"
-| "congruence" integer
+| "congruence" natural
| "congruence" "with" LIST1 constr
-| "congruence" integer "with" LIST1 constr
+| "congruence" natural "with" LIST1 constr
| "f_equal"
| "firstorder" OPT tactic firstorder_using
| "firstorder" OPT tactic "with" LIST1 preident
@@ -1535,8 +1536,6 @@ simple_tactic: [
| "simple" "injection" destruction_arg
| "dependent" "rewrite" orient constr
| "dependent" "rewrite" orient constr "in" hyp
-| "cutrewrite" orient constr
-| "cutrewrite" orient constr "in" hyp
| "decompose" "sum" constr
| "decompose" "record" constr
| "absurd" constr
@@ -1717,7 +1716,7 @@ simple_tactic: [
| "stop" "ltac" "profiling"
| "reset" "ltac" "profile"
| "show" "ltac" "profile"
-| "show" "ltac" "profile" "cutoff" int
+| "show" "ltac" "profile" "cutoff" integer
| "show" "ltac" "profile" string
| "restart_timer" OPT string
| "finish_timing" OPT string
@@ -2101,7 +2100,7 @@ match_list: [
message_token: [
| identref
| STRING
-| integer
+| natural
]
ltac_def_kind: [
@@ -2813,7 +2812,7 @@ sexpr: [
syn_level: [
| (* Ltac2 plugin *)
-| ":" Prim.integer (* Ltac2 plugin *)
+| ":" Prim.natural (* Ltac2 plugin *)
]
tac2def_syn: [
diff --git a/doc/tools/docgram/orderedGrammar b/doc/tools/docgram/orderedGrammar
index 84efc1e36c..aae96fc966 100644
--- a/doc/tools/docgram/orderedGrammar
+++ b/doc/tools/docgram/orderedGrammar
@@ -93,7 +93,7 @@ term_explicit: [
]
primitive_notations: [
-| numeral
+| number
| string
]
@@ -129,20 +129,28 @@ type: [
| term
]
-numeral: [
-| OPT "-" decnum OPT ( "." LIST1 [ digit | "_" ] ) OPT ( [ "e" | "E" ] OPT [ "+" | "-" ] decnum )
-| OPT "-" hexnum OPT ( "." LIST1 [ hexdigit | "_" ] ) OPT ( [ "p" | "P" ] OPT [ "+" | "-" ] decnum )
+number: [
+| OPT "-" decnat OPT ( "." LIST1 [ digit | "_" ] ) OPT ( [ "e" | "E" ] OPT [ "+" | "-" ] decnat )
+| OPT "-" hexnat OPT ( "." LIST1 [ hexdigit | "_" ] ) OPT ( [ "p" | "P" ] OPT [ "+" | "-" ] decnat )
]
-int: [
-| OPT "-" num
+integer: [
+| OPT "-" natural
]
-num: [
-| [ decnum | hexnum ]
+natural: [
+| bignat
]
-decnum: [
+bigint: [
+| OPT "-" bignat
+]
+
+bignat: [
+| [ decnat | hexnat ]
+]
+
+decnat: [
| digit LIST0 [ digit | "_" ]
]
@@ -150,7 +158,7 @@ digit: [
| "0" ".." "9"
]
-hexnum: [
+hexnat: [
| [ "0x" | "0X" ] hexdigit LIST0 [ hexdigit | "_" ]
]
@@ -230,7 +238,7 @@ nonterminal: [
sentence: [
| OPT attributes command "."
-| OPT attributes OPT ( num ":" ) query_command "."
+| OPT attributes OPT ( natural ":" ) query_command "."
| OPT attributes OPT ( toplevel_selector ":" ) ltac_expr [ "." | "..." ]
| control_command
]
@@ -277,7 +285,7 @@ universe: [
]
universe_expr: [
-| universe_name OPT ( "+" num )
+| universe_name OPT ( "+" natural )
]
universe_name: [
@@ -429,7 +437,7 @@ pattern0: [
| "{|" LIST0 ( qualid ":=" pattern ) "|}"
| "_"
| "(" LIST1 pattern SEP "|" ")"
-| numeral
+| number
| string
]
@@ -509,12 +517,12 @@ ref_or_pattern_occ: [
]
occs_nums: [
-| LIST1 [ num | ident ]
-| "-" [ num | ident ] LIST0 int_or_var
+| LIST1 [ natural | ident ]
+| "-" [ natural | ident ] LIST0 int_or_var
]
int_or_var: [
-| int
+| integer
| ident
]
@@ -535,7 +543,7 @@ record_definition: [
]
record_field: [
-| LIST0 ( "#[" LIST0 attribute SEP "," "]" ) name OPT field_body OPT [ "|" num ] OPT decl_notations
+| LIST0 ( "#[" LIST0 attribute SEP "," "]" ) name OPT field_body OPT [ "|" natural ] OPT decl_notations
]
field_body: [
@@ -589,7 +597,7 @@ sort_family: [
]
hint_info: [
-| "|" OPT num OPT one_term
+| "|" OPT natural OPT one_term
]
module_binder: [
@@ -602,7 +610,7 @@ module_type_inl: [
]
functor_app_annot: [
-| "[" "inline" "at" "level" num "]"
+| "[" "inline" "at" "level" natural "]"
| "[" "no" "inline" "]"
]
@@ -686,7 +694,7 @@ scope_key: [
strategy_level: [
| "opaque"
-| int
+| integer
| "expand"
| "transparent"
]
@@ -714,7 +722,7 @@ command: [
| "Locate" reference
| "Locate" "Term" reference
| "Locate" "Module" qualid
-| "Info" num ltac_expr
+| "Info" natural ltac_expr
| "Locate" "Ltac" qualid
| "Locate" "Library" qualid
| "Locate" "File" string
@@ -762,7 +770,7 @@ command: [
| "Print" "Module" "Type" qualid
| "Print" "Module" qualid
| "Print" "Namespace" dirpath
-| "Inspect" num
+| "Inspect" natural
| "Add" "ML" "Path" string
| OPT "Export" "Set" setting_name
| "Print" "Table" setting_name
@@ -773,7 +781,7 @@ command: [
| "Restore" "State" [ ident | string ]
| "Reset" "Initial"
| "Reset" ident
-| "Back" OPT num
+| "Back" OPT natural
| "Debug" [ "On" | "Off" ]
| "Declare" "Reduction" ident ":=" red_expr
| "Declare" "Custom" "Entry" ident
@@ -802,17 +810,17 @@ command: [
| "Proof" "Mode" string
| "Proof" term
| "Abort" OPT [ "All" | ident ]
-| "Existential" num OPT ( ":" term ) ":=" term
+| "Existential" natural OPT ( ":" term ) ":=" term
| "Admitted"
| "Qed"
| "Save" ident
| "Defined" OPT ident
| "Restart"
-| "Undo" OPT ( OPT "To" num )
-| "Focus" OPT num
+| "Undo" OPT ( OPT "To" natural )
+| "Focus" OPT natural
| "Unfocus"
| "Unfocused"
-| "Show" OPT [ ident | num ]
+| "Show" OPT [ ident | natural ]
| "Show" "Existentials"
| "Show" "Universes"
| "Show" "Conjectures"
@@ -824,12 +832,12 @@ command: [
| "Create" "HintDb" ident OPT "discriminated"
| "Remove" "Hints" LIST1 qualid OPT ( ":" LIST1 ident )
| "Hint" hint OPT ( ":" LIST1 ident )
-| "Comments" LIST0 [ one_term | string | num ]
+| "Comments" LIST0 [ one_term | string | natural ]
| "Declare" "Instance" ident_decl LIST0 binder ":" term OPT hint_info
| "Declare" "Scope" scope_name
-| "Obligation" int OPT ( "of" ident ) OPT ( ":" term OPT ( "with" ltac_expr ) )
+| "Obligation" natural OPT ( "of" ident ) OPT ( ":" term OPT ( "with" ltac_expr ) )
| "Next" "Obligation" OPT ( "of" ident ) OPT ( "with" ltac_expr )
-| "Solve" "Obligation" int OPT ( "of" ident ) "with" ltac_expr
+| "Solve" "Obligation" natural OPT ( "of" ident ) "with" ltac_expr
| "Solve" "Obligations" OPT ( OPT ( "of" ident ) "with" ltac_expr )
| "Solve" "All" "Obligations" OPT ( "with" ltac_expr )
| "Admit" "Obligations" OPT ( "of" ident )
@@ -852,7 +860,7 @@ command: [
| "Optimize" "Proof"
| "Optimize" "Heap"
| "Reset" "Ltac" "Profile"
-| "Show" "Ltac" "Profile" OPT [ "CutOff" int | string ]
+| "Show" "Ltac" "Profile" OPT [ "CutOff" integer | string ]
| "Show" "Lia" "Profile" (* micromega plugin *)
| "Add" "Zify" "InjTyp" one_term (* micromega plugin *)
| "Add" "Zify" "BinOp" one_term (* micromega plugin *)
@@ -888,13 +896,14 @@ command: [
| "Print" "Rings" (* setoid_ring plugin *)
| "Add" "Field" ident ":" one_term OPT ( "(" LIST1 field_mod SEP "," ")" ) (* setoid_ring plugin *)
| "Print" "Fields" (* setoid_ring plugin *)
+| "Number" "Notation" qualid qualid qualid ":" ident OPT numeral_modifier
| "Hint" "Cut" "[" hints_path "]" OPT ( ":" LIST1 ident )
| "Typeclasses" "Transparent" LIST0 qualid
| "Typeclasses" "Opaque" LIST0 qualid
-| "Typeclasses" "eauto" ":=" OPT "debug" OPT ( "(" eauto_search_strategy_name ")" ) OPT int
+| "Typeclasses" "eauto" ":=" OPT "debug" OPT ( "(" eauto_search_strategy_name ")" ) OPT integer
| "Proof" "with" ltac_expr OPT [ "using" section_subset_expr ]
| "Proof" "using" section_subset_expr OPT [ "with" ltac_expr ]
-| "Tactic" "Notation" OPT ( "(" "at" "level" num ")" ) LIST1 ltac_production_item ":=" ltac_expr
+| "Tactic" "Notation" OPT ( "(" "at" "level" natural ")" ) LIST1 ltac_production_item ":=" ltac_expr
| "Print" "Rewrite" "HintDb" ident
| "Print" "Ltac" qualid
| "Ltac" tacdef_body LIST0 ( "with" tacdef_body )
@@ -916,7 +925,7 @@ command: [
| "String" "Notation" qualid qualid qualid ":" scope_name
| "SubClass" ident_decl def_body
| thm_token ident_decl LIST0 binder ":" type LIST0 [ "with" ident_decl LIST0 binder ":" type ]
-| assumption_token OPT ( "Inline" OPT ( "(" num ")" ) ) [ LIST1 ( "(" assumpt ")" ) | assumpt ]
+| assumption_token OPT ( "Inline" OPT ( "(" natural ")" ) ) [ LIST1 ( "(" assumpt ")" ) | assumpt ]
| [ "Definition" | "Example" ] ident_decl def_body
| "Let" ident_decl def_body
| "Inductive" inductive_definition LIST0 ( "with" inductive_definition )
@@ -959,12 +968,12 @@ command: [
| "Context" LIST1 binder
| "Instance" OPT ( ident_decl LIST0 binder ) ":" term OPT hint_info OPT [ ":=" "{" LIST0 field_def "}" | ":=" term ]
| "Existing" "Instance" qualid OPT hint_info
-| "Existing" "Instances" LIST1 qualid OPT [ "|" num ]
+| "Existing" "Instances" LIST1 qualid OPT [ "|" natural ]
| "Existing" "Class" qualid
| "Arguments" reference LIST0 arg_specs LIST0 [ "," LIST0 implicits_alt ] OPT [ ":" LIST1 args_modifier SEP "," ]
| "Implicit" [ "Type" | "Types" ] reserv_list
| "Generalizable" [ [ "Variable" | "Variables" ] LIST1 ident | "All" "Variables" | "No" "Variables" ]
-| "Set" setting_name OPT [ int | string ]
+| "Set" setting_name OPT [ integer | string ]
| "Unset" setting_name
| "Open" "Scope" scope
| "Close" "Scope" scope
@@ -988,19 +997,19 @@ command: [
| "Ltac2" OPT "mutable" OPT "rec" tac2def_body LIST0 ( "with" tac2def_body )
| "Ltac2" "Type" OPT "rec" tac2typ_def LIST0 ( "with" tac2typ_def )
| "Ltac2" "@" "external" ident ":" ltac2_type ":=" string string
-| "Ltac2" "Notation" LIST1 ltac2_scope OPT ( ":" int ) ":=" ltac2_expr
+| "Ltac2" "Notation" LIST1 ltac2_scope OPT ( ":" natural ) ":=" ltac2_expr
| "Ltac2" "Set" qualid OPT [ "as" ident ] ":=" ltac2_expr
| "Ltac2" "Notation" [ string | lident ] ":=" ltac2_expr (* Ltac2 plugin *)
| "Ltac2" "Eval" ltac2_expr (* Ltac2 plugin *)
| "Print" "Ltac2" qualid (* Ltac2 plugin *)
| "Time" sentence
| "Redirect" string sentence
-| "Timeout" num sentence
+| "Timeout" natural sentence
| "Fail" sentence
| "Drop"
| "Quit"
-| "BackTo" num
-| "Show" "Goal" num "at" num
+| "BackTo" natural
+| "Show" "Goal" natural "at" natural
]
section_subset_expr: [
@@ -1067,8 +1076,8 @@ univ_name_list: [
hint: [
| "Resolve" LIST1 [ qualid | one_term ] OPT hint_info
-| "Resolve" "->" LIST1 qualid OPT num
-| "Resolve" "<-" LIST1 qualid OPT num
+| "Resolve" "->" LIST1 qualid OPT natural
+| "Resolve" "<-" LIST1 qualid OPT natural
| "Immediate" LIST1 [ qualid | one_term ]
| "Variables" "Transparent"
| "Variables" "Opaque"
@@ -1079,7 +1088,7 @@ hint: [
| "Mode" qualid LIST1 [ "+" | "!" | "-" ]
| "Unfold" LIST1 qualid
| "Constructors" LIST1 qualid
-| "Extern" num OPT one_term "=>" ltac_expr
+| "Extern" natural OPT one_term "=>" ltac_expr
]
tacdef_body: [
@@ -1127,7 +1136,7 @@ lident: [
]
destruction_arg: [
-| num
+| natural
| constr_with_bindings
| constr_with_bindings_arg
]
@@ -1221,7 +1230,7 @@ q_destruction_arg: [
]
ltac2_destruction_arg: [
-| num (* Ltac2 plugin *)
+| natural (* Ltac2 plugin *)
| lident (* Ltac2 plugin *)
| ltac2_constr_with_bindings (* Ltac2 plugin *)
]
@@ -1249,13 +1258,13 @@ ltac2_simple_binding: [
qhyp: [
| "$" ident (* Ltac2 plugin *)
-| num (* Ltac2 plugin *)
+| natural (* Ltac2 plugin *)
| lident (* Ltac2 plugin *)
]
int_or_id: [
| ident
-| int (* extraction plugin *)
+| integer (* extraction plugin *)
]
language: [
@@ -1291,8 +1300,8 @@ field_mod: [
]
numeral_modifier: [
-| "(" "warning" "after" numeral ")"
-| "(" "abstract" "after" numeral ")"
+| "(" "warning" "after" bignat ")"
+| "(" "abstract" "after" bignat ")"
]
hints_path: [
@@ -1318,8 +1327,8 @@ class: [
]
syntax_modifier: [
-| "at" "level" num
-| "in" "custom" ident OPT ( "at" "level" num )
+| "at" "level" natural
+| "in" "custom" ident OPT ( "at" "level" natural )
| LIST1 ident SEP "," "at" level
| ident "at" level OPT binder_interp
| ident explicit_subentry
@@ -1336,12 +1345,12 @@ explicit_subentry: [
| "ident"
| "global"
| "bigint"
-| "strict" "pattern" OPT ( "at" "level" num )
+| "strict" "pattern" OPT ( "at" "level" natural )
| "binder"
| "closed" "binder"
| "constr" OPT ( "at" level ) OPT binder_interp
| "custom" ident OPT ( "at" level ) OPT binder_interp
-| "pattern" OPT ( "at" "level" num )
+| "pattern" OPT ( "at" "level" natural )
]
binder_interp: [
@@ -1351,7 +1360,7 @@ binder_interp: [
]
level: [
-| "level" num
+| "level" natural
| "next" "level"
]
@@ -1388,14 +1397,14 @@ simple_tactic: [
| "esplit" OPT ( "with" bindings )
| "exists" OPT ( LIST1 bindings SEP "," )
| "eexists" OPT ( LIST1 bindings SEP "," )
-| "intros" "until" [ ident | num ]
+| "intros" "until" [ ident | natural ]
| "intro" OPT ident OPT where
| "move" ident OPT where
| "rename" LIST1 ( ident "into" ident ) SEP ","
| "revert" LIST1 ident
-| "simple" "induction" [ ident | num ]
-| "simple" "destruct" [ ident | num ]
-| "double" "induction" [ ident | num ] [ ident | num ]
+| "simple" "induction" [ ident | natural ]
+| "simple" "destruct" [ ident | natural ]
+| "double" "induction" [ ident | natural ] [ ident | natural ]
| "admit"
| "clear" LIST0 ident
| "clear" "-" LIST1 ident
@@ -1417,8 +1426,8 @@ simple_tactic: [
| "tryif" ltac_expr "then" ltac_expr "else" ltac_expr2
| "first" "[" LIST0 ltac_expr SEP "|" "]"
| "solve" "[" LIST0 ltac_expr SEP "|" "]"
-| "idtac" LIST0 [ ident | string | int ]
-| [ "fail" | "gfail" ] OPT int_or_var LIST0 [ ident | string | int ]
+| "idtac" LIST0 [ ident | string | natural ]
+| [ "fail" | "gfail" ] OPT int_or_var LIST0 [ ident | string | natural ]
| "fun" LIST1 name "=>" ltac_expr
| "eval" red_expr "in" term
| "context" ident "[" term "]"
@@ -1445,7 +1454,6 @@ simple_tactic: [
| "einjection" OPT destruction_arg OPT ( "as" LIST0 simple_intropattern )
| "simple" "injection" OPT destruction_arg
| "dependent" "rewrite" OPT [ "->" | "<-" ] one_term OPT ( "in" ident )
-| "cutrewrite" OPT [ "->" | "<-" ] one_term OPT ( "in" ident )
| "decompose" "sum" one_term
| "decompose" "record" one_term
| "absurd" one_term
@@ -1463,7 +1471,7 @@ simple_tactic: [
| "evar" "(" ident ":" term ")"
| "evar" one_term
| "instantiate" "(" ident ":=" term ")"
-| "instantiate" "(" int ":=" term ")" OPT hloc
+| "instantiate" "(" integer ":=" term ")" OPT hloc
| "instantiate"
| "stepl" one_term OPT ( "by" ltac_expr )
| "stepr" one_term OPT ( "by" ltac_expr )
@@ -1502,7 +1510,7 @@ simple_tactic: [
| "start" "ltac" "profiling"
| "stop" "ltac" "profiling"
| "reset" "ltac" "profile"
-| "show" "ltac" "profile" OPT [ "cutoff" int | string ]
+| "show" "ltac" "profile" OPT [ "cutoff" integer | string ]
| "restart_timer" OPT string
| "finish_timing" OPT ( "(" string ")" ) OPT string
| "eassumption"
@@ -1552,7 +1560,7 @@ simple_tactic: [
| "eelim" constr_with_bindings_arg OPT ( "using" constr_with_bindings )
| "case" induction_clause_list
| "ecase" induction_clause_list
-| "fix" ident num OPT ( "with" LIST1 fixdecl )
+| "fix" ident natural OPT ( "with" LIST1 fixdecl )
| "cofix" ident OPT ( "with" LIST1 cofixdecl )
| "pose" bindings_with_parameters
| "pose" one_term OPT as_name
@@ -1586,11 +1594,11 @@ simple_tactic: [
| "edestruct" induction_clause_list
| "rewrite" LIST1 oriented_rewriter SEP "," OPT clause_dft_concl OPT ( "by" ltac_expr3 )
| "erewrite" LIST1 oriented_rewriter SEP "," OPT clause_dft_concl OPT ( "by" ltac_expr3 )
-| "dependent" [ "simple" "inversion" | "inversion" | "inversion_clear" ] [ ident | num ] OPT as_or_and_ipat OPT [ "with" one_term ]
-| "simple" "inversion" [ ident | num ] OPT as_or_and_ipat OPT ( "in" LIST1 ident )
-| "inversion" [ ident | num ] OPT as_or_and_ipat OPT ( "in" LIST1 ident )
-| "inversion_clear" [ ident | num ] OPT as_or_and_ipat OPT ( "in" LIST1 ident )
-| "inversion" [ ident | num ] "using" one_term OPT ( "in" LIST1 ident )
+| "dependent" [ "simple" "inversion" | "inversion" | "inversion_clear" ] [ ident | natural ] OPT as_or_and_ipat OPT [ "with" one_term ]
+| "simple" "inversion" [ ident | natural ] OPT as_or_and_ipat OPT ( "in" LIST1 ident )
+| "inversion" [ ident | natural ] OPT as_or_and_ipat OPT ( "in" LIST1 ident )
+| "inversion_clear" [ ident | natural ] OPT as_or_and_ipat OPT ( "in" LIST1 ident )
+| "inversion" [ ident | natural ] "using" one_term OPT ( "in" LIST1 ident )
| "red" OPT clause_dft_concl
| "hnf" OPT clause_dft_concl
| "simpl" OPT delta_flag OPT ref_or_pattern_occ OPT clause_dft_concl
@@ -1607,11 +1615,11 @@ simple_tactic: [
| "change_no_check" conversion OPT clause_dft_concl
| "btauto"
| "rtauto"
-| "congruence" OPT int OPT ( "with" LIST1 one_term )
+| "congruence" OPT natural OPT ( "with" LIST1 one_term )
| "f_equal"
| "firstorder" OPT ltac_expr firstorder_rhs
| "gintuition" OPT ltac_expr
-| "functional" "inversion" [ ident | num ] OPT qualid (* funind plugin *)
+| "functional" "inversion" [ ident | natural ] OPT qualid (* funind plugin *)
| "functional" "induction" term OPT fun_ind_using OPT with_names (* funind plugin *)
| "soft" "functional" "induction" LIST1 one_term OPT fun_ind_using OPT with_names (* funind plugin *)
| "psatz_Z" OPT int_or_var ltac_expr
@@ -1699,7 +1707,7 @@ as_name: [
]
rewriter: [
-| OPT num OPT [ "?" | "!" ] constr_with_bindings_arg
+| OPT natural OPT [ "?" | "!" ] constr_with_bindings_arg
]
oriented_rewriter: [
@@ -1759,7 +1767,7 @@ simple_intropattern_closed: [
simple_binding: [
| "(" ident ":=" term ")"
-| "(" num ":=" term ")"
+| "(" natural ":=" term ")"
]
bindings: [
@@ -1808,7 +1816,7 @@ ltac2_occs: [
]
ltac2_occs_nums: [
-| OPT "-" LIST1 [ num (* Ltac2 plugin *) | "$" ident ] (* Ltac2 plugin *)
+| OPT "-" LIST1 [ natural (* Ltac2 plugin *) | "$" ident ] (* Ltac2 plugin *)
]
ltac2_concl_occ: [
@@ -1859,7 +1867,7 @@ ltac2_oriented_rewriter: [
]
ltac2_rewriter: [
-| OPT num OPT [ "?" | "!" ] ltac2_constr_with_bindings
+| OPT natural OPT [ "?" | "!" ] ltac2_constr_with_bindings
]
q_dispatch: [
@@ -2036,7 +2044,7 @@ tac2rec_field: [
ltac2_scope: [
| string (* Ltac2 plugin *)
-| int (* Ltac2 plugin *)
+| integer (* Ltac2 plugin *)
| name (* Ltac2 plugin *)
| name "(" LIST1 ltac2_scope SEP "," ")" (* Ltac2 plugin *)
]
@@ -2086,7 +2094,7 @@ ltac2_expr0: [
]
ltac2_tactic_atom: [
-| int (* Ltac2 plugin *)
+| integer (* Ltac2 plugin *)
| string (* Ltac2 plugin *)
| qualid (* Ltac2 plugin *)
| "@" ident (* Ltac2 plugin *)
@@ -2202,7 +2210,7 @@ with_names: [
]
occurrences: [
-| LIST1 int
+| LIST1 integer
| ident
]
@@ -2297,7 +2305,7 @@ ltac_expr0: [
]
tactic_atom: [
-| int
+| integer
| qualid
| "()"
]
@@ -2329,8 +2337,8 @@ selector: [
]
range_selector: [
-| num "-" num
-| num
+| natural "-" natural
+| natural
]
match_key: [
diff --git a/engine/evarutil.ml b/engine/evarutil.ml
index d719731464..771571fd3f 100644
--- a/engine/evarutil.ml
+++ b/engine/evarutil.ml
@@ -516,12 +516,7 @@ let restrict_evar evd evk filter ?src candidates =
let candidates = Option.map (filter_effective_candidates evd evar_info filter) candidates in
match candidates with
| Some [] -> raise (ClearDependencyError (*FIXME*)(Id.of_string "blah", (NoCandidatesLeft evk), None))
- | _ ->
- let evd, evk' = Evd.restrict evk filter ?candidates ?src evd in
- (* Mark new evar as future goal, removing previous one,
- circumventing Proofview.advance but making Proof.run_tactic catch these. *)
- let evd = Evd.remove_future_goal evd evk in
- (Evd.declare_future_goal evk' evd, evk')
+ | _ -> Evd.restrict evk filter ?candidates ?src evd
let rec check_and_clear_in_constr env evdref err ids global c =
(* returns a new constr where all the evars have been 'cleaned'
@@ -703,10 +698,22 @@ let rec advance sigma evk =
match evi.evar_body with
| Evar_empty -> Some evk
| Evar_defined v ->
- match is_restricted_evar sigma evk with
+ match is_aliased_evar sigma evk with
| Some evk -> advance sigma evk
| None -> None
+let reachable_from_evars sigma evars =
+ let aliased = Evd.get_aliased_evars sigma in
+ let rec search evk visited =
+ if Evar.Set.mem evk visited then visited
+ else
+ let visited = Evar.Set.add evk visited in
+ match Evar.Map.find evk aliased with
+ | evk' -> search evk' visited
+ | exception Not_found -> visited
+ in
+ Evar.Set.fold (fun evk visited -> search evk visited) evars Evar.Set.empty
+
(** The following functions return the set of undefined evars
contained in the object, the defined evars being traversed.
This is roughly a combination of the previous functions and
diff --git a/engine/evarutil.mli b/engine/evarutil.mli
index 9d2c29547e..6e1f67021f 100644
--- a/engine/evarutil.mli
+++ b/engine/evarutil.mli
@@ -112,6 +112,10 @@ val gather_dependent_evars : evar_map -> Evar.t list -> (Evar.Set.t option) Evar
solved. *)
val advance : evar_map -> Evar.t -> Evar.t option
+(** [reachable_from_evars sigma seeds] computes the descendents of
+ evars in [seeds] by restriction or evar-evar unifications in [sigma]. *)
+val reachable_from_evars : evar_map -> Evar.Set.t -> Evar.Set.t
+
(** The following functions return the set of undefined evars
contained in the object, the defined evars being traversed.
This is roughly a combination of the previous functions and
@@ -234,8 +238,8 @@ exception ClearDependencyError of Id.t * clear_dependency_error * GlobRef.t opti
(** Restrict an undefined evar according to a (sub)filter and candidates.
The evar will be defined if there is only one candidate left,
-@raise ClearDependencyError NoCandidatesLeft if the filter turns the candidates
- into an empty list. *)
+ @raise ClearDependencyError NoCandidatesLeft if the filter turns the candidates
+ into an empty list. *)
val restrict_evar : evar_map -> Evar.t -> Filter.t ->
?src:Evar_kinds.t Loc.located -> constr list option -> evar_map * Evar.t
diff --git a/engine/evd.ml b/engine/evd.ml
index 65df2643f2..4ae1d034d7 100644
--- a/engine/evd.ml
+++ b/engine/evd.ml
@@ -453,7 +453,7 @@ end
type evar_flags =
{ obligation_evars : Evar.Set.t;
- restricted_evars : Evar.t Evar.Map.t;
+ aliased_evars : Evar.t Evar.Map.t;
typeclass_evars : Evar.Set.t }
type side_effect_role =
@@ -631,7 +631,7 @@ let add_with_name ?name ?(typeclass_candidate = true) d e i = match i.evar_body
associated to an evar, so we prevent registering its typeclass status. *)
let add d e i = add_with_name ~typeclass_candidate:false d e i
-(*** Evar flags: typeclasses, restricted or obligation flag *)
+(*** Evar flags: typeclasses, aliased or obligation flag *)
let get_typeclass_evars evd = evd.evar_flags.typeclass_evars
@@ -659,29 +659,28 @@ let is_obligation_evar evd evk =
let inherit_evar_flags evar_flags evk evk' =
let evk_typeclass = Evar.Set.mem evk evar_flags.typeclass_evars in
let evk_obligation = Evar.Set.mem evk evar_flags.obligation_evars in
- if not (evk_obligation || evk_typeclass) then evar_flags
- else
- let typeclass_evars =
- if evk_typeclass then
- let typeclass_evars = Evar.Set.remove evk evar_flags.typeclass_evars in
- Evar.Set.add evk' typeclass_evars
- else evar_flags.typeclass_evars
- in
- let obligation_evars =
- if evk_obligation then
- let obligation_evars = Evar.Set.remove evk evar_flags.obligation_evars in
- Evar.Set.add evk' obligation_evars
- else evar_flags.obligation_evars
- in
- { evar_flags with obligation_evars; typeclass_evars }
+ let aliased_evars = Evar.Map.add evk evk' evar_flags.aliased_evars in
+ let typeclass_evars =
+ if evk_typeclass then
+ let typeclass_evars = Evar.Set.remove evk evar_flags.typeclass_evars in
+ Evar.Set.add evk' typeclass_evars
+ else evar_flags.typeclass_evars
+ in
+ let obligation_evars =
+ if evk_obligation then
+ let obligation_evars = Evar.Set.remove evk evar_flags.obligation_evars in
+ Evar.Set.add evk' obligation_evars
+ else evar_flags.obligation_evars
+ in
+ { obligation_evars; aliased_evars; typeclass_evars }
(** Removal: in all other cases of definition *)
let remove_evar_flags evk evar_flags =
{ typeclass_evars = Evar.Set.remove evk evar_flags.typeclass_evars;
obligation_evars = Evar.Set.remove evk evar_flags.obligation_evars;
- (* Restriction information is kept. *)
- restricted_evars = evar_flags.restricted_evars }
+ (* Aliasing information is kept. *)
+ aliased_evars = evar_flags.aliased_evars }
(** New evars *)
@@ -809,7 +808,7 @@ let create_evar_defs sigma = { sigma with
let empty_evar_flags =
{ obligation_evars = Evar.Set.empty;
- restricted_evars = Evar.Map.empty;
+ aliased_evars = Evar.Map.empty;
typeclass_evars = Evar.Set.empty }
let empty_side_effects = {
@@ -872,71 +871,12 @@ let evar_source evk d = (find d evk).evar_source
let evar_ident evk evd = EvNames.ident evk evd.evar_names
let evar_key id evd = EvNames.key id evd.evar_names
-let define_aux def undef evk body =
- let oldinfo =
- try EvMap.find evk undef
- with Not_found ->
- if EvMap.mem evk def then
- anomaly ~label:"Evd.define" (Pp.str "cannot define an evar twice.")
- else
- anomaly ~label:"Evd.define" (Pp.str "cannot define undeclared evar.")
- in
- let () = assert (oldinfo.evar_body == Evar_empty) in
- let newinfo = { oldinfo with evar_body = Evar_defined body } in
- EvMap.add evk newinfo def, EvMap.remove evk undef
-
-(* define the existential of section path sp as the constr body *)
-let define_gen evk body evd evar_flags =
- let (defn_evars, undf_evars) = define_aux evd.defn_evars evd.undf_evars evk body in
- let last_mods = match evd.conv_pbs with
- | [] -> evd.last_mods
- | _ -> Evar.Set.add evk evd.last_mods
- in
- let evar_names = EvNames.remove_name_defined evk evd.evar_names in
- { evd with defn_evars; undf_evars; last_mods; evar_names; evar_flags }
+let get_aliased_evars evd = evd.evar_flags.aliased_evars
-(** By default, the obligation and evar tag of the evar is removed *)
-let define evk body evd =
- let evar_flags = remove_evar_flags evk evd.evar_flags in
- define_gen evk body evd evar_flags
-
-(** In case of an evar-evar solution, the flags are inherited *)
-let define_with_evar evk body evd =
- let evk' = fst (destEvar body) in
- let evar_flags = inherit_evar_flags evd.evar_flags evk evk' in
- define_gen evk body evd evar_flags
-
-let is_restricted_evar evd evk =
- try Some (Evar.Map.find evk evd.evar_flags.restricted_evars)
+let is_aliased_evar evd evk =
+ try Some (Evar.Map.find evk evd.evar_flags.aliased_evars)
with Not_found -> None
-let declare_restricted_evar evar_flags evk evk' =
- { evar_flags with restricted_evars = Evar.Map.add evk evk' evar_flags.restricted_evars }
-
-(* In case of restriction, we declare the restriction and inherit the obligation
- and typeclass flags. *)
-
-let restrict evk filter ?candidates ?src evd =
- let evk' = new_untyped_evar () in
- let evar_info = EvMap.find evk evd.undf_evars in
- let id_inst = Filter.filter_list filter evar_info.evar_hyps.env_named_var in
- let evar_info' =
- { evar_info with evar_filter = filter;
- evar_candidates = candidates;
- evar_source = (match src with None -> evar_info.evar_source | Some src -> src);
- evar_identity = Identity.make id_inst;
- } in
- let last_mods = match evd.conv_pbs with
- | [] -> evd.last_mods
- | _ -> Evar.Set.add evk evd.last_mods in
- let evar_names = EvNames.reassign_name_defined evk evk' evd.evar_names in
- let body = mkEvar(evk',id_inst) in
- let (defn_evars, undf_evars) = define_aux evd.defn_evars evd.undf_evars evk body in
- let evar_flags = declare_restricted_evar evd.evar_flags evk evk' in
- let evar_flags = inherit_evar_flags evar_flags evk evk' in
- { evd with undf_evars = EvMap.add evk' evar_info' undf_evars;
- defn_evars; last_mods; evar_names; evar_flags }, evk'
-
let downcast evk ccl evd =
let evar_info = EvMap.find evk evd.undf_evars in
let evar_info' = { evar_info with evar_concl = ccl } in
@@ -1224,6 +1164,73 @@ let pr_shelf evd =
if List.is_empty evd.shelf then str"(empty stack)"
else prlist_with_sep (fun () -> str"||") (prlist_with_sep spc Evar.print) evd.shelf
+let define_aux def undef evk body =
+ let oldinfo =
+ try EvMap.find evk undef
+ with Not_found ->
+ if EvMap.mem evk def then
+ anomaly ~label:"Evd.define" (Pp.str "cannot define an evar twice.")
+ else
+ anomaly ~label:"Evd.define" (Pp.str "cannot define undeclared evar.")
+ in
+ let () = assert (oldinfo.evar_body == Evar_empty) in
+ let newinfo = { oldinfo with evar_body = Evar_defined body } in
+ EvMap.add evk newinfo def, EvMap.remove evk undef
+
+(* define the existential of section path sp as the constr body *)
+let define_gen evk body evd evar_flags =
+ let (defn_evars, undf_evars) = define_aux evd.defn_evars evd.undf_evars evk body in
+ let last_mods = match evd.conv_pbs with
+ | [] -> evd.last_mods
+ | _ -> Evar.Set.add evk evd.last_mods
+ in
+ let evar_names = EvNames.remove_name_defined evk evd.evar_names in
+ { evd with defn_evars; undf_evars; last_mods; evar_names; evar_flags }
+
+(** By default, the obligation and evar tag of the evar is removed *)
+let define evk body evd =
+ let evar_flags = remove_evar_flags evk evd.evar_flags in
+ define_gen evk body evd evar_flags
+
+(** In case of an evar-evar solution, the flags are inherited *)
+let define_with_evar evk body evd =
+ let evk' = fst (destEvar body) in
+ let evar_flags = inherit_evar_flags evd.evar_flags evk evk' in
+ let evd = unshelve evd [evk] in
+ let future_goals = FutureGoals.remove evk evd.future_goals in
+ let evd = { evd with future_goals } in
+ define_gen evk body evd evar_flags
+
+(* In case of restriction, we declare the aliasing and inherit the obligation
+ and typeclass flags. *)
+
+let restrict evk filter ?candidates ?src evd =
+ let evk' = new_untyped_evar () in
+ let evar_info = EvMap.find evk evd.undf_evars in
+ let id_inst = Filter.filter_list filter evar_info.evar_hyps.env_named_var in
+ let evar_info' =
+ { evar_info with evar_filter = filter;
+ evar_candidates = candidates;
+ evar_source = (match src with None -> evar_info.evar_source | Some src -> src);
+ evar_identity = Identity.make id_inst;
+ } in
+ let last_mods = match evd.conv_pbs with
+ | [] -> evd.last_mods
+ | _ -> Evar.Set.add evk evd.last_mods in
+ let evar_names = EvNames.reassign_name_defined evk evk' evd.evar_names in
+ let body = mkEvar(evk',id_inst) in
+ let (defn_evars, undf_evars) = define_aux evd.defn_evars evd.undf_evars evk body in
+ let evar_flags = inherit_evar_flags evd.evar_flags evk evk' in
+ let evd = { evd with undf_evars = EvMap.add evk' evar_info' undf_evars;
+ defn_evars; last_mods; evar_names; evar_flags }
+ in
+ (* Mark new evar as future goal, removing previous one,
+ circumventing Proofview.advance but making Proof.run_tactic catch these. *)
+ let evd = unshelve evd [evk] in
+ let evd = remove_future_goal evd evk in
+ let evd = declare_future_goal evk' evd in
+ (evd, evk')
+
(**********************************************************)
(* Accessing metas *)
diff --git a/engine/evd.mli b/engine/evd.mli
index 9394f9a9dd..fafaad9a04 100644
--- a/engine/evd.mli
+++ b/engine/evd.mli
@@ -284,8 +284,11 @@ val restrict : Evar.t-> Filter.t -> ?candidates:econstr list ->
possibly limiting the instances to a set of candidates (candidates
are filtered according to the filter) *)
-val is_restricted_evar : evar_map -> Evar.t -> Evar.t option
-(** Tell if an evar comes from restriction of another evar, and if yes, which *)
+val get_aliased_evars : evar_map -> Evar.t Evar.Map.t
+(** The map of aliased evars *)
+
+val is_aliased_evar : evar_map -> Evar.t -> Evar.t option
+(** Tell if an evar has been aliased to another evar, and if yes, which *)
val set_typeclass_evars : evar_map -> Evar.Set.t -> evar_map
(** Mark the given set of evars as available for resolution.
@@ -388,7 +391,6 @@ val pop_future_goals : evar_map -> FutureGoals.t * evar_map
val fold_future_goals : (evar_map -> Evar.t -> evar_map) -> evar_map -> evar_map
-
val remove_future_goal : evar_map -> Evar.t -> evar_map
val pr_future_goals_stack : evar_map -> Pp.t
diff --git a/engine/namegen.ml b/engine/namegen.ml
index fb9f6db0ea..f398f29f41 100644
--- a/engine/namegen.ml
+++ b/engine/namegen.ml
@@ -273,8 +273,8 @@ let visible_ids sigma (nenv, c) =
accu := (gseen, vseen, ids)
| Rel p ->
let (gseen, vseen, ids) = !accu in
- if p > n && not (Int.Set.mem p vseen) then
- let vseen = Int.Set.add p vseen in
+ if p > n && not (Int.Set.mem (p - n) vseen) then
+ let vseen = Int.Set.add (p - n) vseen in
let name =
try Some (List.nth nenv (p - n - 1))
with Invalid_argument _ | Failure _ ->
@@ -290,7 +290,7 @@ let visible_ids sigma (nenv, c) =
accu := (gseen, vseen, ids)
| _ -> EConstr.iter_with_binders sigma succ visible_ids n c
in
- let () = visible_ids 1 c in
+ let () = visible_ids 1 c in (* n = 1 to count the binder to rename *)
let (_, _, ids) = !accu in
ids
@@ -416,6 +416,8 @@ let next_name_away_for_default_printing sigma env_t na avoid =
*)
type renaming_flags =
+ (* The term is the body of a binder and the environment excludes this binder *)
+ (* so, there is a missing binder in the environment *)
| RenamingForCasesPattern of (Name.t list * constr)
| RenamingForGoal
| RenamingElsewhereFor of (Name.t list * constr)
diff --git a/engine/proofview_monad.ml b/engine/proofview_monad.ml
index df9fc5dab3..80263694f5 100644
--- a/engine/proofview_monad.ml
+++ b/engine/proofview_monad.ml
@@ -202,6 +202,11 @@ module type State = sig
val modify : (t->t) -> unit Logical.t
end
+module type Reader = sig
+ type t
+ val get : t Logical.t
+end
+
module type Writer = sig
type t
val put : t -> unit Logical.t
diff --git a/engine/proofview_monad.mli b/engine/proofview_monad.mli
index 6cca3f5a5e..00d322858d 100644
--- a/engine/proofview_monad.mli
+++ b/engine/proofview_monad.mli
@@ -79,7 +79,7 @@ val with_empty_state : goal -> goal_with_state
val map_goal_with_state : (goal -> goal) -> goal_with_state -> goal_with_state
(** Type of proof views: current [evar_map] together with the list of
- focused goals. *)
+ focused goals, locally shelved goals and globally shelved goals. *)
type proofview = {
solution : Evd.evar_map;
comb : goal_with_state list;
@@ -115,6 +115,10 @@ module type State = sig
val set : t -> unit Logical.t
val modify : (t->t) -> unit Logical.t
end
+module type Reader = sig
+ type t
+ val get : t Logical.t
+end
module type Writer = sig
type t
diff --git a/engine/termops.ml b/engine/termops.ml
index ac6870a39e..0923ab6f4b 100644
--- a/engine/termops.ml
+++ b/engine/termops.ml
@@ -310,15 +310,15 @@ let pr_evar_map_gen with_univs pr_evars env sigma =
let pr_evar_list env sigma l =
let open Evd in
- let pr_restrict ev =
- match is_restricted_evar sigma ev with
+ let pr_alias ev =
+ match is_aliased_evar sigma ev with
| None -> mt ()
- | Some ev' -> str " (restricted to " ++ Evar.print ev' ++ str ")"
+ | Some ev' -> str " (aliased to " ++ Evar.print ev' ++ str ")"
in
let pr (ev, evi) =
h 0 (Evar.print ev ++
str "==" ++ pr_evar_info env sigma evi ++
- pr_restrict ev ++
+ pr_alias ev ++
(if evi.evar_body == Evar_empty
then str " {" ++ pr_existential_key sigma ev ++ str "}"
else mt ()))
diff --git a/interp/stdarg.ml b/interp/stdarg.ml
index d5f104b7f8..343f85be03 100644
--- a/interp/stdarg.ml
+++ b/interp/stdarg.ml
@@ -25,6 +25,9 @@ let wit_bool : bool uniform_genarg_type =
let wit_int : int uniform_genarg_type =
make0 "int"
+let wit_nat : int uniform_genarg_type =
+ make0 "nat"
+
let wit_string : string uniform_genarg_type =
make0 "string"
@@ -59,6 +62,7 @@ let wit_clause_dft_concl =
(** Aliases for compatibility *)
let wit_integer = wit_int
+let wit_natural = wit_nat
let wit_preident = wit_pre_ident
let wit_reference = wit_ref
let wit_global = wit_ref
diff --git a/interp/stdarg.mli b/interp/stdarg.mli
index 89bdd78c70..3ae8b7d73f 100644
--- a/interp/stdarg.mli
+++ b/interp/stdarg.mli
@@ -23,6 +23,8 @@ val wit_unit : unit uniform_genarg_type
val wit_bool : bool uniform_genarg_type
+val wit_nat : int uniform_genarg_type
+
val wit_int : int uniform_genarg_type
val wit_string : string uniform_genarg_type
@@ -54,6 +56,7 @@ val wit_clause_dft_concl : (lident Locus.clause_expr, lident Locus.clause_expr,
(** Aliases for compatibility *)
+val wit_natural : int uniform_genarg_type
val wit_integer : int uniform_genarg_type
val wit_preident : string uniform_genarg_type
val wit_reference : (qualid, GlobRef.t located or_var, GlobRef.t) genarg_type
diff --git a/kernel/uGraph.ml b/kernel/uGraph.ml
index 927db9e9e6..52e93a9e22 100644
--- a/kernel/uGraph.ml
+++ b/kernel/uGraph.ml
@@ -142,6 +142,12 @@ let enforce_leq_alg u v g =
| Inl x -> x
| Inr e -> raise e
+let enforce_leq_alg u v g =
+ match Universe.is_sprop u, Universe.is_sprop v with
+ | true, true -> Constraint.empty, g
+ | true, false | false, true -> raise (UniverseInconsistency (Le, u, v, None))
+ | false, false -> enforce_leq_alg u v g
+
(* sanity check wrapper *)
let enforce_leq_alg u v g =
let _,g as cg = enforce_leq_alg u v g in
diff --git a/lib/acyclicGraph.ml b/lib/acyclicGraph.ml
index dc5241b89e..8da09dc98a 100644
--- a/lib/acyclicGraph.ml
+++ b/lib/acyclicGraph.ml
@@ -356,39 +356,37 @@ module Make (Point:Point) = struct
let get_new_edges g to_merge =
(* Computing edge sets. *)
- let to_merge_lvl =
- List.fold_left (fun acc u -> PMap.add u.canon u acc)
- PMap.empty to_merge
- in
let ltle =
- let fold _ n acc =
+ let fold acc n =
let fold u strict acc =
- if strict then PMap.add u strict acc
- else if PMap.mem u acc then acc
- else PMap.add u false acc
+ match PMap.find u acc with
+ | true -> acc
+ | false -> if strict then PMap.add u true acc else acc
+ | exception Not_found -> PMap.add u strict acc
in
PMap.fold fold n.ltle acc
in
- PMap.fold fold to_merge_lvl PMap.empty
+ match to_merge with
+ | [] -> assert false
+ | hd :: tl -> List.fold_left fold hd.ltle tl
in
let ltle, _ = clean_ltle g ltle in
- let ltle =
- PMap.merge (fun _ a strict ->
- match a, strict with
- | Some _, Some true ->
- (* There is a lt edge inside the new component. This is a
- "bad cycle". *)
- raise CycleDetected
- | Some _, Some false -> None
- | _, _ -> strict
- ) to_merge_lvl ltle
+ let fold accu a =
+ match PMap.find a.canon ltle with
+ | true ->
+ (* There is a lt edge inside the new component. This is a
+ "bad cycle". *)
+ raise CycleDetected
+ | false -> PMap.remove a.canon accu
+ | exception Not_found -> accu
in
+ let ltle = List.fold_left fold ltle to_merge in
let gtge =
- PMap.fold (fun _ n acc -> PSet.union acc n.gtge)
- to_merge_lvl PSet.empty
+ List.fold_left (fun acc n -> PSet.union acc n.gtge)
+ PSet.empty to_merge
in
let gtge, _ = clean_gtge g gtge in
- let gtge = PSet.diff gtge (PMap.domain to_merge_lvl) in
+ let gtge = List.fold_left (fun acc n -> PSet.remove n.canon acc) gtge to_merge in
(ltle, gtge)
diff --git a/parsing/cLexer.ml b/parsing/cLexer.ml
index 85640cabba..a98cf3b7de 100644
--- a/parsing/cLexer.ml
+++ b/parsing/cLexer.ml
@@ -710,7 +710,7 @@ let rec next_token ~diff_mode loc s =
let n = NumTok.Unsigned.parse s in
let ep = Stream.count s in
comment_stop bp;
- (NUMERAL n, set_loc_pos loc bp ep)
+ (NUMBER n, set_loc_pos loc bp ep)
| Some '\"' ->
Stream.junk s;
let (loc, len) =
@@ -796,8 +796,8 @@ let token_text : type c. c Tok.p -> string = function
| PKEYWORD t -> "'" ^ t ^ "'"
| PIDENT None -> "identifier"
| PIDENT (Some t) -> "'" ^ t ^ "'"
- | PNUMERAL None -> "numeral"
- | PNUMERAL (Some n) -> "'" ^ NumTok.Unsigned.sprint n ^ "'"
+ | PNUMBER None -> "numeral"
+ | PNUMBER (Some n) -> "'" ^ NumTok.Unsigned.sprint n ^ "'"
| PSTRING None -> "string"
| PSTRING (Some s) -> "STRING \"" ^ s ^ "\""
| PLEFTQMARK -> "LEFTQMARK"
@@ -891,5 +891,5 @@ let terminal s =
(* Precondition: the input is a numeral (c.f. [NumTok.t]) *)
let terminal_numeral s = match NumTok.Unsigned.parse_string s with
- | Some n -> PNUMERAL (Some n)
+ | Some n -> PNUMBER (Some n)
| None -> failwith "numeral token expected."
diff --git a/parsing/g_constr.mlg b/parsing/g_constr.mlg
index 61317f3ef2..1ec83c496a 100644
--- a/parsing/g_constr.mlg
+++ b/parsing/g_constr.mlg
@@ -258,7 +258,7 @@ GRAMMAR EXTEND Gram
atomic_constr:
[ [ g = global; i = univ_instance -> { CAst.make ~loc @@ CRef (g,i) }
| s = sort -> { CAst.make ~loc @@ CSort s }
- | n = NUMERAL-> { CAst.make ~loc @@ CPrim (Numeral (NumTok.SPlus,n)) }
+ | n = NUMBER-> { CAst.make ~loc @@ CPrim (Numeral (NumTok.SPlus,n)) }
| s = string -> { CAst.make ~loc @@ CPrim (String s) }
| "_" -> { CAst.make ~loc @@ CHole (None, IntroAnonymous, None) }
| "?"; "["; id = ident; "]" -> { CAst.make ~loc @@ CHole (None, IntroIdentifier id, None) }
@@ -370,7 +370,7 @@ GRAMMAR EXTEND Gram
| _ -> p }
| "("; p = pattern LEVEL "200"; "|" ; pl = LIST1 pattern LEVEL "200" SEP "|"; ")" ->
{ CAst.make ~loc @@ CPatOr (p::pl) }
- | n = NUMERAL-> { CAst.make ~loc @@ CPatPrim (Numeral (NumTok.SPlus,n)) }
+ | n = NUMBER-> { CAst.make ~loc @@ CPatPrim (Numeral (NumTok.SPlus,n)) }
| s = string -> { CAst.make ~loc @@ CPatPrim (String s) } ] ]
;
fixannot:
diff --git a/parsing/g_prim.mlg b/parsing/g_prim.mlg
index cc59b2175b..270662b824 100644
--- a/parsing/g_prim.mlg
+++ b/parsing/g_prim.mlg
@@ -23,12 +23,11 @@ let my_int_of_string ?loc s =
with Failure _ ->
CErrors.user_err ?loc (Pp.str "This number is too large.")
-let my_to_nat_string ?loc ispos s =
+let my_to_nat_string ?loc s =
match NumTok.Unsigned.to_nat s with
| Some n -> n
| None ->
- let pos = if ispos then "a natural" else "an integer" in
- CErrors.user_err ?loc Pp.(str "This number is not " ++ str pos ++ str " number.")
+ CErrors.user_err ?loc Pp.(str "This number is not an integer.")
let test_pipe_closedcurly =
let open Pcoq.Lookahead in
@@ -127,12 +126,12 @@ GRAMMAR EXTEND Gram
[ [ i = bignat -> { my_int_of_string ~loc i } ] ]
;
bigint:
- [ [ i = NUMERAL -> { my_to_nat_string true ~loc i }
- | test_minus_nat; "-"; i = NUMERAL -> { "-" ^ my_to_nat_string ~loc false i } ] ]
+ [ [ i = bignat -> { i }
+ | test_minus_nat; "-"; i = bignat -> { "-" ^ i } ] ]
;
bignat:
- [ [ i = NUMERAL -> { my_to_nat_string ~loc true i } ] ]
- ;
+ [ [ i = NUMBER -> { my_to_nat_string ~loc i } ] ]
+ ;
bar_cbrace:
[ [ test_pipe_closedcurly; "|"; "}" -> { () } ] ]
;
diff --git a/parsing/pcoq.ml b/parsing/pcoq.ml
index 2cc16f85d5..0d74ad928c 100644
--- a/parsing/pcoq.ml
+++ b/parsing/pcoq.ml
@@ -64,7 +64,7 @@ struct
| _ -> None
let lk_nat tok n strm = match stream_nth n strm with
- | Tok.NUMERAL p when NumTok.Unsigned.is_nat p -> Some (n + 1)
+ | Tok.NUMBER p when NumTok.Unsigned.is_nat p -> Some (n + 1)
| _ -> None
let rec lk_list lk_elem n strm =
@@ -500,6 +500,7 @@ let with_grammar_rule_protection f x =
let () =
let open Stdarg in
+ Grammar.register0 wit_nat (Prim.natural);
Grammar.register0 wit_int (Prim.integer);
Grammar.register0 wit_string (Prim.string);
Grammar.register0 wit_pre_ident (Prim.preident);
diff --git a/parsing/tok.ml b/parsing/tok.ml
index b1ceab8822..1ab7847805 100644
--- a/parsing/tok.ml
+++ b/parsing/tok.ml
@@ -17,7 +17,7 @@ type 'c p =
| PPATTERNIDENT : string option -> string p
| PIDENT : string option -> string p
| PFIELD : string option -> string p
- | PNUMERAL : NumTok.Unsigned.t option -> NumTok.Unsigned.t p
+ | PNUMBER : NumTok.Unsigned.t option -> NumTok.Unsigned.t p
| PSTRING : string option -> string p
| PLEFTQMARK : unit p
| PBULLET : string option -> string p
@@ -30,8 +30,8 @@ let pattern_strings : type c. c p -> string * string option =
| PPATTERNIDENT s -> "PATTERNIDENT", s
| PIDENT s -> "IDENT", s
| PFIELD s -> "FIELD", s
- | PNUMERAL None -> "NUMERAL", None
- | PNUMERAL (Some n) -> "NUMERAL", Some (NumTok.Unsigned.sprint n)
+ | PNUMBER None -> "NUMBER", None
+ | PNUMBER (Some n) -> "NUMBER", Some (NumTok.Unsigned.sprint n)
| PSTRING s -> "STRING", s
| PLEFTQMARK -> "LEFTQMARK", None
| PBULLET s -> "BULLET", s
@@ -43,7 +43,7 @@ type t =
| PATTERNIDENT of string
| IDENT of string
| FIELD of string
- | NUMERAL of NumTok.Unsigned.t
+ | NUMBER of NumTok.Unsigned.t
| STRING of string
| LEFTQMARK
| BULLET of string
@@ -58,8 +58,8 @@ let equal_p (type a b) (t1 : a p) (t2 : b p) : (a, b) Util.eq option =
| PPATTERNIDENT s1, PPATTERNIDENT s2 when streq s1 s2 -> Some Util.Refl
| PIDENT s1, PIDENT s2 when streq s1 s2 -> Some Util.Refl
| PFIELD s1, PFIELD s2 when streq s1 s2 -> Some Util.Refl
- | PNUMERAL None, PNUMERAL None -> Some Util.Refl
- | PNUMERAL (Some n1), PNUMERAL (Some n2) when NumTok.Unsigned.equal n1 n2 -> Some Util.Refl
+ | PNUMBER None, PNUMBER None -> Some Util.Refl
+ | PNUMBER (Some n1), PNUMBER (Some n2) when NumTok.Unsigned.equal n1 n2 -> Some Util.Refl
| PSTRING s1, PSTRING s2 when streq s1 s2 -> Some Util.Refl
| PLEFTQMARK, PLEFTQMARK -> Some Util.Refl
| PBULLET s1, PBULLET s2 when streq s1 s2 -> Some Util.Refl
@@ -73,7 +73,7 @@ let equal t1 t2 = match t1, t2 with
| PATTERNIDENT s1, PATTERNIDENT s2 -> string_equal s1 s2
| IDENT s1, IDENT s2 -> string_equal s1 s2
| FIELD s1, FIELD s2 -> string_equal s1 s2
-| NUMERAL n1, NUMERAL n2 -> NumTok.Unsigned.equal n1 n2
+| NUMBER n1, NUMBER n2 -> NumTok.Unsigned.equal n1 n2
| STRING s1, STRING s2 -> string_equal s1 s2
| LEFTQMARK, LEFTQMARK -> true
| BULLET s1, BULLET s2 -> string_equal s1 s2
@@ -100,7 +100,7 @@ let extract_string diff_mode = function
else s
| PATTERNIDENT s -> s
| FIELD s -> if diff_mode then "." ^ s else s
- | NUMERAL n -> NumTok.Unsigned.sprint n
+ | NUMBER n -> NumTok.Unsigned.sprint n
| LEFTQMARK -> "?"
| BULLET s -> s
| QUOTATION(_,s) -> s
@@ -124,15 +124,15 @@ let match_pattern (type c) (p : c p) : t -> c =
let err () = raise Stream.Failure in
let seq = string_equal in
match p with
- | PKEYWORD s -> (function KEYWORD s' when seq s s' -> s' | NUMERAL n when seq s (NumTok.Unsigned.sprint n) -> s | _ -> err ())
+ | PKEYWORD s -> (function KEYWORD s' when seq s s' -> s' | NUMBER n when seq s (NumTok.Unsigned.sprint n) -> s | _ -> err ())
| PIDENT None -> (function IDENT s' -> s' | _ -> err ())
| PIDENT (Some s) -> (function (IDENT s' | KEYWORD s') when seq s s' -> s' | _ -> err ())
| PPATTERNIDENT None -> (function PATTERNIDENT s -> s | _ -> err ())
| PPATTERNIDENT (Some s) -> (function PATTERNIDENT s' when seq s s' -> s' | _ -> err ())
| PFIELD None -> (function FIELD s -> s | _ -> err ())
| PFIELD (Some s) -> (function FIELD s' when seq s s' -> s' | _ -> err ())
- | PNUMERAL None -> (function NUMERAL s -> s | _ -> err ())
- | PNUMERAL (Some n) -> let s = NumTok.Unsigned.sprint n in (function NUMERAL n' when s = NumTok.Unsigned.sprint n' -> n' | _ -> err ())
+ | PNUMBER None -> (function NUMBER s -> s | _ -> err ())
+ | PNUMBER (Some n) -> let s = NumTok.Unsigned.sprint n in (function NUMBER n' when s = NumTok.Unsigned.sprint n' -> n' | _ -> err ())
| PSTRING None -> (function STRING s -> s | _ -> err ())
| PSTRING (Some s) -> (function STRING s' when seq s s' -> s' | _ -> err ())
| PLEFTQMARK -> (function LEFTQMARK -> () | _ -> err ())
diff --git a/parsing/tok.mli b/parsing/tok.mli
index b556194eb3..5bbb7a0013 100644
--- a/parsing/tok.mli
+++ b/parsing/tok.mli
@@ -15,7 +15,7 @@ type 'c p =
| PPATTERNIDENT : string option -> string p
| PIDENT : string option -> string p
| PFIELD : string option -> string p
- | PNUMERAL : NumTok.Unsigned.t option -> NumTok.Unsigned.t p
+ | PNUMBER : NumTok.Unsigned.t option -> NumTok.Unsigned.t p
| PSTRING : string option -> string p
| PLEFTQMARK : unit p
| PBULLET : string option -> string p
@@ -29,7 +29,7 @@ type t =
| PATTERNIDENT of string
| IDENT of string
| FIELD of string
- | NUMERAL of NumTok.Unsigned.t
+ | NUMBER of NumTok.Unsigned.t
| STRING of string
| LEFTQMARK
| BULLET of string
diff --git a/plugins/cc/g_congruence.mlg b/plugins/cc/g_congruence.mlg
index 3920e3da75..2c91901477 100644
--- a/plugins/cc/g_congruence.mlg
+++ b/plugins/cc/g_congruence.mlg
@@ -22,9 +22,9 @@ DECLARE PLUGIN "cc_plugin"
TACTIC EXTEND cc
| [ "congruence" ] -> { congruence_tac 1000 [] }
-| [ "congruence" integer(n) ] -> { congruence_tac n [] }
+| [ "congruence" natural(n) ] -> { congruence_tac n [] }
| [ "congruence" "with" ne_constr_list(l) ] -> { congruence_tac 1000 l }
- |[ "congruence" integer(n) "with" ne_constr_list(l) ] ->
+| [ "congruence" natural(n) "with" ne_constr_list(l) ] ->
{ congruence_tac n l }
END
diff --git a/plugins/extraction/g_extraction.mlg b/plugins/extraction/g_extraction.mlg
index 094f87f154..da7ed7be64 100644
--- a/plugins/extraction/g_extraction.mlg
+++ b/plugins/extraction/g_extraction.mlg
@@ -60,16 +60,10 @@ let pr_language = function
| Scheme -> str "Scheme"
| JSON -> str "JSON"
-let warn_deprecated_ocaml_spelling =
- CWarnings.create ~name:"deprecated-ocaml-spelling" ~category:"deprecated"
- (fun () ->
- strbrk ("The spelling \"OCaml\" should be used instead of \"Ocaml\"."))
-
}
VERNAC ARGUMENT EXTEND language
PRINTED BY { pr_language }
-| [ "Ocaml" ] -> { let _ = warn_deprecated_ocaml_spelling () in Ocaml }
| [ "OCaml" ] -> { Ocaml }
| [ "Haskell" ] -> { Haskell }
| [ "Scheme" ] -> { Scheme }
diff --git a/plugins/ltac/coretactics.mlg b/plugins/ltac/coretactics.mlg
index cb226de586..f1f538ab39 100644
--- a/plugins/ltac/coretactics.mlg
+++ b/plugins/ltac/coretactics.mlg
@@ -263,7 +263,7 @@ END
(** Double induction *)
-TACTIC EXTEND double_induction
+TACTIC EXTEND double_induction DEPRECATED { Deprecation.make () }
| [ "double" "induction" quantified_hypothesis(h1) quantified_hypothesis(h2) ] ->
{ Elim.h_double_induction h1 h2 }
END
diff --git a/plugins/ltac/extratactics.mlg b/plugins/ltac/extratactics.mlg
index 66c72a30a2..4f20e5a800 100644
--- a/plugins/ltac/extratactics.mlg
+++ b/plugins/ltac/extratactics.mlg
@@ -43,7 +43,7 @@ DECLARE PLUGIN "ltac_plugin"
(**********************************************************************)
(* replace, discriminate, injection, simplify_eq *)
-(* cutrewrite, dependent rewrite *)
+(* dependent rewrite *)
let with_delayed_uconstr ist c tac =
let flags = {
@@ -203,12 +203,6 @@ TACTIC EXTEND dependent_rewrite
-> { rewriteInHyp b c id }
END
-TACTIC EXTEND cut_rewrite
-| [ "cutrewrite" orient(b) constr(eqn) ] -> { cutRewriteInConcl b eqn }
-| [ "cutrewrite" orient(b) constr(eqn) "in" hyp(id) ]
- -> { cutRewriteInHyp b eqn id }
-END
-
(**********************************************************************)
(* Decompose *)
diff --git a/plugins/ltac/g_class.mlg b/plugins/ltac/g_class.mlg
index 35c90444b1..8d197e6056 100644
--- a/plugins/ltac/g_class.mlg
+++ b/plugins/ltac/g_class.mlg
@@ -77,7 +77,7 @@ END
(* true = All transparent, false = Opaque if possible *)
VERNAC COMMAND EXTEND Typeclasses_Settings CLASSIFIED AS SIDEFF
- | [ "Typeclasses" "eauto" ":=" debug(d) eauto_search_strategy(s) int_opt(depth) ] -> {
+ | [ "Typeclasses" "eauto" ":=" debug(d) eauto_search_strategy(s) integer_opt(depth) ] -> {
set_typeclasses_debug d;
Option.iter set_typeclasses_strategy s;
set_typeclasses_depth depth
diff --git a/plugins/ltac/g_ltac.mlg b/plugins/ltac/g_ltac.mlg
index 114acaa412..78cde2cde8 100644
--- a/plugins/ltac/g_ltac.mlg
+++ b/plugins/ltac/g_ltac.mlg
@@ -271,7 +271,7 @@ GRAMMAR EXTEND Gram
message_token:
[ [ id = identref -> { MsgIdent id }
| s = STRING -> { MsgString s }
- | n = integer -> { MsgInt n } ] ]
+ | n = natural -> { MsgInt n } ] ]
;
ltac_def_kind:
diff --git a/plugins/ltac/g_obligations.mlg b/plugins/ltac/g_obligations.mlg
index fa176482bf..a6673699af 100644
--- a/plugins/ltac/g_obligations.mlg
+++ b/plugins/ltac/g_obligations.mlg
@@ -88,13 +88,13 @@ let classify_obbl _ = Vernacextend.(VtStartProof (Doesn'tGuaranteeOpacity,[]))
}
VERNAC COMMAND EXTEND Obligations CLASSIFIED BY { classify_obbl } STATE declare_program
-| [ "Obligation" integer(num) "of" ident(name) ":" lglob(t) withtac(tac) ] ->
+| [ "Obligation" natural(num) "of" ident(name) ":" lglob(t) withtac(tac) ] ->
{ obligation (num, Some name, Some t) tac }
-| [ "Obligation" integer(num) "of" ident(name) withtac(tac) ] ->
+| [ "Obligation" natural(num) "of" ident(name) withtac(tac) ] ->
{ obligation (num, Some name, None) tac }
-| [ "Obligation" integer(num) ":" lglob(t) withtac(tac) ] ->
+| [ "Obligation" natural(num) ":" lglob(t) withtac(tac) ] ->
{ obligation (num, None, Some t) tac }
-| [ "Obligation" integer(num) withtac(tac) ] ->
+| [ "Obligation" natural(num) withtac(tac) ] ->
{ obligation (num, None, None) tac }
| [ "Next" "Obligation" "of" ident(name) withtac(tac) ] ->
{ next_obligation (Some name) tac }
@@ -102,9 +102,9 @@ VERNAC COMMAND EXTEND Obligations CLASSIFIED BY { classify_obbl } STATE declare_
END
VERNAC COMMAND EXTEND Solve_Obligation CLASSIFIED AS SIDEFF STATE program
-| [ "Solve" "Obligation" integer(num) "of" ident(name) "with" tactic(t) ] ->
+| [ "Solve" "Obligation" natural(num) "of" ident(name) "with" tactic(t) ] ->
{ try_solve_obligation num (Some name) (Some (Tacinterp.interp t)) }
-| [ "Solve" "Obligation" integer(num) "with" tactic(t) ] ->
+| [ "Solve" "Obligation" natural(num) "with" tactic(t) ] ->
{ try_solve_obligation num None (Some (Tacinterp.interp t)) }
END
diff --git a/plugins/ltac/leminv.ml b/plugins/ltac/leminv.ml
index 0024d1a4ba..47df3ec34f 100644
--- a/plugins/ltac/leminv.ml
+++ b/plugins/ltac/leminv.ml
@@ -228,14 +228,15 @@ let inversion_scheme ~name ~poly env sigma t sort dep_option inv_op =
let c = fill_holes pfterm in
(* warning: side-effect on ownSign *)
let invProof = it_mkNamedLambda_or_LetIn c !ownSign in
- let p = EConstr.to_constr sigma invProof in
- p, sigma
+ invProof, sigma
let add_inversion_lemma ~poly name env sigma t sort dep inv_op =
let invProof, sigma = inversion_scheme ~name ~poly env sigma t sort dep inv_op in
- let univs = Evd.univ_entry ~poly sigma in
- let entry = Declare.definition_entry ~univs invProof in
- let _ : Names.Constant.t = Declare.declare_constant ~name ~kind:Decls.(IsProof Lemma) (Declare.DefinitionEntry entry) in
+ let cinfo = Declare.CInfo.make ~name ~typ:None () in
+ let info = Declare.Info.make ~poly ~kind:Decls.(IsProof Lemma) () in
+ let _ : Names.GlobRef.t =
+ Declare.declare_definition ~cinfo ~info ~opaque:false ~body:invProof sigma
+ in
()
(* inv_op = Inv (derives de complete inv. lemma)
@@ -246,11 +247,7 @@ let add_inversion_lemma_exn ~poly na com comsort bool tac =
let sigma = Evd.from_env env in
let sigma, c = Constrintern.interp_type_evars ~program_mode:false env sigma com in
let sigma, sort = Evd.fresh_sort_in_family ~rigid:univ_rigid sigma comsort in
- try
- add_inversion_lemma ~poly na env sigma c sort bool tac
- with
- | UserError (Some "Case analysis",s) -> (* Reference to Indrec *)
- user_err ~hdr:"Inv needs Nodep Prop Set" s
+ add_inversion_lemma ~poly na env sigma c sort bool tac
(* ================================= *)
(* Applying a given inversion lemma *)
diff --git a/plugins/ltac/pptactic.ml b/plugins/ltac/pptactic.ml
index 6233807016..f69fe064a7 100644
--- a/plugins/ltac/pptactic.ml
+++ b/plugins/ltac/pptactic.ml
@@ -831,7 +831,7 @@ let pr_goal_selector ~toplevel s =
++ pr_non_empty_arg (pr_clauses (Some true) pr.pr_name) h
)
| TacChange (check,op,c,h) ->
- let name = if check then "change_no_check" else "change" in
+ let name = if check then "change" else "change_no_check" in
hov 1 (
primitive name ++ brk (1,1)
++ (
diff --git a/plugins/ltac/profile_ltac_tactics.mlg b/plugins/ltac/profile_ltac_tactics.mlg
index eb9d9cbdce..e5309ea441 100644
--- a/plugins/ltac/profile_ltac_tactics.mlg
+++ b/plugins/ltac/profile_ltac_tactics.mlg
@@ -55,7 +55,7 @@ END
TACTIC EXTEND show_ltac_profile
| [ "show" "ltac" "profile" ] -> { tclSHOW_PROFILE ~cutoff:!Flags.profile_ltac_cutoff }
-| [ "show" "ltac" "profile" "cutoff" int(n) ] -> { tclSHOW_PROFILE ~cutoff:(float_of_int n) }
+| [ "show" "ltac" "profile" "cutoff" integer(n) ] -> { tclSHOW_PROFILE ~cutoff:(float_of_int n) }
| [ "show" "ltac" "profile" string(s) ] -> { tclSHOW_PROFILE_TACTIC s }
END
@@ -74,7 +74,7 @@ END
VERNAC COMMAND EXTEND ShowLtacProfile CLASSIFIED AS QUERY
| [ "Show" "Ltac" "Profile" ] -> { print_results ~cutoff:!Flags.profile_ltac_cutoff }
-| [ "Show" "Ltac" "Profile" "CutOff" int(n) ] -> { print_results ~cutoff:(float_of_int n) }
+| [ "Show" "Ltac" "Profile" "CutOff" integer(n) ] -> { print_results ~cutoff:(float_of_int n) }
END
VERNAC COMMAND EXTEND ShowLtacProfileTactic CLASSIFIED AS QUERY
diff --git a/plugins/ltac/rewrite.ml b/plugins/ltac/rewrite.ml
index fb149071c9..a1dbf9a439 100644
--- a/plugins/ltac/rewrite.ml
+++ b/plugins/ltac/rewrite.ml
@@ -546,7 +546,7 @@ let rewrite_core_unif_flags = {
Unification.check_applied_meta_types = true;
Unification.use_pattern_unification = true;
Unification.use_meta_bound_pattern_unification = true;
- Unification.allowed_evars = Unification.AllowAll;
+ Unification.allowed_evars = Evarsolve.AllowedEvars.all;
Unification.restrict_conv_on_strict_subterms = false;
Unification.modulo_betaiota = false;
Unification.modulo_eta = true;
diff --git a/plugins/ltac/tacinterp.ml b/plugins/ltac/tacinterp.ml
index 88480194c8..2258201c22 100644
--- a/plugins/ltac/tacinterp.ml
+++ b/plugins/ltac/tacinterp.ml
@@ -2028,6 +2028,9 @@ let () =
declare_uniform wit_int
let () =
+ declare_uniform wit_nat
+
+let () =
declare_uniform wit_bool
let () =
diff --git a/plugins/micromega/certificate.ml b/plugins/micromega/certificate.ml
index 148c1772bf..9008691bca 100644
--- a/plugins/micromega/certificate.ml
+++ b/plugins/micromega/certificate.ml
@@ -354,7 +354,7 @@ let is_linear_for v pc =
*)
let is_linear_substitution sys ((p, o), prf) =
- let pred v = v =/ Q.one || v =/ Q.neg_one in
+ let pred v = v =/ Q.one || v =/ Q.minus_one in
match o with
| Eq -> (
match
@@ -761,7 +761,7 @@ let reduce_unary psys =
let is_unary_equation (cstr, prf) =
if cstr.op == Eq then
Vect.find
- (fun v n -> if n =/ Q.one || n =/ Q.neg_one then Some v else None)
+ (fun v n -> if n =/ Q.one || n =/ Q.minus_one then Some v else None)
cstr.coeffs
else None
in
diff --git a/plugins/micromega/coq_micromega.ml b/plugins/micromega/coq_micromega.ml
index 44bc20e55f..d2c49c4432 100644
--- a/plugins/micromega/coq_micromega.ml
+++ b/plugins/micromega/coq_micromega.ml
@@ -2141,6 +2141,7 @@ let really_call_csdpcert :
List.fold_left Filename.concat (Envars.coqlib ())
["plugins"; "micromega"; "csdpcert" ^ Coq_config.exec_extension]
in
+ let cmdname = if Sys.file_exists cmdname then cmdname else "csdpcert" in
match (command cmdname [|cmdname|] (provername, poly) : csdp_certificate) with
| F str ->
if debug then Printf.fprintf stdout "really_call_csdpcert : %s\n" str;
diff --git a/plugins/micromega/dune b/plugins/micromega/dune
index 33ad3a0138..204125ab56 100644
--- a/plugins/micromega/dune
+++ b/plugins/micromega/dune
@@ -4,7 +4,7 @@
; be careful not to link the executable to the plugin!
(modules (:standard \ csdpcert g_zify zify))
(synopsis "Coq's micromega plugin")
- (libraries num coq.plugins.ltac))
+ (libraries coq.plugins.ltac))
(executable
(name csdpcert)
diff --git a/plugins/micromega/mfourier.ml b/plugins/micromega/mfourier.ml
index 3d1770a541..f4d17b8940 100644
--- a/plugins/micromega/mfourier.ml
+++ b/plugins/micromega/mfourier.ml
@@ -190,6 +190,7 @@ let system_list sys =
let add (v1, c1) (v2, c2) =
assert (c1 <>/ Q.zero && c2 <>/ Q.zero);
+ (* XXX Can use Q.inv now *)
let res = mul_add (Q.one // c1) v1 (Q.one // c2) v2 in
(res, count res)
@@ -569,7 +570,7 @@ module Fourier = struct
(* We add a dummy (fresh) variable for vector *)
let fresh = List.fold_left (fun fr c -> max fr (Vect.fresh c.coeffs)) 0 l in
let cstr =
- {coeffs = Vect.set fresh Q.neg_one vect; op = Eq; cst = Q.zero}
+ {coeffs = Vect.set fresh Q.minus_one vect; op = Eq; cst = Q.zero}
in
match solve fresh choose_equality_var choose_variable (cstr :: l) with
| Inr prf -> None (* This is an unsatisfiability proof *)
diff --git a/plugins/micromega/numCompat.ml b/plugins/micromega/numCompat.ml
index 4cb91ea520..02c4bab497 100644
--- a/plugins/micromega/numCompat.ml
+++ b/plugins/micromega/numCompat.ml
@@ -31,37 +31,24 @@ module type ZArith = sig
end
module Z = struct
- type t = Big_int.big_int
-
- open Big_int
-
- let zero = zero_big_int
- let one = unit_big_int
- let two = big_int_of_int 2
- let add = Big_int.add_big_int
- let sub = Big_int.sub_big_int
- let mul = Big_int.mult_big_int
- let div = Big_int.div_big_int
- let neg = Big_int.minus_big_int
- let sign = Big_int.sign_big_int
- let equal = eq_big_int
- let compare = compare_big_int
- let power_int = power_big_int_positive_int
- let quomod = quomod_big_int
+ (* Beware this only works fine in ZArith >= 1.10 due to
+ https://github.com/ocaml/Zarith/issues/58 *)
+ include Z
- let ppcm x y =
- let g = gcd_big_int x y in
- let x' = div_big_int x g in
- let y' = div_big_int y g in
- mult_big_int g (mult_big_int x' y')
-
- let gcd = gcd_big_int
+ (* Constants *)
+ let two = Z.of_int 2
+ let ten = Z.of_int 10
+ let power_int = Big_int_Z.power_big_int_positive_int
+ let quomod = Big_int_Z.quomod_big_int
- let lcm x y =
- if eq_big_int x zero && eq_big_int y zero then zero
- else abs_big_int (div_big_int (mult_big_int x y) (gcd x y))
+ (* zarith fails with division by zero if x == 0 && y == 0 *)
+ let lcm x y = if Z.equal x zero && Z.equal y zero then zero else Z.lcm x y
- let to_string = string_of_big_int
+ let ppcm x y =
+ let g = gcd x y in
+ let x' = Z.div x g in
+ let y' = Z.div y g in
+ Z.mul g (Z.mul x' y')
end
module type QArith = sig
@@ -74,7 +61,7 @@ module type QArith = sig
val one : t
val two : t
val ten : t
- val neg_one : t
+ val minus_one : t
module Notations : sig
val ( // ) : t -> t -> t
@@ -119,56 +106,64 @@ end
module Q : QArith with module Z = Z = struct
module Z = Z
- type t = Num.num
+ let pow_check_exp x y =
+ let z_res =
+ if y = 0 then Z.one
+ else if y > 0 then Z.pow x y
+ else (* s < 0 *)
+ Z.pow x (abs y)
+ in
+ let z_res = Q.of_bigint z_res in
+ if 0 <= y then z_res else Q.inv z_res
- open Num
+ include Q
- let of_int x = Int x
- let zero = Int 0
- let one = Int 1
- let two = Int 2
- let ten = Int 10
- let neg_one = Int (-1)
+ let two = Q.(of_int 2)
+ let ten = Q.(of_int 10)
module Notations = struct
- let ( // ) = div_num
- let ( +/ ) = add_num
- let ( -/ ) = sub_num
- let ( */ ) = mult_num
- let ( =/ ) = eq_num
- let ( <>/ ) = ( <>/ )
- let ( >/ ) = ( >/ )
- let ( >=/ ) = ( >=/ )
- let ( </ ) = ( </ )
- let ( <=/ ) = ( <=/ )
+ let ( // ) = Q.div
+ let ( +/ ) = Q.add
+ let ( -/ ) = Q.sub
+ let ( */ ) = Q.mul
+ let ( =/ ) = Q.equal
+ let ( <>/ ) x y = not (Q.equal x y)
+ let ( >/ ) = Q.gt
+ let ( >=/ ) = Q.geq
+ let ( </ ) = Q.lt
+ let ( <=/ ) = Q.leq
end
- let compare = compare_num
- let make x y = Big_int x // Big_int y
-
- let numdom r =
- let r' = Ratio.normalize_ratio (ratio_of_num r) in
- (Ratio.numerator_ratio r', Ratio.denominator_ratio r')
-
- let num x = numdom x |> fst
- let den x = numdom x |> snd
- let of_bigint x = Big_int x
- let to_bigint = big_int_of_num
- let neg = minus_num
-
- (* let inv = *)
- let max = max_num
- let min = min_num
- let sign = sign_num
- let abs = abs_num
- let mod_ = mod_num
- let floor = floor_num
- let ceiling = ceiling_num
- let round = round_num
- let pow2 n = power_num two (Int n)
- let pow10 n = power_num ten (Int n)
- let power x = power_num (Int x)
- let to_string = string_of_num
- let of_string = num_of_string
- let to_float = float_of_num
+ (* XXX: review / improve *)
+ let floorZ q : Z.t = Z.fdiv (num q) (den q)
+ let floor q : t = floorZ q |> Q.of_bigint
+ let ceiling q : t = Z.cdiv (Q.num q) (Q.den q) |> Q.of_bigint
+ let half = Q.make Z.one Z.two
+
+ (* We imitate Num's round which is to the nearest *)
+ let round q = floor (Q.add half q)
+
+ (* XXX: review / improve *)
+ let quo x y =
+ let s = sign y in
+ let res = floor (x / abs y) in
+ if Int.equal s (-1) then neg res else res
+
+ let mod_ x y = x - (y * quo x y)
+
+ (* XXX: review / improve *)
+ (* Note that Z.pow doesn't support negative exponents *)
+
+ let pow2 y = pow_check_exp Z.two y
+ let pow10 y = pow_check_exp Z.ten y
+
+ let power (x : int) (y : t) : t =
+ let y =
+ try Q.to_int y
+ with Z.Overflow ->
+ (* XXX: make doesn't link Pp / CErrors for csdpcert, that could be fixed *)
+ raise (Invalid_argument "[micromega] overflow in exponentiation")
+ (* CErrors.user_err (Pp.str "[micromega] overflow in exponentiation") *)
+ in
+ pow_check_exp (Z.of_int x) y
end
diff --git a/plugins/micromega/numCompat.mli b/plugins/micromega/numCompat.mli
index acc6be6ce0..0b4d52708f 100644
--- a/plugins/micromega/numCompat.mli
+++ b/plugins/micromega/numCompat.mli
@@ -25,8 +25,15 @@ module type ZArith = sig
val power_int : t -> int -> t
val quomod : t -> t -> t * t
val ppcm : t -> t -> t
+
+ (** [gcd x y] Greatest Common Divisor. Must always return a
+ positive number *)
val gcd : t -> t -> t
+
+ (** [lcm x y] Least Common Multiplier. Must always return a
+ positive number *)
val lcm : t -> t -> t
+
val to_string : t -> string
end
@@ -40,7 +47,9 @@ module type QArith = sig
val one : t
val two : t
val ten : t
- val neg_one : t
+
+ (** -1 constant *)
+ val minus_one : t
module Notations : sig
val ( // ) : t -> t -> t
diff --git a/plugins/micromega/polynomial.ml b/plugins/micromega/polynomial.ml
index afef41d67e..5c0aa9ef0d 100644
--- a/plugins/micromega/polynomial.ml
+++ b/plugins/micromega/polynomial.ml
@@ -156,7 +156,7 @@ let pp_mon o (m, i) =
if Monomial.is_const m then
if Q.zero =/ i then () else Printf.fprintf o "%s" (Q.to_string i)
else if Q.one =/ i then Monomial.pp o m
- else if Q.neg_one =/ i then Printf.fprintf o "-%a" Monomial.pp m
+ else if Q.minus_one =/ i then Printf.fprintf o "-%a" Monomial.pp m
else if Q.zero =/ i then ()
else Printf.fprintf o "%s*%a" (Q.to_string i) Monomial.pp m
@@ -912,7 +912,7 @@ module WithProof = struct
else
match o with
| Eq ->
- Some ((Vect.set 0 Q.neg_one Vect.null, Eq), ProofFormat.Gcd (g, prf))
+ Some ((Vect.set 0 Q.minus_one Vect.null, Eq), ProofFormat.Gcd (g, prf))
| Gt -> failwith "cutting_plane ignore strict constraints"
| Ge ->
(* This is a non-trivial common divisor *)
@@ -999,7 +999,7 @@ module WithProof = struct
| Some (c, p) -> Some (c, ProofFormat.simplify_prf_rule p)
let is_substitution strict ((p, o), prf) =
- let pred v = if strict then v =/ Q.one || v =/ Q.neg_one else true in
+ let pred v = if strict then v =/ Q.one || v =/ Q.minus_one else true in
match o with Eq -> LinPoly.search_linear pred p | _ -> None
let subst1 sys0 =
diff --git a/plugins/micromega/simplex.ml b/plugins/micromega/simplex.ml
index eaa26ded62..f59d65085a 100644
--- a/plugins/micromega/simplex.ml
+++ b/plugins/micromega/simplex.ml
@@ -247,8 +247,8 @@ let solve_column (c : var) (r : var) (e : Vect.t) : Vect.t =
let a = Vect.get c e in
if a =/ Q.zero then failwith "Cannot solve column"
else
- let a' = Q.neg_one // a in
- Vect.mul a' (Vect.set r Q.neg_one (Vect.set c Q.zero e))
+ let a' = Q.minus_one // a in
+ Vect.mul a' (Vect.set r Q.minus_one (Vect.set c Q.zero e))
(** [pivot_row r c e]
@param c is such that c = e
@@ -364,7 +364,8 @@ let push_real (opt : bool) (nw : var) (v : Vect.t) (rst : Restricted.t)
if n >=/ Q.zero then Sat (t', None)
else
let v' = safe_find "push_real" nw t' in
- Unsat (Vect.set nw Q.one (Vect.set 0 Q.zero (Vect.mul Q.neg_one v'))) )
+ Unsat (Vect.set nw Q.one (Vect.set 0 Q.zero (Vect.mul Q.minus_one v')))
+ )
(** One complication is that equalities needs some pre-processing.
*)
@@ -399,7 +400,7 @@ let eliminate_equalities (vr0 : var) (l : Polynomial.cstr list) =
elim (idx + 1) (vr + 1) (IMap.add vr (idx, true) vm) l ((vr, v) :: acc)
| Eq ->
let v1 = Vect.set 0 (Q.neg c.cst) c.coeffs in
- let v2 = Vect.mul Q.neg_one v1 in
+ let v2 = Vect.mul Q.minus_one v1 in
let vm = IMap.add vr (idx, true) (IMap.add (vr + 1) (idx, false) vm) in
elim (idx + 1) (vr + 2) vm l ((vr, v1) :: (vr + 1, v2) :: acc)
| Gt -> raise Strict )
diff --git a/plugins/micromega/sos.ml b/plugins/micromega/sos.ml
index 2b04bb80e2..aeb9d14555 100644
--- a/plugins/micromega/sos.ml
+++ b/plugins/micromega/sos.ml
@@ -80,7 +80,7 @@ let is_zero (d, v) = match v with Empty -> true | _ -> false
(* Vectors. Conventionally indexed 1..n. *)
(* ------------------------------------------------------------------------- *)
-let vector_0 n = ((n, undefined) : vector)
+let vector_0 n : vector = (n, undefined)
let dim (v : vector) = fst v
let vector_const c n =
@@ -99,7 +99,7 @@ let vector_of_list l =
(* Matrices; again rows and columns indexed from 1. *)
(* ------------------------------------------------------------------------- *)
-let matrix_0 (m, n) = (((m, n), undefined) : matrix)
+let matrix_0 (m, n) : matrix = ((m, n), undefined)
let dimensions (m : matrix) = fst m
let matrix_cmul c (m : matrix) =
@@ -107,7 +107,7 @@ let matrix_cmul c (m : matrix) =
if c =/ Q.zero then matrix_0 (i, j)
else ((i, j), mapf (fun x -> c */ x) (snd m))
-let matrix_neg (m : matrix) = ((dimensions m, mapf Q.neg (snd m)) : matrix)
+let matrix_neg (m : matrix) : matrix = (dimensions m, mapf Q.neg (snd m))
let matrix_add (m1 : matrix) (m2 : matrix) =
let d1 = dimensions m1 and d2 = dimensions m2 in
@@ -138,7 +138,7 @@ let diagonal (v : vector) =
(* Monomials. *)
(* ------------------------------------------------------------------------- *)
let monomial_1 = (undefined : monomial)
-let monomial_var x = (x |=> 1 : monomial)
+let monomial_var x : monomial = x |=> 1
let (monomial_mul : monomial -> monomial -> monomial) =
combine ( + ) (fun x -> false)
@@ -152,16 +152,16 @@ let monomial_variables m = dom m
(* ------------------------------------------------------------------------- *)
let poly_0 = (undefined : poly)
let poly_isconst (p : poly) = foldl (fun a m c -> m = monomial_1 && a) true p
-let poly_var x = (monomial_var x |=> Q.one : poly)
+let poly_var x : poly = monomial_var x |=> Q.one
let poly_const c = if c =/ Q.zero then poly_0 else monomial_1 |=> c
let poly_cmul c (p : poly) =
if c =/ Q.zero then poly_0 else mapf (fun x -> c */ x) p
-let poly_neg (p : poly) = (mapf Q.neg p : poly)
+let poly_neg (p : poly) : poly = mapf Q.neg p
-let poly_add (p1 : poly) (p2 : poly) =
- (combine ( +/ ) (fun x -> x =/ Q.zero) p1 p2 : poly)
+let poly_add (p1 : poly) (p2 : poly) : poly =
+ combine ( +/ ) (fun x -> x =/ Q.zero) p1 p2
let poly_sub p1 p2 = poly_add p1 (poly_neg p2)
@@ -576,7 +576,7 @@ let eliminate_all_equations one =
else
let v = choose_variable eq in
let a = apply eq v in
- let eq' = equation_cmul (Q.neg_one // a) (undefine v eq) in
+ let eq' = equation_cmul (Q.minus_one // a) (undefine v eq) in
let elim e =
let b = tryapplyd e v Q.zero in
if b =/ Q.zero then e
@@ -814,7 +814,7 @@ let bmatrix_add = combine ( +/ ) (fun x -> x =/ Q.zero)
let bmatrix_cmul c bm =
if c =/ Q.zero then undefined else mapf (fun x -> c */ x) bm
-let bmatrix_neg = bmatrix_cmul Q.neg_one
+let bmatrix_neg = bmatrix_cmul Q.minus_one
(* ------------------------------------------------------------------------- *)
(* Smash a block matrix into components. *)
@@ -943,7 +943,7 @@ let real_positivnullstellensatz_general linf d eqs leqs pol =
List.fold_right
(fun k -> List.nth pvs (k - 1) |-> element vec k)
(1 -- dim vec)
- ((0, 0, 0) |=> Q.neg_one)
+ ((0, 0, 0) |=> Q.minus_one)
in
let finalassigs =
foldl (fun a v e -> (v |-> equation_eval newassigs e) a) newassigs allassig
@@ -1166,7 +1166,7 @@ let sumofsquares_general_symmetry tool pol =
match cls with
| [] -> raise Sanity
| [h] -> acc
- | h :: t -> List.map (fun k -> (k |-> Q.neg_one) (h |=> Q.one)) t @ acc
+ | h :: t -> List.map (fun k -> (k |-> Q.minus_one) (h |=> Q.one)) t @ acc
in
List.fold_right mk_eq eqvcls []
in
@@ -1191,14 +1191,13 @@ let sumofsquares_general_symmetry tool pol =
let diagents =
end_itlist equation_add (List.map (fun i -> apply allassig (i, i)) (1 -- n))
in
- let mk_matrix v =
- ( ( (n, n)
- , foldl
- (fun m (i, j) ass ->
- let c = tryapplyd ass v Q.zero in
- if c =/ Q.zero then m else ((j, i) |-> c) (((i, j) |-> c) m))
- undefined allassig )
- : matrix )
+ let mk_matrix v : matrix =
+ ( (n, n)
+ , foldl
+ (fun m (i, j) ass ->
+ let c = tryapplyd ass v Q.zero in
+ if c =/ Q.zero then m else ((j, i) |-> c) (((i, j) |-> c) m))
+ undefined allassig )
in
let mats = List.map mk_matrix qvars
and obj =
diff --git a/plugins/micromega/vect.ml b/plugins/micromega/vect.ml
index 3e0b1f2cd9..4df32f2ba4 100644
--- a/plugins/micromega/vect.ml
+++ b/plugins/micromega/vect.ml
@@ -52,7 +52,7 @@ let pp_var_num pp_var o {var = v; coe = n} =
if Int.equal v 0 then
if Q.zero =/ n then () else Printf.fprintf o "%s" (Q.to_string n)
else if Q.one =/ n then pp_var o v
- else if Q.neg_one =/ n then Printf.fprintf o "-%a" pp_var v
+ else if Q.minus_one =/ n then Printf.fprintf o "-%a" pp_var v
else if Q.zero =/ n then ()
else Printf.fprintf o "%s*%a" (Q.to_string n) pp_var v
@@ -60,7 +60,7 @@ let pp_var_num_smt pp_var o {var = v; coe = n} =
if Int.equal v 0 then
if Q.zero =/ n then () else Printf.fprintf o "%s" (Q.to_string n)
else if Q.one =/ n then pp_var o v
- else if Q.neg_one =/ n then Printf.fprintf o "(- %a)" pp_var v
+ else if Q.minus_one =/ n then Printf.fprintf o "(- %a)" pp_var v
else if Q.zero =/ n then ()
else Printf.fprintf o "(* %s %a)" (Q.to_string n) pp_var v
diff --git a/plugins/ssr/ssrparser.mlg b/plugins/ssr/ssrparser.mlg
index 60af804c1b..98439e27a1 100644
--- a/plugins/ssr/ssrparser.mlg
+++ b/plugins/ssr/ssrparser.mlg
@@ -219,20 +219,20 @@ let test_ssrslashnum b1 b2 _ strm =
match Util.stream_nth 0 strm with
| Tok.KEYWORD "/" ->
(match Util.stream_nth 1 strm with
- | Tok.NUMERAL _ when b1 ->
+ | Tok.NUMBER _ when b1 ->
(match Util.stream_nth 2 strm with
| Tok.KEYWORD "=" | Tok.KEYWORD "/=" when not b2 -> ()
| Tok.KEYWORD "/" ->
if not b2 then () else begin
match Util.stream_nth 3 strm with
- | Tok.NUMERAL _ -> ()
+ | Tok.NUMBER _ -> ()
| _ -> raise Stream.Failure
end
| _ -> raise Stream.Failure)
| Tok.KEYWORD "/" when not b1 ->
(match Util.stream_nth 2 strm with
| Tok.KEYWORD "=" when not b2 -> ()
- | Tok.NUMERAL _ when b2 ->
+ | Tok.NUMBER _ when b2 ->
(match Util.stream_nth 3 strm with
| Tok.KEYWORD "=" -> ()
| _ -> raise Stream.Failure)
@@ -243,7 +243,7 @@ let test_ssrslashnum b1 b2 _ strm =
| Tok.KEYWORD "//" when not b1 ->
(match Util.stream_nth 1 strm with
| Tok.KEYWORD "=" when not b2 -> ()
- | Tok.NUMERAL _ when b2 ->
+ | Tok.NUMBER _ when b2 ->
(match Util.stream_nth 2 strm with
| Tok.KEYWORD "=" -> ()
| _ -> raise Stream.Failure)
diff --git a/plugins/syntax/g_numeral.mlg b/plugins/syntax/g_numeral.mlg
index e66dbe17b2..c030925ea9 100644
--- a/plugins/syntax/g_numeral.mlg
+++ b/plugins/syntax/g_numeral.mlg
@@ -24,6 +24,11 @@ let pr_numnot_option = function
| Warning n -> str "(warning after " ++ NumTok.UnsignedNat.print n ++ str ")"
| Abstract n -> str "(abstract after " ++ NumTok.UnsignedNat.print n ++ str ")"
+let warn_deprecated_numeral_notation =
+ CWarnings.create ~name:"numeral-notation" ~category:"deprecated"
+ (fun () ->
+ strbrk "Numeral Notation is deprecated, please use Number Notation instead.")
+
}
VERNAC ARGUMENT EXTEND numnotoption
@@ -34,8 +39,13 @@ VERNAC ARGUMENT EXTEND numnotoption
END
VERNAC COMMAND EXTEND NumeralNotation CLASSIFIED AS SIDEFF
- | #[ locality = Attributes.locality; ] [ "Numeral" "Notation" reference(ty) reference(f) reference(g) ":"
+ | #[ locality = Attributes.locality; ] [ "Number" "Notation" reference(ty) reference(f) reference(g) ":"
ident(sc) numnotoption(o) ] ->
{ vernac_numeral_notation (Locality.make_module_locality locality) ty f g (Id.to_string sc) o }
+ | #[ locality = Attributes.locality; ] [ "Numeral" "Notation" reference(ty) reference(f) reference(g) ":"
+ ident(sc) numnotoption(o) ] ->
+
+ { warn_deprecated_numeral_notation ();
+ vernac_numeral_notation (Locality.make_module_locality locality) ty f g (Id.to_string sc) o }
END
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index 489e8de602..61453ff214 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -40,7 +40,7 @@ let default_transparent_state env = TransparentState.full
let default_flags_of ?(subterm_ts=TransparentState.empty) ts =
{ modulo_betaiota = true;
open_ts = ts; closed_ts = ts; subterm_ts;
- frozen_evars = Evar.Set.empty; with_cs = true;
+ allowed_evars = AllowedEvars.all; with_cs = true;
allow_K_at_toplevel = true }
let default_flags env =
@@ -118,8 +118,6 @@ type flex_kind_of_term =
| MaybeFlexible of EConstr.t (* reducible but not necessarily reduced *)
| Flexible of EConstr.existential
-let is_frozen flags (evk, _) = Evar.Set.mem evk flags.frozen_evars
-
let flex_kind_of_term flags env evd c sk =
match EConstr.kind evd c with
| LetIn _ | Rel _ | Const _ | Var _ | Proj _ ->
@@ -128,8 +126,7 @@ let flex_kind_of_term flags env evd c sk =
if flags.modulo_betaiota then MaybeFlexible c
else Rigid
| Evar ev ->
- if is_frozen flags ev then Rigid
- else Flexible ev
+ if is_evar_allowed flags (fst ev) then Flexible ev else Rigid
| Lambda _ | Prod _ | Sort _ | Ind _ | Construct _ | CoFix _ | Int _ | Float _ | Array _ -> Rigid
| Meta _ -> Rigid
| Fix _ -> Rigid (* happens when the fixpoint is partially applied *)
@@ -192,11 +189,11 @@ let occur_rigidly flags env evd (evk,_) t =
| Rigid _ as res -> res
| Normal b -> Reducible
| Reducible -> Reducible)
- | Evar (evk',l as ev) ->
+ | Evar (evk',l) ->
if Evar.equal evk evk' then Rigid true
- else if is_frozen flags ev then
- Rigid (List.exists (fun x -> rigid_normal_occ (aux x)) l)
- else Reducible
+ else if is_evar_allowed flags evk' then
+ Reducible
+ else Rigid (List.exists (fun x -> rigid_normal_occ (aux x)) l)
| Cast (p, _, _) -> aux p
| Lambda (na, t, b) -> aux b
| LetIn (na, _, _, b) -> aux b
@@ -458,7 +455,7 @@ let conv_fun f flags on_types =
let typefn env evd pbty term1 term2 =
let flags = { (default_flags env) with
with_cs = flags.with_cs;
- frozen_evars = flags.frozen_evars }
+ allowed_evars = flags.allowed_evars }
in f flags env evd pbty term1 term2
in
let termfn env evd pbty term1 term2 =
@@ -500,7 +497,7 @@ let rec evar_conv_x flags env evd pbty term1 term2 =
(whd_nored_state env evd (term2,Stack.empty))
in
begin match EConstr.kind evd term1, EConstr.kind evd term2 with
- | Evar ev, _ when Evd.is_undefined evd (fst ev) && not (is_frozen flags ev) ->
+ | Evar ev, _ when Evd.is_undefined evd (fst ev) && is_evar_allowed flags (fst ev) ->
(match solve_simple_eqn (conv_fun evar_conv_x) flags env evd
(position_problem true pbty,ev,term2) with
| UnifFailure (_,(OccurCheck _ | NotClean _)) ->
@@ -511,7 +508,7 @@ let rec evar_conv_x flags env evd pbty term1 term2 =
Miller patterns *)
default ()
| x -> x)
- | _, Evar ev when Evd.is_undefined evd (fst ev) && not (is_frozen flags ev) ->
+ | _, Evar ev when Evd.is_undefined evd (fst ev) && is_evar_allowed flags (fst ev) ->
(match solve_simple_eqn (conv_fun evar_conv_x) flags env evd
(position_problem false pbty,ev,term1) with
| UnifFailure (_, (OccurCheck _ | NotClean _)) ->
@@ -1206,14 +1203,14 @@ type occurrences_selection =
let default_occurrence_selection = Unspecified Abstraction.Imitate
-let default_occurrence_test ~frozen_evars ts _ origsigma _ env sigma _ c pat =
- let flags = { (default_flags_of ~subterm_ts:ts ts) with frozen_evars } in
+let default_occurrence_test ~allowed_evars ts _ origsigma _ env sigma _ c pat =
+ let flags = { (default_flags_of ~subterm_ts:ts ts) with allowed_evars } in
match evar_conv_x flags env sigma CONV c pat with
| Success sigma -> true, sigma
| UnifFailure _ -> false, sigma
-let default_occurrences_selection ?(frozen_evars=Evar.Set.empty) ts n =
- (default_occurrence_test ~frozen_evars ts,
+let default_occurrences_selection ?(allowed_evars=AllowedEvars.all) ts n =
+ (default_occurrence_test ~allowed_evars ts,
List.init n (fun _ -> default_occurrence_selection))
let apply_on_subterm env evd fixedref f test c t =
@@ -1554,7 +1551,7 @@ let second_order_matching_with_args flags env evd with_ho pbty ev l t =
if with_ho then
let evd,ev = evar_absorb_arguments env evd ev (Array.to_list l) in
let argoccs = default_evar_selection flags evd ev in
- let test = default_occurrence_test ~frozen_evars:flags.frozen_evars flags.subterm_ts in
+ let test = default_occurrence_test ~allowed_evars:flags.allowed_evars flags.subterm_ts in
let evd, b =
try second_order_matching flags env evd ev (test,argoccs) t
with PretypeError (_, _, NoOccurrenceFound _) -> evd, false
@@ -1582,8 +1579,8 @@ let apply_conversion_problem_heuristic flags env evd with_ho pbty t1 t2 =
Termops.Internal.print_constr_env env evd t2 ++ cut ())) in
let app_empty = Array.is_empty l1 && Array.is_empty l2 in
match EConstr.kind evd term1, EConstr.kind evd term2 with
- | Evar (evk1,args1 as ev1), (Rel _|Var _) when app_empty
- && not (is_frozen flags ev1)
+ | Evar (evk1,args1), (Rel _|Var _) when app_empty
+ && is_evar_allowed flags evk1
&& List.for_all (fun a -> EConstr.eq_constr evd a term2 || isEvar evd a)
(remove_instance_local_defs evd evk1 args1) ->
(* The typical kind of constraint coming from pattern-matching return
@@ -1593,8 +1590,8 @@ let apply_conversion_problem_heuristic flags env evd with_ho pbty t1 t2 =
| None ->
let reason = ProblemBeyondCapabilities in
UnifFailure (evd, CannotSolveConstraint ((pbty,env,t1,t2),reason)))
- | (Rel _|Var _), Evar (evk2,args2 as ev2) when app_empty
- && not (is_frozen flags ev2)
+ | (Rel _|Var _), Evar (evk2,args2) when app_empty
+ && is_evar_allowed flags evk2
&& List.for_all (fun a -> EConstr.eq_constr evd a term1 || isEvar evd a)
(remove_instance_local_defs evd evk2 args2) ->
(* The typical kind of constraint coming from pattern-matching return
@@ -1620,24 +1617,24 @@ let apply_conversion_problem_heuristic flags env evd with_ho pbty t1 t2 =
(evar_define evar_unify flags ~choose:true)
evar_unify flags env evd
(position_problem true pbty) ev1 ev2)
- | Evar ev1,_ when not (is_frozen flags ev1) && Array.length l1 <= Array.length l2 ->
+ | Evar ev1,_ when is_evar_allowed flags (fst ev1) && Array.length l1 <= Array.length l2 ->
(* On "?n t1 .. tn = u u1 .. u(n+p)", try first-order unification *)
(* and otherwise second-order matching *)
ise_try evd
[(fun evd -> first_order_unification flags env evd (ev1,l1) appr2);
(fun evd ->
second_order_matching_with_args flags env evd with_ho pbty ev1 l1 t2)]
- | _,Evar ev2 when not (is_frozen flags ev2) && Array.length l2 <= Array.length l1 ->
+ | _,Evar ev2 when is_evar_allowed flags (fst ev2) && Array.length l2 <= Array.length l1 ->
(* On "u u1 .. u(n+p) = ?n t1 .. tn", try first-order unification *)
(* and otherwise second-order matching *)
ise_try evd
[(fun evd -> first_order_unification flags env evd (ev2,l2) appr1);
(fun evd ->
second_order_matching_with_args flags env evd with_ho pbty ev2 l2 t1)]
- | Evar ev1,_ when not (is_frozen flags ev1) ->
+ | Evar ev1,_ when is_evar_allowed flags (fst ev1) ->
(* Try second-order pattern-matching *)
second_order_matching_with_args flags env evd with_ho pbty ev1 l1 t2
- | _,Evar ev2 when not (is_frozen flags ev2) ->
+ | _,Evar ev2 when is_evar_allowed flags (fst ev2) ->
(* Try second-order pattern-matching *)
second_order_matching_with_args flags env evd with_ho pbty ev2 l2 t1
| _ ->
diff --git a/pretyping/evarconv.mli b/pretyping/evarconv.mli
index 767a173131..a5a8d1f916 100644
--- a/pretyping/evarconv.mli
+++ b/pretyping/evarconv.mli
@@ -105,11 +105,11 @@ val default_occurrence_selection : occurrence_selection
type occurrences_selection =
occurrence_match_test * occurrence_selection list
-val default_occurrence_test : frozen_evars:Evar.Set.t -> TransparentState.t -> occurrence_match_test
+val default_occurrence_test : allowed_evars:Evarsolve.AllowedEvars.t -> TransparentState.t -> occurrence_match_test
(** [default_occurrence_selection n]
Gives the default test and occurrences for [n] arguments *)
-val default_occurrences_selection : ?frozen_evars:Evar.Set.t (* By default, none *) ->
+val default_occurrences_selection : ?allowed_evars:Evarsolve.AllowedEvars.t (* By default, all *) ->
TransparentState.t -> int -> occurrences_selection
val second_order_matching : unify_flags -> env -> evar_map ->
diff --git a/pretyping/evarsolve.ml b/pretyping/evarsolve.ml
index 989fb05c3d..4d5715a391 100644
--- a/pretyping/evarsolve.ml
+++ b/pretyping/evarsolve.ml
@@ -25,14 +25,43 @@ open Reductionops
open Evarutil
open Pretype_errors
+module AllowedEvars = struct
+
+ type t =
+ | AllowAll
+ | AllowFun of (Evar.t -> bool) * Evar.Set.t
+
+ let mem allowed evk =
+ match allowed with
+ | AllowAll -> true
+ | AllowFun (f,except) -> f evk && not (Evar.Set.mem evk except)
+
+ let remove evk = function
+ | AllowAll -> AllowFun ((fun _ -> true), Evar.Set.singleton evk)
+ | AllowFun (f,except) -> AllowFun (f, Evar.Set.add evk except)
+
+ let all = AllowAll
+
+ let except evars =
+ AllowFun ((fun _ -> true), evars)
+
+ let from_pred f =
+ AllowFun (f, Evar.Set.empty)
+
+end
+
type unify_flags = {
modulo_betaiota: bool;
open_ts : TransparentState.t;
closed_ts : TransparentState.t;
subterm_ts : TransparentState.t;
- frozen_evars : Evar.Set.t;
+ allowed_evars : AllowedEvars.t;
allow_K_at_toplevel : bool;
- with_cs : bool }
+ with_cs : bool
+}
+
+let is_evar_allowed flags evk =
+ AllowedEvars.mem flags.allowed_evars evk
type unification_kind =
| TypeUnification
@@ -1307,24 +1336,24 @@ let preferred_orientation evd evk1 evk2 =
let solve_evar_evar_aux force f unify flags env evd pbty (evk1,args1 as ev1) (evk2,args2 as ev2) =
let aliases = make_alias_map env evd in
- let frozen_ev1 = Evar.Set.mem evk1 flags.frozen_evars in
- let frozen_ev2 = Evar.Set.mem evk2 flags.frozen_evars in
+ let allowed_ev1 = is_evar_allowed flags evk1 in
+ let allowed_ev2 = is_evar_allowed flags evk2 in
if preferred_orientation evd evk1 evk2 then
- try if not frozen_ev1 then
+ try if allowed_ev1 then
solve_evar_evar_l2r force f unify flags env evd aliases (opp_problem pbty) ev2 ev1
else raise (CannotProject (evd,ev2))
with CannotProject (evd,ev2) ->
- try if not frozen_ev2 then
+ try if allowed_ev2 then
solve_evar_evar_l2r force f unify flags env evd aliases pbty ev1 ev2
else raise (CannotProject (evd,ev1))
with CannotProject (evd,ev1) ->
add_conv_oriented_pb ~tail:true (pbty,env,mkEvar ev1,mkEvar ev2) evd
else
- try if not frozen_ev2 then
+ try if allowed_ev2 then
solve_evar_evar_l2r force f unify flags env evd aliases pbty ev1 ev2
else raise (CannotProject (evd,ev1))
with CannotProject (evd,ev1) ->
- try if not frozen_ev1 then
+ try if allowed_ev1 then
solve_evar_evar_l2r force f unify flags env evd aliases (opp_problem pbty) ev2 ev1
else raise (CannotProject (evd,ev2))
with CannotProject (evd,ev2) ->
@@ -1390,15 +1419,15 @@ let solve_refl ?(can_drop=false) unify flags env evd pbty evk argsv1 argsv2 =
let candidates = filter_candidates evd evk untypedfilter NoUpdate in
let filter = closure_of_filter evd evk untypedfilter in
let evd',ev1 = restrict_applied_evar evd (evk,argsv1) filter candidates in
- let frozen = Evar.Set.mem evk flags.frozen_evars in
- if Evar.equal (fst ev1) evk && (frozen || can_drop) then
+ let allowed = is_evar_allowed flags evk in
+ if Evar.equal (fst ev1) evk && (not allowed || can_drop) then
(* No refinement needed *) evd'
else
(* either progress, or not allowed to drop, e.g. to preserve possibly *)
(* informative equations such as ?e[x:=?y]=?e[x:=?y'] where we don't know *)
(* if e can depend on x until ?y is not resolved, or, conversely, we *)
(* don't know if ?y has to be unified with ?y, until e is resolved *)
- if frozen then
+ if not allowed then
(* We cannot prune a frozen evar *)
add_conv_oriented_pb (pbty,env,mkEvar (evk, argsv1),mkEvar (evk,argsv2)) evd
else
@@ -1455,7 +1484,8 @@ let occur_evar_upto_types sigma n c =
let instantiate_evar unify flags env evd evk body =
(* Check instance freezing the evar to be defined, as
checking could involve the same evar definition problem again otherwise *)
- let flags = { flags with frozen_evars = Evar.Set.add evk flags.frozen_evars } in
+ let allowed_evars = AllowedEvars.remove evk flags.allowed_evars in
+ let flags = { flags with allowed_evars } in
let evd' = check_evar_instance unify flags env evd evk body in
Evd.define evk body evd'
diff --git a/pretyping/evarsolve.mli b/pretyping/evarsolve.mli
index 3fb80432ad..8ff2d7fc63 100644
--- a/pretyping/evarsolve.mli
+++ b/pretyping/evarsolve.mli
@@ -16,6 +16,28 @@ type alias
val of_alias : alias -> EConstr.t
+module AllowedEvars : sig
+
+ type t
+ (** Represents the set of evars that can be defined by the pretyper *)
+
+ val all : t
+ (** All evars can be defined *)
+
+ val mem : t -> Evar.t -> bool
+ (** [mem allowed evk] is true iff evk can be defined *)
+
+ val from_pred : (Evar.t -> bool) -> t
+ (** [from_pred p] means evars satisfying p can be defined *)
+
+ val except : Evar.Set.t -> t
+ (** [except evars] means all evars can be defined except the ones in [evars] *)
+
+ val remove : Evar.t -> t -> t
+ (** [remove evk allowed] removes [evk] from the set of evars allowed by [allowed] *)
+
+end
+
type unify_flags = {
modulo_betaiota : bool;
(* Enable beta-iota reductions during unification *)
@@ -26,8 +48,8 @@ type unify_flags = {
subterm_ts : TransparentState.t;
(* Enable delta reduction according to subterm_ts for selection of subterms during higher-order
unifications. *)
- frozen_evars : Evar.Set.t;
- (* Frozen evars are treated like rigid variables during unification: they can not be instantiated. *)
+ allowed_evars : AllowedEvars.t;
+ (* Disallowed evars are treated like rigid variables during unification: they can not be instantiated. *)
allow_K_at_toplevel : bool;
(* During higher-order unifications, allow to produce K-redexes: i.e. to produce
an abstraction for an unused argument *)
@@ -41,6 +63,8 @@ type unification_result =
val is_success : unification_result -> bool
+val is_evar_allowed : unify_flags -> Evar.t -> bool
+
(** Replace the vars and rels that are aliases to other vars and rels by
their representative that is most ancient in the context *)
val expand_vars_in_term : env -> evar_map -> constr -> constr
diff --git a/pretyping/unification.ml b/pretyping/unification.ml
index a26c981cb9..207a03d80f 100644
--- a/pretyping/unification.ml
+++ b/pretyping/unification.ml
@@ -252,10 +252,6 @@ let unify_r2l x = x
let sort_eqns = unify_r2l
*)
-type allowed_evars =
-| AllowAll
-| AllowFun of (Evar.t -> bool)
-
type core_unify_flags = {
modulo_conv_on_closed_terms : TransparentState.t option;
(* What this flag controls was activated with all constants transparent, *)
@@ -289,7 +285,7 @@ type core_unify_flags = {
(* This allowed for instance to unify "forall x:?A, ?B x" with "A' -> B'" *)
(* when ?B is a Meta. *)
- allowed_evars : allowed_evars;
+ allowed_evars : AllowedEvars.t;
(* Evars that are allowed to be instantiated *)
(* Useful e.g. for autorewrite *)
@@ -341,7 +337,7 @@ let default_core_unify_flags () =
check_applied_meta_types = true;
use_pattern_unification = true;
use_meta_bound_pattern_unification = true;
- allowed_evars = AllowAll;
+ allowed_evars = AllowedEvars.all;
restrict_conv_on_strict_subterms = false;
modulo_betaiota = true;
modulo_eta = true;
@@ -421,7 +417,7 @@ let default_no_delta_unify_flags ts =
let allow_new_evars sigma =
let undefined = Evd.undefined_map sigma in
- AllowFun (fun evk -> not (Evar.Map.mem evk undefined))
+ AllowedEvars.from_pred (fun evk -> not (Evar.Map.mem evk undefined))
(* Default flags for looking for subterms in elimination tactics *)
(* Not used in practice at the current date, to the exception of *)
@@ -604,9 +600,8 @@ let do_reduce ts (env, nb) sigma c =
Stack.zip sigma (whd_betaiota_deltazeta_for_iota_state
ts env sigma (c, Stack.empty))
-let is_evar_allowed flags evk = match flags.allowed_evars with
-| AllowAll -> true
-| AllowFun f -> f evk
+let is_evar_allowed flags evk =
+ AllowedEvars.mem flags.allowed_evars evk
let isAllowedEvar sigma flags c = match EConstr.kind sigma c with
| Evar (evk,_) -> is_evar_allowed flags evk
diff --git a/pretyping/unification.mli b/pretyping/unification.mli
index f9a969a253..5462e09359 100644
--- a/pretyping/unification.mli
+++ b/pretyping/unification.mli
@@ -13,10 +13,6 @@ open EConstr
open Environ
open Evd
-type allowed_evars =
-| AllowAll
-| AllowFun of (Evar.t -> bool)
-
type core_unify_flags = {
modulo_conv_on_closed_terms : TransparentState.t option;
use_metas_eagerly_in_conv_on_closed_terms : bool;
@@ -26,7 +22,7 @@ type core_unify_flags = {
check_applied_meta_types : bool;
use_pattern_unification : bool;
use_meta_bound_pattern_unification : bool;
- allowed_evars : allowed_evars;
+ allowed_evars : Evarsolve.AllowedEvars.t;
restrict_conv_on_strict_subterms : bool;
modulo_betaiota : bool;
modulo_eta : bool;
diff --git a/proofs/clenv.ml b/proofs/clenv.ml
index db76d08736..31bc698830 100644
--- a/proofs/clenv.ml
+++ b/proofs/clenv.ml
@@ -618,9 +618,6 @@ let clenv_cast_meta clenv =
in
crec
-let clenv_value_cast_meta clenv =
- clenv_cast_meta clenv (clenv_value clenv)
-
let clenv_pose_dependent_evars ?(with_evars=false) clenv =
let dep_mvs = clenv_dependent clenv in
let env, sigma = clenv.env, clenv.evd in
@@ -673,7 +670,7 @@ let fail_quick_core_unif_flags = {
check_applied_meta_types = false;
use_pattern_unification = false;
use_meta_bound_pattern_unification = true; (* ? *)
- allowed_evars = AllowAll;
+ allowed_evars = Evarsolve.AllowedEvars.all;
restrict_conv_on_strict_subterms = false; (* ? *)
modulo_betaiota = false;
modulo_eta = true;
@@ -716,12 +713,6 @@ let make_clenv_binding_gen hyps_only n env sigma (c,t) = function
| NoBindings ->
mk_clenv_from_env env sigma n (c,t)
-let make_clenv_binding_env_apply env sigma n =
- make_clenv_binding_gen true n env sigma
-
-let make_clenv_binding_env env sigma =
- make_clenv_binding_gen false None env sigma
-
let make_clenv_binding_apply env sigma n = make_clenv_binding_gen true n env sigma
let make_clenv_binding env sigma = make_clenv_binding_gen false None env sigma
diff --git a/proofs/clenv.mli b/proofs/clenv.mli
index 43e808dac7..a72c8c5e1f 100644
--- a/proofs/clenv.mli
+++ b/proofs/clenv.mli
@@ -75,17 +75,10 @@ val clenv_unify_meta_types : ?flags:unify_flags -> clausenv -> clausenv
(** the arity of the lemma is fixed
the optional int tells how many prods of the lemma have to be used
use all of them if None *)
-val make_clenv_binding_env_apply :
- env -> evar_map -> int option -> EConstr.constr * EConstr.constr -> constr bindings ->
- clausenv
-
val make_clenv_binding_apply :
env -> evar_map -> int option -> EConstr.constr * EConstr.constr -> constr bindings ->
clausenv
-val make_clenv_binding_env :
- env -> evar_map -> EConstr.constr * EConstr.constr -> constr bindings -> clausenv
-
val make_clenv_binding :
env -> evar_map -> EConstr.constr * EConstr.constr -> constr bindings -> clausenv
@@ -99,7 +92,6 @@ val unify : ?flags:unify_flags -> constr -> unit Proofview.tactic
val res_pf : ?with_evars:bool -> ?with_classes:bool -> ?flags:unify_flags -> clausenv -> unit Proofview.tactic
val clenv_pose_dependent_evars : ?with_evars:bool -> clausenv -> clausenv
-val clenv_value_cast_meta : clausenv -> constr
(** {6 Pretty-print (debug only) } *)
val pr_clenv : clausenv -> Pp.t
diff --git a/proofs/refine.ml b/proofs/refine.ml
index dcff5e2b6c..ac410a958f 100644
--- a/proofs/refine.ml
+++ b/proofs/refine.ml
@@ -75,6 +75,8 @@ let generic_refine ~typecheck f gl =
let future_goals, sigma = Evd.pop_future_goals sigma in
(* Select the goals *)
let future_goals = Evd.FutureGoals.map_filter (Proofview.Unsafe.advance sigma) future_goals in
+ let shelf = Evd.shelf sigma in
+ let future_goals = Evd.FutureGoals.filter (fun ev -> not @@ List.mem ev shelf) future_goals in
(* Proceed to the refinement *)
let sigma = match Proofview.Unsafe.advance sigma self with
| None ->
diff --git a/tactics/auto.ml b/tactics/auto.ml
index 784322679f..369508c2a3 100644
--- a/tactics/auto.ml
+++ b/tactics/auto.ml
@@ -47,7 +47,7 @@ let auto_core_unif_flags_of st1 st2 = {
check_applied_meta_types = false;
use_pattern_unification = false;
use_meta_bound_pattern_unification = true;
- allowed_evars = AllowAll;
+ allowed_evars = Evarsolve.AllowedEvars.all;
restrict_conv_on_strict_subterms = false; (* Compat *)
modulo_betaiota = false;
modulo_eta = true;
diff --git a/tactics/btermdn.ml b/tactics/btermdn.ml
index bacb5a7b8f..f721e9956b 100644
--- a/tactics/btermdn.ml
+++ b/tactics/btermdn.ml
@@ -186,7 +186,5 @@ struct
(fun dn t ->
Dn.lookup dn (bounded_constr_val_discr_st env sigma st) (t,!dnet_depth))
- let app f dn = Dn.app f dn
-
end
diff --git a/tactics/btermdn.mli b/tactics/btermdn.mli
index ab201a1872..01d68a8045 100644
--- a/tactics/btermdn.mli
+++ b/tactics/btermdn.mli
@@ -38,7 +38,6 @@ sig
val rmv : t -> pattern -> Z.t -> t
val lookup : Environ.env -> Evd.evar_map -> TransparentState.t option -> t -> EConstr.constr -> Z.t list
- val app : (Z.t -> unit) -> t -> unit
end
val dnet_depth : int ref
diff --git a/tactics/class_tactics.ml b/tactics/class_tactics.ml
index d969dea19e..96cbbf0ba8 100644
--- a/tactics/class_tactics.ml
+++ b/tactics/class_tactics.ml
@@ -134,7 +134,7 @@ let auto_core_unif_flags st allowed_evars = {
modulo_eta = false;
}
-let auto_unif_flags ?(allowed_evars = AllowAll) st =
+let auto_unif_flags ?(allowed_evars = Evarsolve.AllowedEvars.all) st =
let fl = auto_core_unif_flags st allowed_evars in
{ core_unify_flags = fl;
merge_unify_flags = fl;
@@ -307,10 +307,10 @@ and e_my_find_search db_list local_db secvars hdc complete only_classes env sigm
if cl.cl_strict then
let undefined = lazy (Evarutil.undefined_evars_of_term sigma concl) in
let allowed evk = not (Evar.Set.mem evk (Lazy.force undefined)) in
- AllowFun allowed
- else AllowAll
- | _ -> AllowAll
- with e when CErrors.noncritical e -> AllowAll
+ Evarsolve.AllowedEvars.from_pred allowed
+ else Evarsolve.AllowedEvars.all
+ | _ -> Evarsolve.AllowedEvars.all
+ with e when CErrors.noncritical e -> Evarsolve.AllowedEvars.all
in
let tac_of_hint =
fun (flags, h) ->
diff --git a/tactics/dn.ml b/tactics/dn.ml
index 07eb49442a..c587f91e54 100644
--- a/tactics/dn.ml
+++ b/tactics/dn.ml
@@ -62,10 +62,10 @@ prefix ordering, [dna] is the function returning the main node of a pattern *)
pathrec []
let tm_of tm lbl =
- try [Trie.next tm lbl, true] with Not_found -> []
+ try [Trie.next tm lbl] with Not_found -> []
let rec skip_arg n tm =
- if Int.equal n 0 then [tm, true]
+ if Int.equal n 0 then [tm]
else
let labels = Trie.labels tm in
let map lbl = match lbl with
@@ -73,23 +73,19 @@ prefix ordering, [dna] is the function returning the main node of a pattern *)
| Some (_, m) ->
skip_arg (pred n + m) (Trie.next tm lbl)
in
- List.flatten (List.map map labels)
+ List.map_append map labels
let lookup tm dna t =
let rec lookrec t tm =
match dna t with
| Nothing -> tm_of tm None
| Label(lbl,v) ->
- tm_of tm None@
- (List.fold_left
- (fun l c ->
- List.flatten(List.map (fun (tm, b) ->
- if b then lookrec c tm
- else [tm,b]) l))
- (tm_of tm (Some(lbl,List.length v))) v)
+ let fold accu c = List.map_append (fun tm -> lookrec c tm) accu in
+ tm_of tm None @
+ (List.fold_left fold (tm_of tm (Some (lbl, List.length v))) v)
| Everything -> skip_arg 1 tm
in
- List.flatten (List.map (fun (tm,b) -> ZSet.elements (Trie.get tm)) (lookrec t tm))
+ List.map_append (fun tm -> ZSet.elements (Trie.get tm)) (lookrec t tm)
let pattern dna pat = path_of dna pat
@@ -99,7 +95,5 @@ prefix ordering, [dna] is the function returning the main node of a pattern *)
let rmv tm p inf =
Trie.remove p (ZSet.singleton inf) tm
- let app f tm = Trie.iter (fun _ p -> ZSet.iter f p) tm
-
end
diff --git a/tactics/dn.mli b/tactics/dn.mli
index 287aa2b257..85f9ef6dfb 100644
--- a/tactics/dn.mli
+++ b/tactics/dn.mli
@@ -38,6 +38,4 @@ sig
val lookup : t -> 'term lookup_fun -> 'term
-> Z.t list
- val app : (Z.t -> unit) -> t -> unit
-
end
diff --git a/tactics/elim.ml b/tactics/elim.ml
index 852ad626e1..49437a2aef 100644
--- a/tactics/elim.ml
+++ b/tactics/elim.ml
@@ -22,7 +22,6 @@ open Tactics
open Proofview.Notations
type branch_args = {
- ity : pinductive; (* the type we were eliminating on *)
branchnum : int; (* the branch number *)
nassums : int; (* number of assumptions/letin to be introduced *)
branchsign : bool list; (* the signature of the branch.
@@ -31,79 +30,72 @@ type branch_args = {
module NamedDecl = Context.Named.Declaration
+type elim_kind = Case of bool | Elim
+
(* Find the right elimination suffix corresponding to the sort of the goal *)
(* c should be of type A1->.. An->B with B an inductive definition *)
let general_elim_then_using mk_elim
- rec_flag allnames tac predicate ind (c, t) =
+ rec_flag allnames tac predicate (ind, u, args) id =
let open Pp in
Proofview.Goal.enter begin fun gl ->
- let sigma, elim = mk_elim ind gl in
- let ind = on_snd (fun u -> EInstance.kind sigma u) ind in
- Proofview.tclTHEN (Proofview.Unsafe.tclEVARS sigma)
- (Proofview.Goal.enter begin fun gl ->
- let indclause = mk_clenv_from gl (c, t) in
- (* applying elimination_scheme just a little modified *)
- let elimclause = mk_clenv_from gl (elim,Tacmach.New.pf_get_type_of gl elim) in
- let indmv =
- match EConstr.kind elimclause.evd (last_arg elimclause.evd elimclause.templval.Evd.rebus) with
- | Meta mv -> mv
- | _ -> CErrors.anomaly (str"elimination.")
- in
- let pmv =
- let p, _ = decompose_app elimclause.evd elimclause.templtyp.Evd.rebus in
- match EConstr.kind elimclause.evd p with
- | Meta p -> p
- | _ ->
- let name_elim =
- match EConstr.kind sigma elim with
- | Const _ | Var _ -> str " " ++ Printer.pr_econstr_env (pf_env gl) sigma elim
- | _ -> mt ()
- in
- CErrors.user_err ~hdr:"Tacticals.general_elim_then_using"
- (str "The elimination combinator " ++ name_elim ++ str " is unknown.")
- in
- let elimclause' = clenv_fchain ~with_univs:false indmv elimclause indclause in
- let branchsigns = Tacticals.compute_constructor_signatures ~rec_flag ind in
- let brnames = Tacticals.compute_induction_names false branchsigns allnames in
- let flags = Unification.elim_flags () in
- let elimclause' =
- match predicate with
- | None -> elimclause'
- | Some p -> clenv_unify ~flags Reduction.CONV (mkMeta pmv) p elimclause'
- in
- let after_tac i =
- let ba = { branchsign = branchsigns.(i);
- branchnames = brnames.(i);
- nassums = List.length branchsigns.(i);
- branchnum = i+1;
- ity = ind; }
+ let env = Proofview.Goal.env gl in
+ let sigma = Proofview.Goal.sigma gl in
+ let sort = Retyping.get_sort_family_of env sigma (Proofview.Goal.concl gl) in
+ let sigma, elim = match mk_elim with
+ | Case dep ->
+ let u = EInstance.kind sigma u in
+ let (sigma, r) = Indrec.build_case_analysis_scheme env sigma (ind, u) dep sort in
+ (sigma, EConstr.of_constr r)
+ | Elim ->
+ let gr = Indrec.lookup_eliminator env ind sort in
+ Evd.fresh_global env sigma gr
in
- tac ba
- in
- let branchtacs = List.init (Array.length branchsigns) after_tac in
- Proofview.tclTHEN
- (Clenv.res_pf ~flags elimclause')
- (Proofview.tclEXTEND [] tclIDTAC branchtacs)
- end) end
+ let indclause = mk_clenv_from_env env sigma None (mkVar id, mkApp (mkIndU (ind, u), args)) in
+ (* applying elimination_scheme just a little modified *)
+ let elimclause = mk_clenv_from_env env sigma None (elim, Retyping.get_type_of env sigma elim) in
+ let indmv =
+ match EConstr.kind elimclause.evd (last_arg elimclause.evd elimclause.templval.Evd.rebus) with
+ | Meta mv -> mv
+ | _ -> CErrors.anomaly (str"elimination.")
+ in
+ let pmv =
+ let p, _ = decompose_app elimclause.evd elimclause.templtyp.Evd.rebus in
+ match EConstr.kind elimclause.evd p with
+ | Meta p -> p
+ | _ ->
+ let name_elim =
+ match EConstr.kind sigma elim with
+ | Const _ | Var _ -> str " " ++ Printer.pr_econstr_env env sigma elim
+ | _ -> mt ()
+ in
+ CErrors.user_err ~hdr:"Tacticals.general_elim_then_using"
+ (str "The elimination combinator " ++ name_elim ++ str " is unknown.")
+ in
+ let elimclause' = clenv_fchain ~with_univs:false indmv elimclause indclause in
+ let branchsigns = Tacticals.compute_constructor_signatures ~rec_flag (ind, u) in
+ let brnames = Tacticals.compute_induction_names false branchsigns allnames in
+ let flags = Unification.elim_flags () in
+ let elimclause' =
+ match predicate with
+ | None -> elimclause'
+ | Some p -> clenv_unify ~flags Reduction.CONV (mkMeta pmv) p elimclause'
+ in
+ let after_tac i =
+ let ba = { branchsign = branchsigns.(i);
+ branchnames = brnames.(i);
+ nassums = List.length branchsigns.(i);
+ branchnum = i+1; }
+ in
+ tac ba
+ in
+ let branchtacs = List.init (Array.length branchsigns) after_tac in
+ Proofview.tclTHEN
+ (Clenv.res_pf ~flags elimclause')
+ (Proofview.tclEXTEND [] tclIDTAC branchtacs)
+ end
(* computing the case/elim combinators *)
-let gl_make_elim ind = begin fun gl ->
- let env = Proofview.Goal.env gl in
- let gr = Indrec.lookup_eliminator env (fst ind) (elimination_sort_of_goal gl) in
- let (sigma, c) = pf_apply Evd.fresh_global gl gr in
- (sigma, c)
-end
-
-let gl_make_case dep (ind, u) = begin fun gl ->
- let sigma = project gl in
- let u = EInstance.kind (project gl) u in
- let (sigma, r) = Indrec.build_case_analysis_scheme (pf_env gl) sigma (ind, u) dep
- (elimination_sort_of_goal gl)
- in
- (sigma, EConstr.of_constr r)
-end
-
let make_elim_branch_assumptions ba hyps =
let assums =
try List.rev (List.firstn ba.nassums hyps)
@@ -116,16 +108,17 @@ let elim_on_ba tac ba =
tac branches
end
-let elimination_then tac c =
+let elimination_then tac id =
let open Declarations in
Proofview.Goal.enter begin fun gl ->
- let (ind,t) = pf_reduce_to_quantified_ind gl (pf_get_type_of gl c) in
+ let ((ind, u), t) = pf_apply Tacred.reduce_to_atomic_ind gl (pf_get_type_of gl (mkVar id)) in
+ let _, args = decompose_app_vect (Proofview.Goal.sigma gl) t in
let isrec,mkelim =
- match (Global.lookup_mind (fst (fst ind))).mind_record with
- | NotRecord -> true,gl_make_elim
- | FakeRecord | PrimRecord _ -> false,gl_make_case true
+ match (Global.lookup_mind (fst ind)).mind_record with
+ | NotRecord -> true, Elim
+ | FakeRecord | PrimRecord _ -> false, Case true
in
- general_elim_then_using mkelim isrec None tac None ind (c, t)
+ general_elim_then_using mkelim isrec None tac None (ind, u, args) id
end
(* Supposed to be called without as clause *)
@@ -146,9 +139,8 @@ let introCaseAssumsThen with_evars tac ba =
(tclTHEN introCaseAssums (elim_on_ba (tac l2) ba))
let case_tac dep names tac elim ind c =
- let mkcase = gl_make_case dep in
let tac = introCaseAssumsThen false (* ApplyOn not supported by inversion *) tac in
- general_elim_then_using mkcase false names tac (Some elim) ind c
+ general_elim_then_using (Case dep) false names tac (Some elim) ind c
(* The following tactic Decompose repeatedly applies the
elimination(s) rule(s) of the types satisfying the predicate
@@ -168,14 +160,11 @@ Another example :
Qed.
*)
-let elimHypThen tac id =
- elimination_then tac (mkVar id)
-
let rec general_decompose_on_hyp recognizer =
ifOnHyp recognizer (general_decompose_aux recognizer) (fun _ -> Proofview.tclUNIT())
and general_decompose_aux recognizer id =
- elimHypThen
+ elimination_then
(introElimAssumsThen
(fun bas ->
tclTHEN (clear [id])
@@ -188,7 +177,6 @@ and general_decompose_aux recognizer id =
(* Best strategies but loss of compatibility *)
let tmphyp_name = Id.of_string "_TmpHyp"
-let up_to_delta = ref false (* true *)
let general_decompose recognizer c =
Proofview.Goal.enter begin fun gl ->
@@ -202,14 +190,10 @@ let general_decompose recognizer c =
end
let head_in indl t gl =
- let env = Proofview.Goal.env gl in
let sigma = Tacmach.New.project gl in
try
- let ity,_ =
- if !up_to_delta
- then find_mrectype env sigma t
- else extract_mrectype sigma t
- in List.exists (fun i -> eq_ind (fst i) (fst ity)) indl
+ let ity,_ = extract_mrectype sigma t in
+ List.exists (fun i -> eq_ind (fst i) (fst ity)) indl
with Not_found -> false
let decompose_these c l =
@@ -236,9 +220,6 @@ let h_decompose_and = decompose_and
(* The tactic Double performs a double induction *)
-let simple_elimination c =
- elimination_then (fun _ -> tclIDTAC) c
-
let induction_trailer abs_i abs_j bargs =
tclTHEN
(tclDO (abs_j - abs_i) intro)
@@ -261,7 +242,7 @@ let induction_trailer abs_i abs_j bargs =
in
let ids = List.rev (ids_of_named_context hyps) in
(tclTHENLIST
- [revert ids; simple_elimination (mkVar id)])
+ [revert ids; elimination_then (fun _ -> tclIDTAC) id])
end
))
@@ -279,7 +260,7 @@ let double_ind h1 h2 =
(onLastHypId
(fun id ->
elimination_then
- (introElimAssumsThen (induction_trailer abs_i abs_j)) (mkVar id))))
+ (introElimAssumsThen (induction_trailer abs_i abs_j)) id)))
end
let h_double_induction = double_ind
diff --git a/tactics/elim.mli b/tactics/elim.mli
index 4c5cdc8a31..01053502e4 100644
--- a/tactics/elim.mli
+++ b/tactics/elim.mli
@@ -16,7 +16,7 @@ open Tactypes
val case_tac : bool -> or_and_intro_pattern option ->
(intro_patterns -> named_context -> unit Proofview.tactic) ->
- constr -> inductive * EInstance.t -> constr * types -> unit Proofview.tactic
+ constr -> inductive * EInstance.t * EConstr.t array -> Id.t -> unit Proofview.tactic
val h_decompose : inductive list -> constr -> unit Proofview.tactic
val h_decompose_or : constr -> unit Proofview.tactic
diff --git a/tactics/eqschemes.ml b/tactics/eqschemes.ml
index 955a7957bf..f90c143a1a 100644
--- a/tactics/eqschemes.ml
+++ b/tactics/eqschemes.ml
@@ -68,7 +68,9 @@ module RelDecl = Context.Rel.Declaration
let hid = Id.of_string "H"
let xid = Id.of_string "X"
let default_id_of_sort = function InSProp | InProp | InSet -> hid | InType -> xid
-let fresh env id = next_global_ident_away id Id.Set.empty
+let fresh env id avoid =
+ let freshid = next_global_ident_away id avoid in
+ freshid, Id.Set.add freshid avoid
let with_context_set ctx (b, ctx') =
(b, Univ.ContextSet.union ctx ctx')
@@ -204,7 +206,7 @@ let build_sym_scheme env ind =
let cstr n =
mkApp (mkConstructUi(indu,1),Context.Rel.to_extended_vect mkRel n mib.mind_params_ctxt) in
let inds = snd (mind_arity mip) in
- let varH = fresh env (default_id_of_sort inds) in
+ let varH,_ = fresh env (default_id_of_sort inds) Id.Set.empty in
let applied_ind = build_dependent_inductive indu specif in
let indr = Sorts.relevance_of_sort_family inds in
let realsign_ind =
@@ -263,7 +265,7 @@ let build_sym_involutive_scheme env ind =
let cstr n = mkApp (mkConstructUi (indu,1),Context.Rel.to_extended_vect mkRel n paramsctxt) in
let inds = snd (mind_arity mip) in
let indr = Sorts.relevance_of_sort_family inds in
- let varH = fresh env (default_id_of_sort inds) in
+ let varH,_ = fresh env (default_id_of_sort inds) Id.Set.empty in
let applied_ind = build_dependent_inductive indu specif in
let applied_ind_C =
mkApp
@@ -380,9 +382,9 @@ let build_l2r_rew_scheme dep env ind kind =
rel_vect p nrealargs]) in
let inds = snd (mind_arity mip) in
let indr = Sorts.relevance_of_sort_family inds in
- let varH = fresh env (default_id_of_sort inds) in
- let varHC = fresh env (Id.of_string "HC") in
- let varP = fresh env (Id.of_string "P") in
+ let varH,avoid = fresh env (default_id_of_sort inds) Id.Set.empty in
+ let varHC,avoid = fresh env (Id.of_string "HC") avoid in
+ let varP,_ = fresh env (Id.of_string "P") avoid in
let applied_ind = build_dependent_inductive indu specif in
let applied_ind_P =
mkApp (mkIndU indu, Array.concat
@@ -498,9 +500,9 @@ let build_l2r_forward_rew_scheme dep env ind kind =
rel_vect p nrealargs]) in
let inds = snd (mind_arity mip) in
let indr = Sorts.relevance_of_sort_family inds in
- let varH = fresh env (default_id_of_sort inds) in
- let varHC = fresh env (Id.of_string "HC") in
- let varP = fresh env (Id.of_string "P") in
+ let varH,avoid = fresh env (default_id_of_sort inds) Id.Set.empty in
+ let varHC,avoid = fresh env (Id.of_string "HC") avoid in
+ let varP,_ = fresh env (Id.of_string "P") avoid in
let applied_ind = build_dependent_inductive indu specif in
let applied_ind_P =
mkApp (mkIndU indu, Array.concat
@@ -593,9 +595,9 @@ let build_r2l_forward_rew_scheme dep env ind kind =
let constrargs_cstr = constrargs@[cstr 0] in
let inds = snd (mind_arity mip) in
let indr = Sorts.relevance_of_sort_family inds in
- let varH = fresh env (default_id_of_sort inds) in
- let varHC = fresh env (Id.of_string "HC") in
- let varP = fresh env (Id.of_string "P") in
+ let varH,avoid = fresh env (default_id_of_sort inds) Id.Set.empty in
+ let varHC,avoid = fresh env (Id.of_string "HC") avoid in
+ let varP,_ = fresh env (Id.of_string "P") avoid in
let applied_ind = build_dependent_inductive indu specif in
let realsign_ind =
name_context env ((LocalAssum (make_annot (Name varH) indr,applied_ind))::realsign) in
@@ -806,9 +808,9 @@ let build_congr env (eq,refl,ctx) ind =
if not (Int.equal (Context.Rel.length constrsign) (Context.Rel.length mib.mind_params_ctxt)) then
error "Constructor must have no arguments";
let b = List.nth constrargs (i + mib.mind_nparams - 1) in
- let varB = fresh env (Id.of_string "B") in
- let varH = fresh env (Id.of_string "H") in
- let varf = fresh env (Id.of_string "f") in
+ let varB,avoid = fresh env (Id.of_string "B") Id.Set.empty in
+ let varH,avoid = fresh env (Id.of_string "H") avoid in
+ let varf,avoid = fresh env (Id.of_string "f") avoid in
let rci = Sorts.Relevant in (* TODO relevance *)
let ci = make_case_info (Global.env()) ind rci RegularStyle in
let uni, ctx = Univ.extend_in_context_set (UnivGen.new_global_univ ()) ctx in
diff --git a/tactics/equality.ml b/tactics/equality.ml
index b4def7bb51..8478c1957a 100644
--- a/tactics/equality.ml
+++ b/tactics/equality.ml
@@ -105,7 +105,7 @@ let rewrite_core_unif_flags = {
check_applied_meta_types = true;
use_pattern_unification = true;
use_meta_bound_pattern_unification = true;
- allowed_evars = AllowAll;
+ allowed_evars = Evarsolve.AllowedEvars.all;
restrict_conv_on_strict_subterms = false;
modulo_betaiota = false;
modulo_eta = true;
@@ -130,7 +130,7 @@ let freeze_initial_evars sigma flags clause =
if Evar.Map.mem evk initial then false
else Evar.Set.mem evk (Lazy.force newevars)
in
- let allowed_evars = AllowFun allowed in
+ let allowed_evars = Evarsolve.AllowedEvars.from_pred allowed in
{flags with
core_unify_flags = {flags.core_unify_flags with allowed_evars};
merge_unify_flags = {flags.merge_unify_flags with allowed_evars};
@@ -187,7 +187,7 @@ let rewrite_conv_closed_core_unif_flags = {
use_meta_bound_pattern_unification = true;
- allowed_evars = AllowAll;
+ allowed_evars = Evarsolve.AllowedEvars.all;
restrict_conv_on_strict_subterms = false;
modulo_betaiota = false;
@@ -221,7 +221,7 @@ let rewrite_keyed_core_unif_flags = {
use_meta_bound_pattern_unification = true;
- allowed_evars = AllowAll;
+ allowed_evars = Evarsolve.AllowedEvars.all;
restrict_conv_on_strict_subterms = false;
modulo_betaiota = true;
@@ -1013,19 +1013,16 @@ let discrimination_pf e (t,t1,t2) discriminator lbeq to_kind =
Proofview.tclUNIT
(applist (eq_elim, [t;t1;mkNamedLambda (make_annot e Sorts.Relevant) t discriminator;i;t2]))
+type equality = {
+ eq_data : (coq_eq_data * (EConstr.t * EConstr.t * EConstr.t));
+ (* equality data + A : Type, t1 : A, t2 : A *)
+ eq_clenv : clausenv;
+ (* clause [M : R A t1 t2] where [R] is the equality from above *)
+}
let eq_baseid = Id.of_string "e"
-let apply_on_clause (f,t) clause =
- let sigma = clause.evd in
- let f_clause = mk_clenv_from_env clause.env sigma None (f,t) in
- let argmv =
- (match EConstr.kind sigma (last_arg f_clause.evd f_clause.templval.Evd.rebus) with
- | Meta mv -> mv
- | _ -> user_err (str "Ill-formed clause applicator.")) in
- clenv_fchain ~with_univs:false argmv f_clause clause
-
-let discr_positions env sigma (lbeq,eqn,(t,t1,t2)) eq_clause cpath dirn =
+let discr_positions env sigma { eq_data = (lbeq,(t,t1,t2)); eq_clenv = eq_clause } cpath dirn =
build_coq_True () >>= fun true_0 ->
build_coq_False () >>= fun false_0 ->
let false_ty = Retyping.get_type_of env sigma false_0 in
@@ -1043,13 +1040,13 @@ let discr_positions env sigma (lbeq,eqn,(t,t1,t2)) eq_clause cpath dirn =
in
discriminator >>= fun discriminator ->
discrimination_pf e (t,t1,t2) discriminator lbeq false_kind >>= fun pf ->
- let pf_ty = mkArrow eqn Sorts.Relevant false_0 in
- let absurd_clause = apply_on_clause (pf,pf_ty) eq_clause in
- let pf = Clenv.clenv_value_cast_meta absurd_clause in
+ (* pf : eq t t1 t2 -> False *)
+ let pf = EConstr.mkApp (pf, [|clenv_value eq_clause|]) in
tclTHENS (assert_after Anonymous false_0)
[onLastHypId gen_absurdity; (Logic.refiner ~check:true EConstr.Unsafe.(to_constr pf))]
-let discrEq (lbeq,_,(t,t1,t2) as u) eq_clause =
+let discrEq eq =
+ let { eq_data = (_, (_, t1, t2)); eq_clenv = eq_clause } = eq in
let sigma = eq_clause.evd in
Proofview.Goal.enter begin fun gl ->
let env = Proofview.Goal.env gl in
@@ -1058,7 +1055,7 @@ let discrEq (lbeq,_,(t,t1,t2) as u) eq_clause =
let info = Exninfo.reify () in
tclZEROMSG ~info (str"Not a discriminable equality.")
| Inl (cpath, (_,dirn), _) ->
- discr_positions env sigma u eq_clause cpath dirn
+ discr_positions env sigma eq cpath dirn
end
let onEquality with_evars tac (c,lbindc) =
@@ -1071,9 +1068,10 @@ let onEquality with_evars tac (c,lbindc) =
let eqn = clenv_type eq_clause' in
(* FIXME evar leak *)
let (eq,u,eq_args) = pf_apply find_this_eq_data_decompose gl eqn in
+ let eq = { eq_data = (eq, eq_args); eq_clenv = eq_clause' } in
tclTHEN
(Proofview.Unsafe.tclEVARS eq_clause'.evd)
- (tac (eq,eqn,eq_args) eq_clause')
+ (tac eq)
end
let onNegatedEquality with_evars tac =
@@ -1385,7 +1383,8 @@ let simplify_args env sigma t =
| eq, [t1;c1;t2;c2] -> applist (eq,[t1;simpl env sigma c1;t2;simpl env sigma c2])
| _ -> t
-let inject_at_positions env sigma l2r (eq,_,(t,t1,t2)) eq_clause posns tac =
+let inject_at_positions env sigma l2r eq posns tac =
+ let { eq_data = (eq, (t,t1,t2)); eq_clenv = eq_clause } = eq in
let e = next_ident_away eq_baseid (vars_of_env env) in
let e_env = push_named (LocalAssum (make_annot e Sorts.Relevant,t)) env in
let evdref = ref sigma in
@@ -1395,11 +1394,12 @@ let inject_at_positions env sigma l2r (eq,_,(t,t1,t2)) eq_clause posns tac =
let sigma, (injbody,resty) = build_injector e_env !evdref t1' (mkVar e) cpath in
let injfun = mkNamedLambda (make_annot e Sorts.Relevant) t injbody in
let sigma,congr = Evd.fresh_global env sigma eq.congr in
- let pf = applist(congr,[t;resty;injfun;t1;t2]) in
+ (* pf : eq t t1 t2 -> eq resty (injfun t1) (injfun t2) *)
+ let pf = mkApp (congr,[|t; resty; injfun; t1; t2|]) in
let sigma, pf_typ = Typing.type_of env sigma pf in
- let inj_clause = apply_on_clause (pf,pf_typ) eq_clause in
- let pf = Clenv.clenv_value_cast_meta inj_clause in
- let ty = simplify_args env sigma (clenv_type inj_clause) in
+ let pf_typ = Vars.subst1 mkProp (pi3 @@ destProd sigma pf_typ) in
+ let pf = mkApp (pf, [| Clenv.clenv_value eq_clause |]) in
+ let ty = simplify_args env sigma pf_typ in
evdref := sigma;
Some (pf, ty)
with Failure _ -> None
@@ -1422,7 +1422,8 @@ let () = CErrors.register_handler (function
| NothingToInject -> Some (Pp.str "Nothing to inject.")
| _ -> None)
-let injEqThen keep_proofs tac l2r (eq,_,(t,t1,t2) as u) eq_clause =
+let injEqThen keep_proofs tac l2r eql =
+ let { eq_data = (eq, (t,t1,t2)); eq_clenv = eq_clause } = eql in
let sigma = eq_clause.evd in
let env = eq_clause.env in
match find_positions env sigma ~keep_proofs ~no_discr:true t1 t2 with
@@ -1437,7 +1438,7 @@ let injEqThen keep_proofs tac l2r (eq,_,(t,t1,t2) as u) eq_clause =
| Inr [([],_,_)] ->
Proofview.tclZERO NothingToInject
| Inr posns ->
- inject_at_positions env sigma l2r u eq_clause posns
+ inject_at_positions env sigma l2r eql posns
(tac (clenv_value eq_clause))
let get_previous_hyp_position id gl =
@@ -1491,17 +1492,18 @@ let simpleInjClause flags with_evars = function
let injConcl flags = injClause flags None false None
let injHyp flags clear_flag id = injClause flags None false (Some (clear_flag,ElimOnIdent CAst.(make id)))
-let decompEqThen keep_proofs ntac (lbeq,_,(t,t1,t2) as u) clause =
+let decompEqThen keep_proofs ntac eq =
+ let { eq_data = (_, (_,t1,t2) as u); eq_clenv = clause } = eq in
Proofview.Goal.enter begin fun gl ->
let sigma = clause.evd in
let env = Proofview.Goal.env gl in
match find_positions env sigma ~keep_proofs ~no_discr:false t1 t2 with
| Inl (cpath, (_,dirn), _) ->
- discr_positions env sigma u clause cpath dirn
+ discr_positions env sigma eq cpath dirn
| Inr [] -> (* Change: do not fail, simplify clear this trivial hyp *)
ntac (clenv_value clause) 0
| Inr posns ->
- inject_at_positions env sigma true u clause posns
+ inject_at_positions env sigma true eq posns
(ntac (clenv_value clause))
end
@@ -1513,10 +1515,11 @@ let dEq ~keep_proofs with_evars =
dEqThen ~keep_proofs with_evars (fun clear_flag c x ->
(apply_clear_request clear_flag (use_clear_hyp_by_default ()) c))
-let intro_decomp_eq tac data (c, t) =
+let intro_decomp_eq tac (eq, _, data) (c, t) =
Proofview.Goal.enter begin fun gl ->
let cl = pf_apply make_clenv_binding gl (c, t) NoBindings in
- decompEqThen !keep_proof_equalities_for_injection (fun _ -> tac) data cl
+ let eq = { eq_data = (eq, data); eq_clenv = cl } in
+ decompEqThen !keep_proof_equalities_for_injection (fun _ -> tac) eq
end
let () = declare_intro_decomp_eq intro_decomp_eq
@@ -1648,17 +1651,6 @@ let cutSubstClause l2r eqn cls =
| None -> cutSubstInConcl l2r eqn
| Some id -> cutSubstInHyp l2r eqn id
-let warn_deprecated_cutrewrite =
- CWarnings.create ~name:"deprecated-cutrewrite" ~category:"deprecated"
- (fun () -> strbrk"\"cutrewrite\" is deprecated. Use \"replace\" instead.")
-
-let cutRewriteClause l2r eqn cls =
- warn_deprecated_cutrewrite ();
- try_rewrite (cutSubstClause l2r eqn cls)
-
-let cutRewriteInHyp l2r eqn id = cutRewriteClause l2r eqn (Some id)
-let cutRewriteInConcl l2r eqn = cutRewriteClause l2r eqn None
-
let substClause l2r c cls =
Proofview.Goal.enter begin fun gl ->
let eq = pf_apply get_type_of gl c in
diff --git a/tactics/equality.mli b/tactics/equality.mli
index fdcbbc0e3c..5a4fe47cab 100644
--- a/tactics/equality.mli
+++ b/tactics/equality.mli
@@ -107,10 +107,6 @@ val dEqThen : keep_proofs:(bool option) -> evars_flag -> (clear_flag -> constr -
val make_iterated_tuple :
env -> evar_map -> constr -> (constr * types) -> evar_map * (constr * constr * constr)
-(* The family cutRewriteIn expect an equality statement *)
-val cutRewriteInHyp : bool -> types -> Id.t -> unit Proofview.tactic
-val cutRewriteInConcl : bool -> constr -> unit Proofview.tactic
-
(* The family rewriteIn expect the proof of an equality *)
val rewriteInHyp : bool -> constr -> Id.t -> unit Proofview.tactic
val rewriteInConcl : bool -> constr -> unit Proofview.tactic
diff --git a/tactics/hints.ml b/tactics/hints.ml
index db4b23705f..355cea8fa8 100644
--- a/tactics/hints.ml
+++ b/tactics/hints.ml
@@ -837,7 +837,7 @@ let make_exact_entry env sigma info ~poly ?(name=PathAny) (c, cty, ctx) =
db = None; secvars;
code = with_uid (Give_exact (c, cty, ctx, poly)); })
-let make_apply_entry env sigma (eapply,hnf,verbose) info ~poly ?(name=PathAny) (c, cty, ctx) =
+let make_apply_entry env sigma hnf info ~poly ?(name=PathAny) (c, cty, ctx) =
let cty = if hnf then hnf_constr env sigma cty else cty in
match EConstr.kind sigma cty with
| Prod _ ->
@@ -862,25 +862,11 @@ let make_apply_entry env sigma (eapply,hnf,verbose) info ~poly ?(name=PathAny) (
db = None;
secvars;
code = with_uid (Res_pf(c,cty,ctx,poly)); })
- else begin
- if not eapply then failwith "make_apply_entry";
- if verbose then begin
- let variables = str (CString.plural nmiss "variable") in
- Feedback.msg_info (
- strbrk "The hint " ++
- pr_leconstr_env env sigma' c ++
- strbrk " will only be used by eauto, because applying " ++
- pr_leconstr_env env sigma' c ++
- strbrk " would leave " ++ variables ++ Pp.spc () ++
- Pp.prlist_with_sep Pp.pr_comma Name.print (List.map (Evd.meta_name ce.evd) miss) ++
- strbrk " as unresolved existential " ++ variables ++ str "."
- )
- end;
+ else
(Some hd,
{ pri; pat = Some pat; name;
db = None; secvars;
code = with_uid (ERes_pf(c,cty,ctx,poly)); })
- end
| _ -> failwith "make_apply_entry"
(* flags is (e,h,v) with e=true if eapply and h=true if hnf and v=true if verbose
@@ -916,19 +902,25 @@ let fresh_global_or_constr env sigma poly cr =
(c, Univ.ContextSet.empty)
end
-let make_resolves env sigma flags info ~check ~poly ?name cr =
+let make_resolves env sigma (eapply, hnf) info ~check ~poly ?name cr =
let c, ctx = fresh_global_or_constr env sigma poly cr in
let cty = Retyping.get_type_of env sigma c in
let try_apply f =
- try Some (f (c, cty, ctx)) with Failure _ -> None in
+ try
+ let (_, hint) as ans = f (c, cty, ctx) in
+ match hint.code.obj with
+ | ERes_pf _ -> if not eapply then None else Some ans
+ | _ -> Some ans
+ with Failure _ -> None
+ in
let ents = List.map_filter try_apply
[make_exact_entry env sigma info ~poly ?name;
- make_apply_entry env sigma flags info ~poly ?name]
+ make_apply_entry env sigma hnf info ~poly ?name]
in
if check && List.is_empty ents then
user_err ~hdr:"Hint"
(pr_leconstr_env env sigma c ++ spc() ++
- (if pi1 flags then str"cannot be used as a hint."
+ (if eapply then str"cannot be used as a hint."
else str "can be used as a hint only for eauto."));
ents
@@ -937,7 +929,7 @@ let make_resolve_hyp env sigma decl =
let hname = NamedDecl.get_id decl in
let c = mkVar hname in
try
- [make_apply_entry env sigma (true, true, false) empty_hint_info ~poly:false
+ [make_apply_entry env sigma true empty_hint_info ~poly:false
~name:(PathHints [GlobRef.VarRef hname])
(c, NamedDecl.get_type decl, Univ.ContextSet.empty)]
with
@@ -1223,9 +1215,28 @@ let add_resolves env sigma clist ~local ~superglobal dbnames =
(fun dbname ->
let r =
List.flatten (List.map (fun (pri, poly, hnf, path, gr) ->
- make_resolves env sigma (true,hnf,not !Flags.quiet)
+ make_resolves env sigma (true, hnf)
pri ~check:true ~poly ~name:path gr) clist)
in
+ let check (_, hint) = match hint.code.obj with
+ | ERes_pf (c, cty, ctx, _) ->
+ let sigma' = Evd.merge_context_set univ_flexible sigma ctx in
+ let ce = mk_clenv_from_env env sigma' None (c,cty) in
+ let miss = clenv_missing ce in
+ let nmiss = List.length miss in
+ let variables = str (CString.plural nmiss "variable") in
+ Feedback.msg_info (
+ strbrk "The hint " ++
+ pr_leconstr_env env sigma' c ++
+ strbrk " will only be used by eauto, because applying " ++
+ pr_leconstr_env env sigma' c ++
+ strbrk " would leave " ++ variables ++ Pp.spc () ++
+ Pp.prlist_with_sep Pp.pr_comma Name.print (List.map (Evd.meta_name ce.evd) miss) ++
+ strbrk " as unresolved existential " ++ variables ++ str "."
+ )
+ | _ -> ()
+ in
+ let () = if not !Flags.quiet then List.iter check r in
let hint = make_hint ~local dbname (AddHints { superglobal; hints = r }) in
Lib.add_anonymous_leaf (inAutoHint hint))
dbnames
@@ -1375,10 +1386,10 @@ let expand_constructor_hints env sigma lems =
let constructor_hints env sigma eapply lems =
let lems = expand_constructor_hints env sigma lems in
List.map_append (fun (poly, lem) ->
- make_resolves env sigma (eapply,true,false) empty_hint_info ~check:true ~poly lem) lems
+ make_resolves env sigma (eapply, true) empty_hint_info ~check:true ~poly lem) lems
let make_resolves env sigma info ~check ~poly ?name hint =
- make_resolves env sigma (true, false, false) info ~check ~poly ?name hint
+ make_resolves env sigma (true, false) info ~check ~poly ?name hint
let make_local_hint_db env sigma ts eapply lems =
let map c = c env sigma in
diff --git a/tactics/inv.ml b/tactics/inv.ml
index f77b52b931..41899132a6 100644
--- a/tactics/inv.ml
+++ b/tactics/inv.ml
@@ -463,7 +463,7 @@ let raw_inversion inv_kind id status names =
let env = Proofview.Goal.env gl in
let concl = Proofview.Goal.concl gl in
let c = mkVar id in
- let (ind, t) =
+ let ((ind, u), t) =
try pf_apply Tacred.reduce_to_atomic_ind gl (pf_get_type_of gl c)
with UserError _ ->
let msg = str "The type of " ++ Id.print id ++ str " is not inductive." in
@@ -487,10 +487,11 @@ let raw_inversion inv_kind id status names =
in
let neqns = List.length realargs in
let as_mode = names != None in
+ let (_, args) = decompose_app_vect sigma t in
tclTHEN (Proofview.Unsafe.tclEVARS sigma)
(tclTHENS
(assert_before Anonymous cut_concl)
- [case_tac dep names (rewrite_equations_tac as_mode inv_kind id neqns) elim_predicate ind (c,t);
+ [case_tac dep names (rewrite_equations_tac as_mode inv_kind id neqns) elim_predicate (ind, u, args) id;
onLastHypId (fun id -> tclTHEN (refined id) reflexivity)])
end
diff --git a/tactics/tacticals.ml b/tactics/tacticals.ml
index fc099f643d..c0fad0026f 100644
--- a/tactics/tacticals.ml
+++ b/tactics/tacticals.ml
@@ -695,6 +695,8 @@ module New = struct
(* Check that holes in arguments have been resolved *)
let check_evars env sigma extsigma origsigma =
+ let reachable = lazy (Evarutil.reachable_from_evars sigma
+ (Evar.Map.domain (Evd.undefined_map origsigma))) in
let rec is_undefined_up_to_restriction sigma evk =
if Evd.mem origsigma evk then None else
let evi = Evd.find sigma evk in
@@ -710,7 +712,12 @@ module New = struct
let rest =
Evd.fold_undefined (fun evk evi acc ->
match is_undefined_up_to_restriction sigma evk with
- | Some (evk',evi) -> (evk',evi)::acc
+ | Some (evk',evi) ->
+ (* If [evk'] descends from [evk] which descends itself from
+ an originally undefined evar in [origsigma], it is a not
+ a fresh undefined hole from [sigma]. *)
+ if Evar.Set.mem evk (Lazy.force reachable) then acc
+ else (evk',evi)::acc
| _ -> acc)
extsigma []
in
diff --git a/tactics/tactics.ml b/tactics/tactics.ml
index e2d60dfabd..a607c09010 100644
--- a/tactics/tactics.ml
+++ b/tactics/tactics.ml
@@ -724,7 +724,9 @@ type hyp_conversion =
| StableHypConv (** Does not introduce new dependencies on variables *)
| LocalHypConv (** Same as above plus no dependence on the named environment *)
-let e_change_in_hyps ~check ~reorder f args =
+let e_change_in_hyps ~check ~reorder f args = match args with
+| [] -> Proofview.tclUNIT ()
+| _ :: _ ->
Proofview.Goal.enter begin fun gl ->
let env = Proofview.Goal.env gl in
let sigma = Tacmach.New.project gl in
@@ -2330,7 +2332,7 @@ let intro_decomp_eq ?loc l thin tac id =
let env = Proofview.Goal.env gl in
let sigma = Proofview.Goal.sigma gl in
let sigma, t = Typing.type_of env sigma c in
- let _,t = reduce_to_quantified_ind env sigma t in
+ let _,t = reduce_to_atomic_ind env sigma t in
match my_find_eq_data_decompose env sigma t with
| Some (eq,u,eq_args) ->
!intro_decomp_eq_function
@@ -3248,13 +3250,10 @@ let rec consume_pattern avoid na isdep gl = let open CAst in function
| {loc;v=IntroForthcoming true}::names when not isdep ->
consume_pattern avoid na isdep gl names
| {loc;v=IntroForthcoming _}::names as fullpat ->
- let avoid = Id.Set.union avoid (explicit_intro_names names) in
(CAst.make ?loc @@ intropattern_of_name gl avoid na, fullpat)
| {loc;v=IntroNaming IntroAnonymous}::names ->
- let avoid = Id.Set.union avoid (explicit_intro_names names) in
(CAst.make ?loc @@ intropattern_of_name gl avoid na, names)
| {loc;v=IntroNaming (IntroFresh id')}::names ->
- let avoid = Id.Set.union avoid (explicit_intro_names names) in
(CAst.make ?loc @@ IntroNaming (IntroIdentifier (new_fresh_id avoid id' gl)), names)
| pat::names -> (pat,names)
@@ -3312,7 +3311,7 @@ let get_recarg_dest (recargdests,tophyp) =
*)
let induct_discharge with_evars dests avoid' tac (avoid,ra) names =
- let avoid = Id.Set.union avoid avoid' in
+ let avoid = Id.Set.union avoid' (Id.Set.union avoid (explicit_intro_names names)) in
let rec peel_tac ra dests names thin =
match ra with
| (RecArg,_,deprec,recvarname) ::
@@ -3320,7 +3319,7 @@ let induct_discharge with_evars dests avoid' tac (avoid,ra) names =
Proofview.Goal.enter begin fun gl ->
let (recpat,names) = match names with
| [{CAst.loc;v=IntroNaming (IntroIdentifier id)} as pat] ->
- let id' = next_ident_away (add_prefix "IH" id) avoid in
+ let id' = new_fresh_id avoid (add_prefix "IH" id) gl in
(pat, [CAst.make @@ IntroNaming (IntroIdentifier id')])
| _ -> consume_pattern avoid (Name recvarname) deprec gl names in
let dest = get_recarg_dest dests in
@@ -5184,14 +5183,14 @@ end
(** Tacticals defined directly in term of Proofview *)
module New = struct
- open Genredexpr
- open Locus
-
let reduce_after_refine =
- reduce
- (Lazy {rBeta=true;rMatch=true;rFix=true;rCofix=true;
- rZeta=false;rDelta=false;rConst=[]})
- {onhyps = Some []; concl_occs = AllOccurrences }
+ (* For backward compatibility reasons, we do not contract let-ins, but we unfold them. *)
+ let redfun env t =
+ let open CClosure in
+ let flags = RedFlags.red_add_transparent allnolet TransparentState.empty in
+ clos_norm_flags flags env t
+ in
+ reduct_in_concl ~check:false (redfun,DEFAULTcast)
let refine ~typecheck c =
Refine.refine ~typecheck c <*>
diff --git a/test-suite/.csdp.cache.test-suite b/test-suite/.csdp.cache.test-suite
index 046cb067c5..36efdf469e 100644
--- a/test-suite/.csdp.cache.test-suite
+++ b/test-suite/.csdp.cache.test-suite
Binary files differ
diff --git a/test-suite/Makefile b/test-suite/Makefile
index 758374c5de..6c373701cf 100644
--- a/test-suite/Makefile
+++ b/test-suite/Makefile
@@ -141,7 +141,7 @@ run: $(SUBSYSTEMS)
bugs: $(BUGS)
clean:
- rm -f trace .nia.cache .lia.cache output/MExtraction.out
+ rm -f trace .csdp.cache .nia.cache .lia.cache output/MExtraction.out
rm -f vos/Makefile vos/Makefile.conf
$(SHOW) 'RM <**/*.stamp> <**/*.vo> <**/*.vio> <**/*.log> <**/*.glob>'
$(HIDE)find . \( \
diff --git a/test-suite/bugs/closed/bug_12909.v b/test-suite/bugs/closed/bug_12909.v
new file mode 100644
index 0000000000..fafb6a418f
--- /dev/null
+++ b/test-suite/bugs/closed/bug_12909.v
@@ -0,0 +1,8 @@
+Module Type T.
+Axiom A : Type.
+End T.
+
+Module M.
+ Axiom A : SProp.
+End M.
+Fail Module N <: T := M.
diff --git a/test-suite/bugs/closed/bug_12930.v b/test-suite/bugs/closed/bug_12930.v
new file mode 100644
index 0000000000..e2a524301a
--- /dev/null
+++ b/test-suite/bugs/closed/bug_12930.v
@@ -0,0 +1,10 @@
+Section S.
+ Variable v : Prop.
+ Variable vv : v.
+ Collection easy := Type*.
+
+ Lemma ybar : v.
+ Proof using easy.
+ exact vv.
+ Qed.
+End S.
diff --git a/test-suite/bugs/closed/bug_12944.v b/test-suite/bugs/closed/bug_12944.v
new file mode 100644
index 0000000000..d6720d9906
--- /dev/null
+++ b/test-suite/bugs/closed/bug_12944.v
@@ -0,0 +1,12 @@
+
+Inductive vector A : nat -> Type :=
+ |nil : vector A 0
+ |cons : forall (h:A) (n:nat), vector A n -> vector A (S n).
+
+Global Set Mangle Names.
+
+Lemma vlookup_middle {A n} (v : vector A n) : True.
+Proof.
+ induction v as [|?? IHv].
+ all:exact I.
+Qed.
diff --git a/test-suite/bugs/closed/bug_13003.v b/test-suite/bugs/closed/bug_13003.v
new file mode 100644
index 0000000000..570baef2ef
--- /dev/null
+++ b/test-suite/bugs/closed/bug_13003.v
@@ -0,0 +1,9 @@
+Set Mangle Names.
+Import EqNotations.
+Lemma eq_sigT_sig_eq X P (x1 x2:X) H1 H2 :
+ forall (E1 : x1=x2), rew E1 in H1 = H2 -> existT P x1 H1 = existT P x2 H2.
+Proof.
+ intros ->.
+ intros <-.
+ reflexivity.
+Defined.
diff --git a/test-suite/bugs/closed/bug_4413.v b/test-suite/bugs/closed/bug_4413.v
new file mode 100644
index 0000000000..cb30aa5d1f
--- /dev/null
+++ b/test-suite/bugs/closed/bug_4413.v
@@ -0,0 +1,8 @@
+
+(* Regression wrt v8.4 related to the change of order of resolution of evar-evar unification problems. *)
+Goal exists x, x=1 -> True.
+eexists. intro H.
+pose proof (f_equal (fun k => k) H).
+Undo.
+pose (@f_equal _ _ S _ _ H).
+Abort.
diff --git a/test-suite/bugs/closed/bug_7825.v b/test-suite/bugs/closed/bug_7825.v
new file mode 100644
index 0000000000..3f8708059a
--- /dev/null
+++ b/test-suite/bugs/closed/bug_7825.v
@@ -0,0 +1,50 @@
+Record T (x : nat) := { t : x = x }.
+
+Goal exists x, T x.
+ refine (ex_intro _ _ _).
+ Show Existentials.
+ simple refine {| t := _ |}.
+ reflexivity.
+ Unshelve. exact 0.
+Qed.
+
+(** Fine if the new evar is defined as the originally shelved evar: we do nothing.
+ In the other direction we promote the non-shelved new goal to a shelved one:
+ shelved status has priority over goal status. *)
+
+Goal forall a : nat, exists x, T x.
+ evar (x : nat). subst x. Show Existentials.
+ intros a. simple refine (ex_intro ?[x0] _ _). shelve. simpl.
+ (** Here ?x := ?x0 which is shelved, so ?x becomes shelved even if it would
+ not be by default (refine ?x and _ produce non-shelved evars by default)*)
+ simple refine (Build_T ?x _).
+ reflexivity.
+ Unshelve. exact 0.
+Qed.
+
+Goal { A : _ & { P : _ & @sigT A P } }.
+ epose _ as A;
+ epose _ as P;
+ exists A, P.
+ (* Regardless of which evars are in the goals vs the hypotheses,
+ [simple refine (existT _ _ _)] should leave over two goals. This
+ should be true even when chained with epose. *)
+ assert_succeeds (simple refine (existT _ _ _); let n := numgoals in guard n = 2);
+ subst P;
+ assert_succeeds (simple refine (existT _ _ _); let n := numgoals in guard n = 2);
+ subst A;
+ assert_succeeds (simple refine (existT _ _ _); let n := numgoals in guard n = 2).
+ (* fails *)
+Abort.
+
+Goal { A : _ & { P : _ & @sigT A P } }.
+ epose _ as A;
+ epose _ as P;
+ exists A, P; (* In this example we chain everything *)
+ assert_succeeds (simple refine (existT _ _ _); let n := numgoals in guard n = 2);
+ subst P;
+ assert_succeeds (simple refine (existT _ _ _); let n := numgoals in guard n = 2);
+ subst A;
+ assert_succeeds (simple refine (existT _ _ _); let n := numgoals in guard n = 2).
+ (* fails *)
+Abort.
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/run.sh b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/run.sh
new file mode 100755
index 0000000000..a5c48b3324
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/run.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+set -x
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+"$COQLIB"/tools/make-one-time-file.py time-of-build.log.in time-of-build.log 2>time-of-build.err.log || exit $?
+
+diff -u time-of-build.log.expected time-of-build.log || exit $?
+diff -u time-of-build.err.log.expected time-of-build.err.log || exit $?
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.err.log.expected b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.err.log.expected
new file mode 100644
index 0000000000..f2184407e7
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.err.log.expected
@@ -0,0 +1 @@
+WARNING: Invalid time string: not the right number of dots (.); expected one: '0.240.05'
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.expected b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.expected
new file mode 100644
index 0000000000..0fb57a1406
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.expected
@@ -0,0 +1,398 @@
+ Time | Peak Mem | File Name
+-------------------------------------------------------------
+29m02.87s | 1136588 ko | Total Time / Peak Mem
+-------------------------------------------------------------
+ 2m19.40s | 1007764 ko | PCUICSafeConversion.vo
+ 1m59.92s | 1136588 ko | PCUICSafeReduce.vo
+ 1m34.58s | 849824 ko | PCUICParallelReductionConfluence.vo
+ 1m26.21s | 1038900 ko | erasure_live_test.vo
+ 1m20.36s | 975764 ko | PCUICSR.vo
+ 0m56.51s | 896928 ko | bugkncst.vo
+ 0m56.17s | 1113548 ko | ErasureCorrectness.vo
+ 0m56.09s | 958816 ko | PCUICSafeChecker.vo
+ 0m51.78s | 809012 ko | Typing.vo
+ 0m42.82s | 727688 ko | PCUICTyping.vo
+ 0m39.21s | 1012876 ko | ErasureFunction.vo
+ 0m39.04s | 790088 ko | PCUICEquality.vo
+ 0m38.12s | 657100 ko | PCUICSigmaCalculus.vo
+ 0m34.44s | 742788 ko | PCUICConfluence.vo
+ 0m29.65s | 750296 ko | PCUICConversion.vo
+ 0m28.26s | 779308 ko | PCUICParallelReduction.vo
+ 0m28.24s | 723216 ko | PCUICPosition.vo
+ 0m27.93s | 621392 ko | Substitution.vo
+ 0m26.28s | 597996 ko | PCUICLiftSubst.vo
+ 0m26.11s | 959132 ko | PCUICPrincipality.vo
+ 0m25.86s | 857128 ko | times_bool_fun.vo
+ 0m25.65s | 673140 ko | PCUICSubstitution.vo
+ 0m23.99s | 654592 ko | PCUICClosed.vo
+ 0m23.42s | 685852 ko | PCUICWeakening.vo
+ 0m23.34s | 854428 ko | SafeErasureFunction.vo
+ 0m22.85s | 706592 ko | PCUICSpine.vo
+ 0m21.55s | 603616 ko | Closed.vo
+ 0m19.93s | 581920 ko | tauto.vo
+ 0m19.08s | 683776 ko | PCUICInductives.vo
+ 0m17.91s | 741808 ko | param_original.vo
+ 0m15.64s | 579100 ko | Weakening.vo
+ 0m14.98s | 623196 ko | PCUICNameless.vo
+ 0m13.39s | 794032 ko | ESubstitution.vo
+ 0m13.16s | 641024 ko | TemplateToPCUICCorrectness.vo
+ 0m11.81s | 532016 ko | LiftSubst.vo
+ 0m11.54s | 589944 ko | PCUICWcbvEval.vo
+ 0m10.41s | 621644 ko | PCUICUnivSubstitution.vo
+ 0m10.39s | 661964 ko | PCUICInductiveInversion.vo
+ 0m10.08s | 521520 ko | ELiftSubst.vo
+ 0m09.58s | 684644 ko | PCUICAlpha.vo
+ 0m09.35s | 622488 ko | PCUICInversion.vo
+ 0m08.74s | 629108 ko | PCUICContextConversion.vo
+ 0m08.61s | 892080 ko | param_generous_packed.vo
+ 0m08.05s | 556676 ko | TypingWf.vo
+ 0m07.84s | 608576 ko | PCUICToTemplateCorrectness.vo
+ 0m07.75s | 625664 ko | PCUICArities.vo
+ 0m07.64s | 646256 ko | PCUICElimination.vo
+ 0m07.23s | 614752 ko | times_bool_fun2.vo
+ 0m06.54s | 667924 ko | PCUICSafeLemmata.vo
+ 0m06.33s | 615568 ko | PCUICContexts.vo
+ 0m06.30s | 733700 ko | PCUICSafeRetyping.vo
+ 0m06.16s | 583116 ko | PCUICReduction.vo
+ 0m06.04s | 529900 ko | utils/MCCompare.vo
+ 0m05.85s | 551516 ko | common/uGraph.vo
+ 0m05.66s | 643396 ko | EArities.vo
+ 0m04.94s | 533768 ko | WcbvEval.vo
+ 0m04.90s | 501352 ko | vs.vo
+ 0m04.72s | 498552 ko | utils/wGraph.vo
+ 0m04.53s | 552364 ko | Reflect.vo
+ 0m04.41s | 348856 ko | MiniHoTT.vo
+ 0m04.38s | 571076 ko | PCUICWeakeningEnv.vo
+ 0m04.23s | 531272 ko | Universes.vo
+ 0m04.11s | 543956 ko | PCUICReflect.vo
+ 0m04.00s | 555748 ko | Checker.vo
+ 0m03.99s | 624912 ko | PCUICValidity.vo
+ 0m03.99s | 806128 ko | SafeTemplateErasure.vo
+ 0m03.85s | 520080 ko | EWcbvEval.vo
+ 0m03.42s | 350716 ko | MiniHoTT_paths.vo
+ 0m03.39s | 741428 ko | Prelim.vo
+ 0m03.34s | 586388 ko | PCUICGeneration.vo
+ 0m03.33s | 533884 ko | PCUICUnivSubst.vo
+ 0m03.11s | 561316 ko | Extraction.vo
+ 0m03.11s | 490756 ko | UnivSubst.vo
+ 0m02.89s | 726228 ko | safechecker_test.vo
+ 0m02.80s | 512292 ko | WeakeningEnv.vo
+ 0m02.78s | 543424 ko | PCUICAstUtils.vo
+ 0m02.78s | 465984 ko | utils/All_Forall.vo
+ 0m02.67s | 729072 ko | EInversion.vo
+ 0m02.42s | 703592 ko | SafeTemplateChecker.vo
+ 0m02.27s | 558304 ko | TypingTests.vo
+ 0m02.12s | 630488 ko | PCUICSN.vo
+ 0m01.93s | 556444 ko | param_binary.vo
+ 0m01.85s | 561876 ko | PCUICCumulativity.vo
+ 0m01.82s | 554420 ko | translation_utils.vo
+ 0m01.77s | 491968 ko | EnvironmentTyping.vo
+ 0m01.75s | 598288 ko | PCUICCtxShape.vo
+ 0m01.69s | 514692 ko | Generation.vo
+ 0m01.62s | 512080 ko | bug5.vo
+ 0m01.58s | 589768 ko | PCUICRetyping.vo
+ 0m01.57s | 617808 ko | Extract.vo
+ 0m01.56s | 527740 ko | demo.vo
+ 0m01.55s | 562424 ko | PCUICCSubst.vo
+ 0m01.49s | 553352 ko | param_cheap_packed.vo
+ 0m01.47s | 527440 ko | PCUICUtils.vo
+ 0m01.47s | 452340 ko | utils/MCList.vo
+ 0m01.44s | 503484 ko | PCUICSize.vo
+ 0m01.42s | 619396 ko | EAll.vo
+ 0m01.37s | 551200 ko | PCUICNormal.vo
+ 0m01.35s | 526276 ko | modules_sections.vo
+ 0m01.34s | 549492 ko | standard_model.vo
+ 0m01.30s | 551364 ko | PCUICPretty.vo
+ 0m01.29s | 545736 ko | All.vo
+ 0m01.21s | 524028 ko | proj.vo
+ 0m01.21s | 513888 ko | test/test.vo
+ 0m01.18s | 486324 ko | Induction.vo
+ 0m01.13s | 524144 ko | add_constructor.vo
+ 0m01.11s | 549776 ko | PCUICChecker.vo
+ 0m01.10s | 487520 ko | EAstUtils.vo
+ 0m01.10s | 484172 ko | Environment.vo
+ 0m01.10s | 543584 ko | erasure_test.vo
+ 0m01.09s | 525128 ko | order_rec.vo
+ 0m01.05s | 512080 ko | ECSubst.vo
+ 0m01.05s | 489932 ko | WfInv.vo
+ 0m01.05s | 522968 ko | issue28.vo
+ 0m01.04s | 527408 ko | PCUICToTemplate.vo
+ 0m01.03s | 510284 ko | bug1.vo
+ 0m01.03s | 522996 ko | run_in_tactic.vo
+ 0m01.03s | 522248 ko | unfold.vo
+ 0m01.02s | 522688 ko | issue27.vo
+ 0m01.01s | 524932 ko | tmVariable.vo
+ 0m01.00s | 485664 ko | AstUtils.vo
+ 0m00.99s | 522992 ko | univ.vo
+ 0m00.98s | 522552 ko | tmInferInstance.vo
+ 0m00.96s | 546928 ko | PCUICMetaTheory.vo
+ 0m00.94s | 510368 ko | castprop.vo
+ 0m00.94s | 500016 ko | opaque.vo
+ 0m00.92s | 522724 ko | tmExistingInstance.vo
+ 0m00.91s | 513348 ko | MyPlugin.vo
+ 0m00.90s | 524140 ko | Retyping.vo
+ 0m00.90s | 500080 ko | letin.vo
+ 0m00.89s | 481312 ko | PCUICInduction.vo
+ 0m00.89s | 500252 ko | bug7.vo
+ 0m00.89s | 500068 ko | mutind.vo
+ 0m00.88s | 500120 ko | case.vo
+ 0m00.88s | 501748 ko | extractable.vo
+ 0m00.87s | 486460 ko | Pretty.vo
+ 0m00.86s | 500064 ko | sigma.vo
+ 0m00.85s | 500408 ko | bug6.vo
+ 0m00.84s | 497360 ko | Normal.vo
+ 0m00.84s | 500436 ko | bug8.vo
+ 0m00.82s | 498504 ko | Constants.vo
+ 0m00.81s | 500380 ko | bug2.vo
+ 0m00.81s | 500192 ko | cofix.vo
+ 0m00.80s | 502088 ko | hnf_ctor.vo
+ 0m00.79s | 479940 ko | Ast.vo
+ 0m00.79s | 500100 ko | evars.vo
+ 0m00.77s | 488076 ko | EPretty.vo
+ 0m00.75s | 450728 ko | BasicAst.vo
+ 0m00.75s | 477372 ko | PCUICAst.vo
+ 0m00.73s | 487644 ko | ETyping.vo
+ 0m00.73s | 481988 ko | TemplateMonad/Core.vo
+ 0m00.72s | 477800 ko | EAst.vo
+ 0m00.71s | 479012 ko | EInduction.vo
+ 0m00.70s | 485084 ko | EWndEval.vo
+ 0m00.70s | 481156 ko | TemplateMonad/Extractable.vo
+ 0m00.69s | 482472 ko | TemplateToPCUIC.vo
+ 0m00.60s | 433064 ko | PCUICCheckerCompleteness.vo
+ 0m00.60s | 437492 ko | TemplateMonad/Common.vo
+ 0m00.56s | 440168 ko | utils/MCOption.vo
+ 0m00.54s | 420452 ko | TemplateMonad.vo
+ 0m00.52s | 385340 ko | utils.vo
+ 0m00.48s | 404556 ko | utils/MCArith.vo
+ 0m00.42s | 339136 ko | utils/LibHypsNaming.vo
+ 0m00.41s | 39160 ko | gen-src/universes0.cmx
+ 0m00.33s | 45284 ko | pCUICSafeChecker.cmx
+ 0m00.30s | 270156 ko | utils/MCString.vo
+ 0m00.29s | 238116 ko | Loader.vo
+ 0m00.27s | 43056 ko | pCUICSafeConversion.cmx
+0m00.240s | N/A | denoter.cmx
+ 0m00.19s | 34468 ko | gen-src/quoter.cmx
+ 0m00.17s | 33044 ko | constr_quoter.cmx
+ 0m00.15s | 25208 ko | gen-src/binPos.cmx
+ 0m00.15s | 38520 ko | run_template_monad.cmx
+ 0m00.14s | 31740 ko | constr_denoter.cmx
+ 0m00.14s | 25372 ko | gen-src/all_Forall.cmx
+ 0m00.14s | 149456 ko | monad_utils.vo
+ 0m00.14s | 31636 ko | wGraph.cmx
+ 0m00.13s | 23892 ko | gen-src/binPosDef.cmx
+ 0m00.13s | 20232 ko | metacoq_erasure_plugin.cmxs
+ 0m00.12s | 22784 ko | gen-src/binInt.cmx
+ 0m00.11s | 31208 ko | erasureFunction.cmx
+ 0m00.11s | 31632 ko | gen-src/metacoq_template_plugin.cmx
+ 0m00.11s | 20224 ko | metacoq_safechecker_plugin.cmxs
+ 0m00.11s | 30984 ko | uGraph0.cmx
+ 0m00.10s | 28644 ko | eAst.cmx
+ 0m00.10s | 33140 ko | g_template_coq.cmx
+ 0m00.10s | 27364 ko | gen-src/ast_quoter.cmx
+ 0m00.10s | 20796 ko | gen-src/binNat.cmx
+ 0m00.10s | 18416 ko | gen-src/metacoq_template_plugin.cmxs
+ 0m00.10s | 27228 ko | gen-src/myPlugin.cmx
+ 0m00.10s | 26404 ko | gen-src/quoter.cmo
+ 0m00.09s | 26992 ko | ePretty.cmx
+ 0m00.09s | 35368 ko | g_metacoq_safechecker.cmx
+ 0m00.09s | 24572 ko | gen-src/ast0.cmx
+ 0m00.09s | 20020 ko | gen-src/hexadecimal.cmx
+ 0m00.09s | 30504 ko | gen-src/run_extractable.cmx
+ 0m00.09s | 29148 ko | pCUICPretty.cmx
+ 0m00.09s | 29852 ko | safeErasureFunction.cmx
+ 0m00.09s | 88348 ko | utils/MCProd.vo
+ 0m00.08s | 27288 ko | gen-src/ast_denoter.cmx
+ 0m00.08s | 24324 ko | gen-src/denoter.cmx
+ 0m00.08s | 21352 ko | gen-src/mSetList.cmx
+ 0m00.08s | 22020 ko | gen-src/pretty.cmx
+ 0m00.08s | 32668 ko | metacoq_erasure_plugin.cmx
+ 0m00.08s | 26392 ko | pCUICAstUtils.cmx
+ 0m00.08s | 27752 ko | pCUICTyping.cmx
+ 0m00.07s | 19912 ko | gen-src/peanoNat.cmx
+ 0m00.07s | 27504 ko | gen-src/plugin_core.cmx
+ 0m00.07s | 27792 ko | pCUICSafeReduce.cmx
+ 0m00.07s | 30244 ko | safeTemplateErasure.cmx
+ 0m00.06s | 24684 ko | eTyping.cmx
+ 0m00.06s | 22652 ko | erasureFunction.cmi
+ 0m00.06s | 27844 ko | g_demo_plugin.cmx
+ 0m00.06s | 30052 ko | g_metacoq_erasure.cmx
+ 0m00.06s | 25216 ko | mSetWeakList.cmx
+ 0m00.06s | 30436 ko | metacoq_safechecker_plugin.cmx
+ 0m00.06s | 26256 ko | pCUICEquality.cmx
+ 0m00.06s | 26244 ko | pCUICLiftSubst.cmx
+ 0m00.06s | 26048 ko | pCUICPosition.cmx
+ 0m00.06s | 23232 ko | pCUICSafeConversion.cmi
+ 0m00.06s | 27380 ko | pCUICSafeRetyping.cmx
+ 0m00.06s | 25408 ko | safeTemplateChecker.cmx
+ 0m00.06s | 26384 ko | templateToPCUIC.cmx
+ 0m00.06s | 24780 ko | uGraph0.cmi
+ 0m00.05s | 64048 ko | Lens.vo
+ 0m00.05s | 24800 ko | eAstUtils.cmx
+ 0m00.05s | 25192 ko | eLiftSubst.cmx
+ 0m00.05s | 22440 ko | gen-src/ast_quoter.cmo
+ 0m00.05s | 20324 ko | gen-src/mSetInterface.cmx
+ 0m00.05s | 26032 ko | pCUICAst.cmx
+ 0m00.05s | 25140 ko | pCUICChecker.cmx
+ 0m00.05s | 24336 ko | pCUICReflect.cmx
+ 0m00.05s | 24300 ko | pCUICSafeChecker.cmi
+ 0m00.05s | 21556 ko | pCUICSafeReduce.cmi
+ 0m00.05s | 25180 ko | pCUICUnivSubst.cmx
+ 0m00.05s | 21660 ko | safeErasureFunction.cmi
+ 0m00.05s | 23148 ko | safeTemplateErasure.cmi
+ 0m00.05s | 21328 ko | templateToPCUIC.cmi
+ 0m00.05s | 16040 ko | template_coq.cmxs
+ 0m00.05s | 24076 ko | typing0.cmx
+ 0m00.05s | 63096 ko | utils/MCPrelude.vo
+ 0m00.05s | 68156 ko | utils/MCRelations.vo
+ 0m00.05s | 22824 ko | wGraph.cmi
+ 0m00.04s | 62716 ko | ExtractableLoader.vo
+ 0m00.04s | 61716 ko | config.vo
+ 0m00.04s | 22020 ko | constr_reification.cmx
+ 0m00.04s | 21964 ko | demo_plugin.cmx
+ 0m00.04s | 20540 ko | ePretty.cmi
+ 0m00.04s | 23032 ko | extract.cmx
+ 0m00.04s | 19608 ko | gen-src/astUtils.cmx
+ 0m00.04s | 18780 ko | gen-src/extractable.cmx
+ 0m00.04s | 22124 ko | gen-src/lens.cmx
+ 0m00.04s | 19008 ko | gen-src/liftSubst.cmx
+ 0m00.04s | 19600 ko | gen-src/mSetProperties.cmx
+ 0m00.04s | 20208 ko | gen-src/myPlugin.cmi
+ 0m00.04s | 18464 ko | gen-src/nat0.cmx
+ 0m00.04s | 22136 ko | gen-src/tm_util.cmx
+ 0m00.04s | 18504 ko | gen-src/universes0.cmi
+ 0m00.04s | 20108 ko | mSetWeakList.cmi
+ 0m00.04s | 22452 ko | monad_utils.cmx
+ 0m00.04s | 21244 ko | pCUICAst.cmi
+ 0m00.04s | 20412 ko | pCUICAstUtils.cmi
+ 0m00.04s | 21236 ko | pCUICChecker.cmi
+ 0m00.04s | 20560 ko | pCUICPretty.cmi
+ 0m00.04s | 21400 ko | pCUICTyping.cmi
+ 0m00.04s | 20348 ko | safeTemplateChecker.cmi
+ 0m00.04s | 19228 ko | utils.cmi
+ 0m00.04s | 22212 ko | utils.cmx
+ 0m00.04s | 62924 ko | utils/MCEquality.vo
+ 0m00.04s | 61384 ko | utils/MCSquash.vo
+ 0m00.03s | 19340 ko | classes0.cmi
+ 0m00.03s | 20908 ko | eAst.cmi
+ 0m00.03s | 19496 ko | eAstUtils.cmi
+ 0m00.03s | 20252 ko | eTyping.cmi
+ 0m00.03s | 19268 ko | eqDecInstances.cmi
+ 0m00.03s | 22196 ko | eqDecInstances.cmx
+ 0m00.03s | 19396 ko | eqdepFacts.cmi
+ 0m00.03s | 22072 ko | eqdepFacts.cmx
+ 0m00.03s | 21060 ko | extract.cmi
+ 0m00.03s | 18744 ko | gen-src/basicAst.cmx
+ 0m00.03s | 17936 ko | gen-src/decimal.cmx
+ 0m00.03s | 19716 ko | gen-src/environment.cmx
+ 0m00.03s | 19172 ko | gen-src/lens.cmi
+ 0m00.03s | 17796 ko | gen-src/list0.cmx
+ 0m00.03s | 18548 ko | gen-src/univSubst0.cmx
+ 0m00.03s | 19324 ko | init.cmi
+ 0m00.03s | 22188 ko | init.cmx
+ 0m00.03s | 19272 ko | monad_utils.cmi
+ 0m00.03s | 20372 ko | pCUICEquality.cmi
+ 0m00.03s | 20444 ko | pCUICLiftSubst.cmi
+ 0m00.03s | 22044 ko | pCUICNormal.cmx
+ 0m00.03s | 20488 ko | pCUICPosition.cmi
+ 0m00.03s | 20240 ko | pCUICReflect.cmi
+ 0m00.03s | 19348 ko | pCUICSafeLemmata.cmi
+ 0m00.03s | 21604 ko | pCUICSafeRetyping.cmi
+ 0m00.03s | 20308 ko | pCUICUnivSubst.cmi
+ 0m00.03s | 21812 ko | tm_util.cmx
+ 0m00.03s | 20300 ko | typing0.cmi
+ 0m00.02s | 21960 ko | classes0.cmx
+ 0m00.02s | 19300 ko | eLiftSubst.cmi
+ 0m00.02s | 16900 ko | gen-src/ascii.cmx
+ 0m00.02s | 16836 ko | gen-src/cRelationClasses.cmx
+ 0m00.02s | 16420 ko | gen-src/common0.cmx
+ 0m00.02s | 16472 ko | gen-src/mCString.cmx
+ 0m00.02s | 15244 ko | gen-src/mSetInterface.cmi
+ 0m00.02s | 15212 ko | gen-src/mSetProperties.cmi
+ 0m00.02s | 17196 ko | gen-src/plugin_core.cmi
+ 0m00.02s | 16332 ko | gen-src/specif.cmx
+ 0m00.02s | 16504 ko | gen-src/string0.cmx
+ 0m00.02s | 18448 ko | gen-src/tm_util.cmo
+ 0m00.02s | 19224 ko | pCUICCumulativity.cmi
+ 0m00.02s | 21940 ko | pCUICCumulativity.cmx
+ 0m00.02s | 19304 ko | pCUICNormal.cmi
+ 0m00.02s | 22084 ko | pCUICSafeLemmata.cmx
+ 0m00.02s | 19220 ko | ssrbool.cmi
+ 0m00.02s | 21912 ko | ssrbool.cmx
+ 0m00.02s | 19956 ko | template_coq.cmx
+ 0m00.01s | 14256 ko | demo_plugin.cmxs
+ 0m00.01s | 14992 ko | gen-src/all_Forall.cmi
+ 0m00.01s | 15204 ko | gen-src/ast0.cmi
+ 0m00.01s | 14404 ko | gen-src/basicAst.cmi
+ 0m00.01s | 13564 ko | gen-src/binInt.cmi
+ 0m00.01s | 14264 ko | gen-src/binPos.cmi
+ 0m00.01s | 15772 ko | gen-src/bool.cmx
+ 0m00.01s | 13388 ko | gen-src/cRelationClasses.cmi
+ 0m00.01s | 15536 ko | gen-src/compare_dec.cmx
+ 0m00.01s | 16200 ko | gen-src/datatypes.cmx
+ 0m00.01s | 14988 ko | gen-src/environment.cmi
+ 0m00.01s | 15840 ko | gen-src/equalities.cmx
+ 0m00.01s | 13404 ko | gen-src/list0.cmi
+ 0m00.01s | 15672 ko | gen-src/mCCompare.cmx
+ 0m00.01s | 16712 ko | gen-src/mCList.cmx
+ 0m00.01s | 15708 ko | gen-src/mCProd.cmx
+ 0m00.01s | 13748 ko | gen-src/mSetFacts.cmi
+ 0m00.01s | 17012 ko | gen-src/mSetFacts.cmx
+ 0m00.01s | 15760 ko | gen-src/mSetList.cmi
+ 0m00.01s | 14056 ko | gen-src/metacoq_template_plugin.cmxa
+ 0m00.01s | 15860 ko | gen-src/orderedType0.cmx
+ 0m00.01s | 13748 ko | gen-src/orders.cmi
+ 0m00.01s | 16768 ko | gen-src/orders.cmx
+ 0m00.01s | 16032 ko | gen-src/ordersFacts.cmx
+ 0m00.01s | 15844 ko | gen-src/ordersTac.cmx
+ 0m00.01s | 11760 ko | gen-src/reification.cmo
+ 0m00.01s | 14740 ko | gen-src/reification.cmx
+ 0m00.01s | 13824 ko | gen-src/run_extractable.cmi
+ 0m00.01s | 13460 ko | i
+ 0m00.01s | 17068 ko | plugin_core.cmi
+ 0m00.01s | 14796 ko | reification.cmx
+ 0m00.00s | 13200 ko | demo_plugin.cmxa
+ 0m00.00s | 12228 ko | gen-src/ascii.cmi
+ 0m00.00s | 14040 ko | gen-src/astUtils.cmi
+ 0m00.00s | 11244 ko | gen-src/basics.cmi
+ 0m00.00s | 13444 ko | gen-src/binNat.cmi
+ 0m00.00s | 11340 ko | gen-src/binNums.cmi
+ 0m00.00s | 13536 ko | gen-src/binPosDef.cmi
+ 0m00.00s | 11744 ko | gen-src/bool.cmi
+ 0m00.00s | 13492 ko | gen-src/common0.cmi
+ 0m00.00s | 11720 ko | gen-src/compare_dec.cmi
+ 0m00.00s | 11112 ko | gen-src/config0.cmi
+ 0m00.00s | 14648 ko | gen-src/config0.cmx
+ 0m00.00s | 12948 ko | gen-src/datatypes.cmi
+ 0m00.00s | 12404 ko | gen-src/decimal.cmi
+ 0m00.00s | 13240 ko | gen-src/equalities.cmi
+ 0m00.00s | 13580 ko | gen-src/extractable.cmi
+ 0m00.00s | 13064 ko | gen-src/hexadecimal.cmi
+ 0m00.00s | 13680 ko | gen-src/liftSubst.cmi
+ 0m00.00s | 11524 ko | gen-src/logic0.cmi
+ 0m00.00s | 15516 ko | gen-src/logic0.cmx
+ 0m00.00s | 11644 ko | gen-src/mCCompare.cmi
+ 0m00.00s | 13612 ko | gen-src/mCList.cmi
+ 0m00.00s | 12200 ko | gen-src/mCOption.cmi
+ 0m00.00s | 11228 ko | gen-src/mCPrelude.cmi
+ 0m00.00s | 14368 ko | gen-src/mCPrelude.cmx
+ 0m00.00s | 11620 ko | gen-src/mCProd.cmi
+ 0m00.00s | 11080 ko | gen-src/mCRelations.cmi
+ 0m00.00s | 14184 ko | gen-src/mCRelations.cmx
+ 0m00.00s | 11712 ko | gen-src/mCString.cmi
+ 0m00.00s | 13776 ko | gen-src/mSetDecide.cmi
+ 0m00.00s | 11900 ko | gen-src/numeral.cmi
+ 0m00.00s | 15820 ko | gen-src/numeral.cmx
+ 0m00.00s | 12108 ko | gen-src/orderedType0.cmi
+ 0m00.00s | 13444 ko | gen-src/ordersFacts.cmi
+ 0m00.00s | 11760 ko | gen-src/ordersLists.cmi
+ 0m00.00s | 15096 ko | gen-src/ordersLists.cmx
+ 0m00.00s | 12464 ko | gen-src/ordersTac.cmi
+ 0m00.00s | 15060 ko | gen-src/pretty.cmi
+ 0m00.00s | 13160 ko | gen-src/specif.cmi
+ 0m00.00s | 12236 ko | gen-src/string0.cmi
+ 0m00.00s | 14128 ko | gen-src/univSubst0.cmi
+ 0m00.00s | 13520 ko | metacoq_erasure_plugin.cmxa
+ 0m00.00s | 13624 ko | metacoq_safechecker_plugin.cmxa
+ 0m00.00s | 13148 ko | run_template_monad.cmi
+ 0m00.00s | 13520 ko | template_coq.cmxa
+ 0m00.00s | 15004 ko | template_monad.cmi
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.in b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.in
new file mode 100644
index 0000000000..47d0e09e1a
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/007-no-output-sync/time-of-build.log.in
@@ -0,0 +1,5629 @@
+Running with gitlab-runner 11.9.2 (fa86510e)
+ on roquableu curNbQZR
+Using Docker executor with image registry.gitlab.com/coq/coq:bionic_coq-V2020-08-28-V92 ...
+Pulling docker image registry.gitlab.com/coq/coq:bionic_coq-V2020-08-28-V92 ...
+Using docker image sha256:f232f9802a06400390b5d6afa5fd280d73c89890309a27e840013ef2e9809c91 for registry.gitlab.com/coq/coq:bionic_coq-V2020-08-28-V92 ...
+section_start:1598963621:prepare_script Running on runner-curNbQZR-project-6138686-concurrent-1 via roquableu...
+section_end:1598963624:prepare_script section_start:1598963624:get_sources Reinitialized existing Git repository in /builds/coq/coq/.git/
+Removing _build_ci/
+Removing _install_ci/
+Removing config/Makefile
+Removing config/coq_config.ml
+Removing config/coq_config.py
+Removing test-suite/misc/universes/all_stdlib.v
+Removing time-of-build.log
+Removing tools/TimeFileMaker.pyc
+Clean repository
+Fetching changes with git depth set to 10...
+fatal: remote origin already exists.
+Auto packing the repository in background for optimum performance.
+See "git help gc" for manual housekeeping.
+Checking out fdbbc0cb as pr-12653...
+
+Skipping Git submodules setup
+section_end:1598963638:get_sources section_start:1598963638:restore_cache section_end:1598963641:restore_cache section_start:1598963641:download_artifacts Downloading artifacts for build:base (713526714)...
+Downloading artifacts from coordinator... ok  id=713526714 responseStatus=200 OK token=CwEA_cmf
+Downloading artifacts for plugin:ci-equations (713526793)...
+Downloading artifacts from coordinator... ok  id=713526793 responseStatus=200 OK token=hxEjzCme
+section_end:1598963691:download_artifacts section_start:1598963691:build_script $ cat /proc/{cpu,mem}info || true
+processor : 0
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.059
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 0
+cpu cores : 6
+apicid : 0
+initial apicid : 0
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 1
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.128
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 1
+cpu cores : 6
+apicid : 2
+initial apicid : 2
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 2
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.132
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 2
+cpu cores : 6
+apicid : 4
+initial apicid : 4
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 3
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.131
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 3
+cpu cores : 6
+apicid : 6
+initial apicid : 6
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 4
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.127
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 4
+cpu cores : 6
+apicid : 8
+initial apicid : 8
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 5
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.186
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 5
+cpu cores : 6
+apicid : 10
+initial apicid : 10
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 6
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.248
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 0
+cpu cores : 6
+apicid : 32
+initial apicid : 32
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 7
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.131
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 1
+cpu cores : 6
+apicid : 34
+initial apicid : 34
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 8
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.137
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 2
+cpu cores : 6
+apicid : 36
+initial apicid : 36
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 9
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.147
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 3
+cpu cores : 6
+apicid : 38
+initial apicid : 38
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 10
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.129
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 4
+cpu cores : 6
+apicid : 40
+initial apicid : 40
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 11
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.131
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 5
+cpu cores : 6
+apicid : 42
+initial apicid : 42
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 12
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.062
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 0
+cpu cores : 6
+apicid : 1
+initial apicid : 1
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 13
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.084
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 1
+cpu cores : 6
+apicid : 3
+initial apicid : 3
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 14
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3194.423
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 2
+cpu cores : 6
+apicid : 5
+initial apicid : 5
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 15
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.132
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 3
+cpu cores : 6
+apicid : 7
+initial apicid : 7
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 16
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.170
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 4
+cpu cores : 6
+apicid : 9
+initial apicid : 9
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 17
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3191.946
+cache size : 15360 KB
+physical id : 0
+siblings : 12
+core id : 5
+cpu cores : 6
+apicid : 11
+initial apicid : 11
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5785.73
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 18
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.131
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 0
+cpu cores : 6
+apicid : 33
+initial apicid : 33
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 19
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.134
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 1
+cpu cores : 6
+apicid : 35
+initial apicid : 35
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 20
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.123
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 2
+cpu cores : 6
+apicid : 37
+initial apicid : 37
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 21
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.131
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 3
+cpu cores : 6
+apicid : 39
+initial apicid : 39
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 22
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3192.149
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 4
+cpu cores : 6
+apicid : 41
+initial apicid : 41
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+processor : 23
+vendor_id : GenuineIntel
+cpu family : 6
+model : 45
+model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
+stepping : 7
+microcode : 0x718
+cpu MHz : 3195.640
+cache size : 15360 KB
+physical id : 1
+siblings : 12
+core id : 5
+cpu cores : 6
+apicid : 43
+initial apicid : 43
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
+bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
+bogomips : 5792.29
+clflush size : 64
+cache_alignment : 64
+address sizes : 46 bits physical, 48 bits virtual
+power management:
+
+MemTotal: 65879492 kB
+MemFree: 10395980 kB
+MemAvailable: 59790724 kB
+Buffers: 12390688 kB
+Cached: 18542568 kB
+SwapCached: 37680 kB
+Active: 20395936 kB
+Inactive: 14205172 kB
+Active(anon): 3459064 kB
+Inactive(anon): 165896 kB
+Active(file): 16936872 kB
+Inactive(file): 14039276 kB
+Unevictable: 48 kB
+Mlocked: 48 kB
+SwapTotal: 4194300 kB
+SwapFree: 3334988 kB
+Dirty: 13300 kB
+Writeback: 0 kB
+AnonPages: 3648112 kB
+Mapped: 555304 kB
+Shmem: 784 kB
+KReclaimable: 19083648 kB
+Slab: 20438420 kB
+SReclaimable: 19083648 kB
+SUnreclaim: 1354772 kB
+KernelStack: 16012 kB
+PageTables: 33208 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 37134044 kB
+Committed_AS: 10963564 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed: 161980 kB
+VmallocChunk: 0 kB
+Percpu: 137728 kB
+HardwareCorrupted: 0 kB
+AnonHugePages: 0 kB
+ShmemHugePages: 0 kB
+ShmemPmdMapped: 0 kB
+FileHugePages: 0 kB
+FilePmdMapped: 0 kB
+CmaTotal: 0 kB
+CmaFree: 0 kB
+HugePages_Total: 0
+HugePages_Free: 0
+HugePages_Rsvd: 0
+HugePages_Surp: 0
+Hugepagesize: 2048 kB
+Hugetlb: 0 kB
+DirectMap4k: 10120980 kB
+DirectMap2M: 56909824 kB
+DirectMap1G: 0 kB
+$ ls -a
+.
+..
+.git
+.gitattributes
+.github
+.gitignore
+.gitlab-ci.yml
+.mailmap
+.merlin.in
+.ocamlformat
+.ocamlinit
+CODE_OF_CONDUCT.md
+CONTRIBUTING.md
+CREDITS
+INSTALL.md
+LICENSE
+META.coq.in
+Makefile
+Makefile.build
+Makefile.checker
+Makefile.ci
+Makefile.common
+Makefile.dev
+Makefile.doc
+Makefile.dune
+Makefile.ide
+Makefile.install
+Makefile.make
+Makefile.vofiles
+README.md
+_build_ci
+_install_ci
+azure-pipelines.yml
+checker
+clib
+config
+configure
+configure.ml
+coq-doc.opam
+coq.opam
+coq.opam.docker
+coqide-server.opam
+coqide.opam
+coqpp
+default.nix
+dev
+doc
+dune
+dune-project
+engine
+gramlib
+ide
+install.sh
+interp
+kernel
+lib
+library
+man
+parsing
+plugins
+pretyping
+printing
+proofs
+shell.nix
+stm
+tactics
+test-suite
+theories
+tools
+topbin
+toplevel
+user-contrib
+vernac
+$ printenv -0 | sort -z | tr '\0' '\n'
+BASE_ONLY_OPAM=elpi.1.11.0
+BASE_OPAM=num zarith.1.9.1 ocamlfind.1.8.1 ounit2.2.2.3 odoc.1.5.0
+BASE_OPAM_EDGE=dune.2.5.1 dune-release.1.3.3 ocamlformat.0.14.2
+CACHEKEY=bionic_coq-V2020-08-28-V92
+CI=true
+CI_API_V4_URL=https://gitlab.com/api/v4
+CI_BUILD_BEFORE_SHA=727d9e5de2b64fd98bc085089b92891bcbad095f
+CI_BUILD_ID=713656562
+CI_BUILD_NAME=plugin:ci-metacoq
+CI_BUILD_REF=fdbbc0cbc3906704e6e4e92d5bf2f6ffe8476357
+CI_BUILD_REF_NAME=pr-12653
+CI_BUILD_REF_SLUG=pr-12653
+CI_BUILD_STAGE=stage-3
+CI_BUILD_TOKEN=[MASKED]
+CI_COMMIT_BEFORE_SHA=727d9e5de2b64fd98bc085089b92891bcbad095f
+CI_COMMIT_BRANCH=pr-12653
+CI_COMMIT_DESCRIPTION=
+Bot merge 0d30f79268fea18ef99c040a859956f61c3d978a and 7c1779e124fe4bf2733af12488b18bee92840127
+CI_COMMIT_MESSAGE=[CI merge] PR #12653: Syntax for specifying cumulative inductives
+
+Bot merge 0d30f79268fea18ef99c040a859956f61c3d978a and 7c1779e124fe4bf2733af12488b18bee92840127
+
+CI_COMMIT_REF_NAME=pr-12653
+CI_COMMIT_REF_PROTECTED=false
+CI_COMMIT_REF_SLUG=pr-12653
+CI_COMMIT_SHA=fdbbc0cbc3906704e6e4e92d5bf2f6ffe8476357
+CI_COMMIT_SHORT_SHA=fdbbc0cb
+CI_COMMIT_TITLE=[CI merge] PR #12653: Syntax for specifying cumulative inductives
+CI_CONFIG_PATH=.gitlab-ci.yml
+CI_DEFAULT_BRANCH=master
+CI_DISPOSABLE_ENVIRONMENT=true
+CI_JOB_ID=713656562
+CI_JOB_JWT=[MASKED]
+CI_JOB_NAME=plugin:ci-metacoq
+CI_JOB_STAGE=stage-3
+CI_JOB_TOKEN=[MASKED]
+CI_JOB_URL=https://gitlab.com/coq/coq/-/jobs/713656562
+CI_NODE_TOTAL=1
+CI_OPAM=menhir.20190626 ocamlgraph.1.8.8
+CI_PAGES_DOMAIN=gitlab.io
+CI_PAGES_URL=https://coq.gitlab.io/coq
+CI_PIPELINE_ID=184301476
+CI_PIPELINE_IID=17942
+CI_PIPELINE_SOURCE=push
+CI_PIPELINE_URL=https://gitlab.com/coq/coq/-/pipelines/184301476
+CI_PROJECT_DIR=/builds/coq/coq
+CI_PROJECT_ID=6138686
+CI_PROJECT_NAME=coq
+CI_PROJECT_NAMESPACE=coq
+CI_PROJECT_PATH=coq/coq
+CI_PROJECT_PATH_SLUG=coq-coq
+CI_PROJECT_REPOSITORY_LANGUAGES=ocaml,coq,shell,tex,c
+CI_PROJECT_ROOT_NAMESPACE=coq
+CI_PROJECT_TITLE=coq
+CI_PROJECT_URL=https://gitlab.com/coq/coq
+CI_PROJECT_VISIBILITY=public
+CI_REGISTRY=registry.gitlab.com
+CI_REGISTRY_IMAGE=registry.gitlab.com/coq/coq
+CI_REGISTRY_PASSWORD=[MASKED]
+CI_REGISTRY_USER=gitlab-ci-token
+CI_REPOSITORY_URL=https://gitlab-ci-token:[MASKED]@gitlab.com/coq/coq.git
+CI_RUNNER_DESCRIPTION=roquableu
+CI_RUNNER_EXECUTABLE_ARCH=linux/amd64
+CI_RUNNER_ID=816543
+CI_RUNNER_REVISION=fa86510e
+CI_RUNNER_TAGS=
+CI_RUNNER_VERSION=11.9.2
+CI_SERVER=yes
+CI_SERVER_HOST=gitlab.com
+CI_SERVER_NAME=GitLab
+CI_SERVER_PORT=443
+CI_SERVER_PROTOCOL=https
+CI_SERVER_REVISION=e937f778b66
+CI_SERVER_TLS_CA_FILE=/builds/coq/coq.tmp/CI_SERVER_TLS_CA_FILE
+CI_SERVER_URL=https://gitlab.com
+CI_SERVER_VERSION=13.4.0-pre
+CI_SERVER_VERSION_MAJOR=13
+CI_SERVER_VERSION_MINOR=4
+CI_SERVER_VERSION_PATCH=0
+COMPILER=4.05.0
+COMPILER_EDGE=4.10.0
+COQIDE_OPAM=cairo2.0.6.1 lablgtk3-sourceview3.3.1.0
+DEBIAN_FRONTEND=noninteractive
+FF_K8S_USE_ENTRYPOINT_OVER_COMMAND=true
+FULL_CI=true
+GITLAB_CI=true
+GITLAB_FEATURES=audit_events,blocked_issues,burndown_charts,code_owners,code_review_analytics,contribution_analytics,description_diffs,elastic_search,group_activity_analytics,group_bulk_edit,group_burndown_charts,group_webhooks,issuable_default_templates,issue_weights,iterations,jenkins_integration,ldap_group_sync,member_lock,merge_request_approvers,milestone_charts,multiple_issue_assignees,multiple_ldap_servers,multiple_merge_request_assignees,project_merge_request_analytics,protected_refs_for_users,push_rules,repository_mirrors,repository_size_limit,seat_link,send_emails_from_admin_area,scoped_issue_board,usage_quotas,visual_review_app,wip_limits,adjourned_deletion_for_projects_and_groups,admin_audit_log,auditor_user,blocking_merge_requests,board_assignee_lists,board_milestone_lists,ci_cd_projects,ci_secrets_management,cluster_agents,cluster_deployments,code_owner_approval_required,commit_committer_check,compliance_framework,cross_project_pipelines,custom_file_templates,custom_file_templates_for_namespace,custom_project_templates,cycle_analytics_for_groups,db_load_balancing,default_branch_protection_restriction_in_groups,default_project_deletion_protection,dependency_proxy,deploy_board,disable_name_update_for_users,email_additional_text,epics,extended_audit_events,external_authorization_service_api_management,feature_flags,file_locks,geo,generic_alert_fingerprinting,github_project_service_integration,group_allowed_email_domains,group_coverage_reports,group_forking_protection,group_ip_restriction,group_merge_request_analytics,group_project_templates,group_saml,issues_analytics,jira_dev_panel_integration,jira_issues_integration,ldap_group_sync_filter,merge_pipelines,merge_request_performance_metrics,admin_merge_request_approvers_rules,merge_trains,metrics_reports,multiple_approval_rules,multiple_group_issue_boards,object_storage,operations_dashboard,opsgenie_integration,package_forwarding,pages_size_limit,productivity_analytics,project_aliases,protected_environments,reject_unsigned_commits,required_ci_templates,scoped_labels,smartcard_auth,group_timelogs,type_of_work_analytics,unprotection_restrictions,ci_project_subscriptions,container_scanning,coverage_fuzzing,credentials_inventory,dast,dependency_scanning,enterprise_templates,api_fuzzing,group_level_compliance_dashboard,incident_management,insights,issuable_health_status,license_scanning,personal_access_token_api_management,personal_access_token_expiration_policy,enforce_pat_expiration,prometheus_alerts,pseudonymizer,release_evidence_test_artifacts,report_approver_rules,requirements,sast,secret_detection,security_dashboard,security_on_demand_scans,status_page,subepics,threat_monitoring,tracing,quality_management
+GITLAB_USER_EMAIL=gaetan.gilbert@skyskimmer.net
+GITLAB_USER_ID=1343245
+GITLAB_USER_LOGIN=SkySkimmer
+GITLAB_USER_NAME=Gaëtan Gilbert
+GIT_DEPTH=10
+HOME=/root
+HOSTNAME=runner-curNbQZR-project-6138686-concurrent-1
+IMAGE=registry.gitlab.com/coq/coq:bionic_coq-V2020-08-28-V92
+NJOBS=2
+OLDPWD=/
+OPAMJOBS=2
+OPAMROOT=/root/.opamcache
+OPAMROOTISOK=true
+OPAMYES=true
+OPAM_SWITCH=base
+OPAM_VARIANT=
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+PWD=/builds/coq/coq
+SHLVL=1
+SKIP_DOCKER=true
+UNRELIABLE=enabled
+WINDOWS=enabled
+WINDOWS_ALL_ADDONS=disabled
+_=/usr/bin/printenv
+$ declare -A switch_table
+$ switch_table=( ["base"]="$COMPILER" ["edge"]="$COMPILER_EDGE" )
+$ opam switch set -y "${switch_table[$OPAM_SWITCH]}$OPAM_VARIANT"
+# Run eval $(opam env) to update the current shell environment
+$ eval $(opam env)
+$ opam list
+# Packages matching: installed
+# Name # Installed # Synopsis
+astring 0.8.5 Alternative String module for OCaml
+base-bigarray base
+base-bytes base Bytes library distributed with the OCaml compiler
+base-num base Num library distributed with the OCaml compiler
+base-threads base
+base-unix base
+cairo2 0.6.1 Binding to Cairo, a 2D Vector Graphics Library
+camlp5 7.12 Preprocessor-pretty-printer of OCaml
+cmdliner 1.0.4 Declarative definition of command line interfaces for OCaml
+conf-cairo 1 Virtual package relying on a Cairo system installation
+conf-gmp 1 Virtual package relying on a GMP lib system installation
+conf-gtk3 18 Virtual package relying on GTK+ 3
+conf-gtksourceview3 0+2 Virtual package relying on a GtkSourceView-3 system installation
+conf-m4 1 Virtual package relying on m4
+conf-perl 1 Virtual package relying on perl
+conf-pkg-config 1.3 Virtual package relying on pkg-config installation
+cppo 1.6.6 Code preprocessor like cpp for OCaml
+dune 2.7.0 Fast, portable, and opinionated build system
+dune-configurator 2.7.0 Helper library for gathering system configuration
+elpi 1.11.0 ELPI - Embeddable λProlog Interpreter
+fpath 0.7.2 File system paths for OCaml
+lablgtk3 3.1.0 OCaml interface to GTK+3
+lablgtk3-sourceview3 3.1.0 OCaml interface to GTK+ gtksourceview library
+menhir 20190626 An LR(1) parser generator
+num 0 The Num library for arbitrary-precision integer and rational arithmetic
+ocaml 4.05.0 The OCaml compiler (virtual package)
+ocaml-base-compiler 4.05.0 Official 4.05.0 release
+ocaml-compiler-libs v0.12.1 OCaml compiler libraries repackaged
+ocaml-config 1 OCaml Switch Configuration
+ocaml-migrate-parsetree 1.7.3 Convert OCaml parsetrees between different versions
+ocaml-secondary-compiler 4.08.1-1 OCaml 4.08.1 Secondary Switch Compiler
+ocamlbuild 0.14.0 OCamlbuild is a build system with builtin rules to easily build most OCaml projects.
+ocamlfind 1.8.1 A library manager for OCaml
+ocamlfind-secondary 1.8.1 ocamlfind support for ocaml-secondary-compiler
+ocamlgraph 1.8.8 A generic graph library for OCaml
+odoc 1.5.0 OCaml documentation generator
+ounit2 2.2.3 OUnit testing framework
+ppx_derivers 1.2.1 Shared [@@deriving] plugin registry
+ppx_deriving 4.5 Type-driven code generation for OCaml >=4.02.2
+ppx_tools 5.0+4.05.0 Tools for authors of ppx rewriters and other syntactic tools
+ppxfind 1.4 Tool combining ocamlfind and ppx
+ppxlib 0.15.0 Standard library for ppx rewriters
+re 1.9.0 RE is a regular expression library for OCaml
+result 1.5 Compatibility Result module
+seq 0.2.2 Compatibility package for OCaml's standard iterator type starting from 4.07
+sexplib0 v0.14.0 Library containing the definition of S-expressions and some base converters
+stdlib-shims 0.1.0 Backport some of the new stdlib features to older compiler
+topkg 1.0.2 The transitory OCaml software packager
+tyxml 4.4.0 TyXML is a library for building correct HTML and SVG documents
+uchar 0.0.2 Compatibility library for OCaml's Uchar module
+uutf 1.0.2 Non-blocking streaming Unicode codec for OCaml
+zarith 1.9.1 Implements arithmetic and logical operations over arbitrary-precision integers
+$ opam config list
+
+<><> Global opam variables ><><><><><><><><><><><><><><><><><><><><><><><><><><>
+arch x86_64 # Inferred from system
+jobs 2 # The number of parallel jobs set up in opam configuration
+make make # The 'make' command to use
+opam-version 2.0.6 # The currently running opam version
+os linux # Inferred from system
+os-distribution ubuntu # Inferred from system
+os-family debian # Inferred from system
+os-version 18.04 # Inferred from system
+root /root/.opamcache # The current opam root directory
+switch 4.05.0 # The identifier of the current switch
+sys-ocaml-version # OCaml version present on your system independently of opam, if any
+
+<><> Configuration variables from the current switch ><><><><><><><><><><><><><>
+prefix /root/.opamcache/4.05.0
+lib /root/.opamcache/4.05.0/lib
+bin /root/.opamcache/4.05.0/bin
+sbin /root/.opamcache/4.05.0/sbin
+share /root/.opamcache/4.05.0/share
+doc /root/.opamcache/4.05.0/doc
+etc /root/.opamcache/4.05.0/etc
+man /root/.opamcache/4.05.0/man
+toplevel /root/.opamcache/4.05.0/lib/toplevel
+stublibs /root/.opamcache/4.05.0/lib/stublibs
+user root
+group root
+
+<><> Package variables ('opam config list PKG' to show) <><><><><><><><><><><><>
+PKG:name # Name of the package
+PKG:version # Version of the package
+PKG:depends # Resolved direct dependencies of the package
+PKG:installed # Whether the package is installed
+PKG:enable # Takes the value "enable" or "disable" depending on whether the package is installed
+PKG:pinned # Whether the package is pinned
+PKG:bin # Binary directory for this package
+PKG:sbin # System binary directory for this package
+PKG:lib # Library directory for this package
+PKG:man # Man directory for this package
+PKG:doc # Doc directory for this package
+PKG:share # Share directory for this package
+PKG:etc # Etc directory for this package
+PKG:build # Directory where the package was built
+PKG:hash # Hash of the package archive
+PKG:dev # True if this is a development package
+PKG:build-id # A hash identifying the precise package version with all its dependencies
+$ set -e
+$ echo 'start:coq.test'
+start:coq.test
+$ make -f Makefile.ci -j "$NJOBS" "${CI_JOB_NAME#*:}"
+./dev/ci/ci-wrapper.sh equations
+++ : 2
+++ export NJOBS
+++ '[' -n true ']'
+++ export OCAMLPATH=/builds/coq/coq/_install_ci/lib:
+++ OCAMLPATH=/builds/coq/coq/_install_ci/lib:
+++ export COQBIN=/builds/coq/coq/_install_ci/bin
+++ COQBIN=/builds/coq/coq/_install_ci/bin
+++ export CI_BRANCH=pr-12653
+++ CI_BRANCH=pr-12653
+++ [[ 12653 =~ ^[0-9]*$ ]]
+++ export CI_PULL_REQUEST=12653
+++ CI_PULL_REQUEST=12653
+++ export PATH=/builds/coq/coq/_install_ci/bin:/root/.opamcache/4.05.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+++ PATH=/builds/coq/coq/_install_ci/bin:/root/.opamcache/4.05.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+++ export COQBIN=/builds/coq/coq/_install_ci/bin/
+++ COQBIN=/builds/coq/coq/_install_ci/bin/
+++ ls -l /builds/coq/coq/_install_ci/bin/
+total 377964
+-rwxr-xr-x 1 root root 1885376 Sep 1 11:46 coq-tex
+-rwxr-xr-x 1 root root 2500248 Sep 1 11:46 coq_makefile
+-rwxr-xr-x 1 root root 24673120 Sep 1 11:46 coqc
+-rwxr-xr-x 1 root root 9648760 Sep 1 11:46 coqchk
+-rwxr-xr-x 1 root root 5855160 Sep 1 11:46 coqdep
+-rwxr-xr-x 1 root root 4413792 Sep 1 11:46 coqdoc
+-rwxr-xr-x 1 root root 11526312 Sep 1 11:47 coqide
+-rwxr-xr-x 1 root root 25110448 Sep 1 11:47 coqidetop
+-rwxr-xr-x 1 root root 25110448 Sep 1 11:47 coqidetop.opt
+-rwxr-xr-x 1 root root 449295 Sep 1 11:46 coqpp
+-rwxr-xr-x 1 root root 32153472 Sep 1 11:47 coqproofworker.byte
+-rwxr-xr-x 1 root root 24673424 Sep 1 11:46 coqproofworker.opt
+-rwxr-xr-x 1 root root 32153472 Sep 1 11:47 coqqueryworker.byte
+-rwxr-xr-x 1 root root 24673424 Sep 1 11:46 coqqueryworker.opt
+-rwxr-xr-x 1 root root 32153477 Sep 1 11:47 coqtacticworker.byte
+-rwxr-xr-x 1 root root 24673448 Sep 1 11:46 coqtacticworker.opt
+-rwxr-xr-x 1 root root 24673288 Sep 1 11:46 coqtop
+-rwxr-xr-x 1 root root 41805680 Sep 1 11:47 coqtop.byte
+-rwxr-xr-x 1 root root 24673288 Sep 1 11:46 coqtop.opt
+-rwxr-xr-x 1 root root 1821312 Sep 1 11:46 coqwc
+-rwxr-xr-x 1 root root 2827416 Sep 1 11:46 coqworkmgr
+-rwxr-xr-x 1 root root 5905992 Sep 1 11:47 fake_ide
+-rwxr-xr-x 1 root root 1757920 Sep 1 11:46 ocamllibdep
+-rwxr-xr-x 1 root root 1877056 Sep 1 11:46 votour
+++ CI_BUILD_DIR=/builds/coq/coq/_build_ci
+++ ls -l /builds/coq/coq/_build_ci
+total 4
+drwxr-xr-x 8 root root 4096 Sep 1 11:51 equations
+++ set +x
++ git_download equations
++ local PROJECT=equations
++ local DEST=/builds/coq/coq/_build_ci/equations
++ local GITURL_VAR=equations_CI_GITURL
++ local GITURL=https://github.com/SkySkimmer/Coq-Equations
++ local REF_VAR=equations_CI_REF
++ local REF=cumul-syntax
++ '[' -d /builds/coq/coq/_build_ci/equations ']'
++ echo 'Warning: download and unpacking of equations skipped because /builds/coq/coq/_build_ci/equations already exists.'
+Warning: download and unpacking of equations skipped because /builds/coq/coq/_build_ci/equations already exists.
++ cd /builds/coq/coq/_build_ci/equations
++ ./configure.sh coq
+Building Coq version (default)
++ make ci
++ '[' -z x ']'
++ command make ci
++ make ci
+make[1]: Entering directory '/builds/coq/coq/_build_ci/equations'
+make[2]: Nothing to be done for 'real-all'.
+cd test-suite && make
+cd examples && make
+make[2]: Entering directory '/builds/coq/coq/_build_ci/equations/test-suite'
+make[2]: Entering directory '/builds/coq/coq/_build_ci/equations/examples'
+make[3]: Nothing to be done for 'real-all'.
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/equations/examples'
+make[3]: Nothing to be done for 'real-all'.
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/equations/test-suite'
+make[1]: Leaving directory '/builds/coq/coq/_build_ci/equations'
++ make install
++ '[' -z x ']'
++ command make install
++ make install
+make[1]: Entering directory '/builds/coq/coq/_build_ci/equations'
+INSTALL theories/Init.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Signature.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/CoreTactics.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Prop/Logic.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Classes.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/EqDec.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/EqDecInstances.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Subterm.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/DepElim.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Tactics.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Constants.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/NoConfusion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/FunctionalInduction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Loader.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Telescopes.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/TransparentEquations.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/OpaqueEquations.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Equations.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Type/Logic.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/FunctionalExtensionality.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Relation.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Relation_Properties.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/WellFounded.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Classes.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/EqDec.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/DepElim.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Tactics.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Subterm.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Constants.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/EqDecInstances.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/NoConfusion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/FunctionalInduction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Loader.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Telescopes.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/WellFoundedInstances.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/All.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Init.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Signature.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/CoreTactics.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Prop/Logic.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Classes.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/EqDec.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/EqDecInstances.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Subterm.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/DepElim.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Tactics.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Constants.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/NoConfusion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/FunctionalInduction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Loader.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Telescopes.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/TransparentEquations.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/OpaqueEquations.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Equations.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Type/Logic.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/FunctionalExtensionality.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Relation.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Relation_Properties.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/WellFounded.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Classes.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/EqDec.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/DepElim.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Tactics.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Subterm.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Constants.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/EqDecInstances.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/NoConfusion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/FunctionalInduction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Loader.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Telescopes.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/WellFoundedInstances.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/All.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Init.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Signature.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/CoreTactics.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Prop/Logic.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Classes.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/EqDec.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/EqDecInstances.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Subterm.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/DepElim.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Tactics.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Constants.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/NoConfusion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/FunctionalInduction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Loader.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/Telescopes.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/TransparentEquations.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Prop/OpaqueEquations.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Prop
+INSTALL theories/Equations.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL theories/Type/Logic.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/FunctionalExtensionality.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Relation.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Relation_Properties.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/WellFounded.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Classes.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/EqDec.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/DepElim.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Tactics.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Subterm.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Constants.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/EqDecInstances.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/NoConfusion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/FunctionalInduction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Loader.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/Telescopes.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/WellFoundedInstances.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL theories/Type/All.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations//Type
+INSTALL src/g_equations.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_common.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/ederive.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/sigma_types.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/subterm.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/eqdec.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/depelim.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/syntax.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/context_map.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/simplify.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/splitting.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/covering.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/principles_proofs.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/principles.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/noconf_hom.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/noconf.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/extra_tactics.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_plugin_mod.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_common.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/ederive.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/sigma_types.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/subterm.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/eqdec.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/depelim.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/syntax.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/context_map.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/simplify.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/splitting.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/covering.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/principles_proofs.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/principles.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/noconf_hom.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/noconf.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/extra_tactics.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_plugin.cmxa /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/g_equations.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_common.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/ederive.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/sigma_types.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/subterm.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/eqdec.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/depelim.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/syntax.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/context_map.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/simplify.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/splitting.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/covering.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/principles_proofs.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/principles.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/noconf_hom.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/noconf.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/extra_tactics.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+INSTALL src/equations_plugin_mod.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/Equations/
+make[2]: Entering directory '/builds/coq/coq/_build_ci/equations'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/equations'
+make[1]: Leaving directory '/builds/coq/coq/_build_ci/equations'
+Aggregating timing log...
+No timing data
+./dev/ci/ci-wrapper.sh metacoq
+++ : 2
+++ export NJOBS
+++ '[' -n true ']'
+++ export OCAMLPATH=/builds/coq/coq/_install_ci/lib:
+++ OCAMLPATH=/builds/coq/coq/_install_ci/lib:
+++ export COQBIN=/builds/coq/coq/_install_ci/bin
+++ COQBIN=/builds/coq/coq/_install_ci/bin
+++ export CI_BRANCH=pr-12653
+++ CI_BRANCH=pr-12653
+++ [[ 12653 =~ ^[0-9]*$ ]]
+++ export CI_PULL_REQUEST=12653
+++ CI_PULL_REQUEST=12653
+++ export PATH=/builds/coq/coq/_install_ci/bin:/root/.opamcache/4.05.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+++ PATH=/builds/coq/coq/_install_ci/bin:/root/.opamcache/4.05.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+++ export COQBIN=/builds/coq/coq/_install_ci/bin/
+++ COQBIN=/builds/coq/coq/_install_ci/bin/
+++ ls -l /builds/coq/coq/_install_ci/bin/
+total 377964
+-rwxr-xr-x 1 root root 1885376 Sep 1 11:46 coq-tex
+-rwxr-xr-x 1 root root 2500248 Sep 1 11:46 coq_makefile
+-rwxr-xr-x 1 root root 24673120 Sep 1 11:46 coqc
+-rwxr-xr-x 1 root root 9648760 Sep 1 11:46 coqchk
+-rwxr-xr-x 1 root root 5855160 Sep 1 11:46 coqdep
+-rwxr-xr-x 1 root root 4413792 Sep 1 11:46 coqdoc
+-rwxr-xr-x 1 root root 11526312 Sep 1 11:47 coqide
+-rwxr-xr-x 1 root root 25110448 Sep 1 11:47 coqidetop
+-rwxr-xr-x 1 root root 25110448 Sep 1 11:47 coqidetop.opt
+-rwxr-xr-x 1 root root 449295 Sep 1 11:46 coqpp
+-rwxr-xr-x 1 root root 32153472 Sep 1 11:47 coqproofworker.byte
+-rwxr-xr-x 1 root root 24673424 Sep 1 11:46 coqproofworker.opt
+-rwxr-xr-x 1 root root 32153472 Sep 1 11:47 coqqueryworker.byte
+-rwxr-xr-x 1 root root 24673424 Sep 1 11:46 coqqueryworker.opt
+-rwxr-xr-x 1 root root 32153477 Sep 1 11:47 coqtacticworker.byte
+-rwxr-xr-x 1 root root 24673448 Sep 1 11:46 coqtacticworker.opt
+-rwxr-xr-x 1 root root 24673288 Sep 1 11:46 coqtop
+-rwxr-xr-x 1 root root 41805680 Sep 1 11:47 coqtop.byte
+-rwxr-xr-x 1 root root 24673288 Sep 1 11:46 coqtop.opt
+-rwxr-xr-x 1 root root 1821312 Sep 1 11:46 coqwc
+-rwxr-xr-x 1 root root 2827416 Sep 1 11:46 coqworkmgr
+-rwxr-xr-x 1 root root 5905992 Sep 1 11:47 fake_ide
+-rwxr-xr-x 1 root root 1757920 Sep 1 11:46 ocamllibdep
+-rwxr-xr-x 1 root root 1877056 Sep 1 11:46 votour
+++ CI_BUILD_DIR=/builds/coq/coq/_build_ci
+++ ls -l /builds/coq/coq/_build_ci
+total 4
+drwxr-xr-x 8 root root 4096 Sep 1 12:34 equations
+++ set +x
++ git_download metacoq
++ local PROJECT=metacoq
++ local DEST=/builds/coq/coq/_build_ci/metacoq
++ local GITURL_VAR=metacoq_CI_GITURL
++ local GITURL=https://github.com/SkySkimmer/metacoq
++ local REF_VAR=metacoq_CI_REF
++ local REF=cumul-syntax
++ '[' -d /builds/coq/coq/_build_ci/metacoq ']'
++ '[' '' = 1 ']'
++ '[' true = '' ']'
++ local ARCHIVEURL_VAR=metacoq_CI_ARCHIVEURL
++ local ARCHIVEURL=https://github.com/SkySkimmer/metacoq/archive
++ mkdir -p /builds/coq/coq/_build_ci/metacoq
++ cd /builds/coq/coq/_build_ci/metacoq
+++ git ls-remote https://github.com/SkySkimmer/metacoq refs/heads/cumul-syntax
+++ cut -f 1
++ local COMMIT=130dee007744c0e743d13613a398cfbe15ad95ff
++ [[ 130dee007744c0e743d13613a398cfbe15ad95ff == '' ]]
++ wget https://github.com/SkySkimmer/metacoq/archive/130dee007744c0e743d13613a398cfbe15ad95ff.tar.gz
+--2020-09-01 12:34:56-- https://github.com/SkySkimmer/metacoq/archive/130dee007744c0e743d13613a398cfbe15ad95ff.tar.gz
+Resolving github.com (github.com)... 140.82.121.3
+Connecting to github.com (github.com)|140.82.121.3|:443... connected.
+HTTP request sent, awaiting response... 302 Found
+Location: https://codeload.github.com/SkySkimmer/metacoq/tar.gz/130dee007744c0e743d13613a398cfbe15ad95ff [following]
+--2020-09-01 12:34:56-- https://codeload.github.com/SkySkimmer/metacoq/tar.gz/130dee007744c0e743d13613a398cfbe15ad95ff
+Resolving codeload.github.com (codeload.github.com)... 140.82.121.9
+Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: unspecified [application/x-gzip]
+Saving to: '130dee007744c0e743d13613a398cfbe15ad95ff.tar.gz'
+
+ 0K .......... .......... .......... .......... .......... 1.14M
+ 50K .......... .......... .......... .......... .......... 2.37M
+ 100K .......... .......... .......... .......... .......... 10.9M
+ 150K .......... .......... .......... .......... .......... 10.9M
+ 200K .......... .......... .......... .......... .......... 3.08M
+ 250K .......... .......... .......... .......... .......... 10.9M
+ 300K .......... .......... .......... .......... .......... 11.4M
+ 350K .......... .......... .......... .......... .......... 10.9M
+ 400K .......... .......... .......... .......... .......... 7.25M
+ 450K .......... .......... .......... .......... .......... 9.97M
+ 500K .......... .......... .......... .......... .......... 10.9M
+ 550K .......... .......... .......... .......... .......... 3.39M
+ 600K .......... .......... .......... .......... .......... 10.8M
+ 650K .......... .......... .......... .......... .......... 2.57M
+ 700K .......... .......... .......... .......... .......... 11.4M
+ 750K .......... .......... .......... .......... .......... 10.8M
+ 800K .......... .......... .......... .......... ......... 11.3M=0.2s
+
+2020-09-01 12:34:57 (4.92 MB/s) - '130dee007744c0e743d13613a398cfbe15ad95ff.tar.gz' saved [869537]
+
++ tar xfz 130dee007744c0e743d13613a398cfbe15ad95ff.tar.gz --strip-components=1
++ rm -f 130dee007744c0e743d13613a398cfbe15ad95ff.tar.gz
++ cd /builds/coq/coq/_build_ci/metacoq
++ ./configure.sh local
+make[1]: Entering directory '/builds/coq/coq/_build_ci/metacoq'
+make -C template-coq mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+rm -f Makefile.coq
+rm -f Makefile.plugin
+rm -f Makefile.template
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -C pcuic mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+rm -f metacoq-config
+rm -f Makefile.plugin _PluginProject
+rm -f Makefile.pcuic _CoqProject
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -C safechecker mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+rm -f metacoq-config
+rm -f Makefile.plugin _PluginProject
+rm -f Makefile.safechecker _CoqProject
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -C erasure mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+rm -f Makefile.plugin
+rm -f Makefile.erasure
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -C checker mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+rm -f Makefile.coq Makefile.plugin _CoqProject _PluginProject
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -C examples mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/examples'
+rm -f Makefile.coq
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/examples'
+make -C test-suite mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/test-suite'
+rm -f Makefile.coq
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/test-suite'
+make -C translations mrproper
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/translations'
+rm -f Makefile.coq
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/translations'
+make[1]: Leaving directory '/builds/coq/coq/_build_ci/metacoq'
+Building MetaCoq locally
++ make .merlin
++ '[' -z x ']'
++ command make .merlin
++ make .merlin
+make[1]: Entering directory '/builds/coq/coq/_build_ci/metacoq'
+make -C template-coq .merlin
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+coq_makefile -f _PluginProject -o Makefile.plugin
+`which gsed || which sed` -i -e s/coqdeps/coqdeps.plugin/g Makefile.plugin
+make -f Makefile.plugin .merlin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+COQDEP VFILES
+OCAMLLIBDEP gen-src/metacoq_template_plugin.mlpack
+FILL .merlin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -C pcuic .merlin
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+cat metacoq-config > _PluginProject
+cat _PluginProject.in >> _PluginProject
+coq_makefile -f _PluginProject -o Makefile.plugin
+`which gsed || which sed` -i -e s/coqdeps/coqdeps.plugin/g Makefile.plugin
+make -f Makefile.plugin .merlin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+OCAMLLIBDEP src/metacoq_pcuic_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+FILL .merlin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+OCAMLLIBDEP src/metacoq_pcuic_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -C safechecker .merlin
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+cat metacoq-config > _PluginProject
+cat _PluginProject.in >> _PluginProject
+coq_makefile -f _PluginProject -o Makefile.plugin
+`which gsed || which sed` -i -e s/coqdeps/coqdeps.plugin/g Makefile.plugin
+make -f Makefile.plugin .merlin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+COQPP src/g_metacoq_safechecker.mlg
+OCAMLLIBDEP src/metacoq_safechecker_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+CAMLDEP src/g_metacoq_safechecker.ml
+Bad -I option: ../template-coq/build: No such file or directory
+FILL .merlin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+OCAMLLIBDEP src/metacoq_safechecker_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+CAMLDEP src/g_metacoq_safechecker.ml
+Bad -I option: ../template-coq/build: No such file or directory
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -C erasure .merlin
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+cat metacoq-config > _PluginProject
+cat _PluginProject.in >> _PluginProject
+coq_makefile -f _PluginProject -o Makefile.plugin
+`which gsed || which sed` -i -e s/coqdeps/coqdeps.plugin/g Makefile.plugin
+make -f Makefile.plugin .merlin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+COQPP src/g_metacoq_erasure.mlg
+OCAMLLIBDEP src/metacoq_erasure_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+CAMLDEP src/g_metacoq_erasure.ml
+Bad -I option: ../template-coq/build: No such file or directory
+FILL .merlin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+OCAMLLIBDEP src/metacoq_erasure_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+CAMLDEP src/g_metacoq_erasure.ml
+Bad -I option: ../template-coq/build: No such file or directory
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -C checker .merlin
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+cat metacoq-config > _PluginProject
+cat _PluginProject.in >> _PluginProject
+coq_makefile -f _PluginProject -o Makefile.plugin
+make -f Makefile.plugin .merlin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+COQPP src/g_metacoq_checker.mlg
+OCAMLLIBDEP src/metacoq_checker_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+CAMLDEP src/g_metacoq_checker.ml
+Bad -I option: ../template-coq/build: No such file or directory
+FILL .merlin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+COQDEP VFILES
+Fatal error: exception Sys_error("../template-coq/build: No such file or directory")
+OCAMLLIBDEP src/metacoq_checker_plugin.mlpack
+Uncaught exception: Sys_error("../template-coq/build: No such file or directory")
+CAMLDEP src/g_metacoq_checker.ml
+Bad -I option: ../template-coq/build: No such file or directory
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[1]: Leaving directory '/builds/coq/coq/_build_ci/metacoq'
++ make ci-local
++ '[' -z x ']'
++ command make ci-local
++ make ci-local
+make[1]: Entering directory '/builds/coq/coq/_build_ci/metacoq'
+make all test-suite
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq'
+make -C template-coq
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+coq_makefile -f _CoqProject -o Makefile.coq
+coq_makefile -f _TemplateCoqProject -o Makefile.template
+`which gsed || which sed` -i -e s/coqdeps/coqdeps.template/g Makefile.template
+make -f Makefile.coq
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+COQDEP VFILES
+COQC theories/utils/MCPrelude.v
+COQC theories/utils/MCRelations.v
+theories/utils/MCPrelude.vo (real: 0.09, user: 0.05, sys: 0.04, mem: 63096 ko)
+COQC theories/utils/MCProd.v
+theories/utils/MCRelations.vo (real: 0.09, user: 0.05, sys: 0.04, mem: 68156 ko)
+COQC theories/utils/MCSquash.v
+theories/utils/MCSquash.vo (real: 0.09, user: 0.04, sys: 0.04, mem: 61384 ko)
+COQC theories/utils/MCArith.v
+theories/utils/MCProd.vo (real: 0.14, user: 0.09, sys: 0.04, mem: 88348 ko)
+COQC theories/utils/MCCompare.v
+theories/utils/MCArith.vo (real: 0.70, user: 0.48, sys: 0.22, mem: 404556 ko)
+COQC theories/utils/MCEquality.v
+theories/utils/MCEquality.vo (real: 0.08, user: 0.04, sys: 0.03, mem: 62924 ko)
+COQC theories/utils/LibHypsNaming.v
+theories/utils/LibHypsNaming.vo (real: 0.60, user: 0.42, sys: 0.18, mem: 339136 ko)
+COQC theories/config.v
+theories/config.vo (real: 0.08, user: 0.04, sys: 0.03, mem: 61716 ko)
+COQC theories/monad_utils.v
+theories/monad_utils.vo (real: 0.22, user: 0.14, sys: 0.08, mem: 149456 ko)
+COQC theories/utils/MCList.v
+theories/utils/MCList.vo (real: 1.71, user: 1.47, sys: 0.22, mem: 452340 ko)
+COQC theories/utils/MCOption.v
+theories/utils/MCOption.vo (real: 0.79, user: 0.56, sys: 0.22, mem: 440168 ko)
+COQC theories/utils/All_Forall.v
+theories/utils/MCCompare.vo (real: 6.40, user: 6.04, sys: 0.32, mem: 529900 ko)
+COQC theories/utils/MCString.v
+theories/utils/MCString.vo (real: 0.44, user: 0.30, sys: 0.13, mem: 270156 ko)
+theories/utils/All_Forall.vo (real: 3.03, user: 2.78, sys: 0.23, mem: 465984 ko)
+COQC theories/utils.v
+theories/utils.vo (real: 0.71, user: 0.52, sys: 0.18, mem: 385340 ko)
+COQC theories/utils/wGraph.v
+COQC theories/BasicAst.v
+theories/BasicAst.vo (real: 0.98, user: 0.75, sys: 0.22, mem: 450728 ko)
+COQC theories/Universes.v
+theories/utils/wGraph.vo (real: 5.22, user: 4.72, sys: 0.47, mem: 498552 ko)
+theories/Universes.vo (real: 4.54, user: 4.23, sys: 0.28, mem: 531272 ko)
+COQC theories/common/uGraph.v
+COQC theories/Environment.v
+theories/Environment.vo (real: 1.35, user: 1.10, sys: 0.24, mem: 484172 ko)
+COQC theories/Ast.v
+theories/Ast.vo (real: 1.04, user: 0.79, sys: 0.24, mem: 479940 ko)
+COQC theories/AstUtils.v
+theories/AstUtils.vo (real: 1.24, user: 1.00, sys: 0.23, mem: 485664 ko)
+COQC theories/TemplateMonad/Common.v
+theories/TemplateMonad/Common.vo (real: 0.82, user: 0.60, sys: 0.22, mem: 437492 ko)
+COQC theories/Induction.v
+theories/Induction.vo (real: 1.45, user: 1.18, sys: 0.26, mem: 486324 ko)
+COQC theories/EnvironmentTyping.v
+theories/common/uGraph.vo (real: 6.23, user: 5.85, sys: 0.35, mem: 551516 ko)
+COQC theories/WfInv.v
+theories/WfInv.vo (real: 1.31, user: 1.05, sys: 0.25, mem: 489932 ko)
+COQC theories/TemplateMonad/Core.v
+theories/EnvironmentTyping.vo (real: 2.05, user: 1.77, sys: 0.27, mem: 491968 ko)
+COQC theories/TemplateMonad/Extractable.v
+theories/TemplateMonad/Core.vo (real: 0.97, user: 0.73, sys: 0.24, mem: 481988 ko)
+COQC theories/LiftSubst.v
+theories/TemplateMonad/Extractable.vo (real: 0.95, user: 0.70, sys: 0.23, mem: 481156 ko)
+COQC theories/TemplateMonad.v
+theories/TemplateMonad.vo (real: 0.79, user: 0.54, sys: 0.24, mem: 420452 ko)
+COQC theories/Constants.v
+theories/Constants.vo (real: 1.08, user: 0.82, sys: 0.25, mem: 498504 ko)
+theories/LiftSubst.vo (real: 12.60, user: 11.81, sys: 0.72, mem: 532016 ko)
+COQC theories/UnivSubst.v
+COQC theories/Pretty.v
+theories/Pretty.vo (real: 1.11, user: 0.87, sys: 0.24, mem: 486460 ko)
+theories/UnivSubst.vo (real: 3.38, user: 3.11, sys: 0.24, mem: 490756 ko)
+COQC theories/Typing.v
+COQC theories/Extraction.v
+theories/Extraction.vo (real: 9.78, user: 9.33, sys: 0.41, mem: 571876 ko)
+theories/Typing.vo (real: 53.00, user: 51.78, sys: 0.98, mem: 809012 ko)
+COQC theories/TypingWf.v
+theories/TypingWf.vo (real: 8.46, user: 8.05, sys: 0.36, mem: 556676 ko)
+./update_plugin.sh
+Updating gen-src from src
+Copying from src to gen-src
+Renaming files to camelCase
+Moving All_Forall.ml to all_Forall.ml
+Moving All_Forall.mli to all_Forall.mli
+Moving Ascii.ml to ascii.ml
+Moving Ascii.mli to ascii.mli
+Moving Ast0.ml to ast0.ml
+Moving Ast0.mli to ast0.mli
+Moving AstUtils.ml to astUtils.ml
+Moving AstUtils.mli to astUtils.mli
+Moving BasicAst.ml to basicAst.ml
+Moving BasicAst.mli to basicAst.mli
+Moving Basics.ml to basics.ml
+Moving Basics.mli to basics.mli
+Moving BinInt.ml to binInt.ml
+Moving BinInt.mli to binInt.mli
+Moving BinNat.ml to binNat.ml
+Moving BinNat.mli to binNat.mli
+Moving BinNums.ml to binNums.ml
+Moving BinNums.mli to binNums.mli
+Moving BinPos.ml to binPos.ml
+Moving BinPos.mli to binPos.mli
+Moving BinPosDef.ml to binPosDef.ml
+Moving BinPosDef.mli to binPosDef.mli
+Moving Bool.ml to bool.ml
+Moving Bool.mli to bool.mli
+Moving Byte.ml to byte.ml
+Moving Byte.mli to byte.mli
+Moving CRelationClasses.ml to cRelationClasses.ml
+Moving CRelationClasses.mli to cRelationClasses.mli
+Moving Common0.ml to common0.ml
+Moving Common0.mli to common0.mli
+Moving Compare_dec.ml to compare_dec.ml
+Moving Compare_dec.mli to compare_dec.mli
+Moving Datatypes.ml to datatypes.ml
+Moving Datatypes.mli to datatypes.mli
+Moving Decimal.ml to decimal.ml
+Moving Decimal.mli to decimal.mli
+Moving Environment.ml to environment.ml
+Moving Environment.mli to environment.mli
+Moving Equalities.ml to equalities.ml
+Moving Equalities.mli to equalities.mli
+Moving Extractable.ml to extractable.ml
+Moving Extractable.mli to extractable.mli
+Moving Hexadecimal.ml to hexadecimal.ml
+Moving Hexadecimal.mli to hexadecimal.mli
+Moving Induction.ml to induction.ml
+Moving Induction.mli to induction.mli
+Moving LiftSubst.ml to liftSubst.ml
+Moving LiftSubst.mli to liftSubst.mli
+Moving List0.ml to list0.ml
+Moving List0.mli to list0.mli
+Moving Logic0.ml to logic0.ml
+Moving Logic0.mli to logic0.mli
+Moving MCCompare.ml to mCCompare.ml
+Moving MCCompare.mli to mCCompare.mli
+Moving MCList.ml to mCList.ml
+Moving MCList.mli to mCList.mli
+Moving MCOption.ml to mCOption.ml
+Moving MCOption.mli to mCOption.mli
+Moving MCPrelude.ml to mCPrelude.ml
+Moving MCPrelude.mli to mCPrelude.mli
+Moving MCProd.ml to mCProd.ml
+Moving MCProd.mli to mCProd.mli
+Moving MCRelations.ml to mCRelations.ml
+Moving MCRelations.mli to mCRelations.mli
+Moving MCString.ml to mCString.ml
+Moving MCString.mli to mCString.mli
+Moving MSetDecide.ml to mSetDecide.ml
+Moving MSetDecide.mli to mSetDecide.mli
+Moving MSetFacts.ml to mSetFacts.ml
+Moving MSetFacts.mli to mSetFacts.mli
+Moving MSetInterface.ml to mSetInterface.ml
+Moving MSetInterface.mli to mSetInterface.mli
+Moving MSetList.ml to mSetList.ml
+Moving MSetList.mli to mSetList.mli
+Moving MSetProperties.ml to mSetProperties.ml
+Moving MSetProperties.mli to mSetProperties.mli
+Moving Nat0.ml to nat0.ml
+Moving Nat0.mli to nat0.mli
+Moving Numeral.ml to numeral.ml
+Moving Numeral.mli to numeral.mli
+Moving OrderedType0.ml to orderedType0.ml
+Moving OrderedType0.mli to orderedType0.mli
+Moving Orders.ml to orders.ml
+Moving Orders.mli to orders.mli
+Moving OrdersFacts.ml to ordersFacts.ml
+Moving OrdersFacts.mli to ordersFacts.mli
+Moving OrdersLists.ml to ordersLists.ml
+Moving OrdersLists.mli to ordersLists.mli
+Moving OrdersTac.ml to ordersTac.ml
+Moving OrdersTac.mli to ordersTac.mli
+Moving PeanoNat.ml to peanoNat.ml
+Moving PeanoNat.mli to peanoNat.mli
+Moving Pretty.ml to pretty.ml
+Moving Pretty.mli to pretty.mli
+Moving Specif.ml to specif.ml
+Moving Specif.mli to specif.mli
+Moving String0.ml to string0.ml
+Moving String0.mli to string0.mli
+Moving UnivSubst0.ml to univSubst0.ml
+Moving UnivSubst0.mli to univSubst0.mli
+Moving Universes0.ml to universes0.ml
+Moving Universes0.mli to universes0.mli
+patching file gen-src/cRelationClasses.mli
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.template optfiles
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+COQDEP VFILES
+COQPP src/g_template_coq.mlg
+CAMLDEP src/plugin_core.mli
+CAMLDEP src/run_template_monad.mli
+CAMLDEP src/template_monad.mli
+OCAMLLIBDEP src/template_coq.mlpack
+CAMLDEP src/plugin_core.ml
+CAMLDEP src/run_template_monad.ml
+CAMLDEP src/template_monad.ml
+CAMLDEP src/constr_denoter.ml
+CAMLDEP src/constr_quoter.ml
+CAMLDEP src/constr_reification.ml
+CAMLDEP src/denoter.ml
+CAMLDEP src/quoter.ml
+CAMLDEP src/reification.ml
+CAMLDEP src/tm_util.ml
+CAMLDEP src/g_template_coq.ml
+CAMLOPT -c -for-pack Template_coq src/tm_util.ml
+CAMLOPT -c -for-pack Template_coq src/reification.ml
+src/reification.cmx (real: 0.04, user: 0.01, sys: 0.01, mem: 14796 ko)
+CAMLOPT -c -for-pack Template_coq src/constr_reification.ml
+src/tm_util.cmx (real: 0.07, user: 0.03, sys: 0.02, mem: 21812 ko)
+CAMLC -c src/template_monad.mli
+src/template_monad.cmi (real: 0.02, user: 0.00, sys: 0.01, mem: 15004 ko)
+CAMLC -c src/plugin_core.mli
+src/constr_reification.cmx (real: 0.07, user: 0.04, sys: 0.02, mem: 22020 ko)
+CAMLOPT -c -for-pack Template_coq src/quoter.ml
+src/plugin_core.cmi (real: 0.03, user: 0.01, sys: 0.01, mem: 17068 ko)
+CAMLOPT -c -for-pack Template_coq src/denoter.ml
+src/denoter.cmx (real: src/quoter.cmx (real: 0.22, user: 0.240.05, ,u sesry:s :0.16 , 0.02sy,s :m em: 0.0224280, mkeom:)
+34576 ko)
+CAMLOPT -c -for-pack Template_coq src/template_monad.ml
+CAMLOPT -c -for-pack Template_coq src/plugin_core.ml
+src/templaster_cm/opnaludg.inc_cmoxr e(.rcemaxl :( real: 0.10, user: 0.06, sys: 0.02, mem: 27236 ko)
+0.10, user: 0.08, sys: 0.01, mem: 26216 ko)
+CAMLC -c src/run_template_monad.mli
+CAMLOPT -c -for-pack Template_coq src/constr_quoter.ml
+src/run_template_monad.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 13148 ko)
+CAMLOPT -c -for-pack Template_coq src/constr_denoter.ml
+src/constr_denoter.cmx (real: 0.18, user: 0.14, sys: 0.01, mem: 31740 ko)
+src/constr_quoter.cmx (real: 0.24, user: 0.17, sys: 0.03, mem: 33044 ko)
+CAMLOPT -c -for-pack Template_coq src/run_template_monad.ml
+src/run_template_monad.cmx (real: 0.28, user: 0.15, sys: 0.03, mem: 38520 ko)
+CAMLOPT -c -for-pack Template_coq src/g_template_coq.ml
+src/g_template_coq.cmx (real: 0.25, user: 0.10, sys: 0.02, mem: 33140 ko)
+CAMLOPT -pack -o src/template_coq.cmx
+src/template_coq.cmx (real: 0.13, user: 0.02, sys: 0.02, mem: 19956 ko)
+CAMLOPT -a -o src/template_coq.cmxa
+src/template_coq.cmxa (real: 0.03, user: 0.00, sys: 0.01, mem: 13520 ko)
+CAMLOPT -shared -o src/template_coq.cmxs
+src/template_coq.cmxs (real: 0.08, user: 0.05, sys: 0.03, mem: 16040 ko)
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+cp src/template_coq.cm* build/
+make -f Makefile.template
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+COQC theories/Loader.v
+theories/Loader.vo (real: 1.04, user: 0.77, sys: 0.26, mem: 500040 ko)
+COQC theories/All.v
+theories/All.vo (real: 1.25, user: 0.95, sys: 0.28, mem: 521596 ko)
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.plugin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+CAMLDEP gen-src/univSubst0.mli
+CAMLDEP gen-src/universes0.mli
+CAMLDEP gen-src/string0.mli
+CAMLDEP gen-src/specif.mli
+CAMLDEP gen-src/run_extractable.mli
+CAMLDEP gen-src/pretty.mli
+CAMLDEP gen-src/plugin_core.mli
+CAMLDEP gen-src/peanoNat.mli
+CAMLDEP gen-src/ordersTac.mli
+CAMLDEP gen-src/ordersLists.mli
+CAMLDEP gen-src/orders.mli
+CAMLDEP gen-src/ordersFacts.mli
+CAMLDEP gen-src/orderedType0.mli
+CAMLDEP gen-src/numeral.mli
+CAMLDEP gen-src/nat0.mli
+CAMLDEP gen-src/mSetProperties.mli
+CAMLDEP gen-src/mSetList.mli
+CAMLDEP gen-src/mSetInterface.mli
+CAMLDEP gen-src/mSetFacts.mli
+CAMLDEP gen-src/mSetDecide.mli
+CAMLDEP gen-src/mCString.mli
+CAMLDEP gen-src/mCRelations.mli
+CAMLDEP gen-src/mCProd.mli
+CAMLDEP gen-src/mCOption.mli
+CAMLDEP gen-src/mCList.mli
+CAMLDEP gen-src/mCCompare.mli
+CAMLDEP gen-src/mCPrelude.mli
+CAMLDEP gen-src/logic0.mli
+CAMLDEP gen-src/list0.mli
+CAMLDEP gen-src/liftSubst.mli
+CAMLDEP gen-src/hexadecimal.mli
+CAMLDEP gen-src/extractable.mli
+CAMLDEP gen-src/equalities.mli
+CAMLDEP gen-src/environment.mli
+CAMLDEP gen-src/decimal.mli
+CAMLDEP gen-src/datatypes.mli
+CAMLDEP gen-src/cRelationClasses.mli
+CAMLDEP gen-src/config0.mli
+CAMLDEP gen-src/compare_dec.mli
+CAMLDEP gen-src/common0.mli
+CAMLDEP gen-src/bool.mli
+CAMLDEP gen-src/binPos.mli
+CAMLDEP gen-src/binPosDef.mli
+CAMLDEP gen-src/binNums.mli
+CAMLDEP gen-src/binNat.mli
+CAMLDEP gen-src/binInt.mli
+CAMLDEP gen-src/basics.mli
+CAMLDEP gen-src/basicAst.mli
+CAMLDEP gen-src/astUtils.mli
+CAMLDEP gen-src/ast0.mli
+CAMLDEP gen-src/ascii.mli
+CAMLDEP gen-src/all_Forall.mli
+OCAMLLIBDEP gen-src/metacoq_template_plugin.mlpack
+CAMLDEP gen-src/univSubst0.ml
+CAMLDEP gen-src/universes0.ml
+CAMLDEP gen-src/tm_util.ml
+CAMLDEP gen-src/string0.ml
+CAMLDEP gen-src/specif.ml
+CAMLDEP gen-src/run_extractable.ml
+CAMLDEP gen-src/quoter.ml
+CAMLDEP gen-src/reification.ml
+CAMLDEP gen-src/pretty.ml
+CAMLDEP gen-src/plugin_core.ml
+CAMLDEP gen-src/peanoNat.ml
+CAMLDEP gen-src/ordersTac.ml
+CAMLDEP gen-src/orders.ml
+CAMLDEP gen-src/ordersLists.ml
+CAMLDEP gen-src/ordersFacts.ml
+CAMLDEP gen-src/orderedType0.ml
+CAMLDEP gen-src/numeral.ml
+CAMLDEP gen-src/nat0.ml
+CAMLDEP gen-src/mSetProperties.ml
+CAMLDEP gen-src/mSetList.ml
+CAMLDEP gen-src/mSetInterface.ml
+CAMLDEP gen-src/mSetFacts.ml
+CAMLDEP gen-src/mSetDecide.ml
+CAMLDEP gen-src/mCString.ml
+CAMLDEP gen-src/mCRelations.ml
+CAMLDEP gen-src/mCProd.ml
+CAMLDEP gen-src/mCOption.ml
+CAMLDEP gen-src/mCList.ml
+CAMLDEP gen-src/mCCompare.ml
+CAMLDEP gen-src/mCPrelude.ml
+CAMLDEP gen-src/logic0.ml
+CAMLDEP gen-src/list0.ml
+CAMLDEP gen-src/liftSubst.ml
+CAMLDEP gen-src/hexadecimal.ml
+CAMLDEP gen-src/extractable.ml
+CAMLDEP gen-src/equalities.ml
+CAMLDEP gen-src/environment.ml
+CAMLDEP gen-src/denoter.ml
+CAMLDEP gen-src/decimal.ml
+CAMLDEP gen-src/datatypes.ml
+CAMLDEP gen-src/cRelationClasses.ml
+CAMLDEP gen-src/config0.ml
+CAMLDEP gen-src/compare_dec.ml
+CAMLDEP gen-src/common0.ml
+CAMLDEP gen-src/bool.ml
+CAMLDEP gen-src/binPos.ml
+CAMLDEP gen-src/binPosDef.ml
+CAMLDEP gen-src/binNums.ml
+CAMLDEP gen-src/binNat.ml
+CAMLDEP gen-src/binInt.ml
+CAMLDEP gen-src/basics.ml
+CAMLDEP gen-src/basicAst.ml
+CAMLDEP gen-src/astUtils.ml
+CAMLDEP gen-src/ast_quoter.ml
+CAMLDEP gen-src/ast_denoter.ml
+CAMLDEP gen-src/ast0.ml
+CAMLDEP gen-src/ascii.ml
+CAMLDEP gen-src/all_Forall.ml
+CAMLC -c gen-src/datatypes.mli
+CAMLC -c gen-src/basics.mli
+gen-src/basics.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11244 ko)
+CAMLC -c gen-src/binNums.mli
+gen-src/datatypes.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 12948 ko)
+CAMLC -c gen-src/mCPrelude.mli
+gen-src/binNums.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11340 ko)
+CAMLC -c gen-src/mCRelations.mli
+gen-src/mCPrelude.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11228 ko)
+CAMLC -c gen-src/mCProd.mli
+gen-src/mCRelations.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11080 ko)
+CAMLC -c gen-src/config0.mli
+gen-src/mCProd.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11620 ko)
+CAMLC -c gen-src/logic0.mli
+gen-src/config0.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11112 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/tm_util.ml
+gen-src/logic0.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11524 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/reification.ml
+gen-src/reification.cmx (real: 0.02, user: 0.01, sys: 0.00, mem: 14848 ko)
+CAMLC -c gen-src/plugin_core.mli
+gen-src/plugin_core.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 17156 ko)
+CAMLC -c gen-src/tm_util.ml
+gen-src/tm_util.cmo (real: 0.03, user: 0.02, sys: 0.01, mem: 18388 ko)
+CAMLC -c gen-src/reification.ml
+gen-src/reification.cmo (real: 0.01, user: 0.00, sys: 0.00, mem: 11740 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/datatypes.ml
+gen-src/datatypes.cmx (real: 0.15, user: 0.01, sys: 0.01, mem: 16200 ko)
+gen-src/tm_util.cmx (real: 0.26, user: 0.03, sys: 0.02, mem: 22128 ko)
+CAMLC -c gen-src/bool.mli
+CAMLC -c gen-src/decimal.mli
+gen-src/decimal.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 12404 ko)
+gen-src/bool.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11744 ko)
+CAMLC -c gen-src/specif.mli
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/basics.ml
+gen-src/specif.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13160 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/binNums.ml
+ggeenn--ssrrcc//bbaisniNcusm.sc.mcxm x( r(eraela:l : 0.040.05,, uusseerr:: 0.010.00,, ssyyss:: 0.010.01,, mmeemm:: 1566414584 kkoo))
+
+CAMLC -c gen-src/cRelationClasses.mli
+CAMLC -c gen-src/compare_dec.mli
+gen-src/compare_dec.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11720 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCPrelude.ml
+gen-src/cRelationClasses.cmi (real: 0.01, user: 0.01, sys: 0.00, mem: 13388 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCRelations.ml
+gen-src/mCPrelude.cmx (real: 0.04, user: 0.00, sys: 0.01, mem: 14368 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCProd.ml
+gen-src/mCRelations.cmx (real: 0.09, user: 0.00, sys: 0.01, mem: 14184 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/config0.ml
+gen-src/mCProd.cmx (real: 0.07, user: 0.01, sys: 0.01, mem: 15708 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/logic0.ml
+gen-src/logic0.cmx (real: 0.02, user: 0.00, sys: 0.01, mem: 15516 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/quoter.ml
+gen-src/config0.cmx (real: 0.09, user: 0.00, sys: 0.01, mem: 14648 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/denoter.ml
+gen-src/denoter.cmx (real: 0.07, user: 0.05, sys: 0.01, mem: 24396 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/plugin_core.ml
+gen-src/quoter.cmx (real: 0.17, user: 0.14, sys: 0.02, mem: 34476 ko)
+CAMLC -c gen-src/quoter.ml
+gen-src/plugin_core.cmx (real: 0.09, user: 0.06, sys: 0.02, mem: 27344 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/bool.ml
+gen-src/bool.cmx (real: 0.02, user: 0.01, sys: 0.01, mem: 15772 ko)
+CAMLC -c gen-src/equalities.mli
+gen-src/equalities.cmi (real: 0.04, user: 0.00, sys: 0.00, mem: 13240 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/decimal.ml
+gen-src/quoter.cmo (real: 0.16, user: 0.08, sys: 0.01, mem: 26408 ko)
+CAMLC -c gen-src/hexadecimal.mli
+gen-src/hexadecimal.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13064 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/specif.ml
+gen-src/decimal.cmx (real: 0.24, user: 0.03, sys: 0.01, mem: 17936 ko)
+gen-src/specif.cmx (real: 0.17, user: 0.02, sys: 0.01, mem: 16332 ko)
+CAMLC -c gen-src/orders.mli
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/cRelationClasses.ml
+gen-src/orders.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 13748 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/compare_dec.ml
+gen-src/cRelationClasses.cmx (real: 0.04, user: 0.02, sys: 0.01, mem: 16836 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/equalities.ml
+gen-src/compare_dec.cmx (real: 0.03, user: 0.01, sys: 0.01, mem: 15536 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/hexadecimal.ml
+gen-src/equalities.cmx (real: 0.03, user: 0.01, sys: 0.01, mem: 15840 ko)
+CAMLC -c gen-src/numeral.mli
+gen-src/numeral.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11900 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/orders.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/orders.cmx (real: 0.04, user: 0.01, sys: 0.01, mem: 16768 ko)
+CAMLC -c gen-src/ordersTac.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ordersTac.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 12464 ko)
+CAMLC -c gen-src/ordersLists.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ordersLists.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11760 ko)
+CAMLC -c gen-src/orderedType0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/orderedType0.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 12108 ko)
+gen-src/hexadecimal.cmx (real: 0.13, user: 0.09, sys: 0.02, mem: 20020 ko)
+CAMLC -c gen-src/nat0.mli
+CAMLC -c gen-src/peanoNat.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/peanoNat.cmi (real: 0.01, user: 0.01, sys:g e0.00n,- smrecm/:n at133640 .kco)m
+i (real: 0.02, user: 0.01, sys: 0.00, mem: 13460 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ordersTac.ml
+CAMLC -c gen-src/ordersFacts.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ordersFacts.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 13444 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ordersLists.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ordersLists.cmx (real: 0.20, user: 0.00, sys: 0.01, mem: 15096 ko)
+CAMLC -c gen-src/mSetInterface.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetInterface.cmi (real: 0.02, user: 0.02, sys: 0.00, mem: 15244 ko)
+CAMLC -c gen-src/mCCompare.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mCCompare.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11644 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/numeral.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ordersTac.cmx (real: 0.27, user: 0.01, sys: 0.01, mem: 15844 ko)
+CAMLC -c gen-src/list0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/list0.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 13404 ko)
+CAMLC -c gen-src/binPosDef.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/numeral.cmx (real: 0.04, user: 0.00, sys: 0.01, mem: 15820 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ordersFacts.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binPosDef.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 13536 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/orderedType0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ordersFacts.cmx (real: 0.02, user: 0.01, sys: 0.01, mem: 16032 ko)
+CAMLC -c gen-src/mSetFacts.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetFacts.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 13748 ko)
+CAMLC -c gen-src/mSetList.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetList.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 15760 ko)
+CAMLC -c gen-src/mCList.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/orderedType0.cmx (real: 0.07, user: 0.01, sys: 0.01, mem: 15860 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/nat0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mCList.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 13612 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/peanoNat.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/nat0.cmx (real: 0.21, user: 0.04, sys: 0.01, mem: 18464 ko)
+CAMLC -c gen-src/binPos.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binPos.cmi (real: 0.01, user: 0.01, sys: 0.00, mem: 14264 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mSetInterface.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/peanoNat.cmx (real: 0.26, user: 0.07, sys: 0.02, mem: 19912 ko)
+CAMLC -c gen-src/mSetDecide.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetDecide.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13776 ko)
+CAMLC -c gen-src/mCOption.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mCOption.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 12200 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCCompare.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetInterface.cmx (real: 0.11, user: 0.05, sys: 0.02, mem: 20324 ko)
+CAMLC -c gen-src/all_Forall.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/all_Forall.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 14992 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/list0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mCCompare.cmx (real: 0.08, user: 0.01, sys: 0.01, mem: 15672 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/binPosDef.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/list0.cmx (real: 0.04, user: 0.03, sys: 0.01, mem: 17796 ko)
+CAMLC -c gen-src/binNat.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binNat.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13444 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mSetFacts.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetFacts.cmx (real: 0.12, user: 0.01, sys: 0.01, mem: 17012 ko)
+gen-src/binPosDef.cmx (real: 0.18, user: 0.13, sys: 0.03, mem: 23892 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mSetList.ml
+CAMLC -c gen-src/mSetProperties.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetProperties.cmi (real: 0.07, user: 0.02, sys: 0.00, mem: 15212 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCList.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetList.cmx (real: 0.28, user: 0.08, sys: 0.02, mem: 21352 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/binPos.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mCList.cmx (real: 0.25, user: 0.01, sys: 0.01, mem: 16712 ko)
+CAMLC -c gen-src/binInt.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binInt.cmi (real: 0.02, user: 0.01, sys: 0.01, mem: 13564 ko)
+CAMLC -c gen-src/ascii.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ascii.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 12228 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mSetDecide.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binPos.cmx (real: 0.19, user: 0.15, sys: 0.03, mem: 25208 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCOption.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetDecide.cmx (real: 0.18g, euns-esrr:c /mC0.01O,p tsiyosn:. cm0.01x, (mreema:l : 17180 ko)
+0.08, user: 0.01, sys: 0.01, mem: 16020 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/binNat.ml
+CAMLC -c gen-src/string0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/string0.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 12236 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mSetProperties.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mSetProperties.cmx (real: 0.10, user: 0.04, sys: 0.01, mem: 19600 ko)
+CAMLC -c gen-src/mCString.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binNat.cmx (real: 0.13, user: 0.10, sys: 0.02, mem: 20796 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/all_Forall.ml
+gen-src/mCString.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 11712 ko)
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/binInt.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/binInt.cmx (real: 0.32, user: 0.12, sys: 0.02, mem: 22784 ko)
+gen-src/all_Forall.cmx (real: 0.33, user: 0.14, sys: 0.02, mem: 25372 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ascii.ml
+CAMLC -c gen-src/basicAst.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/basicAst.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 14404 ko)
+CAMLC -c gen-src/universes0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ascii.cmx (real: 0.06, user: 0.02, sys: 0.01, mem: 16900 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/string0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/universes0.cmi (real: 0.06, user: 0.04, sys: 0.01, mem: 18504 ko)
+CAMLC -c gen-src/environment.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/string0.cmx (real: 0.04, user: 0.02, sys: 0.01, mem: 16504 ko)
+CAMLC -c gen-src/ast0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/environment.cmi (real: 0.02, user: 0.01, sys: 0.01, mem: 14988 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/mCString.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast0.cmi (real: 0.03, user: 0.01, sys: 0.01, mem: 15204 ko)
+CAMLC -c gen-src/astUtils.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/astUtils.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 14040 ko)
+CAMLC -c gen-src/liftSubst.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/liftSubst.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13680 ko)
+CAMLC -c gen-src/univSubst0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/univSubst0.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 14128 ko)
+CAMLC -c gen-src/pretty.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/pretty.cmi (real: 0.01, user: 0.00, sys: 0.01, mem: 15060 ko)
+CAMLC -c gen-src/common0.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/common0.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13492 ko)
+CAMLC -c gen-src/ast_quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast_quoter.cmo (real: 0.06, user: 0.04, sys: 0.01, mem: 22660 ko)
+CAMLC -c gen-src/extractable.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/mCString.cmx (real: 0.24, user: 0.02, sys: 0.01, mem: 16472 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/basicAst.ml
+gen-src/extractable.cmi (real: 0.07, user: 0.00, sys: 0.00, mem: 13580 ko)
+CAMLC -c gen-src/run_extractable.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/run_extractable.cmi (real: 0.01, user: 0.00, sys: 0.00, mem: 13668 ko)
+gen-src/basicAst.cmx (real: 0.05, user: 0.03, sys: 0.01, mem: 18744 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/universes0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/universes0.cmx (real: 0.59, user: 0.41, sys: 0.03, mem: 39160 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/environment.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/environment.cmx (real: 0.16, user: 0.03, sys: 0.01, mem: 19716 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast0.cmx (real: 0.25, user: 0.09, sys: 0.02, mem: 24572 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/astUtils.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/liftSubst.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/astUtils.cmx (real: 0.05, user: 0.04, sys: 0.01, mem: 19608 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/univSubst0.ml
+gen-src/liftSubst.cmx (real: 0.06, user: 0.04, sys: 0.01, mem: 19008 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/common0.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/common0.cmx (real: 0.05, user: 0.02, sys: 0.01, mem: 16420 ko)
+gen-src/univSubst0.cmx (real: 0.05, user: 0.03, sys: 0.01, mem: 18548 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast_quoter.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/pretty.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/pretty.cmx (real: 0.11, user: 0.08, sys: 0.01, mem: 22020 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/extractable.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/extractable.cmx (real: 0.08, user: 0.04, sys: 0.01, mem: 18780 ko)
+gen-src/ast_quoter.cmx (real: 0.20, user: 0.10, sys: 0.02, mem: 27252 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast_denoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast_denoter.cmx (real: 0.12, user: 0.07, sys: 0.02, mem: 27180 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/run_extractable.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/run_extractable.cmx (real: 0.13, user: 0.10, sys: 0.02, mem: 30484 ko)
+CAMLOPT -pack -o gen-src/metacoq_template_plugin.cmx
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmx (real: 0.15, user: 0.09, sys: 0.04, mem: 31648 ko)
+CAMLOPT -a -o gen-src/metacoq_template_plugin.cmxa
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmxa (real: 0.03, user: 0.01, sys: 0.02, mem: 13896 ko)
+CAMLOPT -shared -o gen-src/metacoq_template_plugin.cmxs
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmxs (real: 0.13, user: 0.09, sys: 0.03, mem: 18540 ko)
+COQC theories/ExtractableLoader.v
+theories/ExtractableLoader.vo (real: 0.09, user: 0.05, sys: 0.03, mem: 62540 ko)
+cp gen-src/metacoq_template_plugin.cm* build/
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -C checker
+make -C pcuic
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+cat metacoq-config > _CoqProject
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+cat metacoq-config > _CoqProject
+cat _CoqProject.in >> _CoqProject
+cat _CoqProject.in >> _CoqProject
+coq_makefile -f _CoqProject -o Makefile.pcuic
+coq_makefile -f _CoqProject -o Makefile.coq
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.coq
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.pcuic
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+COQDEP VFILES
+COQDEP VFILES
+COQC theories/Reflect.v
+COQC theories/PCUICAst.v
+theories/PCUICAst.vo (real: 0.99, user: 0.75, sys: 0.23, mem: 477372 ko)
+COQC theories/PCUICSize.v
+theories/PCUICSize.vo (real: 1.73, user: 1.44, sys: 0.28, mem: 503484 ko)
+COQC theories/PCUICInduction.v
+theories/PCUICInduction.vo (real: 1.19, user: 0.89, sys: 0.29, mem: 481312 ko)
+COQC theories/PCUICCheckerCompleteness.v
+theories/PCUICCheckerCompleteness.vo (real: 0.85, user: 0.60, sys: 0.24, mem: 433064 ko)
+COQC theories/TemplateToPCUIC.v
+theories/Reflect.vo (real: 5.26, user: 4.53, sys: 0.70, mem: 552364 ko)
+COQC theories/WeakeningEnv.v
+theories/TemplateToPCUIC.vo (real: 0.98, user: 0.69, sys: 0.27, mem: 482472 ko)
+COQC theories/PCUICAstUtils.v
+theories/WeakeningEnv.vo (real: 3.33, user: 2.80, sys: 0.50, mem: 512292 ko)
+COQC theories/Checker.v
+theories/PCUICAstUtils.vo (real: 3.13, user: 2.78, sys: 0.32, mem: 543424 ko)
+COQC theories/PCUICReflect.v
+theories/Checker.vo (real: 4.71, user: 4.00, sys: 0.69, mem: 555748 ko)
+COQC theories/WcbvEval.v
+theories/PCUICReflect.vo (real: 4.46, user: 4.11, sys: 0.32, mem: 543956 ko)
+COQC theories/PCUICLiftSubst.v
+theories/WcbvEval.vo (real: 5.56, user: 4.94, sys: 0.59, mem: 533768 ko)
+COQC theories/Retyping.v
+theories/Retyping.vo (real: 1.16, user: 0.90, sys: 0.26, mem: 524140 ko)
+COQC theories/Normal.v
+theories/Normal.vo (real: 1.10, user: 0.84, sys: 0.25, mem: 497360 ko)
+COQC theories/Generation.v
+theories/Generation.vo (real: 1.95, user: 1.69, sys: 0.25, mem: 514692 ko)
+COQC theories/Closed.v
+File "./theories/Closed.v", line 299, characters 2-42:
+Warning:
+Automatically inlined signature for type All_local_env. Use [Derive Signature for All_local_env.] to avoid this.
+theories/PCUICLiftSubst.vo (real: 27.51, user: 26.28, sys: 0.94, mem: 597996 ko)
+COQC theories/PCUICToTemplate.v
+theories/PCUICToTemplate.vo (real: 1.33, user: 1.04, sys: 0.28, mem: 527408 ko)
+COQC theories/PCUICUtils.v
+theories/PCUICUtils.vo (real: 1.81, user: 1.47, sys: 0.33, mem: 527440 ko)
+COQC theories/PCUICUnivSubst.v
+theories/Closed.vo (real: 22.03, user: 21.55, sys: 0.36, mem: 603616 ko)
+COQC theories/Weakening.v
+theories/PCUICUnivSubst.vo (real: 3.67, user: 3.33, sys: 0.32, mem: 533884 ko)
+COQC theories/PCUICEquality.v
+theories/Weakening.vo (real: 16.17, user: 15.64, sys: 0.43, mem: 579100 ko)
+COQC theories/Substitution.v
+theories/PCUICEquality.vo (real: 40.79, user: 39.04, sys: 1.52, mem: 790088 ko)
+COQC theories/PCUICPosition.v
+theories/Substitution.vo (real: 29.09, user: 27.93, sys: 0.98, mem: 621392 ko)
+COQC theories/All.v
+theories/All.vo (real: 1.65, user: 1.29, sys: 0.34, mem: 545736 ko)
+./update_plugin.sh
+Renaming extracted files
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -C examples
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/examples'
+coq_makefile -f _CoqProject -o Makefile.coq
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.coq pretty-timed
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/examples'
+COQDEP VFILES
+COQC demo.v
+demo.vo (real: 1.94, user: 1.56, sys: 0.36, mem: 527740 ko)
+COQC add_constructor.v
+add_constructor.vo (real: 1.44, user: 1.13, sys: 0.30, mem: 524144 ko)
+COQC tauto.v
+tauto.vo (real: 20.77, user: 19.93, sys: 0.72, mem: 581920 ko)
+ Time | Peak Mem | File Name
+--------------------------------------------
+0m22.62s | 581920 ko | Total Time / Peak Mem
+--------------------------------------------
+0m19.93s | 581920 ko | tauto.vo
+0m01.56s | 527740 ko | demo.vo
+0m01.13s | 524144 ko | add_constructor.vo
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/examples'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/examples'
+theories/PCUICPosition.vo (real: 29.43, user: 28.24, sys: 1.03, mem: 723216 ko)
+COQC theories/PCUICTyping.v
+Axioms:
+ind_guard : mutual_inductive_body -> bool
+fix_guard : mfixpoint term -> bool
+cofix_guard : mfixpoint term -> bool
+theories/PCUICTyping.vo (real: 44.26, user: 42.82, sys: 1.17, mem: 727688 ko)
+COQC theories/PCUICReduction.v
+COQC theories/PCUICWeakeningEnv.v
+theories/PCUICWeakeningEnv.vo (real: 5.17, user: 4.38, sys: 0.74, mem: 571076 ko)
+COQC theories/PCUICGeneration.v
+theories/PCUICReduction.vo (real: 6.98, user: 6.16, sys: 0.78, mem: 583116 ko)
+COQC theories/PCUICNormal.v
+theories/PCUICNormal.vo (real: 1.72, user: 1.37, sys: 0.33, mem: 551200 ko)
+COQC theories/PCUICNameless.v
+theories/PCUICGeneration.vo (real: 3.72, user: 3.34, sys: 0.36, mem: 586388 ko)
+COQC theories/PCUICMetaTheory.v
+theories/PCUICMetaTheory.vo (real: 1.26, user: 0.96, sys: 0.29, mem: 546928 ko)
+COQC theories/PCUICChecker.v
+theories/PCUICChecker.vo (real: 1.41, user: 1.11, sys: 0.29, mem: 549776 ko)
+COQC theories/PCUICToTemplateCorrectness.v
+theories/PCUICToTemplateCorrectness.vo (real: 8.69, user: 7.84, sys: 0.79, mem: 608576 ko)
+COQC theories/PCUICCumulativity.v
+theories/PCUICCumulativity.vo (real: 2.17, user: 1.85, sys: 0.30, mem: 561876 ko)
+COQC theories/PCUICClosed.v
+theories/PCUICNameless.vo (real: 15.98, user: 14.98, sys: 0.89, mem: 623196 ko)
+COQC theories/PCUICPretty.v
+theories/PCUICPretty.vo (real: 1.64, user: 1.30, sys: 0.33, mem: 551364 ko)
+theories/PCUICClosed.vo (real: 24.65, user: 23.99, sys: 0.51, mem: 654592 ko)
+COQC theories/PCUICWeakening.v
+COQC theories/PCUICCSubst.v
+theories/PCUICCSubst.vo (real: 1.93, user: 1.55, sys: 0.36, mem: 562424 ko)
+COQC theories/PCUICWcbvEval.v
+theories/PCUICWcbvEval.vo (real: 12.05, user: 11.54, sys: 0.43, mem: 589944 ko)
+theories/PCUICWeakening.vo (real: 24.20, user: 23.42, sys: 0.64, mem: 685852 ko)
+COQC theories/PCUICSigmaCalculus.v
+COQC theories/PCUICUnivSubstitution.v
+theories/PCUICUnivSubstitution.vo (real: 10.93, user: 10.41, sys: 0.45, mem: 621644 ko)
+theories/PCUICSigmaCalculus.vo (real: 39.32, user: 38.12, sys: 0.96, mem: 657100 ko)
+COQC theories/PCUICSubstitution.v
+theories/PCUICSubstitution.vo (real: 26.54, user: 25.65, sys: 0.68, mem: 673140 ko)
+COQC theories/PCUICParallelReduction.v
+COQC theories/TemplateToPCUICCorrectness.v
+theories/TemplateToPCUICCorrectness.vo (real: 13.77, user: 13.16, sys: 0.52, mem: 641024 ko)
+theories/PCUICParallelReduction.vo (real: 29.43, user: 28.26, sys: 0.87, mem: 779308 ko)
+COQC theories/PCUICParallelReductionConfluence.v
+Axioms:
+ind_guard : mutual_inductive_body → bool
+FunctionalExtensionality.functional_extensionality_dep
+ : ∀ (A : Type) (B : A → Type) (f g : ∀ x : A, B x),
+ (∀ x : A, f x = g x) → f = g
+fix_guard : mfixpoint term → bool
+cofix_guard : mfixpoint term → bool
+theories/PCUICParallelReductionConfluence.vo (real: 96.83, user: 94.58, sys: 1.69, mem: 849824 ko)
+COQC theories/PCUICConfluence.v
+theories/PCUICConfluence.vo (real: 35.96, user: 34.44, sys: 1.27, mem: 742788 ko)
+COQC theories/PCUICContextConversion.v
+theories/PCUICContextConversion.vo (real: 9.28, user: 8.74, sys: 0.48, mem: 629108 ko)
+COQC theories/PCUICConversion.v
+File "./theories/PCUICConversion.v", line 2097, characters 4-13:
+Warning:
+Automatically inlined signature for type clos_refl_trans_1n. Use [Derive Signature for clos_refl_trans_1n.] to avoid this.
+File "./theories/PCUICConversion.v", line 2234, characters 4-37:
+Warning: Cannot remove s'. [cannot-remove-as-expected,tactics]
+theories/PCUICConversion.vo (real: 30.61, user: 29.65, sys: 0.79, mem: 750296 ko)
+COQC theories/PCUICInversion.v
+COQC theories/PCUICRetyping.v
+theories/PCUICRetyping.vo (real: 1.94, user: 1.58, sys: 0.34, mem: 589768 ko)
+theories/PCUICInversion.vo (real: 10.19, user: 9.35, sys: 0.77, mem: 622488 ko)
+COQC theories/PCUICCtxShape.v
+theories/PCUICCtxShape.vo (real: 2.23, user: 1.75, sys: 0.38, mem: 598288 ko)
+COQC theories/PCUICContexts.v
+theories/PCUICContexts.vo (real: 6.83, user: 6.33, sys: 0.45, mem: 615568 ko)
+COQC theories/PCUICArities.v
+theories/PCUICArities.vo (real: 8.61, user: 7.75, sys: 0.80, mem: 625664 ko)
+COQC theories/PCUICSpine.v
+theories/PCUICSpine.vo (real: 23.61, user: 22.85, sys: 0.63, mem: 706592 ko)
+COQC theories/PCUICInductives.v
+theories/PCUICInductives.vo (real: 19.89, user: 19.08, sys: 0.66, mem: 683776 ko)
+COQC theories/PCUICValidity.v
+theories/PCUICValidity.vo (real: 4.40, user: 3.99, sys: 0.36, mem: 624912 ko)
+COQC theories/PCUICAlpha.v
+COQC theories/PCUICInductiveInversion.v
+theories/PCUICAlpha.vo (real: 10.12, user: 9.58, sys: 0.47, mem: 684644 ko)
+theories/PCUICInductiveInversion.vo (real: 10.95, user: 10.39, sys: 0.48, mem: 661964 ko)
+COQC theories/PCUICSR.v
+Axioms:
+todounivs : forall A : Type, A
+todoeta : forall A : Type, A
+ind_guard : mutual_inductive_body -> bool
+FunctionalExtensionality.functional_extensionality_dep
+ : forall (A : Type) (B : A -> Type) (f g : forall x : A, B x),
+ (forall x : A, f x = g x) -> f = g
+fix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ fix_guard mfix ->
+ fix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+fix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ fix_guard mfix ->
+ red1 Σ Γ (tFix mfix idx) (tFix mfix' idx) -> fix_guard mfix'
+fix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard : mfixpoint term -> bool
+cofix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ cofix_guard mfix ->
+ cofix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+cofix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ cofix_guard mfix ->
+ red1 Σ Γ (tCoFix mfix idx) (tCoFix mfix' idx) -> cofix_guard mfix'
+cofix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard : mfixpoint term -> bool
+theories/PCUICSR.vo (real: 82.63, user: 80.36, sys: 1.84, mem: 975764 ko)
+COQC theories/PCUICPrincipality.v
+Axioms:
+todounivs : forall A : Type@{todounivs.u0}, A
+todoeta : forall A : Type@{todoeta.u0}, A
+ind_guard : mutual_inductive_body -> bool
+FunctionalExtensionality.functional_extensionality_dep
+ : forall
+ (A : Type@{FunctionalExtensionality.functional_extensionality_dep.u0})
+ (B : A ->
+ Type@{FunctionalExtensionality.functional_extensionality_dep.u1})
+ (f g : forall x : A, B x), (forall x : A, f x = g x) -> f = g
+PCUICUnivSubstitution.fix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ fix_guard mfix ->
+ fix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+fix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ fix_guard mfix ->
+ red1 Σ Γ (tFix mfix idx) (tFix mfix' idx) -> fix_guard mfix'
+fix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ fix_guard mfix -> tFix mfix idx ≡ tFix mfix' idx -> fix_guard mfix'
+fix_guard : mfixpoint term -> bool
+PCUICUnivSubstitution.cofix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ cofix_guard mfix ->
+ cofix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+cofix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ cofix_guard mfix ->
+ red1 Σ Γ (tCoFix mfix idx) (tCoFix mfix' idx) -> cofix_guard mfix'
+cofix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := #|mfix| + k in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ cofix_guard mfix ->
+ tCoFix mfix idx ≡ tCoFix mfix' idx -> cofix_guard mfix'
+cofix_guard : mfixpoint term -> bool
+theories/PCUICPrincipality.vo (real: 27.66, user: 26.11, sys: 1.08, mem: 959132 ko)
+COQC theories/PCUICSafeLemmata.v
+theories/PCUICSafeLemmata.vo (real: 7.45, user: 6.54, sys: 0.85, mem: 667924 ko)
+COQC theories/PCUICSN.v
+COQC theories/PCUICElimination.v
+theories/PCUICSN.vo (real: 2.47, user: 2.12, sys: 0.33, mem: 630488 ko)
+theories/PCUICElimination.vo (real: 8.12, user: 7.64, sys: 0.44, mem: 646256 ko)
+# echo "All done, moving extraction files!"
+# ./clean_extraction.sh
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -C safechecker
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+cat metacoq-config > _CoqProject
+cat _CoqProject.in >> _CoqProject
+coq_makefile -f _CoqProject -o Makefile.safechecker
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.safechecker
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+COQDEP VFILES
+COQC theories/PCUICSafeReduce.v
+theories/PCUICSafeReduce.vo (real: 121.19, user: 119.92, sys: 0.74, mem: 1136588 ko)
+COQC theories/PCUICSafeConversion.v
+theories/PCUICSafeConversion.vo (real: 140.66, user: 139.40, sys: 0.64, mem: 1007764 ko)
+COQC theories/PCUICSafeChecker.v
+File "./theories/PCUICSafeChecker.v", line 1035, characters 4-15:
+Warning:
+Automatically inlined signature for type Forall. Use [Derive Signature for Forall.] to avoid this.
+File "./theories/PCUICSafeChecker.v", line 1039, characters 4-19:
+Warning:
+Automatically inlined signature for type Forall. Use [Derive Signature for Forall.] to avoid this.
+Axioms:
+todounivs : forall A : Type, A
+todoeta : forall A : Type, A
+todo : string -> forall A : Type, A
+proof_irrelevance : forall (P : Prop) (p1 p2 : P), p1 = p2
+normalisation'
+ : forall (cf : checker_flags) (Σ : global_env_ext) (Γ : context) (t : term),
+ wf Σ -> wellformed Σ Γ t -> Acc (cored Σ.1 Γ) t
+ind_guard : mutual_inductive_body -> bool
+functional_extensionality_dep
+ : forall (A : Type) (B : A -> Type) (f g : forall x : A, B x),
+ (forall x : A, f x = g x) -> f = g
+PCUICUnivSubstitution.fix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ fix_guard mfix ->
+ fix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+fix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ fix_guard mfix ->
+ red1 Σ Γ (tFix mfix idx) (tFix mfix' idx) -> fix_guard mfix'
+fix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ fix_guard mfix -> tFix mfix idx ≡ tFix mfix' idx -> fix_guard mfix'
+fix_guard : mfixpoint term -> bool
+PCUICUnivSubstitution.cofix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ cofix_guard mfix ->
+ cofix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+cofix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ cofix_guard mfix ->
+ red1 Σ Γ (tCoFix mfix idx) (tCoFix mfix' idx) -> cofix_guard mfix'
+cofix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ cofix_guard mfix ->
+ tCoFix mfix idx ≡ tCoFix mfix' idx -> cofix_guard mfix'
+cofix_guard : mfixpoint term -> bool
+theories/PCUICSafeChecker.vo (real: 56.94, user: 56.09, sys: 0.61, mem: 958816 ko)
+COQC theories/SafeTemplateChecker.v
+COQC theories/PCUICSafeRetyping.v
+theories/SafeTemplateChecker.vo (real: 2.78, user: 2.42, sys: 0.35, mem: 703592 ko)
+COQC theories/Extraction.v
+theories/PCUICSafeRetyping.vo (real: 6.81, user: 6.30, sys: 0.48, mem: 733700 ko)
+theories/Extraction.vo (real: 4.93, user: 4.47, sys: 0.43, mem: 749140 ko)
+echo "Done extracting the safe checker, moving extraction files!"
+Done extracting the safe checker, moving extraction files!
+./clean_extraction.sh
+Cleaning result of extraction
+Moving All_Forall.ml to all_Forall.ml
+Moving All_Forall.mli to all_Forall.mli
+Moving Ascii.ml to ascii.ml
+Moving Ascii.mli to ascii.mli
+Moving Ast0.ml to ast0.ml
+Moving Ast0.mli to ast0.mli
+Moving BasicAst.ml to basicAst.ml
+Moving BasicAst.mli to basicAst.mli
+Moving Basics.ml to basics.ml
+Moving Basics.mli to basics.mli
+Moving BinInt.ml to binInt.ml
+Moving BinInt.mli to binInt.mli
+Moving BinNat.ml to binNat.ml
+Moving BinNat.mli to binNat.mli
+Moving BinNums.ml to binNums.ml
+Moving BinNums.mli to binNums.mli
+Moving BinPos.ml to binPos.ml
+Moving BinPos.mli to binPos.mli
+Moving Bool.ml to bool.ml
+Moving Bool.mli to bool.mli
+Moving Byte.ml to byte.ml
+Moving Byte.mli to byte.mli
+Moving Classes0.ml to classes0.ml
+Moving Classes0.mli to classes0.mli
+Moving Compare_dec.ml to compare_dec.ml
+Moving Compare_dec.mli to compare_dec.mli
+Moving Datatypes.ml to datatypes.ml
+Moving Datatypes.mli to datatypes.mli
+Moving Environment.ml to environment.ml
+Moving Environment.mli to environment.mli
+Moving EqDecInstances.ml to eqDecInstances.ml
+Moving EqDecInstances.mli to eqDecInstances.mli
+Moving EqdepFacts.ml to eqdepFacts.ml
+Moving EqdepFacts.mli to eqdepFacts.mli
+Moving Equalities.ml to equalities.ml
+Moving Equalities.mli to equalities.mli
+Moving List0.ml to list0.ml
+Moving List0.mli to list0.mli
+Moving MCCompare.ml to mCCompare.ml
+Moving MCCompare.mli to mCCompare.mli
+Moving MCList.ml to mCList.ml
+Moving MCList.mli to mCList.mli
+Moving MCOption.ml to mCOption.ml
+Moving MCOption.mli to mCOption.mli
+Moving MCProd.ml to mCProd.ml
+Moving MCProd.mli to mCProd.mli
+Moving MCString.ml to mCString.ml
+Moving MCString.mli to mCString.mli
+Moving MSetDecide.ml to mSetDecide.ml
+Moving MSetDecide.mli to mSetDecide.mli
+Moving MSetFacts.ml to mSetFacts.ml
+Moving MSetFacts.mli to mSetFacts.mli
+Moving MSetInterface.ml to mSetInterface.ml
+Moving MSetInterface.mli to mSetInterface.mli
+Moving MSetList.ml to mSetList.ml
+Moving MSetList.mli to mSetList.mli
+Moving MSetProperties.ml to mSetProperties.ml
+Moving MSetProperties.mli to mSetProperties.mli
+Moving MSetWeakList.ml to mSetWeakList.ml
+Moving MSetWeakList.mli to mSetWeakList.mli
+Moving Nat0.ml to nat0.ml
+Moving Nat0.mli to nat0.mli
+Moving Orders.ml to orders.ml
+Moving Orders.mli to orders.mli
+Moving OrdersFacts.ml to ordersFacts.ml
+Moving OrdersFacts.mli to ordersFacts.mli
+Moving OrdersLists.ml to ordersLists.ml
+Moving OrdersLists.mli to ordersLists.mli
+Moving OrdersTac.ml to ordersTac.ml
+Moving OrdersTac.mli to ordersTac.mli
+Moving PCUICAst.ml to pCUICAst.ml
+Moving PCUICAst.mli to pCUICAst.mli
+Moving PCUICAstUtils.ml to pCUICAstUtils.ml
+Moving PCUICAstUtils.mli to pCUICAstUtils.mli
+Moving PCUICChecker.ml to pCUICChecker.ml
+Moving PCUICChecker.mli to pCUICChecker.mli
+Moving PCUICCumulativity.ml to pCUICCumulativity.ml
+Moving PCUICCumulativity.mli to pCUICCumulativity.mli
+Moving PCUICEquality.ml to pCUICEquality.ml
+Moving PCUICEquality.mli to pCUICEquality.mli
+Moving PCUICLiftSubst.ml to pCUICLiftSubst.ml
+Moving PCUICLiftSubst.mli to pCUICLiftSubst.mli
+Moving PCUICNormal.ml to pCUICNormal.ml
+Moving PCUICNormal.mli to pCUICNormal.mli
+Moving PCUICPosition.ml to pCUICPosition.ml
+Moving PCUICPosition.mli to pCUICPosition.mli
+Moving PCUICPretty.ml to pCUICPretty.ml
+Moving PCUICPretty.mli to pCUICPretty.mli
+Moving PCUICReflect.ml to pCUICReflect.ml
+Moving PCUICReflect.mli to pCUICReflect.mli
+Moving PCUICSafeChecker.ml to pCUICSafeChecker.ml
+Moving PCUICSafeChecker.mli to pCUICSafeChecker.mli
+Moving PCUICSafeConversion.ml to pCUICSafeConversion.ml
+Moving PCUICSafeConversion.mli to pCUICSafeConversion.mli
+Moving PCUICSafeLemmata.ml to pCUICSafeLemmata.ml
+Moving PCUICSafeLemmata.mli to pCUICSafeLemmata.mli
+Moving PCUICSafeReduce.ml to pCUICSafeReduce.ml
+Moving PCUICSafeReduce.mli to pCUICSafeReduce.mli
+Moving PCUICTyping.ml to pCUICTyping.ml
+Moving PCUICTyping.mli to pCUICTyping.mli
+Moving PCUICUnivSubst.ml to pCUICUnivSubst.ml
+Moving PCUICUnivSubst.mli to pCUICUnivSubst.mli
+Moving PeanoNat.ml to peanoNat.ml
+Moving PeanoNat.mli to peanoNat.mli
+Moving SafeTemplateChecker.ml to safeTemplateChecker.ml
+Moving SafeTemplateChecker.mli to safeTemplateChecker.mli
+Moving Specif.ml to specif.ml
+Moving Specif.mli to specif.mli
+Moving String0.ml to string0.ml
+Moving String0.mli to string0.mli
+Moving TemplateToPCUIC.ml to templateToPCUIC.ml
+Moving TemplateToPCUIC.mli to templateToPCUIC.mli
+Moving Typing0.ml to typing0.ml
+Moving Typing0.mli to typing0.mli
+Moving UnivSubst0.ml to univSubst0.ml
+Moving UnivSubst0.mli to univSubst0.mli
+Moving Universes0.ml to universes0.ml
+Moving Universes0.mli to universes0.mli
+Moving config0.ml to config0.ml
+mv: 'config0.ml' and 'config0.ml' are the same file
+Moving config0.mli to config0.mli
+mv: 'config0.mli' and 'config0.mli' are the same file
+Moving g_metacoq_safechecker.ml to g_metacoq_safechecker.ml
+mv: 'g_metacoq_safechecker.ml' and 'g_metacoq_safechecker.ml' are the same file
+Moving g_metacoq_safechecker.mlg to g_metacoq_safechecker.mlg
+mv: 'g_metacoq_safechecker.mlg' and 'g_metacoq_safechecker.mlg' are the same file
+Moving metacoq_safechecker_plugin.mlpack to metacoq_safechecker_plugin.mlpack
+mv: 'metacoq_safechecker_plugin.mlpack' and 'metacoq_safechecker_plugin.mlpack' are the same file
+Moving monad_utils.ml to monad_utils.ml
+mv: 'monad_utils.ml' and 'monad_utils.ml' are the same file
+Moving monad_utils.mli to monad_utils.mli
+mv: 'monad_utils.mli' and 'monad_utils.mli' are the same file
+Moving ssrbool.ml to ssrbool.ml
+mv: 'ssrbool.ml' and 'ssrbool.ml' are the same file
+Moving ssrbool.mli to ssrbool.mli
+mv: 'ssrbool.mli' and 'ssrbool.mli' are the same file
+Moving uGraph0.ml to uGraph0.ml
+mv: 'uGraph0.ml' and 'uGraph0.ml' are the same file
+Moving uGraph0.mli to uGraph0.mli
+mv: 'uGraph0.mli' and 'uGraph0.mli' are the same file
+Moving utils.ml to utils.ml
+mv: 'utils.ml' and 'utils.ml' are the same file
+Moving utils.mli to utils.mli
+mv: 'utils.mli' and 'utils.mli' are the same file
+Moving wGraph.ml to wGraph.ml
+mv: 'wGraph.ml' and 'wGraph.ml' are the same file
+Moving wGraph.mli to wGraph.mli
+mv: 'wGraph.mli' and 'wGraph.mli' are the same file
+Removing: src/all_Forall.ml src/all_Forall.mli src/ascii.ml src/ascii.mli src/ast0.ml src/ast0.mli src/ast_denoter.ml src/ast_quoter.ml src/astUtils.ml src/astUtils.mli src/basicAst.ml src/basicAst.mli src/basics.ml src/basics.mli src/binInt.ml src/binInt.mli src/binNat.ml src/binNat.mli src/binNums.ml src/binNums.mli src/binPosDef.ml src/binPosDef.mli src/binPos.ml src/binPos.mli src/bool.ml src/bool.mli src/common0.ml src/common0.mli src/compare_dec.ml src/compare_dec.mli src/config0.ml src/config0.mli src/cRelationClasses.ml src/cRelationClasses.mli src/datatypes.ml src/datatypes.mli src/decimal.ml src/decimal.mli src/denoter.ml src/environment.ml src/environment.mli src/equalities.ml src/equalities.mli src/extractable.ml src/extractable.mli src/hexadecimal.ml src/hexadecimal.mli src/liftSubst.ml src/liftSubst.mli src/list0.ml src/list0.mli src/logic0.ml src/logic0.mli src/mCPrelude.mli src/mCPrelude.ml src/mCCompare.ml src/mCCompare.mli src/mCList.ml src/mCList.mli src/mCOption.ml src/mCOption.mli src/mCProd.ml src/mCProd.mli src/mCRelations.ml src/mCRelations.mli src/mCString.ml src/mCString.mli src/mSetDecide.ml src/mSetDecide.mli src/mSetFacts.ml src/mSetFacts.mli src/mSetInterface.ml src/mSetInterface.mli src/mSetList.ml src/mSetList.mli src/mSetProperties.ml src/mSetProperties.mli src/nat0.ml src/nat0.mli src/numeral.ml src/numeral.mli src/orderedType0.ml src/orderedType0.mli src/ordersFacts.ml src/ordersFacts.mli src/ordersLists.ml src/ordersLists.mli src/orders.ml src/orders.mli src/ordersTac.ml src/ordersTac.mli src/peanoNat.ml src/peanoNat.mli src/plugin_core.ml src/plugin_core.mli src/pretty.ml src/pretty.mli src/reification.ml src/quoter.ml src/run_extractable.ml src/run_extractable.mli src/specif.ml src/specif.mli src/string0.ml src/string0.mli src/tm_util.ml src/universes0.ml src/universes0.mli src/univSubst0.ml src/univSubst0.mli
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.plugin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+COQDEP VFILES
+CAMLDEP src/safeTemplateChecker.mli
+CAMLDEP src/pCUICSafeChecker.mli
+CAMLDEP src/pCUICSafeConversion.mli
+CAMLDEP src/pCUICSafeReduce.mli
+CAMLDEP src/pCUICPretty.mli
+CAMLDEP src/pCUICChecker.mli
+CAMLDEP src/templateToPCUIC.mli
+CAMLDEP src/pCUICSafeLemmata.mli
+CAMLDEP src/pCUICNormal.mli
+CAMLDEP src/pCUICCumulativity.mli
+CAMLDEP src/pCUICPosition.mli
+CAMLDEP src/pCUICUnivSubst.mli
+CAMLDEP src/pCUICTyping.mli
+CAMLDEP src/pCUICEquality.mli
+CAMLDEP src/pCUICReflect.mli
+CAMLDEP src/eqDecInstances.mli
+CAMLDEP src/pCUICLiftSubst.mli
+CAMLDEP src/pCUICAstUtils.mli
+CAMLDEP src/pCUICAst.mli
+CAMLDEP src/typing0.mli
+CAMLDEP src/wGraph.mli
+CAMLDEP src/uGraph0.mli
+CAMLDEP src/utils.mli
+CAMLDEP src/monad_utils.mli
+CAMLDEP src/ssrbool.mli
+CAMLDEP src/eqdepFacts.mli
+CAMLDEP src/mSetWeakList.mli
+CAMLDEP src/classes0.mli
+OCAMLLIBDEP src/metacoq_safechecker_plugin.mlpack
+CAMLDEP src/safeTemplateChecker.ml
+CAMLDEP src/pCUICSafeChecker.ml
+CAMLDEP src/pCUICSafeConversion.ml
+CAMLDEP src/pCUICSafeReduce.ml
+CAMLDEP src/pCUICPretty.ml
+CAMLDEP src/pCUICChecker.ml
+CAMLDEP src/templateToPCUIC.ml
+CAMLDEP src/pCUICSafeLemmata.ml
+CAMLDEP src/pCUICNormal.ml
+CAMLDEP src/pCUICPosition.ml
+CAMLDEP src/pCUICCumulativity.ml
+CAMLDEP src/pCUICUnivSubst.ml
+CAMLDEP src/pCUICTyping.ml
+CAMLDEP src/pCUICEquality.ml
+CAMLDEP src/pCUICReflect.ml
+CAMLDEP src/eqDecInstances.ml
+CAMLDEP src/pCUICLiftSubst.ml
+CAMLDEP src/pCUICAstUtils.ml
+CAMLDEP src/pCUICAst.ml
+CAMLDEP src/typing0.ml
+CAMLDEP src/wGraph.ml
+CAMLDEP src/uGraph0.ml
+CAMLDEP src/utils.ml
+CAMLDEP src/monad_utils.ml
+CAMLDEP src/ssrbool.ml
+CAMLDEP src/eqdepFacts.ml
+CAMLDEP src/classes0.ml
+CAMLDEP src/mSetWeakList.ml
+CAMLDEP src/g_metacoq_safechecker.ml
+CAMLC -c src/monad_utils.mli
+CAMLC -c src/mSetWeakList.mli
+src/monad_utils.cmi (real: 0.10, user: 0.03, sys: 0.01, mem: 19196 ko)
+CAMLC -c src/eqdepFacts.mli
+src/mSetWeakList.cmi (real: 0.10, user: 0.03, sys: 0.01, mem: 20008 ko)
+CAMLC -c src/utils.mli
+src/utils.cmi (real: src/eqdep0.04Fac,t s.ucsmie r(:re al:0.03 , sys: 0.01, mem: 19340 ko)
+0.04, user: 0.03, sys: 0.01, mem: 19268 ko)
+CAMLC -c src/ssrbool.mli
+CAMLC -c src/typing0.mli
+src/typing0.cmi (real: 0.04, user: 0.02, sys: 0.01, mem: 20364 ko)
+CAMLC -c src/classes0.mli
+src/ssrbool.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 19332 ko)
+CAMLC -c src/pCUICAst.mli
+src/classes0.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 19328 ko)
+CAMLC -c src/pCUICNormal.mli
+src/pCUICAst.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 21440 ko)
+CAMLC -c src/pCUICCumulativity.mli
+src/pCUICNormal.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19372 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/monad_utils.ml
+src/pCUICCumulativity.cmi (real: 0.03, user: 0.02, sys: 0.01, mem: 19220 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/mSetWeakList.ml
+src/monad_utils.cmx (real: 0.05, user: 0.03, sys: 0.01, mem: 21960 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/eqdepFacts.ml
+src/mSetWeakList.cmx (real: 0.07, user: 0.05, sys: 0.01, mem: 25168 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/utils.ml
+src/eqdepFacts.cmx (real: 0.04, user: 0.02, sys: 0.02, mem: 22016 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/ssrbool.ml
+src/utils.cmx (real: 0.05, user: 0.03, sys: 0.01, mem: 22096 ko)
+CAMLC -c src/wGraph.mli
+src/ssrbool.cmx (real: 0.04, user: 0.02, sys: 0.01, mem: 22104 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/typing0.ml
+src/wGraph.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 22812 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/classes0.ml
+src/typing0.cmx (real: 0.07, user: 0.04, sys: 0.02, mem: 24164 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICAst.ml
+src/classes0.cmx (real: 0.04, user: 0.03, sys: 0.01, mem: 22056 ko)
+CAMLC -c src/pCUICAstUtils.mli
+src/pCUICAstUtils.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20292 ko)
+CAMLC -c src/pCUICUnivSubst.mli
+src/pCUICAst.cmx (real: 0.08, user: 0.05, sys: 0.02, mem: 26084 ko)
+CAMLC -c src/pCUICLiftSubst.mli
+src/pCUICUnivSubst.cmi (real: 0.04, user: 0.04, sys: 0.00, mem: 20452 ko)
+CAMLC -c src/eqDecInstances.mli
+src/pCUICLiftSubst.cmi (real: 0.04, user: 0.02, sys: 0.01, mem: 20432 ko)
+CAMLC -c src/pCUICReflect.mli
+src/eqDecInstances.cmi (real: 0.03, user: 0.02, sys: 0.01, mem: 19260 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICNormal.ml
+src/pCUICReflect.cmi (real: 0.04, user: 0.02, sys: 0.01, mem: 20232 ko)
+CAMLC -c src/pCUICPosition.mli
+src/pCUICNormal.cmx (real: 0.04, user: 0.03, sys: 0.01, mem: 22004 ko)
+CAMLC -c src/templateToPCUIC.mli
+src/pCUICPosition.cmi (real: 0.04, user: 0.02, sys: 0.01, mem: 20460 ko)
+CAMLC -c src/pCUICSafeLemmata.mli
+src/pCUICSafeLemmata.cmi (real: 0.03, user: 0.02, sys: 0.01, mem: 19172 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICCumulativity.ml
+src/templateToPCUIC.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 20348 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/wGraph.ml
+src/pCUICCumulativity.cmx (real: 0.04, user: 0.03, sys: 0.01, mem: 22036 ko)
+CAMLC -c src/uGraph0.mli
+src/uGraph0.cmi (real: 0.07, user: 0.05, sys: 0.01, mem: 24772 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICAstUtils.ml
+src/wGraph.cmx (real: 0.14, user: 0.12, sys: 0.02, mem: 31828 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICUnivSubst.ml
+src/pCUICAstUtils.cmx (real: 0.08, user: 0.06, sys: 0.02, mem: 25948 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICLiftSubst.ml
+src/pCUICUnivSubst.cmx (real: 0.06, user: 0.04, sys: 0.01, mem: 25096 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/eqDecInstances.ml
+src/eqDecInstances.cmx (real: 0.05, user: 0.03, sys: 0.02, mem: 22024 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICReflect.ml
+src/pCUICLiftSubst.cmx (real: 0.08, user: 0.06, sys: 0.02, mem: 26296 ko)
+CAMLC -c src/pCUICEquality.mli
+src/pCUICReflect.cmx (real: 0.06, user: 0.05, sys: 0.01, mem: 24360 ko)
+CAMLC -c src/pCUICTyping.mli
+src/pCUICEquality.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20432 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICPosition.ml
+src/pCUICTyping.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 21428 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/templateToPCUIC.ml
+src/pCUICPosition.cmx (real: 0.09, user: 0.07, sys: 0.01, mem: 26028 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICSafeLemmata.ml
+src/templateToPCUIC.cmx (real: 0.07, user: 0.06, sys: 0.01, mem: 25572 ko)
+CAMLC -c src/pCUICSafeReduce.mli
+src/pCUICSafeLemmata.cmx (real: 0.05, user: 0.03, sys: 0.01, mem: 22056 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/uGraph0.ml
+src/pCUICSafeReduce.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 21588 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICEquality.ml
+src/pCUICEquality.cmx (real: 0.07, user: 0.05, sys: 0.02, mem: 26416 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICTyping.ml
+src/uGraph0.cmx (real: 0.13, user: 0.11, sys: 0.02, mem: 30828 ko)
+CAMLC -c src/pCUICChecker.mli
+src/pCUICChecker.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 21248 ko)
+CAMLC -c src/pCUICSafeConversion.mli
+src/pCUICTyping.cmx (real: 0.10, user: 0.08, sys: 0.02, mem: 27292 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICChecker.ml
+src/pCUICSafeConversion.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 23348 ko)
+CAMLC -c src/pCUICPretty.mli
+src/pCUICChecker.cmx (real: 0.06, user: 0.04, sys: 0.02, mem: 25104 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICSafeReduce.ml
+src/pCUICPretty.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20340 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICPretty.ml
+src/pCUICSafeReduce.cmx (real: 0.10, user: 0.07, sys: 0.02, mem: 27680 ko)
+CAMLC -c src/pCUICSafeChecker.mli
+src/pCUICPretty.cmx (real: 0.11, user: 0.09, sys: 0.02, mem: 28948 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICSafeConversion.ml
+src/pCUICSafeChecker.cmi (real: 0.06, user: 0.06, sys: 0.00, mem: 24128 ko)
+CAMLC -c src/safeTemplateChecker.mli
+src/safeTemplateChecker.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 21632 ko)
+src/pCUICSafeConversion.cmx (real: 0.27, user: 0.24, sys: 0.03, mem: 43304 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/pCUICSafeChecker.ml
+src/pCUICSafeChecker.cmx (real: 0.34, user: 0.29, sys: 0.04, mem: 43492 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/safeTemplateChecker.ml
+src/safeTemplateChecker.cmx (real: 0.07, user: 0.05, sys: 0.01, mem: 27148 ko)
+CAMLOPT -c -for-pack Metacoq_safechecker_plugin src/g_metacoq_safechecker.ml
+src/g_metacoq_safechecker.cmx (real: 0.11, user: 0.09, sys: 0.02, mem: 35368 ko)
+CAMLOPT -pack -o src/metacoq_safechecker_plugin.cmx
+src/metacoq_safechecker_plugin.cmx (real: 0.10, user: 0.06, sys: 0.03, mem: 30436 ko)
+CAMLOPT -a -o src/metacoq_safechecker_plugin.cmxa
+src/metacoq_safechecker_plugin.cmxa (real: 0.05, user: 0.00, sys: 0.01, mem: 13624 ko)
+CAMLOPT -shared -o src/metacoq_safechecker_plugin.cmxs
+src/metacoq_safechecker_plugin.cmxs (real: 0.14, user: 0.11, sys: 0.03, mem: 20224 ko)
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.09, user: 0.05, sys: 0.03, mem: 63536 ko)
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -C erasure
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+cat metacoq-config > _CoqProject
+cat _CoqProject.in >> _CoqProject
+coq_makefile -f _CoqProject -o Makefile.erasure
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.erasure
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+COQDEP VFILES
+COQC theories/EAst.v
+theories/EAst.vo (real: 0.97, user: 0.72, sys: 0.24, mem: 477800 ko)
+COQC theories/EAstUtils.v
+COQC theories/EInduction.v
+theories/EInduction.vo (real: 0.97, user: 0.71, sys: 0.25, mem: 479012 ko)
+COQC theories/Extract.v
+theories/EAstUtils.vo (real: 1.36, user: 1.10, sys: 0.26, mem: 487520 ko)
+COQC theories/ELiftSubst.v
+theories/Extract.vo (real: 1.89, user: 1.57, sys: 0.32, mem: 617808 ko)
+COQC theories/EArities.v
+theories/EArities.vo (real: 6.12, user: 5.66, sys: 0.42, mem: 643396 ko)
+theories/ELiftSubst.vo (real: 10.89, user: 10.08, sys: 0.75, mem: 521520 ko)
+COQC theories/ETyping.v
+COQC theories/ECSubst.v
+theories/ETyping.vo (real: 1.01, user: 0.73, sys: 0.27, mem: 487644 ko)
+COQC theories/EPretty.v
+theories/ECSubst.vo (real: 1.31, user: 1.05, sys: 0.25, mem: 512080 ko)
+COQC theories/EWndEval.v
+theories/EPretty.vo (real: 1.02, user: 0.77, sys: 0.24, mem: 488076 ko)
+COQC theories/EWcbvEval.v
+theories/EWndEval.vo (real: 0.97, user: 0.70, sys: 0.26, mem: 485084 ko)
+theories/EWcbvEval.vo (real: 4.15, user: 3.85, sys: 0.28, mem: 520080 ko)
+COQC theories/EAll.v
+COQC theories/Prelim.v
+theories/EAll.vo (real: 1.76, user: 1.42, sys: 0.32, mem: 619396 ko)
+theories/Prelim.vo (real: 3.82, user: 3.39, sys: 0.40, mem: 741428 ko)
+COQC theories/ESubstitution.v
+COQC theories/EInversion.v
+theories/EInversion.vo (real: 3.19, user: 2.67, sys: 0.50, mem: 729072 ko)
+theories/ESubstitution.vo (real: 14.12, user: 13.39, sys: 0.67, mem: 794032 ko)
+COQC theories/ErasureCorrectness.v
+Axioms:
+todounivs : forall A : Type, A
+todoeta : forall A : Type, A
+todo : string -> forall A : Type, A
+ind_guard : mutual_inductive_body -> bool
+functional_extensionality_dep
+ : forall (A : Type) (B : A -> Type) (f g : forall x : A, B x),
+ (forall x : A, f x = g x) -> f = g
+fix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ fix_guard mfix ->
+ fix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+fix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := #|mfix| + k in
+ let mfix' :=
+ map (map_def (PCUICLiftSubst.subst s k) (PCUICLiftSubst.subst s k'))
+ mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ fix_guard mfix ->
+ red1 Σ Γ (tFix mfix idx) (tFix mfix' idx) -> fix_guard mfix'
+fix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := #|mfix| + k in
+ let mfix' :=
+ map (map_def (PCUICLiftSubst.lift n k) (PCUICLiftSubst.lift n k')) mfix
+ in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ fix_guard mfix ->
+ PCUICEquality.upto_names (tFix mfix idx) (tFix mfix' idx) ->
+ fix_guard mfix'
+fix_guard : mfixpoint term -> bool
+erases_closed
+ : forall (Σ : global_env_ext) (Γ : list context_decl)
+ (a : term) (e : E.term),
+ PCUICLiftSubst.closedn #|Γ| a -> Σ;;; Γ |- a ⇝ℇ e -> closedn #|Γ| e
+cofix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ cofix_guard mfix ->
+ cofix_guard
+ (map (map_def (subst_instance_constr u) (subst_instance_constr u)) mfix)
+cofix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := #|mfix| + k in
+ let mfix' :=
+ map (map_def (PCUICLiftSubst.subst s k) (PCUICLiftSubst.subst s k'))
+ mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ cofix_guard mfix ->
+ red1 Σ Γ (tCoFix mfix idx) (tCoFix mfix' idx) -> cofix_guard mfix'
+cofix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := #|mfix| + k in
+ let mfix' :=
+ map (map_def (PCUICLiftSubst.lift n k) (PCUICLiftSubst.lift n k')) mfix
+ in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ cofix_guard mfix ->
+ PCUICEquality.upto_names (tCoFix mfix idx) (tCoFix mfix' idx) ->
+ cofix_guard mfix'
+cofix_guard : mfixpoint term -> bool
+theories/ErasureCorrectness.vo (real: 58.09, user: 56.17, sys: 1.60, mem: 1113548 ko)
+COQC theories/ErasureFunction.v
+COQC theories/SafeErasureFunction.v
+theories/SafeErasureFunction.vo (real: 24.59, user: 23.34, sys: 1.11, mem: 854428 ko)
+Axioms:
+todounivs : forall A : Type, A
+todoeta : forall A : Type, A
+todo : string -> forall A : Type, A
+proof_irrelevance : forall (P : Prop) (p1 p2 : P), p1 = p2
+normalisation'
+ : forall (cf : checker_flags) (Σ : global_env_ext) (Γ : context) (t : term),
+ wf Σ -> wellformed Σ Γ t -> Acc (cored Σ.1 Γ) t
+ind_guard : mutual_inductive_body -> bool
+functional_extensionality_dep
+ : forall (A : Type) (B : A -> Type) (f g : forall x : A, B x),
+ (forall x : A, f x = g x) -> f = g
+PCUICUnivSubstitution.fix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ fix_guard mfix ->
+ fix_guard
+ (map
+ (map_def (PCUICUnivSubst.subst_instance_constr u)
+ (PCUICUnivSubst.subst_instance_constr u)) mfix)
+fix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ fix_guard mfix ->
+ red1 Σ Γ (tFix mfix idx) (tFix mfix' idx) -> fix_guard mfix'
+fix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ fix_guard mfix -> fix_guard mfix'
+fix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ fix_guard mfix ->
+ PCUICEquality.upto_names (tFix mfix idx) (tFix mfix' idx) ->
+ fix_guard mfix'
+fix_guard : mfixpoint term -> bool
+PCUICUnivSubstitution.cofix_guard_subst_instance
+ : forall (mfix : mfixpoint term) (u : Instance.t),
+ cofix_guard mfix ->
+ cofix_guard
+ (map
+ (map_def (PCUICUnivSubst.subst_instance_constr u)
+ (PCUICUnivSubst.subst_instance_constr u)) mfix)
+cofix_guard_subst
+ : forall (mfix : list (def term)) (s : list term) (k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (subst s k) (subst s k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_red1
+ : forall (Σ : global_env) (Γ : context) (mfix mfix' : mfixpoint term)
+ (idx : nat),
+ cofix_guard mfix ->
+ red1 Σ Γ (tCoFix mfix idx) (tCoFix mfix' idx) -> cofix_guard mfix'
+cofix_guard_lift
+ : forall (mfix : list (def term)) (n k : nat),
+ let k' := (#|mfix| + k)%nat in
+ let mfix' := map (map_def (lift n k) (lift n k')) mfix in
+ cofix_guard mfix -> cofix_guard mfix'
+cofix_guard_eq_term
+ : forall (mfix mfix' : mfixpoint term) (idx : nat),
+ cofix_guard mfix ->
+ PCUICEquality.upto_names (tCoFix mfix idx) (tCoFix mfix' idx) ->
+ cofix_guard mfix'
+cofix_guard : mfixpoint term -> bool
+theories/ErasureFunction.vo (real: 40.61, user: 39.21, sys: 1.22, mem: 1012876 ko)
+COQC theories/SafeTemplateErasure.v
+theories/SafeTemplateErasure.vo (real: 4.47, user: 3.99, sys: 0.45, mem: 806128 ko)
+COQC theories/Extraction.v
+theories/Extraction.vo (real: 6.38, user: 5.74, sys: 0.59, mem: 872556 ko)
+echo "Done extracting the erasure, moving extraction files!"
+Done extracting the erasure, moving extraction files!
+./clean_extraction.sh
+Cleaning result of extraction
+Moving All_Forall.ml to all_Forall.ml
+Moving All_Forall.mli to all_Forall.mli
+Moving Ascii.ml to ascii.ml
+Moving Ascii.mli to ascii.mli
+Moving Ast0.ml to ast0.ml
+Moving Ast0.mli to ast0.mli
+Moving AstUtils.ml to astUtils.ml
+Moving AstUtils.mli to astUtils.mli
+Moving BasicAst.ml to basicAst.ml
+Moving BasicAst.mli to basicAst.mli
+Moving Basics.ml to basics.ml
+Moving Basics.mli to basics.mli
+Moving BinInt.ml to binInt.ml
+Moving BinInt.mli to binInt.mli
+Moving BinNat.ml to binNat.ml
+Moving BinNat.mli to binNat.mli
+Moving BinNums.ml to binNums.ml
+Moving BinNums.mli to binNums.mli
+Moving BinPos.ml to binPos.ml
+Moving BinPos.mli to binPos.mli
+Moving Bool.ml to bool.ml
+Moving Bool.mli to bool.mli
+Moving Byte.ml to byte.ml
+Moving Byte.mli to byte.mli
+Moving Classes0.ml to classes0.ml
+Moving Classes0.mli to classes0.mli
+Moving Compare_dec.ml to compare_dec.ml
+Moving Compare_dec.mli to compare_dec.mli
+Moving Datatypes.ml to datatypes.ml
+Moving Datatypes.mli to datatypes.mli
+Moving EAst.ml to eAst.ml
+Moving EAst.mli to eAst.mli
+Moving EAstUtils.ml to eAstUtils.ml
+Moving EAstUtils.mli to eAstUtils.mli
+Moving ELiftSubst.ml to eLiftSubst.ml
+Moving ELiftSubst.mli to eLiftSubst.mli
+Moving EPretty.ml to ePretty.ml
+Moving EPretty.mli to ePretty.mli
+Moving ETyping.ml to eTyping.ml
+Moving ETyping.mli to eTyping.mli
+Moving Environment.ml to environment.ml
+Moving Environment.mli to environment.mli
+Moving EqDecInstances.ml to eqDecInstances.ml
+Moving EqDecInstances.mli to eqDecInstances.mli
+Moving EqdepFacts.ml to eqdepFacts.ml
+Moving EqdepFacts.mli to eqdepFacts.mli
+Moving Equalities.ml to equalities.ml
+Moving Equalities.mli to equalities.mli
+Moving ErasureFunction.ml to erasureFunction.ml
+Moving ErasureFunction.mli to erasureFunction.mli
+Moving Extract.ml to extract.ml
+Moving Extract.mli to extract.mli
+Moving Init.ml to init.ml
+Moving Init.mli to init.mli
+Moving LiftSubst.ml to liftSubst.ml
+Moving LiftSubst.mli to liftSubst.mli
+Moving List0.ml to list0.ml
+Moving List0.mli to list0.mli
+Moving MCCompare.ml to mCCompare.ml
+Moving MCCompare.mli to mCCompare.mli
+Moving MCList.ml to mCList.ml
+Moving MCList.mli to mCList.mli
+Moving MCOption.ml to mCOption.ml
+Moving MCOption.mli to mCOption.mli
+Moving MCProd.ml to mCProd.ml
+Moving MCProd.mli to mCProd.mli
+Moving MCString.ml to mCString.ml
+Moving MCString.mli to mCString.mli
+Moving MSetDecide.ml to mSetDecide.ml
+Moving MSetDecide.mli to mSetDecide.mli
+Moving MSetFacts.ml to mSetFacts.ml
+Moving MSetFacts.mli to mSetFacts.mli
+Moving MSetInterface.ml to mSetInterface.ml
+Moving MSetInterface.mli to mSetInterface.mli
+Moving MSetList.ml to mSetList.ml
+Moving MSetList.mli to mSetList.mli
+Moving MSetProperties.ml to mSetProperties.ml
+Moving MSetProperties.mli to mSetProperties.mli
+Moving MSetWeakList.ml to mSetWeakList.ml
+Moving MSetWeakList.mli to mSetWeakList.mli
+Moving Nat0.ml to nat0.ml
+Moving Nat0.mli to nat0.mli
+Moving Orders.ml to orders.ml
+Moving Orders.mli to orders.mli
+Moving OrdersFacts.ml to ordersFacts.ml
+Moving OrdersFacts.mli to ordersFacts.mli
+Moving OrdersLists.ml to ordersLists.ml
+Moving OrdersLists.mli to ordersLists.mli
+Moving OrdersTac.ml to ordersTac.ml
+Moving OrdersTac.mli to ordersTac.mli
+Moving PCUICAst.ml to pCUICAst.ml
+Moving PCUICAst.mli to pCUICAst.mli
+Moving PCUICAstUtils.ml to pCUICAstUtils.ml
+Moving PCUICAstUtils.mli to pCUICAstUtils.mli
+Moving PCUICChecker.ml to pCUICChecker.ml
+Moving PCUICChecker.mli to pCUICChecker.mli
+Moving PCUICCumulativity.ml to pCUICCumulativity.ml
+Moving PCUICCumulativity.mli to pCUICCumulativity.mli
+Moving PCUICEquality.ml to pCUICEquality.ml
+Moving PCUICEquality.mli to pCUICEquality.mli
+Moving PCUICLiftSubst.ml to pCUICLiftSubst.ml
+Moving PCUICLiftSubst.mli to pCUICLiftSubst.mli
+Moving PCUICNormal.ml to pCUICNormal.ml
+Moving PCUICNormal.mli to pCUICNormal.mli
+Moving PCUICPosition.ml to pCUICPosition.ml
+Moving PCUICPosition.mli to pCUICPosition.mli
+Moving PCUICPretty.ml to pCUICPretty.ml
+Moving PCUICPretty.mli to pCUICPretty.mli
+Moving PCUICReflect.ml to pCUICReflect.ml
+Moving PCUICReflect.mli to pCUICReflect.mli
+Moving PCUICSafeChecker.ml to pCUICSafeChecker.ml
+Moving PCUICSafeChecker.mli to pCUICSafeChecker.mli
+Moving PCUICSafeConversion.ml to pCUICSafeConversion.ml
+Moving PCUICSafeConversion.mli to pCUICSafeConversion.mli
+Moving PCUICSafeLemmata.ml to pCUICSafeLemmata.ml
+Moving PCUICSafeLemmata.mli to pCUICSafeLemmata.mli
+Moving PCUICSafeReduce.ml to pCUICSafeReduce.ml
+Moving PCUICSafeReduce.mli to pCUICSafeReduce.mli
+Moving PCUICSafeRetyping.ml to pCUICSafeRetyping.ml
+Moving PCUICSafeRetyping.mli to pCUICSafeRetyping.mli
+Moving PCUICTyping.ml to pCUICTyping.ml
+Moving PCUICTyping.mli to pCUICTyping.mli
+Moving PCUICUnivSubst.ml to pCUICUnivSubst.ml
+Moving PCUICUnivSubst.mli to pCUICUnivSubst.mli
+Moving PeanoNat.ml to peanoNat.ml
+Moving PeanoNat.mli to peanoNat.mli
+Moving Pretty.ml to pretty.ml
+Moving Pretty.mli to pretty.mli
+Moving SafeErasureFunction.ml to safeErasureFunction.ml
+Moving SafeErasureFunction.mli to safeErasureFunction.mli
+Moving SafeTemplateChecker.ml to safeTemplateChecker.ml
+Moving SafeTemplateChecker.mli to safeTemplateChecker.mli
+Moving SafeTemplateErasure.ml to safeTemplateErasure.ml
+Moving SafeTemplateErasure.mli to safeTemplateErasure.mli
+Moving Specif.ml to specif.ml
+Moving Specif.mli to specif.mli
+Moving String0.ml to string0.ml
+Moving String0.mli to string0.mli
+Moving TemplateToPCUIC.ml to templateToPCUIC.ml
+Moving TemplateToPCUIC.mli to templateToPCUIC.mli
+Moving Typing0.ml to typing0.ml
+Moving Typing0.mli to typing0.mli
+Moving UnivSubst0.ml to univSubst0.ml
+Moving UnivSubst0.mli to univSubst0.mli
+Moving Universes0.ml to universes0.ml
+Moving Universes0.mli to universes0.mli
+Moving config0.ml to config0.ml
+mv: 'config0.ml' and 'config0.ml' are the same file
+Moving config0.mli to config0.mli
+mv: 'config0.mli' and 'config0.mli' are the same file
+Moving g_metacoq_erasure.ml to g_metacoq_erasure.ml
+mv: 'g_metacoq_erasure.ml' and 'g_metacoq_erasure.ml' are the same file
+Moving g_metacoq_erasure.mlg to g_metacoq_erasure.mlg
+mv: 'g_metacoq_erasure.mlg' and 'g_metacoq_erasure.mlg' are the same file
+Moving metacoq_erasure_plugin.mlpack to metacoq_erasure_plugin.mlpack
+mv: 'metacoq_erasure_plugin.mlpack' and 'metacoq_erasure_plugin.mlpack' are the same file
+Moving monad_utils.ml to monad_utils.ml
+mv: 'monad_utils.ml' and 'monad_utils.ml' are the same file
+Moving monad_utils.mli to monad_utils.mli
+mv: 'monad_utils.mli' and 'monad_utils.mli' are the same file
+Moving ssrbool.ml to ssrbool.ml
+mv: 'ssrbool.ml' and 'ssrbool.ml' are the same file
+Moving ssrbool.mli to ssrbool.mli
+mv: 'ssrbool.mli' and 'ssrbool.mli' are the same file
+Moving uGraph0.ml to uGraph0.ml
+mv: 'uGraph0.ml' and 'uGraph0.ml' are the same file
+Moving uGraph0.mli to uGraph0.mli
+mv: 'uGraph0.mli' and 'uGraph0.mli' are the same file
+Moving utils.ml to utils.ml
+mv: 'utils.ml' and 'utils.ml' are the same file
+Moving utils.mli to utils.mli
+mv: 'utils.mli' and 'utils.mli' are the same file
+Moving wGraph.ml to wGraph.ml
+mv: 'wGraph.ml' and 'wGraph.ml' are the same file
+Moving wGraph.mli to wGraph.mli
+mv: 'wGraph.mli' and 'wGraph.mli' are the same file
+Removing: src/all_Forall.ml src/all_Forall.mli src/ascii.ml src/ascii.mli src/ast0.ml src/ast0.mli src/ast_denoter.ml src/ast_quoter.ml src/astUtils.ml src/astUtils.mli src/basicAst.ml src/basicAst.mli src/basics.ml src/basics.mli src/binInt.ml src/binInt.mli src/binNat.ml src/binNat.mli src/binNums.ml src/binNums.mli src/binPosDef.ml src/binPosDef.mli src/binPos.ml src/binPos.mli src/bool.ml src/bool.mli src/common0.ml src/common0.mli src/compare_dec.ml src/compare_dec.mli src/config0.ml src/config0.mli src/cRelationClasses.ml src/cRelationClasses.mli src/datatypes.ml src/datatypes.mli src/decimal.ml src/decimal.mli src/denoter.ml src/environment.ml src/environment.mli src/equalities.ml src/equalities.mli src/extractable.ml src/extractable.mli src/hexadecimal.ml src/hexadecimal.mli src/liftSubst.ml src/liftSubst.mli src/list0.ml src/list0.mli src/logic0.ml src/logic0.mli src/mCPrelude.mli src/mCPrelude.ml src/mCCompare.ml src/mCCompare.mli src/mCList.ml src/mCList.mli src/mCOption.ml src/mCOption.mli src/mCProd.ml src/mCProd.mli src/mCRelations.ml src/mCRelations.mli src/mCString.ml src/mCString.mli src/mSetDecide.ml src/mSetDecide.mli src/mSetFacts.ml src/mSetFacts.mli src/mSetInterface.ml src/mSetInterface.mli src/mSetList.ml src/mSetList.mli src/mSetProperties.ml src/mSetProperties.mli src/nat0.ml src/nat0.mli src/numeral.ml src/numeral.mli src/orderedType0.ml src/orderedType0.mli src/ordersFacts.ml src/ordersFacts.mli src/ordersLists.ml src/ordersLists.mli src/orders.ml src/orders.mli src/ordersTac.ml src/ordersTac.mli src/peanoNat.ml src/peanoNat.mli src/plugin_core.ml src/plugin_core.mli src/pretty.ml src/pretty.mli src/reification.ml src/quoter.ml src/run_extractable.ml src/run_extractable.mli src/specif.ml src/specif.mli src/string0.ml src/string0.mli src/tm_util.ml src/universes0.ml src/universes0.mli src/univSubst0.ml src/univSubst0.mli
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+./clean_extraction.sh
+Cleaning result of extraction
+Moving byte.ml to byte.ml
+mv: 'byte.ml' and 'byte.ml' are the same file
+Moving byte.mli to byte.mli
+mv: 'byte.mli' and 'byte.mli' are the same file
+Moving classes0.ml to classes0.ml
+mv: 'classes0.ml' and 'classes0.ml' are the same file
+Moving classes0.mli to classes0.mli
+mv: 'classes0.mli' and 'classes0.mli' are the same file
+Moving eAst.ml to eAst.ml
+mv: 'eAst.ml' and 'eAst.ml' are the same file
+Moving eAst.mli to eAst.mli
+mv: 'eAst.mli' and 'eAst.mli' are the same file
+Moving eAstUtils.ml to eAstUtils.ml
+mv: 'eAstUtils.ml' and 'eAstUtils.ml' are the same file
+Moving eAstUtils.mli to eAstUtils.mli
+mv: 'eAstUtils.mli' and 'eAstUtils.mli' are the same file
+Moving eLiftSubst.ml to eLiftSubst.ml
+mv: 'eLiftSubst.ml' and 'eLiftSubst.ml' are the same file
+Moving eLiftSubst.mli to eLiftSubst.mli
+mv: 'eLiftSubst.mli' and 'eLiftSubst.mli' are the same file
+Moving ePretty.ml to ePretty.ml
+mv: 'ePretty.ml' and 'ePretty.ml' are the same file
+Moving ePretty.mli to ePretty.mli
+mv: 'ePretty.mli' and 'ePretty.mli' are the same file
+Moving eTyping.ml to eTyping.ml
+mv: 'eTyping.ml' and 'eTyping.ml' are the same file
+Moving eTyping.mli to eTyping.mli
+mv: 'eTyping.mli' and 'eTyping.mli' are the same file
+Moving eqDecInstances.ml to eqDecInstances.ml
+mv: 'eqDecInstances.ml' and 'eqDecInstances.ml' are the same file
+Moving eqDecInstances.mli to eqDecInstances.mli
+mv: 'eqDecInstances.mli' and 'eqDecInstances.mli' are the same file
+Moving eqdepFacts.ml to eqdepFacts.ml
+mv: 'eqdepFacts.ml' and 'eqdepFacts.ml' are the same file
+Moving eqdepFacts.mli to eqdepFacts.mli
+mv: 'eqdepFacts.mli' and 'eqdepFacts.mli' are the same file
+Moving erasureFunction.ml to erasureFunction.ml
+mv: 'erasureFunction.ml' and 'erasureFunction.ml' are the same file
+Moving erasureFunction.mli to erasureFunction.mli
+mv: 'erasureFunction.mli' and 'erasureFunction.mli' are the same file
+Moving extract.ml to extract.ml
+mv: 'extract.ml' and 'extract.ml' are the same file
+Moving extract.mli to extract.mli
+mv: 'extract.mli' and 'extract.mli' are the same file
+Moving g_metacoq_erasure.ml to g_metacoq_erasure.ml
+mv: 'g_metacoq_erasure.ml' and 'g_metacoq_erasure.ml' are the same file
+Moving g_metacoq_erasure.mlg to g_metacoq_erasure.mlg
+mv: 'g_metacoq_erasure.mlg' and 'g_metacoq_erasure.mlg' are the same file
+Moving init.ml to init.ml
+mv: 'init.ml' and 'init.ml' are the same file
+Moving init.mli to init.mli
+mv: 'init.mli' and 'init.mli' are the same file
+Moving mSetWeakList.ml to mSetWeakList.ml
+mv: 'mSetWeakList.ml' and 'mSetWeakList.ml' are the same file
+Moving mSetWeakList.mli to mSetWeakList.mli
+mv: 'mSetWeakList.mli' and 'mSetWeakList.mli' are the same file
+Moving metacoq_erasure_plugin.mlpack to metacoq_erasure_plugin.mlpack
+mv: 'metacoq_erasure_plugin.mlpack' and 'metacoq_erasure_plugin.mlpack' are the same file
+Moving monad_utils.ml to monad_utils.ml
+mv: 'monad_utils.ml' and 'monad_utils.ml' are the same file
+Moving monad_utils.mli to monad_utils.mli
+mv: 'monad_utils.mli' and 'monad_utils.mli' are the same file
+Moving pCUICAst.ml to pCUICAst.ml
+mv: 'pCUICAst.ml' and 'pCUICAst.ml' are the same file
+Moving pCUICAst.mli to pCUICAst.mli
+mv: 'pCUICAst.mli' and 'pCUICAst.mli' are the same file
+Moving pCUICAstUtils.ml to pCUICAstUtils.ml
+mv: 'pCUICAstUtils.ml' and 'pCUICAstUtils.ml' are the same file
+Moving pCUICAstUtils.mli to pCUICAstUtils.mli
+mv: 'pCUICAstUtils.mli' and 'pCUICAstUtils.mli' are the same file
+Moving pCUICChecker.ml to pCUICChecker.ml
+mv: 'pCUICChecker.ml' and 'pCUICChecker.ml' are the same file
+Moving pCUICChecker.mli to pCUICChecker.mli
+mv: 'pCUICChecker.mli' and 'pCUICChecker.mli' are the same file
+Moving pCUICCumulativity.ml to pCUICCumulativity.ml
+mv: 'pCUICCumulativity.ml' and 'pCUICCumulativity.ml' are the same file
+Moving pCUICCumulativity.mli to pCUICCumulativity.mli
+mv: 'pCUICCumulativity.mli' and 'pCUICCumulativity.mli' are the same file
+Moving pCUICEquality.ml to pCUICEquality.ml
+mv: 'pCUICEquality.ml' and 'pCUICEquality.ml' are the same file
+Moving pCUICEquality.mli to pCUICEquality.mli
+mv: 'pCUICEquality.mli' and 'pCUICEquality.mli' are the same file
+Moving pCUICLiftSubst.ml to pCUICLiftSubst.ml
+mv: 'pCUICLiftSubst.ml' and 'pCUICLiftSubst.ml' are the same file
+Moving pCUICLiftSubst.mli to pCUICLiftSubst.mli
+mv: 'pCUICLiftSubst.mli' and 'pCUICLiftSubst.mli' are the same file
+Moving pCUICNormal.ml to pCUICNormal.ml
+mv: 'pCUICNormal.ml' and 'pCUICNormal.ml' are the same file
+Moving pCUICNormal.mli to pCUICNormal.mli
+mv: 'pCUICNormal.mli' and 'pCUICNormal.mli' are the same file
+Moving pCUICPosition.ml to pCUICPosition.ml
+mv: 'pCUICPosition.ml' and 'pCUICPosition.ml' are the same file
+Moving pCUICPosition.mli to pCUICPosition.mli
+mv: 'pCUICPosition.mli' and 'pCUICPosition.mli' are the same file
+Moving pCUICPretty.ml to pCUICPretty.ml
+mv: 'pCUICPretty.ml' and 'pCUICPretty.ml' are the same file
+Moving pCUICPretty.mli to pCUICPretty.mli
+mv: 'pCUICPretty.mli' and 'pCUICPretty.mli' are the same file
+Moving pCUICReflect.ml to pCUICReflect.ml
+mv: 'pCUICReflect.ml' and 'pCUICReflect.ml' are the same file
+Moving pCUICReflect.mli to pCUICReflect.mli
+mv: 'pCUICReflect.mli' and 'pCUICReflect.mli' are the same file
+Moving pCUICSafeChecker.ml to pCUICSafeChecker.ml
+mv: 'pCUICSafeChecker.ml' and 'pCUICSafeChecker.ml' are the same file
+Moving pCUICSafeChecker.mli to pCUICSafeChecker.mli
+mv: 'pCUICSafeChecker.mli' and 'pCUICSafeChecker.mli' are the same file
+Moving pCUICSafeConversion.ml to pCUICSafeConversion.ml
+mv: 'pCUICSafeConversion.ml' and 'pCUICSafeConversion.ml' are the same file
+Moving pCUICSafeConversion.mli to pCUICSafeConversion.mli
+mv: 'pCUICSafeConversion.mli' and 'pCUICSafeConversion.mli' are the same file
+Moving pCUICSafeLemmata.ml to pCUICSafeLemmata.ml
+mv: 'pCUICSafeLemmata.ml' and 'pCUICSafeLemmata.ml' are the same file
+Moving pCUICSafeLemmata.mli to pCUICSafeLemmata.mli
+mv: 'pCUICSafeLemmata.mli' and 'pCUICSafeLemmata.mli' are the same file
+Moving pCUICSafeReduce.ml to pCUICSafeReduce.ml
+mv: 'pCUICSafeReduce.ml' and 'pCUICSafeReduce.ml' are the same file
+Moving pCUICSafeReduce.mli to pCUICSafeReduce.mli
+mv: 'pCUICSafeReduce.mli' and 'pCUICSafeReduce.mli' are the same file
+Moving pCUICSafeRetyping.ml to pCUICSafeRetyping.ml
+mv: 'pCUICSafeRetyping.ml' and 'pCUICSafeRetyping.ml' are the same file
+Moving pCUICSafeRetyping.mli to pCUICSafeRetyping.mli
+mv: 'pCUICSafeRetyping.mli' and 'pCUICSafeRetyping.mli' are the same file
+Moving pCUICTyping.ml to pCUICTyping.ml
+mv: 'pCUICTyping.ml' and 'pCUICTyping.ml' are the same file
+Moving pCUICTyping.mli to pCUICTyping.mli
+mv: 'pCUICTyping.mli' and 'pCUICTyping.mli' are the same file
+Moving pCUICUnivSubst.ml to pCUICUnivSubst.ml
+mv: 'pCUICUnivSubst.ml' and 'pCUICUnivSubst.ml' are the same file
+Moving pCUICUnivSubst.mli to pCUICUnivSubst.mli
+mv: 'pCUICUnivSubst.mli' and 'pCUICUnivSubst.mli' are the same file
+Moving safeErasureFunction.ml to safeErasureFunction.ml
+mv: 'safeErasureFunction.ml' and 'safeErasureFunction.ml' are the same file
+Moving safeErasureFunction.mli to safeErasureFunction.mli
+mv: 'safeErasureFunction.mli' and 'safeErasureFunction.mli' are the same file
+Moving safeTemplateChecker.ml to safeTemplateChecker.ml
+mv: 'safeTemplateChecker.ml' and 'safeTemplateChecker.ml' are the same file
+Moving safeTemplateChecker.mli to safeTemplateChecker.mli
+mv: 'safeTemplateChecker.mli' and 'safeTemplateChecker.mli' are the same file
+Moving safeTemplateErasure.ml to safeTemplateErasure.ml
+mv: 'safeTemplateErasure.ml' and 'safeTemplateErasure.ml' are the same file
+Moving safeTemplateErasure.mli to safeTemplateErasure.mli
+mv: 'safeTemplateErasure.mli' and 'safeTemplateErasure.mli' are the same file
+Moving ssrbool.ml to ssrbool.ml
+mv: 'ssrbool.ml' and 'ssrbool.ml' are the same file
+Moving ssrbool.mli to ssrbool.mli
+mv: 'ssrbool.mli' and 'ssrbool.mli' are the same file
+Moving templateToPCUIC.ml to templateToPCUIC.ml
+mv: 'templateToPCUIC.ml' and 'templateToPCUIC.ml' are the same file
+Moving templateToPCUIC.mli to templateToPCUIC.mli
+mv: 'templateToPCUIC.mli' and 'templateToPCUIC.mli' are the same file
+Moving typing0.ml to typing0.ml
+mv: 'typing0.ml' and 'typing0.ml' are the same file
+Moving typing0.mli to typing0.mli
+mv: 'typing0.mli' and 'typing0.mli' are the same file
+Moving uGraph0.ml to uGraph0.ml
+mv: 'uGraph0.ml' and 'uGraph0.ml' are the same file
+Moving uGraph0.mli to uGraph0.mli
+mv: 'uGraph0.mli' and 'uGraph0.mli' are the same file
+Moving utils.ml to utils.ml
+mv: 'utils.ml' and 'utils.ml' are the same file
+Moving utils.mli to utils.mli
+mv: 'utils.mli' and 'utils.mli' are the same file
+Moving wGraph.ml to wGraph.ml
+mv: 'wGraph.ml' and 'wGraph.ml' are the same file
+Moving wGraph.mli to wGraph.mli
+mv: 'wGraph.mli' and 'wGraph.mli' are the same file
+Removing: src/all_Forall.ml src/all_Forall.mli src/ascii.ml src/ascii.mli src/ast0.ml src/ast0.mli src/ast_denoter.ml src/ast_quoter.ml src/astUtils.ml src/astUtils.mli src/basicAst.ml src/basicAst.mli src/basics.ml src/basics.mli src/binInt.ml src/binInt.mli src/binNat.ml src/binNat.mli src/binNums.ml src/binNums.mli src/binPosDef.ml src/binPosDef.mli src/binPos.ml src/binPos.mli src/bool.ml src/bool.mli src/common0.ml src/common0.mli src/compare_dec.ml src/compare_dec.mli src/config0.ml src/config0.mli src/cRelationClasses.ml src/cRelationClasses.mli src/datatypes.ml src/datatypes.mli src/decimal.ml src/decimal.mli src/denoter.ml src/environment.ml src/environment.mli src/equalities.ml src/equalities.mli src/extractable.ml src/extractable.mli src/hexadecimal.ml src/hexadecimal.mli src/liftSubst.ml src/liftSubst.mli src/list0.ml src/list0.mli src/logic0.ml src/logic0.mli src/mCPrelude.mli src/mCPrelude.ml src/mCCompare.ml src/mCCompare.mli src/mCList.ml src/mCList.mli src/mCOption.ml src/mCOption.mli src/mCProd.ml src/mCProd.mli src/mCRelations.ml src/mCRelations.mli src/mCString.ml src/mCString.mli src/mSetDecide.ml src/mSetDecide.mli src/mSetFacts.ml src/mSetFacts.mli src/mSetInterface.ml src/mSetInterface.mli src/mSetList.ml src/mSetList.mli src/mSetProperties.ml src/mSetProperties.mli src/nat0.ml src/nat0.mli src/numeral.ml src/numeral.mli src/orderedType0.ml src/orderedType0.mli src/ordersFacts.ml src/ordersFacts.mli src/ordersLists.ml src/ordersLists.mli src/orders.ml src/orders.mli src/ordersTac.ml src/ordersTac.mli src/peanoNat.ml src/peanoNat.mli src/plugin_core.ml src/plugin_core.mli src/pretty.ml src/pretty.mli src/reification.ml src/quoter.ml src/run_extractable.ml src/run_extractable.mli src/specif.ml src/specif.mli src/string0.ml src/string0.mli src/tm_util.ml src/universes0.ml src/universes0.mli src/univSubst0.ml src/univSubst0.mli
+make -f Makefile.plugin
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+COQDEP VFILES
+CAMLDEP src/safeTemplateErasure.mli
+CAMLDEP src/ePretty.mli
+CAMLDEP src/safeErasureFunction.mli
+CAMLDEP src/extract.mli
+CAMLDEP src/erasureFunction.mli
+CAMLDEP src/eTyping.mli
+CAMLDEP src/eLiftSubst.mli
+CAMLDEP src/eAstUtils.mli
+CAMLDEP src/eAst.mli
+CAMLDEP src/safeTemplateChecker.mli
+CAMLDEP src/pCUICSafeRetyping.mli
+CAMLDEP src/pCUICSafeChecker.mli
+CAMLDEP src/pCUICSafeConversion.mli
+CAMLDEP src/pCUICSafeReduce.mli
+CAMLDEP src/templateToPCUIC.mli
+CAMLDEP src/pCUICSafeLemmata.mli
+CAMLDEP src/pCUICPretty.mli
+CAMLDEP src/pCUICChecker.mli
+CAMLDEP src/pCUICNormal.mli
+CAMLDEP src/pCUICPosition.mli
+CAMLDEP src/pCUICCumulativity.mli
+CAMLDEP src/pCUICUnivSubst.mli
+CAMLDEP src/pCUICTyping.mli
+CAMLDEP src/pCUICReflect.mli
+CAMLDEP src/pCUICEquality.mli
+CAMLDEP src/eqDecInstances.mli
+CAMLDEP src/pCUICLiftSubst.mli
+CAMLDEP src/pCUICAstUtils.mli
+CAMLDEP src/pCUICAst.mli
+CAMLDEP src/typing0.mli
+CAMLDEP src/wGraph.mli
+CAMLDEP src/uGraph0.mli
+CAMLDEP src/monad_utils.mli
+CAMLDEP src/utils.mli
+CAMLDEP src/ssrbool.mli
+CAMLDEP src/eqdepFacts.mli
+CAMLDEP src/mSetWeakList.mli
+CAMLDEP src/classes0.mli
+CAMLDEP src/init.mli
+OCAMLLIBDEP src/metacoq_erasure_plugin.mlpack
+CAMLDEP src/safeTemplateErasure.ml
+CAMLDEP src/ePretty.ml
+CAMLDEP src/safeErasureFunction.ml
+CAMLDEP src/erasureFunction.ml
+CAMLDEP src/extract.ml
+CAMLDEP src/eTyping.ml
+CAMLDEP src/eLiftSubst.ml
+CAMLDEP src/eAstUtils.ml
+CAMLDEP src/eAst.ml
+CAMLDEP src/safeTemplateChecker.ml
+CAMLDEP src/pCUICSafeRetyping.ml
+CAMLDEP src/pCUICSafeChecker.ml
+CAMLDEP src/pCUICSafeConversion.ml
+CAMLDEP src/pCUICSafeReduce.ml
+CAMLDEP src/templateToPCUIC.ml
+CAMLDEP src/pCUICSafeLemmata.ml
+CAMLDEP src/pCUICPretty.ml
+CAMLDEP src/pCUICChecker.ml
+CAMLDEP src/pCUICNormal.ml
+CAMLDEP src/pCUICPosition.ml
+CAMLDEP src/pCUICCumulativity.ml
+CAMLDEP src/pCUICUnivSubst.ml
+CAMLDEP src/pCUICTyping.ml
+CAMLDEP src/pCUICEquality.ml
+CAMLDEP src/pCUICReflect.ml
+CAMLDEP src/eqDecInstances.ml
+CAMLDEP src/pCUICLiftSubst.ml
+CAMLDEP src/pCUICAstUtils.ml
+CAMLDEP src/pCUICAst.ml
+CAMLDEP src/typing0.ml
+CAMLDEP src/wGraph.ml
+CAMLDEP src/uGraph0.ml
+CAMLDEP src/monad_utils.ml
+CAMLDEP src/utils.ml
+CAMLDEP src/ssrbool.ml
+CAMLDEP src/eqdepFacts.ml
+CAMLDEP src/mSetWeakList.ml
+CAMLDEP src/classes0.ml
+CAMLDEP src/init.ml
+CAMLDEP src/g_metacoq_erasure.ml
+CAMLC -c src/mSetWeakList.mli
+CAMLC -c src/monad_utils.mli
+src/monad_utils.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19272 ko)
+CAMLC -c src/eqdepFacts.mli
+src/mSetWeakList.cmi (real: 0.06, user: 0.04, sys: 0.01, mem: 20108 ko)
+CAMLC -c src/ssrbool.mli
+src/eqdepFacts.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19396 ko)
+CAMLC -c src/utils.mli
+src/ssrbool.cmi (real: 0.04, user: 0.02, sys: 0.01, mem: 19220 ko)
+CAMLC -c src/typing0.mli
+src/typing0.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20300 ko)
+CAMLC -c src/init.mli
+src/utils.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 19228 ko)
+CAMLC -c src/classes0.mli
+src/init.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19324 ko)
+CAMLC -c src/pCUICAst.mli
+src/classes0.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 19340 ko)
+CAMLC -c src/pCUICNormal.mli
+src/pCUICNormal.cmi (real: 0.03, user: 0.02, sys: 0.01, mem: 19304 ko)
+CAMLC -c src/pCUICCumulativity.mli
+src/pCUICAst.cmi (real: 0.06, user: 0.04, sys: 0.01, mem: 21244 ko)
+CAMLC -c src/safeTemplateChecker.mli
+src/pCUICCumulativity.cmi (real: 0.03, user: 0.02, sys: 0.01, mem: 19224 ko)
+CAMLC -c src/eAst.mli
+src/safeTemplateChecker.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 20348 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/monad_utils.ml
+src/eAst.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 20908 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/mSetWeakList.ml
+src/monad_utils.cmx (real: 0.07, user: 0.04, sys: 0.02, mem: 22452 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/eqdepFacts.ml
+src/mSetWeakList.cmx (real: 0.08, user: 0.06, sys: 0.01, mem: 25216 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/ssrbool.ml
+src/eqdepFacts.cmx (real: 0.05, user: 0.03, sys: 0.01, mem: 22072 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/utils.ml
+src/ssrbool.cmx (real: 0.05, user: 0.02, sys: 0.02, mem: 21912 ko)
+CAMLC -c src/wGraph.mli
+src/utils.cmx (real: 0.06, user: 0.04, sys: 0.02, mem: 22212 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/typing0.ml
+src/wGraph.cmi (real: 0.06, user: 0.05, sys: 0.00, mem: 22824 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/init.ml
+src/typing0.cmx (real: 0.07, user: 0.05, sys: 0.01, mem: 24076 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/classes0.ml
+src/init.cmx (real: 0.05, user: 0.03, sys: 0.02, mem: 22188 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICAst.ml
+src/classes0.cmx (real: 0.05, user: 0.02, sys: 0.02, mem: 21960 ko)
+CAMLC -c src/pCUICAstUtils.mli
+src/pCUICAst.cmx (real: 0.07, user: 0.05, sys: 0.01, mem: 26032 ko)
+CAMLC -c src/pCUICUnivSubst.mli
+src/pCUICAstUtils.cmi (real: 0.06, user: 0.04, sys: 0.01, mem: 20412 ko)
+CAMLC -c src/pCUICLiftSubst.mli
+src/pCUICUnivSubst.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20308 ko)
+CAMLC -c src/eqDecInstances.mli
+src/pCUICLiftSubst.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 20444 ko)
+CAMLC -c src/pCUICReflect.mli
+src/eqDecInstances.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19268 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICNormal.ml
+src/pCUICReflect.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20240 ko)
+CAMLC -c src/pCUICPosition.mli
+src/pCUICNormal.cmx (real: 0.05, user: 0.03, sys: 0.02, mem: 22044 ko)
+CAMLC -c src/templateToPCUIC.mli
+src/pCUICPosition.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 20488 ko)
+CAMLC -c src/pCUICSafeLemmata.mli
+src/pCUICSafeLemmata.cmi (real: 0.04, user: 0.03, sys: 0.00, mem: 19348 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICCumulativity.ml
+src/templateToPCUIC.cmi (real: 0.06, user: 0.05, sys: 0.01, mem: 21328 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/safeTemplateChecker.ml
+src/pCUICCumulativity.cmx (real: 0.04, user: 0.02, sys: 0.02, mem: 21940 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/eAst.ml
+src/safeTemplateChecker.cmx (real: 0.08, user: 0.06, sys: 0.02, mem: 25408 ko)
+CAMLC -c src/eAstUtils.mli
+src/eAstUtils.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19496 ko)
+CAMLC -c src/eLiftSubst.mli
+src/eAst.cmx (real: 0.12, user: 0.10, sys: 0.02, mem: 28644 ko)
+CAMLC -c src/extract.mli
+src/eLiftSubst.cmi (real: 0.04, user: 0.02, sys: 0.01, mem: 19300 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/wGraph.ml
+src/extract.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 21060 ko)
+CAMLC -c src/uGraph0.mli
+src/uGraph0.cmi (real: 0.08, user: 0.06, sys: 0.01, mem: 24780 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICAstUtils.ml
+src/wGraph.cmx (real: 0.17, user: 0.14, sys: 0.02, mem: 31636 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICUnivSubst.ml
+src/pCUICAstUtils.cmx (real: 0.11, user: 0.08, sys: 0.02, mem: 26392 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICLiftSubst.ml
+src/pCUICUnivSubst.cmx (real: 0.08, user: 0.05, sys: 0.02, mem: 25180 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/eqDecInstances.ml
+src/eqDecInstances.cmx (real: 0.06, user: 0.03, sys: 0.02, mem: 22196 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICReflect.ml
+src/pCUICLiftSubst.cmx (real: 0.09, user: 0.06, sys: 0.02, mem: 26244 ko)
+CAMLC -c src/pCUICEquality.mli
+src/pCUICEquality.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 20372 ko)
+CAMLC -c src/pCUICTyping.mli
+src/pCUICReflect.cmx (real: 0.07, user: 0.05, sys: 0.02, mem: 24336 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICPosition.ml
+src/pCUICTyping.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 21400 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/templateToPCUIC.ml
+src/pCUICPosition.cmx (real: 0.08, user: 0.06, sys: 0.01, mem: 26048 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICSafeLemmata.ml
+src/templateToPCUIC.cmx (real: 0.08, user: 0.06, sys: 0.02, mem: 26384 ko)
+src/pCUICSafeLemmata.cmx (real: 0.05, user: 0.02, sys: 0.02, mem: 22084 ko)
+CAMLC -c src/pCUICSafeReduce.mli
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/eAstUtils.ml
+src/pCUICSafeReduce.cmi (real: 0.06, user: 0.05, sys: 0.01, mem: 21556 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/eLiftSubst.ml
+src/eAstUtils.cmx (real: 0.08, user: 0.05, sys: 0.02, mem: 24800 ko)
+CAMLC -c src/eTyping.mli
+src/eTyping.cmi (real: 0.04, user: 0.03, sys: 0.00, mem: 20252 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/extract.ml
+src/eLiftSubst.cmx (real: 0.07, user: 0.05, sys: 0.02, mem: 25192 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/uGraph0.ml
+src/extract.cmx (real: 0.07, user: 0.04, sys: 0.02, mem: 23032 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICEquality.ml
+src/uGraph0.cmx (real: 0.13, user: 0.11, sys: 0.02, mem: 30984 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICTyping.ml
+src/pCUICEquality.cmx (real: 0.09, user: 0.06, sys: 0.02, mem: 26256 ko)
+CAMLC -c src/pCUICChecker.mli
+src/pCUICChecker.cmi (real: 0.06, user: 0.04, sys: 0.01, mem: 21236 ko)
+CAMLC -c src/pCUICSafeConversion.mli
+src/pCUICTyping.cmx (real: 0.11, user: 0.08, sys: 0.03, mem: 27752 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/eTyping.ml
+src/pCUICSafeConversion.cmi (real: 0.08, user: 0.06, sys: 0.02, mem: 23232 ko)
+CAMLC -c src/ePretty.mli
+src/eTyping.cmx (real: 0.08, user: 0.06, sys: 0.02, mem: 24684 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICChecker.ml
+src/ePretty.cmi (real: 0.06, user: 0.04, sys: 0.01, mem: 20540 ko)
+CAMLC -c src/pCUICPretty.mli
+src/pCUICPretty.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 20560 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICSafeReduce.ml
+src/pCUICChecker.cmx (real: 0.07, user: 0.05, sys: 0.02, mem: 25140 ko)
+CAMLC -c src/pCUICSafeChecker.mli
+src/pCUICSafeChecker.cmi (real: 0.07, user: 0.05, sys: 0.01, mem: 24300 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/ePretty.ml
+src/pCUICSafeReduce.cmx (real: 0.09, user: 0.07, sys: 0.02, mem: 27792 ko)
+CAMLC -c src/erasureFunction.mli
+src/erasureFunction.cmi (real: 0.08, user: 0.06, sys: 0.01, mem: 22652 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICPretty.ml
+src/ePretty.cmx (real: 0.11, user: 0.09, sys: 0.02, mem: 26992 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICSafeConversion.ml
+src/pCUICPretty.cmx (real: 0.11, user: 0.09, sys: 0.02, mem: 29148 ko)
+CAMLC -c src/pCUICSafeRetyping.mli
+src/pCUICSafeRetyping.cmi (real: 0.05, user: 0.03, sys: 0.01, mem: 21604 ko)
+CAMLC -c src/safeErasureFunction.mli
+src/safeErasureFunction.cmi (real: 0.07, user: 0.05, sys: 0.01, mem: 21660 ko)
+CAMLC -c src/safeTemplateErasure.mli
+src/safeTemplateErasure.cmi (real: 0.07, user: 0.05, sys: 0.01, mem: 23148 ko)
+src/pCUICSafeConversion.cmx (real: 0.31, user: 0.27, sys: 0.03, mem: 43056 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICSafeChecker.ml
+src/pCUICSafeChecker.cmx (real: 0.37, user: 0.33, sys: 0.03, mem: 45284 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/pCUICSafeRetyping.ml
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/erasureFunction.ml
+src/pCUICSafeRetyping.cmx (real: 0.09, user: 0.06, sys: 0.02, mem: 27380 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/safeErasureFunction.ml
+src/erasureFunction.cmx (real: 0.14, user: 0.11, sys: 0.02, mem: 31208 ko)
+src/safeErasureFunction.cmx (real: 0.12, user: 0.09, sys: 0.01, mem: 29852 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/safeTemplateErasure.ml
+src/safeTemplateErasure.cmx (real: 0.09, user: 0.07, sys: 0.02, mem: 30244 ko)
+CAMLOPT -c -for-pack Metacoq_erasure_plugin src/g_metacoq_erasure.ml
+src/g_metacoq_erasure.cmx (real: 0.09, user: 0.06, sys: 0.02, mem: 30052 ko)
+CAMLOPT -pack -o src/metacoq_erasure_plugin.cmx
+src/metacoq_erasure_plugin.cmx (real: 0.12, user: 0.08, sys: 0.03, mem: 32668 ko)
+CAMLOPT -a -o src/metacoq_erasure_plugin.cmxa
+src/metacoq_erasure_plugin.cmxa (real: 0.02, user: 0.00, sys: 0.01, mem: 13520 ko)
+CAMLOPT -shared -o src/metacoq_erasure_plugin.cmxs
+src/metacoq_erasure_plugin.cmxs (real: 0.17, user: 0.13, sys: 0.03, mem: 20232 ko)
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.41, user: 0.30, sys: 0.11, mem: 237756 ko)
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -C test-suite
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/test-suite'
+coq_makefile -f _CoqProject -o Makefile.coq
+make -C plugin-demo
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/test-suite/plugin-demo'
+coq_makefile -f _CoqProject -o Makefile.coq
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.coq pretty-timed
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/test-suite'
+Warning: ../../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.coq
+make[5]: Entering directory '/builds/coq/coq/_build_ci/metacoq/test-suite/plugin-demo'
+COQDEP VFILES
+COQDEP VFILES
+*** Warning: in file theories/MyPlugin.v,
+ required library Loader matches several files in path
+ (found Loader.v in ../../template-coq/theories and theories; used the latter)
+COQC theories/Lens.v
+theories/Lens.vo (real: 0.10, user: 0.05, sys: 0.04, mem: 64048 ko)
+COQC theories/MyPlugin.v
+COQC bug1.v
+File "./theories/MyPlugin.v", line 10, characters 0-24:
+Warning: Interpreting this declaration as if a global declaration prefixed by
+"Local", i.e. as a global declaration which shall not be available without
+qualification when imported. [local-declaration,scope]
+theories/MyPlugin.vo (real: 1.20, user: 0.91, sys: 0.28, mem: 513348 ko)
+COQC theories/Extraction.v
+bug1.vo (real: 1.30, user: 1.03, sys: 0.26, mem: 510284 ko)
+COQC bug2.v
+bug2.vo (real: 1.09, user: 0.81, sys: 0.26, mem: 500380 ko)
+COQC bug5.v
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The extraction is currently set to bypass opacity, the following
+opaque constant bodies have been accessed
+: All_Forall.All2_firstn All_Forall.All2_All_mix_right
+ CRelationClasses.PartialOrder_inverse All_Forall.All_All2_All2_mix
+ fold_rec_bis cardinal_inv_2b All_Forall.All_rev All_Forall.All_mix
+ All_Forall.All_map All_Forall.All_app
+ All_Forall.OnOne2_impl_exist_and_All_r Universes.fresh_universe
+ All_Forall.Alli_rev All_Forall.Alli_mix All_Forall.Alli_app
+ All_Forall.Alli_All All_Forall.All_prod All_Forall.All_mapi
+ All_Forall.All_impl All_Forall.All_Alli All_Forall.All_All2
+ List.Forall_rect All_Forall.All2_sym All_Forall.All2_rev
+ All_Forall.All2_nth All_Forall.All2_mix All_Forall.All2_map
+ All_Forall.All2_app All_Forall.All2_All fold_rec_nodep
+ Universes.Level.eqb_spec All_Forall.Alli_shiftn_inv Universes.fresh_level
+ All_Forall.All2_All_mix_left All_Forall.All2_nth_error_Some_r
+ All_Forall.Alli_nth_error All_Forall.forall_nth_error_All
+ All_Forall.forall_nth_error_Alli All_Forall.All2_nth_error
+ All_Forall.nth_error_all All_Forall.All2_prod_inv All_Forall.Alli_mapi
+ List.nth_in_or_default All_Forall.forallb_nth'
+ CRelationClasses.partial_order_antisym All_Forall.All_skipn
+ CRelationClasses.flip_PreOrder All_Forall.Alli_shiftn All_Forall.Forall_All
+ CRelationClasses.relation_implication_preorder
+ All_Forall.OnOne2_impl_exist_and_All All_Forall.All2i_rev
+ All_Forall.All2i_app All_Forall.All2_symP All_Forall.All2_swap
+ All_Forall.All2_same All_Forall.All2_mapi All_Forall.All2_impl
+ All_Forall.All2_app_inv String.eqb_spec All_Forall.OnOne2_All_mix_left
+ List.exists_last All_Forall.All2i_mapi All_Forall.All2i_impl
+ All_Forall.All_nth_error All_Forall.All_repeat All_Forall.Alli_app_inv
+ All_Forall.All2_trans All_Forall.All2_skipn All_Forall.All2_right
+ All_Forall.All2_eq_eq All_Forall.All2_app_r All_Forall.All_firstn
+ All_Forall.All2_All_right All_Forall.All2_map_left MCOption.option_map_Some
+ CRelationClasses.flip_Reflexive All_Forall.All2_map_right
+ All_Forall.All2_map_left' All_Forall.forallb2_All2 All_Forall.All_app_inv
+ MCList.rev_case CRelationClasses.flip_StrictOrder MCList.nth_error_spec
+ List.destruct_list CRelationClasses.relation_equivalence_equivalence
+ All_Forall.OnOne2_split All_Forall.OnOne2_ind_l All_Forall.OnOne2_exist
+ cardinal_inv_2 All_Forall.All2_All_left All_Forall.OnOne2_mapP
+ All_Forall.OnOne2_impl All_Forall.nth_error_alli
+ Universes.ConstraintType.eq_dec MCList.rev_list_ind In_dec Ascii.eqb_spec
+ All_Forall.All_prod_inv set_induction_min set_induction_max
+ MCCompare.string_Compare All_Forall.All2_nth_error_Some_right
+ MCList.nth_error_Some' All_Forall.map_option_out_All All_Forall.All_rev_map
+ All_Forall.All_rev_inv All_Forall.All_All2_refl
+ CRelationClasses.flip_Antisymmetric All_Forall.All2_app_inv_r fold_rel
+ fold_rec MCCompare.ascii_Compare CRelationClasses.flip_PER
+ All_Forall.Alli_All_mix set_induction All_Forall.All2_mix_inv
+ CRelationClasses.flip_Equivalence All_Forall.forallb_All
+ All_Forall.All2_map_inv MCList.rev_ind All_Forall.All2_right_triv
+ set_induction_bis MCList.list_rect_rev fold_rec_weak BasicAst.ident_eq_spec
+ All_Forall.OnOne2_sym All_Forall.OnOne2_map All_Forall.OnOne2_app
+ All_Forall.All2_from_nth_error All_Forall.map_eq_inj
+ All_Forall.Alli_rev_nth_error All_Forall.All2_map_right'
+ All_Forall.All2_nth_error_Some All_Forall.OnOne2_nth_error
+ All_Forall.All2_All_left_pack All_Forall.All_safe_nth
+ CRelationClasses.subrelation_symmetric MCOption.nth_map_option_out
+ All_Forall.All_map_inv All_Forall.Alli_shift All_Forall.All2_impl_In.
+ [extraction-opaque-accessed,extraction]
+bug5.vo (real: 1.92, user: 1.62, sys: 0.29, mem: 512080 ko)
+COQC bug6.v
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier __top_assumption_ contains __ which is reserved for
+the extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier __top_assumption_ contains __ which is reserved for
+the extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rect contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rec contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rect contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rec contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rect contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rec contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rect contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+File "./theories/Extraction.v", line 7, characters 0-28:
+Warning: The identifier t__rec contains __ which is reserved for the
+extraction [extraction-reserved-identifier,extraction]
+theories/Extraction.vo (real: 3.67, user: 3.11, sys: 0.54, mem: 561316 ko)
+make[5]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/test-suite/plugin-demo'
+cd gen-src && ./to-lower.sh
+Moving Lens.ml to lens.ml
+Moving Lens.mli to lens.mli
+Moving MyPlugin.ml to myPlugin.ml
+Moving MyPlugin.mli to myPlugin.mli
+make -f Makefile.plugin
+make[5]: Entering directory '/builds/coq/coq/_build_ci/metacoq/test-suite/plugin-demo'
+Makefile.plugin:20: Makefile.plugin.conf: No such file or directory
+COQDEP VFILES
+*** Warning: in file test/test.v,
+ required library Loader matches several files in path
+ (found Loader.v in ../../template-coq/theories and theories; used the latter)
+coq_makefile -f _PluginProject -o Makefile.plugin
+Warning: ../../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+COQPP src/g_demo_plugin.mlg
+CAMLDEP gen-src/lens.mli
+CAMLDEP gen-src/myPlugin.mli
+OCAMLLIBDEP src/demo_plugin.mlpack
+CAMLDEP gen-src/lens.ml
+CAMLDEP gen-src/myPlugin.ml
+CAMLDEP src/g_demo_plugin.ml
+CAMLC -c gen-src/lens.mli
+gen-src/lens.cmi (real: 0.04, user: 0.03, sys: 0.01, mem: 19172 ko)
+CAMLC -c gen-src/myPlugin.mli
+gen-src/myPlugin.cmi (real: 0.05, user: 0.04, sys: 0.01, mem: 20208 ko)
+CAMLOPT -c -for-pack Demo_plugin gen-src/lens.ml
+gen-src/lens.cmx (real: 0.07, user: 0.04, sys: 0.02, mem: 22124 ko)
+CAMLOPT -c -for-pack Demo_plugin gen-src/myPlugin.ml
+bug6.vo (real: 1.11, user: 0.85, sys: 0.25, mem: 500408 ko)
+COQC bug7.v
+gen-src/myPlugin.cmx (real: 0.12, user: 0.10, sys: 0.02, mem: 27228 ko)
+CAMLOPT -c -for-pack Demo_plugin src/g_demo_plugin.ml
+src/g_demo_plugin.cmx (real: 0.09, user: 0.06, sys: 0.02, mem: 27844 ko)
+CAMLOPT -pack -o src/demo_plugin.cmx
+src/demo_plugin.cmx (real: 0.06, user: 0.04, sys: 0.02, mem: 21964 ko)
+CAMLOPT -a -o src/demo_plugin.cmxa
+src/demo_plugin.cmxa (real: 0.02, user: 0.00, sys: 0.01, mem: 13200 ko)
+CAMLOPT -shared -o src/demo_plugin.cmxs
+src/demo_plugin.cmxs (real: 0.04, user: 0.01, sys: 0.02, mem: 14256 ko)
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.10, user: 0.05, sys: 0.04, mem: 62308 ko)
+COQC test/test.v
+bug7.vo (real: 1.21, user: 0.89, sys: 0.31, mem: 500252 ko)
+COQC bug8.v
+Notation plus := Nat.add
+Expands to: Notation Coq.Init.Peano.plus
+(1 + 2)
+File "./test/test.v", line 19, characters 0-16:
+Warning: SSReflect's Search command has been moved to the ssrsearch module;
+please Require that module if you still want to use SSReflect's Search
+command [ssr-search-moved,deprecated]
+x: Point -> nat
+y: Point -> nat
+Build_Point: nat -> nat -> Point
+_y: Lens Point Point nat nat
+_x: Lens Point Point nat nat
+test/test.vo (real: 1.51, user: 1.21, sys: 0.29, mem: 513888 ko)
+make[5]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/test-suite/plugin-demo'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/test-suite/plugin-demo'
+COQC bugkncst.v
+bug8.vo (real: 1.10, user: 0.84, sys: 0.25, mem: 500436 ko)
+COQC case.v
+File "./bugkncst.v", line 12, characters 21-36:
+Warning: omega is deprecated since 8.12; use “lia” instead.
+[omega-is-deprecated,deprecated]
+case.vo (real: 1.12, user: 0.88, sys: 0.23, mem: 500120 ko)
+COQC castprop.v
+castprop.vo (real: 1.23, user: 0.94, sys: 0.28, mem: 510368 ko)
+COQC cofix.v
+cofix.vo (real: 1.11, user: 0.81, sys: 0.29, mem: 500192 ko)
+COQC erasure_live_test.v
+bugkncst.vo (real: 57.89, user: 56.51, sys: 1.14, mem: 896928 ko)
+COQC vs.v
+File "./vs.v", line 91, characters 0-145:
+Warning: omega is deprecated since 8.12; use “lia” instead.
+[omega-is-deprecated,deprecated]
+File "./vs.v", line 1065, characters 1-7:
+Warning: omega is deprecated since 8.12; use “lia” instead.
+[omega-is-deprecated,deprecated]
+File "./vs.v", line 1066, characters 1-7:
+Warning: omega is deprecated since 8.12; use “lia” instead.
+[omega-is-deprecated,deprecated]
+File "./vs.v", line 1486, characters 0-143:
+Warning: omega is deprecated since 8.12; use “lia” instead.
+[omega-is-deprecated,deprecated]
+File "./vs.v", line 1519, characters 0-4:
+Warning: Cannot define graph(s) for main [funind-cannot-define-graph,funind]
+File "./vs.v", line 1519, characters 0-4:
+Warning: Cannot build inversion information
+[funind-cannot-build-inversion,funind]
+File "./vs.v", line 1870, characters 0-758:
+Warning: Not a truly recursive fixpoint. [non-recursive,fixpoints]
+File "./vs.v", line 2020, characters 0-145:
+Warning: omega is deprecated since 8.12; use “lia” instead.
+[omega-is-deprecated,deprecated]
+File "./vs.v", line 2347, characters 0-27:
+Warning: The extraction is currently set to bypass opacity, the following
+opaque constant bodies have been accessed
+: the_loop_terminate main_terminate.
+ [extraction-opaque-accessed,extraction]
+File "./vs.v", line 2370, characters 0-21:
+Warning: The extraction is currently set to bypass opacity, the following
+opaque constant bodies have been accessed
+: the_loop_terminate main_terminate.
+ [extraction-opaque-accessed,extraction]
+vs.vo (real: 5.44, user: 4.90, sys: 0.51, mem: 501352 ko)
+COQC evars.v
+evars.vo (real: 1.10, user: 0.79, sys: 0.29, mem: 500100 ko)
+COQC extractable.v
+extractable.vo (real: 1.17, user: 0.88, sys: 0.29, mem: 501748 ko)
+COQC hnf_ctor.v
+hnf_ctor.vo (real: 1.11, user: 0.80, sys: 0.30, mem: 502088 ko)
+COQC issue27.v
+issue27.vo (real: 1.35, user: 1.02, sys: 0.31, mem: 522688 ko)
+COQC issue28.v
+File "./issue28.v", line 31, characters 0-282:
+Warning: Interpreting this declaration as if a global declaration prefixed by
+"Local", i.e. as a global declaration which shall not be available without
+qualification when imported. [local-declaration,scope]
+issue28.vo (real: 1.35, user: 1.05, sys: 0.29, mem: 522968 ko)
+COQC letin.v
+letin.vo (real: 1.21, user: 0.90, sys: 0.29, mem: 500080 ko)
+COQC modules_sections.v
+modules_sections.vo (real: 1.73, user: 1.35, sys: 0.35, mem: 526276 ko)
+COQC mutind.v
+mutind.vo (real: 1.19, user: 0.89, sys: 0.29, mem: 500068 ko)
+COQC opaque.v
+opaque.vo (real: 1.26, user: 0.94, sys: 0.31, mem: 500016 ko)
+COQC proj.v
+proj.vo (real: 1.52, user: 1.21, sys: 0.29, mem: 524028 ko)
+COQC run_in_tactic.v
+run_in_tactic.vo (real: 1.34, user: 1.03, sys: 0.29, mem: 522996 ko)
+COQC safechecker_test.v
+File "./safechecker_test.v", line 39, characters 0-27:
+Warning: To avoid stack overflow, large numbers in nat are interpreted as
+applications of Nat.of_num_uint. [abstract-large-number,numbers]
+File "./safechecker_test.v", line 54, characters 0-44:
+Warning: Notation "_ * _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./safechecker_test.v", line 70, characters 0-50:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./safechecker_test.v", line 72, characters 0-45:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./safechecker_test.v", line 88, characters 0-68:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./safechecker_test.v", line 432, characters 0-221:
+Warning:
+Ignored instance declaration for “e_inv”: “forall
+ (A : Type@{Var(0)})
+ (B : Type@{Var(1)})
+ (f : A -> B),
+ IsEquiv@{Var(0) Var(1)} f ->
+ B -> A” is not a class
+[not-a-class,typeclasses]
+File "./safechecker_test.v", line 440, characters 0-83:
+Warning:
+Ignored instance declaration for “e_fun”: “forall
+ (A : Type@{Var(0)})
+ (B : Type@{Var(1)}),
+ Equiv@{Var(0) Var(1)} A B ->
+ A -> B” is not a class
+[not-a-class,typeclasses]
+safechecker_test.vo (real: 3.34, user: 2.89, sys: 0.44, mem: 726228 ko)
+COQC tmExistingInstance.v
+tmExistingInstance.vo (real: 1.21, user: 0.92, sys: 0.28, mem: 522724 ko)
+COQC tmInferInstance.v
+tmInferInstance.vo (real: 1.30, user: 0.98, sys: 0.31, mem: 522552 ko)
+COQC TypingTests.v
+TypingTests.vo (real: 2.62, user: 2.27, sys: 0.34, mem: 558304 ko)
+COQC unfold.v
+unfold.vo (real: 1.35, user: 1.03, sys: 0.31, mem: 522248 ko)
+COQC univ.v
+univ.vo (real: 1.28, user: 0.99, sys: 0.28, mem: 522992 ko)
+COQC tmVariable.v
+tmVariable.vo (real: 1.31, user: 1.01, sys: 0.29, mem: 524932 ko)
+COQC order_rec.v
+order_rec.vo (real: 1.41, user: 1.09, sys: 0.30, mem: 525128 ko)
+COQC erasure_test.v
+erasure_live_test.vo (real: 88.03, user: 86.21, sys: 1.46, mem: 1038900 ko)
+File "./erasure_test.v", line 44, characters 0-27:
+Warning: To avoid stack overflow, large numbers in nat are interpreted as
+applications of Nat.of_num_uint. [abstract-large-number,numbers]
+erasure_test.vo (real: 1.42, user: 1.10, sys: 0.31, mem: 543584 ko)
+ Time | Peak Mem | File Name
+---------------------------------------------
+2m59.43s | 1038900 ko | Total Time / Peak Mem
+---------------------------------------------
+1m26.21s | 1038900 ko | erasure_live_test.vo
+0m56.51s | 896928 ko | bugkncst.vo
+0m04.90s | 501352 ko | vs.vo
+0m02.89s | 726228 ko | safechecker_test.vo
+0m02.27s | 558304 ko | TypingTests.vo
+0m01.62s | 512080 ko | bug5.vo
+0m01.35s | 526276 ko | modules_sections.vo
+0m01.21s | 524028 ko | proj.vo
+0m01.10s | 543584 ko | erasure_test.vo
+0m01.09s | 525128 ko | order_rec.vo
+0m01.05s | 522968 ko | issue28.vo
+0m01.03s | 510284 ko | bug1.vo
+0m01.03s | 522996 ko | run_in_tactic.vo
+0m01.03s | 522248 ko | unfold.vo
+0m01.02s | 522688 ko | issue27.vo
+0m01.01s | 524932 ko | tmVariable.vo
+0m00.99s | 522992 ko | univ.vo
+0m00.98s | 522552 ko | tmInferInstance.vo
+0m00.94s | 510368 ko | castprop.vo
+0m00.94s | 500016 ko | opaque.vo
+0m00.92s | 522724 ko | tmExistingInstance.vo
+0m00.90s | 500080 ko | letin.vo
+0m00.89s | 500252 ko | bug7.vo
+0m00.89s | 500068 ko | mutind.vo
+0m00.88s | 500120 ko | case.vo
+0m00.88s | 501748 ko | extractable.vo
+0m00.85s | 500408 ko | bug6.vo
+0m00.84s | 500436 ko | bug8.vo
+0m00.81s | 500380 ko | bug2.vo
+0m00.81s | 500192 ko | cofix.vo
+0m00.80s | 502088 ko | hnf_ctor.vo
+0m00.79s | 500100 ko | evars.vo
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/test-suite'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/test-suite'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq'
+make[1]: Leaving directory '/builds/coq/coq/_build_ci/metacoq'
++ make install
++ '[' -z x ']'
++ command make install
++ make install
+make[1]: Entering directory '/builds/coq/coq/_build_ci/metacoq'
+make -C template-coq
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.coq
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Nothing to be done for 'real-all'.
+./update_plugin.sh
+Updating gen-src from src
+Copying from src to gen-src
+Renaming files to camelCase
+patching file gen-src/cRelationClasses.mli
+Reversed (or previously applied) patch detected! Skipping patch.
+1 out of 1 hunk ignored -- saving rejects to file gen-src/cRelationClasses.mli.rej
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.template optfiles
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Nothing to be done for 'optfiles'.
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+cp src/template_coq.cm* build/
+make -f Makefile.template
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Nothing to be done for 'real-all'.
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.plugin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+CAMLDEP gen-src/univSubst0.mli
+CAMLDEP gen-src/universes0.mli
+CAMLDEP gen-src/string0.mli
+CAMLDEP gen-src/run_extractable.mli
+CAMLDEP gen-src/specif.mli
+CAMLDEP gen-src/pretty.mli
+CAMLDEP gen-src/plugin_core.mli
+CAMLDEP gen-src/peanoNat.mli
+CAMLDEP gen-src/ordersTac.mli
+CAMLDEP gen-src/orders.mli
+CAMLDEP gen-src/ordersLists.mli
+CAMLDEP gen-src/ordersFacts.mli
+CAMLDEP gen-src/orderedType0.mli
+CAMLDEP gen-src/numeral.mli
+CAMLDEP gen-src/nat0.mli
+CAMLDEP gen-src/mSetProperties.mli
+CAMLDEP gen-src/mSetList.mli
+CAMLDEP gen-src/mSetInterface.mli
+CAMLDEP gen-src/mSetFacts.mli
+CAMLDEP gen-src/mSetDecide.mli
+CAMLDEP gen-src/mCString.mli
+CAMLDEP gen-src/mCRelations.mli
+CAMLDEP gen-src/mCProd.mli
+CAMLDEP gen-src/mCOption.mli
+CAMLDEP gen-src/mCList.mli
+CAMLDEP gen-src/mCCompare.mli
+CAMLDEP gen-src/mCPrelude.mli
+CAMLDEP gen-src/logic0.mli
+CAMLDEP gen-src/list0.mli
+CAMLDEP gen-src/liftSubst.mli
+CAMLDEP gen-src/hexadecimal.mli
+CAMLDEP gen-src/extractable.mli
+CAMLDEP gen-src/equalities.mli
+CAMLDEP gen-src/environment.mli
+CAMLDEP gen-src/decimal.mli
+CAMLDEP gen-src/datatypes.mli
+CAMLDEP gen-src/cRelationClasses.mli
+CAMLDEP gen-src/config0.mli
+CAMLDEP gen-src/compare_dec.mli
+CAMLDEP gen-src/common0.mli
+CAMLDEP gen-src/bool.mli
+CAMLDEP gen-src/binPos.mli
+CAMLDEP gen-src/binPosDef.mli
+CAMLDEP gen-src/binNums.mli
+CAMLDEP gen-src/binNat.mli
+CAMLDEP gen-src/binInt.mli
+CAMLDEP gen-src/basics.mli
+CAMLDEP gen-src/basicAst.mli
+CAMLDEP gen-src/astUtils.mli
+CAMLDEP gen-src/ast0.mli
+CAMLDEP gen-src/ascii.mli
+CAMLDEP gen-src/all_Forall.mli
+OCAMLLIBDEP gen-src/metacoq_template_plugin.mlpack
+CAMLDEP gen-src/univSubst0.ml
+CAMLDEP gen-src/universes0.ml
+CAMLDEP gen-src/tm_util.ml
+CAMLDEP gen-src/string0.ml
+CAMLDEP gen-src/specif.ml
+CAMLDEP gen-src/run_extractable.ml
+CAMLDEP gen-src/quoter.ml
+CAMLDEP gen-src/reification.ml
+CAMLDEP gen-src/pretty.ml
+CAMLDEP gen-src/plugin_core.ml
+CAMLDEP gen-src/peanoNat.ml
+CAMLDEP gen-src/ordersTac.ml
+CAMLDEP gen-src/orders.ml
+CAMLDEP gen-src/ordersLists.ml
+CAMLDEP gen-src/ordersFacts.ml
+CAMLDEP gen-src/orderedType0.ml
+CAMLDEP gen-src/numeral.ml
+CAMLDEP gen-src/nat0.ml
+CAMLDEP gen-src/mSetProperties.ml
+CAMLDEP gen-src/mSetList.ml
+CAMLDEP gen-src/mSetInterface.ml
+CAMLDEP gen-src/mSetFacts.ml
+CAMLDEP gen-src/mSetDecide.ml
+CAMLDEP gen-src/mCString.ml
+CAMLDEP gen-src/mCRelations.ml
+CAMLDEP gen-src/mCProd.ml
+CAMLDEP gen-src/mCOption.ml
+CAMLDEP gen-src/mCList.ml
+CAMLDEP gen-src/mCCompare.ml
+CAMLDEP gen-src/mCPrelude.ml
+CAMLDEP gen-src/logic0.ml
+CAMLDEP gen-src/list0.ml
+CAMLDEP gen-src/liftSubst.ml
+CAMLDEP gen-src/hexadecimal.ml
+CAMLDEP gen-src/extractable.ml
+CAMLDEP gen-src/equalities.ml
+CAMLDEP gen-src/environment.ml
+CAMLDEP gen-src/denoter.ml
+CAMLDEP gen-src/decimal.ml
+CAMLDEP gen-src/datatypes.ml
+CAMLDEP gen-src/cRelationClasses.ml
+CAMLDEP gen-src/config0.ml
+CAMLDEP gen-src/compare_dec.ml
+CAMLDEP gen-src/common0.ml
+CAMLDEP gen-src/bool.ml
+CAMLDEP gen-src/binPos.ml
+CAMLDEP gen-src/binPosDef.ml
+CAMLDEP gen-src/binNums.ml
+CAMLDEP gen-src/binNat.ml
+CAMLDEP gen-src/binInt.ml
+CAMLDEP gen-src/basics.ml
+CAMLDEP gen-src/basicAst.ml
+CAMLDEP gen-src/astUtils.ml
+CAMLDEP gen-src/ast_quoter.ml
+CAMLDEP gen-src/ast_denoter.ml
+CAMLDEP gen-src/ast0.ml
+CAMLDEP gen-src/ascii.ml
+CAMLDEP gen-src/all_Forall.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/tm_util.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/reification.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/reification.cmx (real: 0.03, user: 0.01, sys: 0.01, mem: 14744 ko)
+CAMLC -c gen-src/plugin_core.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/plugin_core.cmi (real: 0.02, user: 0.01, sys: 0.01, mem: 17304 ko)
+CAMLC -c gen-src/tm_util.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/tm_util.cmx (real: 0.08, user: 0.04, sys: 0.03, mem: 21988 ko)
+CAMLC -c gen-src/reification.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/reification.cmo (real: 0.01, user: 0.00, sys: 0.01, mem: 11896 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/tm_util.cmo (real: 0.04, user: 0.03, sys: 0.01, mem: 18588 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/denoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/denoter.cmx (real: 0.08, user: 0.06, sys: 0.02, mem: 24368 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/plugin_core.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/plugin_core.cmx (real: 0.10, user: 0.07, sys: 0.02, mem: 27576 ko)
+gen-src/quoter.cmx (real: 0.20, user: 0.16, sys: 0.03, mem: 34528 ko)
+CAMLC -c gen-src/quoter.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast_quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/quoter.cmo (real: 0.12, user: 0.09, sys: 0.02, mem: 26444 ko)
+CAMLC -c gen-src/ast_quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast_quoter.cmx (real: 0.12, user: 0.09, sys: 0.03, mem: 27268 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast_denoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast_quoter.cmo (real: 0.07, user: 0.05, sys: 0.02, mem: 22532 ko)
+CAMLC -c gen-src/run_extractable.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/run_extractable.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 13788 ko)
+gen-src/ast_denoter.cmx (real: 0.09, user: 0.07, sys: 0.02, mem: 27192 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/run_extractable.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/run_extractable.cmx (real: 0.14, user: 0.11, sys: 0.02, mem: 30592 ko)
+CAMLOPT -pack -o gen-src/metacoq_template_plugin.cmx
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmx (real: 0.21, user: 0.09, sys: 0.04, mem: 31480 ko)
+CAMLOPT -a -o gen-src/metacoq_template_plugin.cmxa
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmxa (real: 0.03, user: 0.01, sys: 0.02, mem: 13916 ko)
+CAMLOPT -shared -o gen-src/metacoq_template_plugin.cmxs
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmxs (real: 0.14, user: 0.10, sys: 0.03, mem: 18520 ko)
+COQC theories/ExtractableLoader.v
+theories/ExtractableLoader.vo (real: 0.10, user: 0.06, sys: 0.04, mem: 62624 ko)
+cp gen-src/metacoq_template_plugin.cm* build/
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -C checker
+make -C pcuic
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -f Makefile.coq
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -f Makefile.pcuic
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[4]: Nothing to be done for 'real-all'.
+./update_plugin.sh
+Renaming extracted files
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -C examples
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/examples'
+make -f Makefile.coq pretty-timed
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/examples'
+make[4]: Nothing to be done for 'real-all'.
+# echo "All done, moving extraction files!"
+# ./clean_extraction.sh
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -C safechecker
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.safechecker
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[6]: Nothing to be done for 'real-all'.
+make[4]: Nothing to be done for 'real-all'.
+echo "Done extracting the safe checker, moving extraction files!"
+Done extracting the safe checker, moving extraction files!
+./clean_extraction.sh
+Cleaning result of extraction
+Extraction up-to date
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.plugin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+ Time | Peak Mem | File Name
+--------------------------------------------
+0m22.62s | 581920 ko | Total Time / Peak Mem
+--------------------------------------------
+0m19.93s | 581920 ko | tauto.vo
+0m01.56s | 527740 ko | demo.vo
+0m01.13s | 524144 ko | add_constructor.vo
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/examples'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/examples'
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.11, user: 0.07, sys: 0.03, mem: 63372 ko)
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -C erasure
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -f Makefile.erasure
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[4]: Nothing to be done for 'real-all'.
+echo "Done extracting the erasure, moving extraction files!"
+Done extracting the erasure, moving extraction files!
+./clean_extraction.sh
+Cleaning result of extraction
+Extraction up-to date
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+./clean_extraction.sh
+Cleaning result of extraction
+Extraction up-to date
+make -f Makefile.plugin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.44, user: 0.28, sys: 0.15, mem: 237408 ko)
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -C template-coq install
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.coq
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Nothing to be done for 'real-all'.
+./update_plugin.sh
+Updating gen-src from src
+Copying from src to gen-src
+Renaming files to camelCase
+patching file gen-src/cRelationClasses.mli
+Reversed (or previously applied) patch detected! Skipping patch.
+1 out of 1 hunk ignored -- saving rejects to file gen-src/cRelationClasses.mli.rej
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.template optfiles
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Nothing to be done for 'optfiles'.
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+cp src/template_coq.cm* build/
+make -f Makefile.template
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Nothing to be done for 'real-all'.
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.plugin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+CAMLDEP gen-src/univSubst0.mli
+CAMLDEP gen-src/universes0.mli
+CAMLDEP gen-src/string0.mli
+CAMLDEP gen-src/specif.mli
+CAMLDEP gen-src/run_extractable.mli
+CAMLDEP gen-src/pretty.mli
+CAMLDEP gen-src/plugin_core.mli
+CAMLDEP gen-src/peanoNat.mli
+CAMLDEP gen-src/ordersTac.mli
+CAMLDEP gen-src/orders.mli
+CAMLDEP gen-src/ordersLists.mli
+CAMLDEP gen-src/ordersFacts.mli
+CAMLDEP gen-src/orderedType0.mli
+CAMLDEP gen-src/numeral.mli
+CAMLDEP gen-src/nat0.mli
+CAMLDEP gen-src/mSetProperties.mli
+CAMLDEP gen-src/mSetList.mli
+CAMLDEP gen-src/mSetFacts.mli
+CAMLDEP gen-src/mSetInterface.mli
+CAMLDEP gen-src/mSetDecide.mli
+CAMLDEP gen-src/mCString.mli
+CAMLDEP gen-src/mCRelations.mli
+CAMLDEP gen-src/mCProd.mli
+CAMLDEP gen-src/mCOption.mli
+CAMLDEP gen-src/mCList.mli
+CAMLDEP gen-src/mCCompare.mli
+CAMLDEP gen-src/mCPrelude.mli
+CAMLDEP gen-src/logic0.mli
+CAMLDEP gen-src/list0.mli
+CAMLDEP gen-src/liftSubst.mli
+CAMLDEP gen-src/hexadecimal.mli
+CAMLDEP gen-src/extractable.mli
+CAMLDEP gen-src/equalities.mli
+CAMLDEP gen-src/environment.mli
+CAMLDEP gen-src/decimal.mli
+CAMLDEP gen-src/datatypes.mli
+CAMLDEP gen-src/cRelationClasses.mli
+CAMLDEP gen-src/config0.mli
+CAMLDEP gen-src/compare_dec.mli
+CAMLDEP gen-src/common0.mli
+CAMLDEP gen-src/bool.mli
+CAMLDEP gen-src/binPos.mli
+CAMLDEP gen-src/binPosDef.mli
+CAMLDEP gen-src/binNums.mli
+CAMLDEP gen-src/binNat.mli
+CAMLDEP gen-src/binInt.mli
+CAMLDEP gen-src/basics.mli
+CAMLDEP gen-src/basicAst.mli
+CAMLDEP gen-src/astUtils.mli
+CAMLDEP gen-src/ast0.mli
+CAMLDEP gen-src/ascii.mli
+CAMLDEP gen-src/all_Forall.mli
+OCAMLLIBDEP gen-src/metacoq_template_plugin.mlpack
+CAMLDEP gen-src/univSubst0.ml
+CAMLDEP gen-src/universes0.ml
+CAMLDEP gen-src/tm_util.ml
+CAMLDEP gen-src/string0.ml
+CAMLDEP gen-src/specif.ml
+CAMLDEP gen-src/run_extractable.ml
+CAMLDEP gen-src/quoter.ml
+CAMLDEP gen-src/reification.ml
+CAMLDEP gen-src/pretty.ml
+CAMLDEP gen-src/plugin_core.ml
+CAMLDEP gen-src/peanoNat.ml
+CAMLDEP gen-src/ordersTac.ml
+CAMLDEP gen-src/orders.ml
+CAMLDEP gen-src/ordersLists.ml
+CAMLDEP gen-src/ordersFacts.ml
+CAMLDEP gen-src/orderedType0.ml
+CAMLDEP gen-src/numeral.ml
+CAMLDEP gen-src/nat0.ml
+CAMLDEP gen-src/mSetProperties.ml
+CAMLDEP gen-src/mSetList.ml
+CAMLDEP gen-src/mSetInterface.ml
+CAMLDEP gen-src/mSetFacts.ml
+CAMLDEP gen-src/mSetDecide.ml
+CAMLDEP gen-src/mCString.ml
+CAMLDEP gen-src/mCRelations.ml
+CAMLDEP gen-src/mCProd.ml
+CAMLDEP gen-src/mCOption.ml
+CAMLDEP gen-src/mCList.ml
+CAMLDEP gen-src/mCCompare.ml
+CAMLDEP gen-src/mCPrelude.ml
+CAMLDEP gen-src/logic0.ml
+CAMLDEP gen-src/list0.ml
+CAMLDEP gen-src/liftSubst.ml
+CAMLDEP gen-src/hexadecimal.ml
+CAMLDEP gen-src/extractable.ml
+CAMLDEP gen-src/equalities.ml
+CAMLDEP gen-src/environment.ml
+CAMLDEP gen-src/denoter.ml
+CAMLDEP gen-src/decimal.ml
+CAMLDEP gen-src/datatypes.ml
+CAMLDEP gen-src/cRelationClasses.ml
+CAMLDEP gen-src/config0.ml
+CAMLDEP gen-src/compare_dec.ml
+CAMLDEP gen-src/common0.ml
+CAMLDEP gen-src/bool.ml
+CAMLDEP gen-src/binPos.ml
+CAMLDEP gen-src/binPosDef.ml
+CAMLDEP gen-src/binNums.ml
+CAMLDEP gen-src/binNat.ml
+CAMLDEP gen-src/binInt.ml
+CAMLDEP gen-src/basics.ml
+CAMLDEP gen-src/astUtils.ml
+CAMLDEP gen-src/basicAst.ml
+CAMLDEP gen-src/ast_denoter.ml
+CAMLDEP gen-src/ast_quoter.ml
+CAMLDEP gen-src/ast0.ml
+CAMLDEP gen-src/ascii.ml
+CAMLDEP gen-src/all_Forall.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/reification.ml
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/tm_util.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/reification.cmx (real: 0.02, user: 0.01, sys: 0.01, mem: 14740 ko)
+CAMLC -c gen-src/plugin_core.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/plugin_core.cmi (real: 0.03, user: 0.02, sys: 0.00, mem: 17196 ko)
+CAMLC -c gen-src/tm_util.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/tm_util.cmx (real: 0.08, user: 0.04, sys: 0.02, mem: 22136 ko)
+CAMLC -c gen-src/reification.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/reification.cmo (real: 0.02, user: 0.01, sys: 0.00, mem: 11760 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/quoter.ml
+gen-src/tm_util.cmo (real: 0.04, user: 0.02, sys: 0.01, mem: 18448 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/denoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/denoter.cmx (real: 0.12, user: 0.08, sys: 0.02, mem: 24324 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/plugin_core.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/quoter.cmx (real: 0.22, user: 0.19, sys: 0.03, mem: 34468 ko)
+CAMLC -c gen-src/quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/quoter.cmo (real: 0.12, user: 0.10, sys: 0.01, mem: 26404 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast_quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/plugin_core.cmx (real: 0.28, user: 0.07, sys: 0.03, mem: 27504 ko)
+CAMLC -c gen-src/ast_quoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast_quoter.cmo (real: 0.09, user: 0.05, sys: 0.02, mem: 22440 ko)
+CAMLC -c gen-src/run_extractable.mli
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/run_extractable.cmi (real: 0.02, user: 0.01, sys: 0.00, mem: 13824 ko)
+gen-src/ast_quoter.cmx (real: 0.20, user: 0.10, sys: 0.03, mem: 27364 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/ast_denoter.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/ast_denoter.cmx (real: 0.19, user: 0.08, sys: 0.03, mem: 27288 ko)
+CAMLOPT -c -for-pack Metacoq_template_plugin gen-src/run_extractable.ml
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/run_extractable.cmx (real: 0.18, user: 0.09, sys: 0.03, mem: 30504 ko)
+CAMLOPT -pack -o gen-src/metacoq_template_plugin.cmx
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmx (real: 0.18, user: 0.11, sys: 0.04, mem: 31632 ko)
+CAMLOPT -a -o gen-src/metacoq_template_plugin.cmxa
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmxa (real: 0.05, user: 0.01, sys: 0.02, mem: 14056 ko)
+CAMLOPT -shared -o gen-src/metacoq_template_plugin.cmxs
+findlib: [WARNING] Interface numeral.cmi occurs in several directories: /builds/coq/coq/_install_ci/lib/coq/plugins/syntax, gen-src
+gen-src/metacoq_template_plugin.cmxs (real: 0.15, user: 0.10, sys: 0.04, mem: 18416 ko)
+COQC theories/ExtractableLoader.v
+theories/ExtractableLoader.vo (real: 0.09, user: 0.04, sys: 0.04, mem: 62716 ko)
+cp gen-src/metacoq_template_plugin.cm* build/
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.coq install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+INSTALL theories/utils/MCPrelude.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/All_Forall.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCArith.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCCompare.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCEquality.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/LibHypsNaming.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCList.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCOption.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCProd.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCRelations.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCSquash.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCString.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/wGraph.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/common/uGraph.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//common
+INSTALL theories/utils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/config.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Universes.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/BasicAst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Environment.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Ast.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/AstUtils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Induction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/LiftSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/UnivSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Pretty.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/EnvironmentTyping.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/WfInv.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Typing.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TypingWf.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TemplateMonad.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TemplateMonad/Common.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/TemplateMonad/Core.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/TemplateMonad/Extractable.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/monad_utils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Constants.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Extraction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/utils/MCPrelude.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/All_Forall.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCArith.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCCompare.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCEquality.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/LibHypsNaming.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCList.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCOption.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCProd.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCRelations.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCSquash.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCString.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/wGraph.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/common/uGraph.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//common
+INSTALL theories/utils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/config.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Universes.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/BasicAst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Environment.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Ast.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/AstUtils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Induction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/LiftSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/UnivSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Pretty.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/EnvironmentTyping.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/WfInv.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Typing.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TypingWf.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TemplateMonad.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TemplateMonad/Common.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/TemplateMonad/Core.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/TemplateMonad/Extractable.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/monad_utils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Constants.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Extraction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/utils/MCPrelude.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/All_Forall.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCArith.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCCompare.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCEquality.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/LibHypsNaming.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCList.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCOption.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCProd.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCRelations.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCSquash.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/MCString.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/utils/wGraph.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//utils
+INSTALL theories/common/uGraph.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//common
+INSTALL theories/utils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/config.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Universes.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/BasicAst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Environment.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Ast.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/AstUtils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Induction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/LiftSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/UnivSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Pretty.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/EnvironmentTyping.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/WfInv.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Typing.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TypingWf.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TemplateMonad.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/TemplateMonad/Common.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/TemplateMonad/Core.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/TemplateMonad/Extractable.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template//TemplateMonad
+INSTALL theories/monad_utils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Constants.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Extraction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.template install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+INSTALL theories/Loader.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/All.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Loader.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/All.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/Loader.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/All.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL src/template_coq.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL src/template_coq.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL src/template_coq.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL src/template_coq.cmxa /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL src/template_coq.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -f Makefile.plugin install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+INSTALL theories/ExtractableLoader.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/ExtractableLoader.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL theories/ExtractableLoader.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/mCPrelude.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/metacoq_template_plugin.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/mCPrelude.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/metacoq_template_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/metacoq_template_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/metacoq_template_plugin.cmxa /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/mCPrelude.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+INSTALL gen-src/metacoq_template_plugin.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Template/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/template-coq'
+make -C checker install
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -f Makefile.coq
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[4]: Nothing to be done for 'real-all'.
+./update_plugin.sh
+Renaming extracted files
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -f Makefile.coq install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+INSTALL theories/Reflect.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Generation.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/WeakeningEnv.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Closed.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Weakening.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Substitution.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Checker.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/WcbvEval.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Retyping.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Normal.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/All.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Reflect.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Generation.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/WeakeningEnv.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Closed.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Weakening.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Substitution.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Checker.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/WcbvEval.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Retyping.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Normal.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/All.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Reflect.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Generation.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/WeakeningEnv.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Closed.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Weakening.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Substitution.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Checker.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/WcbvEval.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Retyping.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/Normal.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+INSTALL theories/All.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Checker/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+# make -f Makefile.plugin install
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/checker'
+make -C pcuic install
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -f Makefile.pcuic
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[4]: Nothing to be done for 'real-all'.
+# echo "All done, moving extraction files!"
+# ./clean_extraction.sh
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -f Makefile.pcuic install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+INSTALL theories/PCUICUtils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSize.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAstUtils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInduction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICReflect.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICLiftSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUnivSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICTyping.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInversion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPosition.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICNormal.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICNameless.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICEquality.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWeakeningEnv.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICClosed.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWeakening.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUnivSubstitution.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSubstitution.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCumulativity.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICReduction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICParallelReduction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICParallelReductionConfluence.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICConfluence.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICContextConversion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICConversion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICGeneration.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAlpha.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPrincipality.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCtxShape.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICContexts.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICArities.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSpine.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInductives.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICValidity.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInductiveInversion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSR.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICMetaTheory.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWcbvEval.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICChecker.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPretty.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCheckerCompleteness.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICRetyping.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICElimination.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSN.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSigmaCalculus.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSafeLemmata.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/TemplateToPCUIC.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/TemplateToPCUICCorrectness.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICToTemplate.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICToTemplateCorrectness.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUtils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSize.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAstUtils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInduction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICReflect.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICLiftSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUnivSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICTyping.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInversion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPosition.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICNormal.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICNameless.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICEquality.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWeakeningEnv.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICClosed.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWeakening.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUnivSubstitution.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSubstitution.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCumulativity.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICReduction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICParallelReduction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICParallelReductionConfluence.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICConfluence.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICContextConversion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICConversion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICGeneration.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAlpha.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPrincipality.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCtxShape.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICContexts.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICArities.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSpine.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInductives.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICValidity.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInductiveInversion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSR.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICMetaTheory.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWcbvEval.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICChecker.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPretty.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCheckerCompleteness.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICRetyping.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICElimination.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSN.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSigmaCalculus.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSafeLemmata.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/TemplateToPCUIC.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/TemplateToPCUICCorrectness.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICToTemplate.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICToTemplateCorrectness.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUtils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSize.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAstUtils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInduction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICReflect.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICLiftSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUnivSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICTyping.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInversion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPosition.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICNormal.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICNameless.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICEquality.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWeakeningEnv.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICClosed.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWeakening.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICUnivSubstitution.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSubstitution.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCumulativity.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICReduction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICParallelReduction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICParallelReductionConfluence.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICConfluence.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICContextConversion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICConversion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICGeneration.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICAlpha.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPrincipality.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCtxShape.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICContexts.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICArities.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSpine.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInductives.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICValidity.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICInductiveInversion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSR.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICMetaTheory.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICWcbvEval.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICChecker.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICPretty.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICCheckerCompleteness.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICRetyping.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICElimination.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSN.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSigmaCalculus.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICSafeLemmata.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/TemplateToPCUIC.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/TemplateToPCUICCorrectness.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICToTemplate.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+INSTALL theories/PCUICToTemplateCorrectness.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/PCUIC/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+# make -f Makefile.plugin install
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/pcuic'
+make -C safechecker install
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.safechecker
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[4]: Nothing to be done for 'real-all'.
+echo "Done extracting the safe checker, moving extraction files!"
+Done extracting the safe checker, moving extraction files!
+./clean_extraction.sh
+Cleaning result of extraction
+Extraction up-to date
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.plugin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.12, user: 0.07, sys: 0.04, mem: 63996 ko)
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.safechecker install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+INSTALL theories/PCUICSafeReduce.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeConversion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeChecker.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/SafeTemplateChecker.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeRetyping.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/Extraction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeReduce.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeConversion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeChecker.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/SafeTemplateChecker.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeRetyping.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/Extraction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeReduce.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeConversion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeChecker.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/SafeTemplateChecker.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/PCUICSafeRetyping.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/Extraction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -f Makefile.plugin install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+INSTALL theories/Loader.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/Loader.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL theories/Loader.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL src/metacoq_safechecker_plugin.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL src/metacoq_safechecker_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL src/metacoq_safechecker_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL src/metacoq_safechecker_plugin.cmxa /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+INSTALL src/metacoq_safechecker_plugin.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/SafeChecker/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/safechecker'
+make -C erasure install
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -f Makefile.erasure
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[4]: Nothing to be done for 'real-all'.
+echo "Done extracting the erasure, moving extraction files!"
+Done extracting the erasure, moving extraction files!
+./clean_extraction.sh
+Cleaning result of extraction
+Extraction up-to date
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+./clean_extraction.sh
+Cleaning result of extraction
+Extraction up-to date
+make -f Makefile.plugin
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+COQC theories/Loader.v
+theories/Loader.vo (real: 0.45, user: 0.29, sys: 0.15, mem: 238116 ko)
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -f Makefile.erasure install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+INSTALL theories/EAst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAstUtils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EInduction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ELiftSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EPretty.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ECSubst.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EWcbvEval.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EWndEval.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ETyping.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Extract.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAll.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Extraction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Prelim.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ESubstitution.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EInversion.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EArities.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ErasureCorrectness.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ErasureFunction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/SafeErasureFunction.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/SafeTemplateErasure.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAstUtils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EInduction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ELiftSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EPretty.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ECSubst.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EWcbvEval.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EWndEval.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ETyping.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Extract.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAll.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Extraction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Prelim.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ESubstitution.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EInversion.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EArities.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ErasureCorrectness.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ErasureFunction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/SafeErasureFunction.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/SafeTemplateErasure.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAstUtils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EInduction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ELiftSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EPretty.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ECSubst.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EWcbvEval.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EWndEval.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ETyping.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Extract.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EAll.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Extraction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Prelim.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ESubstitution.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EInversion.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/EArities.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ErasureCorrectness.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/ErasureFunction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/SafeErasureFunction.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/SafeTemplateErasure.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -f Makefile.plugin install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+INSTALL theories/Loader.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Loader.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL theories/Loader.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL src/metacoq_erasure_plugin.cmi /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL src/metacoq_erasure_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL src/metacoq_erasure_plugin.cmxs /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL src/metacoq_erasure_plugin.cmxa /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+INSTALL src/metacoq_erasure_plugin.cmx /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Erasure/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/erasure'
+make -C translations install
+make[2]: Entering directory '/builds/coq/coq/_build_ci/metacoq/translations'
+cat metacoq-config > _CoqProject
+cat _CoqProject.in >> _CoqProject
+coq_makefile -f _CoqProject -o Makefile.coq
+Warning: ../template-coq/theories (used in -R or -Q) is not a subdirectory of the current directory
+
+make -f Makefile.coq pretty-timed
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/translations'
+COQDEP VFILES
+*** Warning: in file sigma.v,
+ required library Loader matches several files in path
+ (found Loader.v in ../template-coq/theories and ../checker/theories; used the latter)
+COQC sigma.v
+COQC MiniHoTT.v
+File "./MiniHoTT.v", line 37, characters 0-198:
+Warning: Notation "exists _ .. _ , _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./MiniHoTT.v", line 41, characters 0-64:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./MiniHoTT.v", line 96, characters 0-37:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope equiv_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT.v", line 98, characters 0-35:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope path_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT.v", line 99, characters 0-45:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope fibration_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT.v", line 100, characters 0-37:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope trunc_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT.v", line 136, characters 0-21:
+Warning: Adding and removing hints in the core database implicitly is
+deprecated. Please specify a hint database.
+[implicit-core-hint-db,deprecated]
+File "./MiniHoTT.v", line 139, characters 0-52:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./MiniHoTT.v", line 140, characters 0-45:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+sigma.vo (real: 1.17, user: 0.86, sys: 0.30, mem: 500064 ko)
+COQC MiniHoTT_paths.v
+File "./MiniHoTT_paths.v", line 41, characters 0-198:
+Warning: Notation "exists _ .. _ , _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./MiniHoTT_paths.v", line 45, characters 0-64:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./MiniHoTT_paths.v", line 100, characters 0-37:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope equiv_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT_paths.v", line 102, characters 0-35:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope path_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT_paths.v", line 103, characters 0-45:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope fibration_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT_paths.v", line 104, characters 0-37:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope trunc_scope.". [undeclared-scope,deprecated]
+File "./MiniHoTT_paths.v", line 140, characters 0-21:
+Warning: Adding and removing hints in the core database implicitly is
+deprecated. Please specify a hint database.
+[implicit-core-hint-db,deprecated]
+File "./MiniHoTT_paths.v", line 143, characters 0-52:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./MiniHoTT_paths.v", line 144, characters 0-45:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+MiniHoTT_paths.vo (real: 3.65, user: 3.42, sys: 0.20, mem: 350716 ko)
+COQC translation_utils.v
+MiniHoTT.vo (real: 4.94, user: 4.41, sys: 0.50, mem: 348856 ko)
+translation_utils.vo (real: 2.16, user: 1.82, sys: 0.33, mem: 554420 ko)
+COQC param_original.v
+COQC param_cheap_packed.v
+Coq.Init.Datatypes.nat has been translated.
+Coq.Init.Datatypes.list has been translated.
+listᵗ : forall A : TYPE, list A.1 -> Type
+ : forall A : TYPE, list A.1 -> Type
+nilᵗ : forall A : TYPE, listᵗ A []
+ : forall A : TYPE, listᵗ A []
+consᵗ
+:
+forall (A : TYPE) (x : El A) (lH : ∃ l : list A.1, listᵗ A l),
+listᵗ A (x.1 :: lH.1)
+ : forall (A : TYPE) (x : El A) (lH : ∃ l : list A.1, listᵗ A l),
+ listᵗ A (x.1 :: lH.1)
+param_cheap_packed.vo (real: 1.82, user: 1.49, sys: 0.32, mem: 553352 ko)
+COQC param_generous_packed.v
+"T has been translated as Tᵗ"
+"tm has been translated as tmᵗ"
+Coq.Init.Datatypes.nat has been translated.
+Coq.Init.Datatypes.bool has been translated.
+"pred has been translated as predᵗ"
+"ID has been translated as IDᵗ"
+"toto has been translated as totoᵗ"
+"my_id has been translated as my_idᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq has been translated."
+"Translating MetaCoq.Translations.param_original.Id2.ID"
+"ID has been translated as IDᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating Coq.Init.Logic.eq_trans"
+"eq_trans has been translated as eq_transᵗ"
+"Translating Coq.Init.Logic.eq_sym"
+"eq_sym has been translated as eq_symᵗ"
+"Translating MetaCoq.Translations.param_original.Id2.ID"
+"MetaCoq.Translations.param_original.Id2.ID was already translated"
+"Translating MetaCoq.Translations.param_original.Id2.myf"
+"myf has been translated as myfᵗ"
+Coq.Vectors.VectorDef.t has been translated.
+Coq.Arith.Even.even has been translated.
+File "./param_generous_packed.v", line 7, characters 0-30:
+Warning: Notation "exists _ .. _ , _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./param_generous_packed.v", line 7, characters 0-30:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./param_generous_packed.v", line 7, characters 0-30:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./param_generous_packed.v", line 7, characters 0-30:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+Coq.Init.Datatypes.list has been translated.
+"rev_type has been translated as rev_typeᵗ"
+Fresh universe MetaCoq.Translations.param_generous_packed.603 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.604 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.605 was added to the context.
+"Ty has been translated as Tyᵗ"
+Tyᵗ : El Tyᵗ
+ : El Tyᵗ
+File "./param_original.v", line 261, characters 0-24:
+Warning: Notation "exists _ .. _ , _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./param_original.v", line 261, characters 0-24:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./param_original.v", line 261, characters 0-24:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./param_original.v", line 261, characters 0-24:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+"sigT has been translated as sigTᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq has been translated."
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"paths has been translated as pathsᵗ"
+"existT has been translated as existTᵗ"
+"Translating MetaCoq.Translations.param_original.Axioms.UIP"
+"UIP has been translated as UIPᵗ"
+"wFunext has been translated as wFunextᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"MetaCoq.Translations.MiniHoTT.paths was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.Sect"
+"Sect has been translated as Sectᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.idpath"
+"idpath has been translated as idpathᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.paths_ind"
+"paths_ind has been translated as paths_indᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.transport"
+"transport has been translated as transportᵗ"
+Finished transaction in 1.071 secs (0.906u,0.16s) (successful)
+"Translating MetaCoq.Translations.MiniHoTT.ap"
+"ap has been translated as apᵗ"
+"sigT_ind has been translated as sigT_indᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.IsEquiv"
+"MetaCoq.Translations.MiniHoTT.IsEquiv has been translated."
+"paths has been translated as pathsᵗ"
+"idpath has been translated as idpathᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.Equiv"
+"MetaCoq.Translations.MiniHoTT.Equiv has been translated."
+"paths_ind has been translated as paths_indᵗ"
+"Translating MetaCoq.Translations.param_original.Axioms.wUnivalence"
+"wUnivalence has been translated as wUnivalenceᵗ"
+Fresh universe MetaCoq.Translations.param_generous_packed.696 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.697 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.698 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.699 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.700 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.701 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.702 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.703 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.704 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.705 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.706 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.707 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.708 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.709 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.710 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.711 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.712 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.713 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.714 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.715 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.716 was added to the context.
+"Funext has been translated as Funextᵗ"
+Fresh universe MetaCoq.Translations.param_generous_packed.728 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.729 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.730 was added to the context.
+"FALSE has been translated as FALSEᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"MetaCoq.Translations.MiniHoTT.paths was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.Sect"
+"MetaCoq.Translations.MiniHoTT.Sect was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.idpath"
+"MetaCoq.Translations.MiniHoTT.idpath was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths_ind"
+"MetaCoq.Translations.MiniHoTT.paths_ind was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.transport"
+"MetaCoq.Translations.MiniHoTT.transport was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.ap"
+"MetaCoq.Translations.MiniHoTT.ap was already translated"
+"UIP has been translated as UIPᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.IsEquiv"
+"MetaCoq.Translations.MiniHoTT.IsEquiv was already translated"
+"Translating MetaCoq.Translations.param_original.Axioms.coe"
+"coe has been translated as coeᵗ"
+"False has been translated as Falseᵗ"
+"Translating MetaCoq.Translations.param_original.Axioms.Univalence'"
+"Univalence' has been translated as Univalence'ᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"MetaCoq.Translations.MiniHoTT.paths was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.Sect"
+"MetaCoq.Translations.MiniHoTT.Sect was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.idpath"
+"MetaCoq.Translations.MiniHoTT.idpath was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths_ind"
+"MetaCoq.Translations.MiniHoTT.paths_ind was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.transport"
+"MetaCoq.Translations.MiniHoTT.transport was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.ap"
+"MetaCoq.Translations.MiniHoTT.ap was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.IsEquiv"
+"MetaCoq.Translations.MiniHoTT.IsEquiv was already translated"
+"Translating MetaCoq.Translations.param_original.Axioms.coe"
+"MetaCoq.Translations.param_original.Axioms.coe was already translated"
+"Translating MetaCoq.Translations.param_original.Axioms.Univalence'"
+"MetaCoq.Translations.param_original.Axioms.Univalence' was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.Equiv"
+"MetaCoq.Translations.MiniHoTT.Equiv was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.equiv_fun"
+"equiv_fun has been translated as equiv_funᵗ"
+Fresh universe MetaCoq.Translations.param_generous_packed.764 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.765 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.766 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.767 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.768 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.769 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.770 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.771 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.772 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.773 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.774 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.775 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.776 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.777 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.778 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.779 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.780 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.781 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.782 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.783 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.784 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.785 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.786 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.787 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.788 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.789 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.790 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.791 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.792 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.793 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.794 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.795 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.796 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.797 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.798 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.799 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.800 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.801 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.802 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.803 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.804 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.805 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.806 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.807 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.808 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.809 was added to the context.
+Fresh universe MetaCoq.Translations.param_generous_packed.810 was added to the context.
+"equiv has been translated as equivᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.isequiv_idmap"
+"isequiv_idmap has been translated as isequiv_idmapᵗ"
+param_generous_packed.vo (real: 9.61, user: 8.61, sys: 0.95, mem: 892080 ko)
+COQC times_bool_fun.v
+"Translating MetaCoq.Translations.MiniHoTT.equiv_idmap"
+"equiv_idmap has been translated as equiv_idmapᵗ"
+File "./times_bool_fun.v", line 2, characters 0-68:
+Warning: Notation "exists _ .. _ , _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun.v", line 2, characters 0-68:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun.v", line 2, characters 0-68:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun.v", line 2, characters 0-68:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun.v", line 15, characters 0-48:
+Warning: Declaring a scope implicitly is deprecated; use in advance an
+explicit "Declare Scope prod_scope.". [undeclared-scope,deprecated]
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Translating MetaCoq.Translations.param_original.Axioms.equiv_paths"
+"Coq.Init.Logic.eq has been translated."
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"paths has been translated as pathsᵗ"
+"Translating Coq.Init.Logic.False"
+"Coq.Init.Logic.False has been translated."
+"Translating MetaCoq.Translations.times_bool_fun.NotFunext"
+"NotFunext has been translated as NotFunextᵗ"
+"equiv_paths has been translated as equiv_pathsᵗ"
+"notFunext has been translated as notFunextᵗ"
+"notη has been translated as notηᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"MetaCoq.Translations.MiniHoTT.paths was already translated"
+"Translating MetaCoq.Translations.times_bool_fun.UIP"
+"UIP has been translated as UIPᵗ"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"MetaCoq.Translations.MiniHoTT.paths was already translated"
+"Translating MetaCoq.Translations.times_bool_fun.wFunext"
+"wFunext has been translated as wFunextᵗ"
+"Translating Coq.Init.Logic.False"
+"Coq.Init.Logic.False was already translated"
+"Translating MetaCoq.Translations.param_original.Axioms.Univalence"
+"notwFunext has been translated as notwFunextᵗ"
+"Univalence has been translated as Univalenceᵗ"
+"idpath has been translated as idpathᵗ"
+"paths_ind has been translated as paths_indᵗ"
+"Translating MetaCoq.Translations.param_original.Axioms.UU'"
+"~~~~~~~~~~~~~~~~~~"
+"Translating Coq.Init.Logic.eq"
+"Coq.Init.Logic.eq was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.paths"
+"MetaCoq.Translations.MiniHoTT.paths was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.Sect"
+Fresh universe MetaCoq.Translations.times_bool_fun.576 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.577 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.578 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.579 was added to the context.
+"Sect has been translated as Sectᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.idpath"
+"MetaCoq.Translations.MiniHoTT.idpath was already translated"
+"UU' has been translated as UU'ᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.paths_ind"
+"MetaCoq.Translations.MiniHoTT.paths_ind was already translated"
+"Translating MetaCoq.Translations.MiniHoTT.transport"
+"transport has been translated as transportᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.ap"
+"ap has been translated as apᵗ"
+"Translating MetaCoq.Translations.MiniHoTT.IsEquiv"
+"MetaCoq.Translations.MiniHoTT.IsEquiv has been translated."
+"Translating MetaCoq.Translations.MiniHoTT.Equiv"
+param_original.vo (real: 18.98, user: 17.91, sys: 0.96, mem: 741808 ko)
+COQC param_binary.v
+"MetaCoq.Translations.MiniHoTT.Equiv has been translated."
+File "./param_binary.v", line 207, characters 23-24:
+Warning: Ignoring implicit binder declaration in unexpected position.
+[unexpected-implicit-declaration,syntax]
+File "./param_binary.v", line 207, characters 25-26:
+Warning: Ignoring implicit binder declaration in unexpected position.
+[unexpected-implicit-declaration,syntax]
+Coq.Init.Datatypes.nat has been translated.
+Coq.Init.Datatypes.bool has been translated.
+Coq.Init.Datatypes.list has been translated.
+"HD has been translated as HDᵗ"
+"MAP has been translated as MAPᵗ"
+param_binary.vo (real: 2.24, user: 1.93, sys: 0.29, mem: 556444 ko)
+COQC standard_model.v
+"Translating MetaCoq.Translations.times_bool_fun.wUnivalence"
+"wUnivalence has been translated as wUnivalenceᵗ"
+check_guarded: true
+check_positive: true
+check_universes: true
+cumulative sprop: false
+definitional uip: false
+"toto has been translated as totoᵗ"
+totoᵗ : unit -> (forall A : Type, A -> A) -> Type -> Type
+ : unit -> (forall A : Type, A -> A) -> Type -> Type
+"FALSE has been translated as FALSEᵗ"
+"toto"
+"a has been translated as aᵗ"
+"T has been translated as Tᵗ"
+"tm has been translated as tmᵗ"
+standard_model.vo (real: 1.63, user: 1.34, sys: 0.28, mem: 549492 ko)
+Fresh universe MetaCoq.Translations.times_bool_fun.631 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.632 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.633 was added to the context.
+"isequiv_idmap has been translated as isequiv_idmapᵗ"
+Fresh universe MetaCoq.Translations.times_bool_fun.635 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.636 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.637 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.638 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.639 was added to the context.
+"equiv_idmap has been translated as equiv_idmapᵗ"
+Fresh universe MetaCoq.Translations.times_bool_fun.641 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.642 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.643 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.644 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.645 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.646 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.647 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.648 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun.649 was added to the context.
+"UA has been translated as UAᵗ"
+"notUA has been translated as notUAᵗ"
+times_bool_fun.vo (real: 27.19, user: 25.86, sys: 1.20, mem: 857128 ko)
+COQC times_bool_fun2.v
+File "./times_bool_fun2.v", line 4, characters 0-83:
+Warning: Notation "exists _ .. _ , _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun2.v", line 4, characters 0-83:
+Warning: Notation "{ _ : _ & _ }" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun2.v", line 4, characters 0-83:
+Warning: Notation "_ = _ :> _" was already used in scope type_scope.
+[notation-overridden,parsing]
+File "./times_bool_fun2.v", line 4, characters 0-83:
+Warning: Notation "_ = _" was already used in scope type_scope.
+[notation-overridden,parsing]
+"paths has been translated as pathsᵗ"
+"idpath has been translated as idpathᵗ"
+"paths_ind has been translated as paths_indᵗ"
+"transport has been translated as transportᵗ"
+Fresh universe MetaCoq.Translations.times_bool_fun2.269 was added to the context.
+"sigT has been translated as sigTᵗ"
+"projT1 has been translated as projT1ᵗ"
+"projT2 has been translated as projT2ᵗ"
+"existT has been translated as existTᵗ"
+Fresh universe MetaCoq.Translations.times_bool_fun2.377 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.378 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.379 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.380 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.381 was added to the context.
+"isequiv has been translated as isequivᵗ"
+Fresh universe MetaCoq.Translations.times_bool_fun2.383 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.384 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.385 was added to the context.
+"equiv has been translated as equivᵗ"
+"eq has been translated as eqᵗ"
+"inverse has been translated as inverseᵗ"
+Fresh universe MetaCoq.Translations.times_bool_fun2.416 was added to the context.
+Fresh universe MetaCoq.Translations.times_bool_fun2.417 was added to the context.
+"contr has been translated as contrᵗ"
+"weakFunext has been translated as weakFunextᵗ"
+times_bool_fun2.vo (real: 7.77, user: 7.23, sys: 0.50, mem: 614752 ko)
+ Time | Peak Mem | File Name
+-----------------------------------------------
+1m14.87s | 892080 ko | Total Time / Peak Mem
+-----------------------------------------------
+0m25.86s | 857128 ko | times_bool_fun.vo
+0m17.91s | 741808 ko | param_original.vo
+0m08.61s | 892080 ko | param_generous_packed.vo
+0m07.23s | 614752 ko | times_bool_fun2.vo
+0m04.41s | 348856 ko | MiniHoTT.vo
+0m03.42s | 350716 ko | MiniHoTT_paths.vo
+0m01.93s | 556444 ko | param_binary.vo
+0m01.82s | 554420 ko | translation_utils.vo
+0m01.49s | 553352 ko | param_cheap_packed.vo
+0m01.34s | 549492 ko | standard_model.vo
+0m00.86s | 500064 ko | sigma.vo
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/translations'
+make -f Makefile.coq install
+make[3]: Entering directory '/builds/coq/coq/_build_ci/metacoq/translations'
+INSTALL sigma.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL MiniHoTT.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL MiniHoTT_paths.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL translation_utils.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_original.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_cheap_packed.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_generous_packed.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL times_bool_fun.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL times_bool_fun2.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_binary.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL standard_model.vo /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL sigma.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL MiniHoTT.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL MiniHoTT_paths.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL translation_utils.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_original.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_cheap_packed.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_generous_packed.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL times_bool_fun.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL times_bool_fun2.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_binary.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL standard_model.v /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL sigma.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL MiniHoTT.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL MiniHoTT_paths.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL translation_utils.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_original.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_cheap_packed.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_generous_packed.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL times_bool_fun.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL times_bool_fun2.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL param_binary.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+INSTALL standard_model.glob /builds/coq/coq/_install_ci/lib/coq//user-contrib/MetaCoq/Translations/
+make[4]: Entering directory '/builds/coq/coq/_build_ci/metacoq/translations'
+make[4]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/translations'
+make[3]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/translations'
+make[2]: Leaving directory '/builds/coq/coq/_build_ci/metacoq/translations'
+make[1]: Leaving directory '/builds/coq/coq/_build_ci/metacoq'
+Aggregating timing log...
+Traceback (most recent call last):
+ File "./tools/make-one-time-file.py", line 13, in <module>
+ stats_dict = get_times_and_mems(args.FILE_NAME, use_real=args.real, include_mem=args.include_mem)
+ File "/builds/coq/coq/tools/TimeFileMaker.py", line 161, in get_times_and_mems
+ return merge_dicts(get_times_of_lines(lines, use_real=use_real),
+ File "/builds/coq/coq/tools/TimeFileMaker.py", line 156, in get_times_of_lines
+ return dict((name, {TIME_KEY:reformat_time_string(time)}) for name, time in times)
+ File "/builds/coq/coq/tools/TimeFileMaker.py", line 156, in <genexpr>
+ return dict((name, {TIME_KEY:reformat_time_string(time)}) for name, time in times)
+ File "/builds/coq/coq/tools/TimeFileMaker.py", line 104, in reformat_time_string
+ seconds, milliseconds = time.split('.')
+ValueError: too many values to unpack
+Makefile.ci:90: recipe for target 'ci-metacoq' failed
+make: *** [ci-metacoq] Error 1
+section_end:1598965182:build_script section_start:1598965182:after_script section_end:1598965184:after_script section_start:1598965184:upload_artifacts_on_failure section_end:1598965189:upload_artifacts_on_failure ERROR: Job failed: exit code 1
+ \ No newline at end of file
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh b/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh
index 123b272a69..f6c283d53c 100755
--- a/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh
@@ -13,3 +13,4 @@ export COQLIB
./004-per-file-fuzz/run.sh
./005-correct-diff-sorting-order-mem/run.sh
./006-zero-before/run.sh
+./007-no-output-sync/run.sh
diff --git a/test-suite/interactive/PrimNotation.v b/test-suite/interactive/PrimNotation.v
index 07986b0df3..55116dc78b 100644
--- a/test-suite/interactive/PrimNotation.v
+++ b/test-suite/interactive/PrimNotation.v
@@ -21,7 +21,7 @@ Local Set Universe Polymorphism.
Delimit Scope punit_scope with punit.
Delimit Scope pcunit_scope with pcunit.
Delimit Scope int_scope with int.
-Numeral Notation Decimal.int Decimal.int_of_int Decimal.int_of_int : int_scope.
+Number Notation Decimal.int Decimal.int_of_int Decimal.int_of_int : int_scope.
Module A.
NonCumulative Inductive punit@{u} : Type@{u} := ptt.
Cumulative Inductive pcunit@{u} : Type@{u} := pctt.
@@ -31,10 +31,10 @@ Module A.
:= fun v => match v with 0%int => Some pctt | _ => None end.
Definition of_punit : punit -> Decimal.uint := fun _ => Nat.to_uint 0.
Definition of_pcunit : pcunit -> Decimal.uint := fun _ => Nat.to_uint 0.
- Numeral Notation punit to_punit of_punit : punit_scope.
+ Number Notation punit to_punit of_punit : punit_scope.
Check let v := 0%punit in v : punit.
Back 2.
- Numeral Notation pcunit to_pcunit of_pcunit : punit_scope.
+ Number Notation pcunit to_pcunit of_pcunit : punit_scope.
Check let v := 0%punit in v : pcunit.
End A.
Reset A.
@@ -44,7 +44,7 @@ Module A.
Definition to_punit : Decimal.int -> option punit
:= fun v => match v with 0%int => Some ptt | _ => None end.
Definition of_punit : punit -> Decimal.uint := fun _ => Nat.to_uint 0.
- Numeral Notation punit to_punit of_punit : punit_scope.
+ Number Notation punit to_punit of_punit : punit_scope.
Check let v := 0%punit in v : punit.
End A.
Local Set Universe Polymorphism.
@@ -52,7 +52,7 @@ Inductive punit@{u} : Type@{u} := ptt.
Definition to_punit : Decimal.int -> option punit
:= fun v => match v with 0%int => Some ptt | _ => None end.
Definition of_punit : punit -> Decimal.uint := fun _ => Nat.to_uint 0.
-Numeral Notation punit to_punit of_punit : punit_scope.
+Number Notation punit to_punit of_punit : punit_scope.
Check let v := 0%punit in v : punit.
Back 6. (* check backtracking of registering universe polymorphic constants *)
Local Unset Universe Polymorphism.
@@ -60,5 +60,5 @@ Inductive punit : Set := ptt.
Definition to_punit : Decimal.int -> option punit
:= fun v => match v with 0%int => Some ptt | _ => None end.
Definition of_punit : punit -> Decimal.uint := fun _ => Nat.to_uint 0.
-Numeral Notation punit to_punit of_punit : punit_scope.
+Number Notation punit to_punit of_punit : punit_scope.
Check let v := 0%punit in v : punit.
diff --git a/test-suite/output/Notations4.v b/test-suite/output/Notations4.v
index 73445bad12..6dadd8c7fe 100644
--- a/test-suite/output/Notations4.v
+++ b/test-suite/output/Notations4.v
@@ -131,7 +131,7 @@ Module NumeralNotations.
Delimit Scope test17_scope with test17.
Local Set Primitive Projections.
Record myint63 := of_int { to_int : int }.
- Numeral Notation myint63 of_int to_int : test17_scope.
+ Number Notation myint63 of_int to_int : test17_scope.
Check let v := 0%test17 in v : myint63.
End Test17.
End NumeralNotations.
diff --git a/test-suite/output/NumeralNotations.out b/test-suite/output/NumberNotations.out
index 34c31ff8a6..8065c8d311 100644
--- a/test-suite/output/NumeralNotations.out
+++ b/test-suite/output/NumberNotations.out
@@ -75,7 +75,7 @@ The command has indeed failed with message:
In environment
v := 0 : nat
The term "v" has type "nat" while it is expected to have type "wuint".
-File "stdin", line 203, characters 2-72:
+File "stdin", line 203, characters 2-71:
Warning: The 'abstract after' directive has no effect when the parsing
function (of_uint) targets an option type.
[abstract-large-number-no-op,numbers]
@@ -141,7 +141,7 @@ let v := 0%test15 in v : unit
let v := foo a.t in v : Foo
: Foo
The command has indeed failed with message:
-Cannot interpret in test16_scope because NumeralNotations.Test16.F.Foo could not be found in the current environment.
+Cannot interpret in test16_scope because NumberNotations.Test16.F.Foo could not be found in the current environment.
let v := 0%test17 in v : myint63
: myint63
let v := 0%Q in v : Q
diff --git a/test-suite/output/NumeralNotations.v b/test-suite/output/NumberNotations.v
index ca8a14cce1..e411005da3 100644
--- a/test-suite/output/NumeralNotations.v
+++ b/test-suite/output/NumberNotations.v
@@ -6,7 +6,7 @@ Declare Scope opaque_scope.
Module Test1.
Axiom hold : forall {A B C}, A -> B -> C.
Definition opaque3 (x : Numeral.int) : Numeral.int := hold x (fix f (x : nat) : nat := match x with O => O | S n => S (f n) end).
- Numeral Notation Numeral.int opaque3 opaque3 : opaque_scope.
+ Number Notation Numeral.int opaque3 opaque3 : opaque_scope.
Delimit Scope opaque_scope with opaque.
Fail Check 1%opaque.
End Test1.
@@ -15,7 +15,7 @@ End Test1.
Module Test2.
Axiom opaque4 : option Numeral.int.
Definition opaque6 (x : Numeral.int) : option Numeral.int := opaque4.
- Numeral Notation Numeral.int opaque6 opaque6 : opaque_scope.
+ Number Notation Numeral.int opaque6 opaque6 : opaque_scope.
Delimit Scope opaque_scope with opaque.
Open Scope opaque_scope.
Fail Check 1%opaque.
@@ -27,7 +27,7 @@ Module Test3.
Inductive silly := SILLY (v : Numeral.uint) (f : forall A, A -> A).
Definition to_silly (v : Numeral.uint) := SILLY v (fun _ x => x).
Definition of_silly (v : silly) := match v with SILLY v _ => v end.
- Numeral Notation silly to_silly of_silly : silly_scope.
+ Number Notation silly to_silly of_silly : silly_scope.
Delimit Scope silly_scope with silly.
Fail Check 1%silly.
End Test3.
@@ -54,11 +54,11 @@ Module Test4.
Polymorphic Definition pof_unit (v : unit) : Numeral.uint := Nat.to_num_uint 0.
Definition to_unit (v : Numeral.uint) : option unit := match Nat.of_num_uint v with O => Some tt | _ => None end.
Definition of_unit (v : unit) : Numeral.uint := Nat.to_num_uint 0.
- Numeral Notation punit to_punit of_punit : pto.
- Numeral Notation punit pto_punit of_punit : ppo.
- Numeral Notation punit to_punit pof_punit : ptp.
- Numeral Notation punit pto_punit pof_punit : ppp.
- Numeral Notation unit to_unit of_unit : uto.
+ Number Notation punit to_punit of_punit : pto.
+ Number Notation punit pto_punit of_punit : ppo.
+ Number Notation punit to_punit pof_punit : ptp.
+ Number Notation punit pto_punit pof_punit : ppp.
+ Number Notation unit to_unit of_unit : uto.
Delimit Scope pto with pto.
Delimit Scope ppo with ppo.
Delimit Scope ptp with ptp.
@@ -71,9 +71,9 @@ Module Test4.
Check let v := 0%uto in v : unit.
Fail Check 1%uto.
Fail Check (-1)%uto.
- Numeral Notation unit pto_unit of_unit : upo.
- Numeral Notation unit to_unit pof_unit : utp.
- Numeral Notation unit pto_unit pof_unit : upp.
+ Number Notation unit pto_unit of_unit : upo.
+ Number Notation unit to_unit pof_unit : utp.
+ Number Notation unit pto_unit pof_unit : upp.
Delimit Scope upo with upo.
Delimit Scope utp with utp.
Delimit Scope upp with upp.
@@ -83,7 +83,7 @@ Module Test4.
Polymorphic Definition pto_punits := pto_punit_all@{Set}.
Polymorphic Definition pof_punits := pof_punit@{Set}.
- Numeral Notation punit pto_punits pof_punits : ppps (abstract after 1).
+ Number Notation punit pto_punits pof_punits : ppps (abstract after 1).
Delimit Scope ppps with ppps.
Universe u.
Constraint Set < u.
@@ -121,7 +121,7 @@ Module Test6.
End Scopes.
Module Export Notations.
Export Scopes.
- Numeral Notation wnat of_uint to_uint : wnat_scope (abstract after 5000).
+ Number Notation wnat of_uint to_uint : wnat_scope (abstract after 5000).
End Notations.
Set Printing Coercions.
Check let v := 0%wnat in v : wnat.
@@ -141,7 +141,7 @@ Module Test7.
Record wuint := wrap { unwrap : Numeral.uint }.
Declare Scope wuint_scope.
Delimit Scope wuint_scope with wuint.
- Numeral Notation wuint wrap unwrap : wuint_scope.
+ Number Notation wuint wrap unwrap : wuint_scope.
Check let v := 0%wuint in v : wuint.
Check let v := 1%wuint in v : wuint.
End Test7.
@@ -157,7 +157,7 @@ Module Test8.
Context (dummy : unit).
Definition wrap' := let __ := dummy in wrap.
Definition unwrap' := let __ := dummy in unwrap.
- Numeral Notation wuint wrap' unwrap' : wuint8_scope.
+ Number Notation wuint wrap' unwrap' : wuint8_scope.
Check let v := 0%wuint8 in v : wuint.
End with_var.
Check let v := 0%wuint8 in v : nat.
@@ -166,7 +166,7 @@ Module Test8.
Notation wrap'' := wrap.
Notation unwrap'' := unwrap.
- Numeral Notation wuint wrap'' unwrap'' : wuint8'_scope.
+ Number Notation wuint wrap'' unwrap'' : wuint8'_scope.
Check let v := 0%wuint8' in v : wuint.
End Test8.
@@ -182,9 +182,9 @@ Module Test9.
Let unwrap' := unwrap.
Local Notation wrap'' := wrap.
Local Notation unwrap'' := unwrap.
- Numeral Notation wuint wrap' unwrap' : wuint9_scope.
+ Number Notation wuint wrap' unwrap' : wuint9_scope.
Check let v := 0%wuint9 in v : wuint.
- Numeral Notation wuint wrap'' unwrap'' : wuint9'_scope.
+ Number Notation wuint wrap'' unwrap'' : wuint9'_scope.
Check let v := 0%wuint9' in v : wuint.
End with_let.
Check let v := 0%wuint9 in v : nat.
@@ -200,12 +200,12 @@ Module Test10.
Declare Scope unit2_scope.
Delimit Scope unit_scope with unit.
Delimit Scope unit2_scope with unit2.
- Numeral Notation unit of_uint to_uint : unit_scope (abstract after 1).
+ Number Notation unit of_uint to_uint : unit_scope (abstract after 1).
Local Set Warnings Append "+abstract-large-number-no-op".
(* Check that there is actually a warning here *)
- Fail Numeral Notation unit of_uint to_uint : unit2_scope (abstract after 1).
+ Fail Number Notation unit of_uint to_uint : unit2_scope (abstract after 1).
(* Check that there is no warning here *)
- Numeral Notation unit of_any_uint to_uint : unit2_scope (abstract after 1).
+ Number Notation unit of_any_uint to_uint : unit2_scope (abstract after 1).
End Test10.
Module Test12.
@@ -215,7 +215,7 @@ Module Test12.
Section test12.
Context (to_uint : unit -> Numeral.uint) (of_uint : Numeral.uint -> unit).
- Numeral Notation unit of_uint to_uint : test12_scope.
+ Number Notation unit of_uint to_uint : test12_scope.
Check let v := 1%test12 in v : unit.
End test12.
End Test12.
@@ -233,17 +233,17 @@ Module Test13.
Definition to_uint_good := to_uint tt.
Notation to_uint' := (to_uint tt).
Notation to_uint'' := (to_uint _).
- Numeral Notation unit of_uint to_uint_good : test13_scope.
+ Number Notation unit of_uint to_uint_good : test13_scope.
Check let v := 0%test13 in v : unit.
- Fail Numeral Notation unit of_uint to_uint' : test13'_scope.
+ Fail Number Notation unit of_uint to_uint' : test13'_scope.
Fail Check let v := 0%test13' in v : unit.
- Fail Numeral Notation unit of_uint to_uint'' : test13''_scope.
+ Fail Number Notation unit of_uint to_uint'' : test13''_scope.
Fail Check let v := 0%test13'' in v : unit.
End Test13.
Module Test14.
(* Test that numeral notations follow [Import], not [Require], and
- also test that [Local Numeral Notation]s do not escape modules
+ also test that [Local Number Notation]s do not escape modules
nor sections. *)
Declare Scope test14_scope.
Declare Scope test14'_scope.
@@ -256,8 +256,8 @@ Module Test14.
Module Inner.
Definition to_uint (x : unit) : Numeral.uint := Nat.to_num_uint O.
Definition of_uint (x : Numeral.uint) : unit := tt.
- Local Numeral Notation unit of_uint to_uint : test14_scope.
- Global Numeral Notation unit of_uint to_uint : test14'_scope.
+ Local Number Notation unit of_uint to_uint : test14_scope.
+ Global Number Notation unit of_uint to_uint : test14'_scope.
Check let v := 0%test14 in v : unit.
Check let v := 0%test14' in v : unit.
End Inner.
@@ -269,8 +269,8 @@ Module Test14.
Section InnerSection.
Definition to_uint (x : unit) : Numeral.uint := Nat.to_num_uint O.
Definition of_uint (x : Numeral.uint) : unit := tt.
- Local Numeral Notation unit of_uint to_uint : test14''_scope.
- Fail Global Numeral Notation unit of_uint to_uint : test14'''_scope.
+ Local Number Notation unit of_uint to_uint : test14''_scope.
+ Fail Global Number Notation unit of_uint to_uint : test14'''_scope.
Check let v := 0%test14'' in v : unit.
Fail Check let v := 0%test14''' in v : unit.
End InnerSection.
@@ -285,7 +285,7 @@ Module Test15.
Module Inner.
Definition to_uint (x : unit) : Numeral.uint := Nat.to_num_uint O.
Definition of_uint (x : Numeral.uint) : unit := tt.
- Numeral Notation unit of_uint to_uint : test15_scope.
+ Number Notation unit of_uint to_uint : test15_scope.
Check let v := 0%test15 in v : unit.
End Inner.
Module Inner2.
@@ -308,7 +308,7 @@ Module Test16.
Inductive Foo := foo (_ : a.T).
Definition to_uint (x : Foo) : Numeral.uint := Nat.to_num_uint O.
Definition of_uint (x : Numeral.uint) : Foo := foo a.t.
- Global Numeral Notation Foo of_uint to_uint : test16_scope.
+ Global Number Notation Foo of_uint to_uint : test16_scope.
Check let v := 0%test16 in v : Foo.
End F.
Module a <: A.
@@ -328,7 +328,7 @@ Module Test17.
Delimit Scope test17_scope with test17.
Local Set Primitive Projections.
Record myint63 := of_int { to_int : int }.
- Numeral Notation myint63 of_int to_int : test17_scope.
+ Number Notation myint63 of_int to_int : test17_scope.
Check let v := 0%test17 in v : myint63.
End Test17.
@@ -356,7 +356,7 @@ Module Test18.
Definition uint_of_Q (x : Q) : option Numeral.uint
:= option_map Nat.to_num_uint (nat_of_Q x).
- Numeral Notation Q Q_of_uint uint_of_Q : Q_scope.
+ Number Notation Q Q_of_uint uint_of_Q : Q_scope.
Check let v := 0%Q in v : Q.
Check let v := 1%Q in v : Q.
@@ -381,7 +381,7 @@ Module Test19.
Definition Z_of_Zlike (x : Zlike) := List.fold_right Z.add 0%Z (summands x).
Definition Zlike_of_Z (x : Z) := {| summands := cons x nil |}.
- Numeral Notation Zlike Zlike_of_Z Z_of_Zlike : Zlike_scope.
+ Number Notation Zlike Zlike_of_Z Z_of_Zlike : Zlike_scope.
Check let v := (-1)%Zlike in v : Zlike.
Check let v := 0%Zlike in v : Zlike.
@@ -434,7 +434,7 @@ Module Test20.
Declare Scope kt_scope.
Delimit Scope kt_scope with kt.
- Numeral Notation ty ty_of_uint uint_of_ty : kt_scope.
+ Number Notation ty ty_of_uint uint_of_ty : kt_scope.
Check let v := 0%kt in v : ty.
Check let v := 1%kt in v : ty.
diff --git a/test-suite/output/ZSyntax.v b/test-suite/output/ZSyntax.v
index be9dc543d6..7b2bb00ce0 100644
--- a/test-suite/output/ZSyntax.v
+++ b/test-suite/output/ZSyntax.v
@@ -19,7 +19,7 @@ Check (0 + Z.of_nat 11)%Z.
(* Check hexadecimal printing *)
Definition to_num_int n := Numeral.IntHex (Z.to_hex_int n).
-Numeral Notation Z Z.of_num_int to_num_int : Z_scope.
+Number Notation Z Z.of_num_int to_num_int : Z_scope.
Check 42%Z.
Check (-42)%Z.
Check 0%Z.
diff --git a/test-suite/output/bug_12159.v b/test-suite/output/bug_12159.v
index 6ea90eab29..437b4a68e9 100644
--- a/test-suite/output/bug_12159.v
+++ b/test-suite/output/bug_12159.v
@@ -6,8 +6,8 @@ Definition to_unit (v : Numeral.uint) : option unit
:= match Nat.of_num_uint v with O => Some tt | _ => None end.
Definition of_unit (v : unit) : Numeral.uint := Nat.to_num_uint 0.
Definition of_unit' (v : unit) : Numeral.uint := Nat.to_num_uint 1.
-Numeral Notation unit to_unit of_unit : A.
-Numeral Notation unit to_unit of_unit' : B.
+Number Notation unit to_unit of_unit : A.
+Number Notation unit to_unit of_unit' : B.
Definition f x : unit := x.
Check f tt.
Arguments f x%A.
diff --git a/test-suite/output/bug_12887.out b/test-suite/output/bug_12887.out
new file mode 100644
index 0000000000..5ea7722bc6
--- /dev/null
+++ b/test-suite/output/bug_12887.out
@@ -0,0 +1,10 @@
+The command has indeed failed with message:
+Cannot infer this placeholder of type "Type" in
+environment:
+Functor : (Type -> Type) -> Type
+F : Type -> Type
+fmap : forall A B : Type, (A -> B) -> F A -> F B
+The command has indeed failed with message:
+Cannot infer an existential variable of type "nat" in
+environment:
+R : nat -> Type
diff --git a/test-suite/output/bug_12887.v b/test-suite/output/bug_12887.v
new file mode 100644
index 0000000000..4208c3e8e9
--- /dev/null
+++ b/test-suite/output/bug_12887.v
@@ -0,0 +1,10 @@
+Arguments id {_} _.
+
+Fail Record Functor (F : Type -> Type) := {
+ fmap : forall A B, (A -> B) -> F A -> F B;
+ fmap_identity : fmap _ _ id = id;
+}.
+
+Fail Inductive R (x:nat) := { y : R ltac:(clear x) }.
+
+Inductive R (x:nat) := { y : bool; z : R _ }.
diff --git a/test-suite/output/sint63Notation.v b/test-suite/output/sint63Notation.v
index 331d74ed3d..66ffbf2278 100644
--- a/test-suite/output/sint63Notation.v
+++ b/test-suite/output/sint63Notation.v
@@ -18,8 +18,8 @@ Definition as_signed (bw : Z) (v : Z) :=
(((2 ^ (bw - 1) + v) mod (2 ^ bw)) - 2 ^ (bw - 1))%Z.
Definition sto_Z (v : sint) := as_signed 31 (to_Z (unwraps v)).
-Numeral Notation uint uof_Z uto_Z : uint_scope.
-Numeral Notation sint sof_Z sto_Z : sint_scope.
+Number Notation uint uof_Z uto_Z : uint_scope.
+Number Notation sint sof_Z sto_Z : sint_scope.
Open Scope uint_scope.
Compute uof_Z 0.
Compute uof_Z 1.
diff --git a/test-suite/success/NumeralNotationsNoLocal.v b/test-suite/success/NumeralNotationsNoLocal.v
index ea3907ef8a..fe97f10ddf 100644
--- a/test-suite/success/NumeralNotationsNoLocal.v
+++ b/test-suite/success/NumeralNotationsNoLocal.v
@@ -5,7 +5,7 @@ Delimit Scope unit11_scope with unit11.
Goal True.
evar (to_uint : unit11 -> Decimal.uint).
evar (of_uint : Decimal.uint -> unit11).
- Fail Numeral Notation unit11 of_uint to_uint : uint11_scope.
+ Fail Number Notation unit11 of_uint to_uint : uint11_scope.
exact I.
Unshelve.
all: solve [ constructor ].
diff --git a/test-suite/success/induct.v b/test-suite/success/induct.v
index 73fe53c757..4983ee3c0d 100644
--- a/test-suite/success/induct.v
+++ b/test-suite/success/induct.v
@@ -159,6 +159,8 @@ Abort.
(* This was failing in 8.5 and before because of a bug in the order of
hypotheses *)
+Set Warnings "-deprecated".
+
Inductive I2 : Type :=
C2 : forall x:nat, x=x -> I2.
Goal forall a b:I2, a = b.
@@ -196,3 +198,13 @@ Goal forall m n:nat, n=m.
double induction m n.
Abort.
+(* Mentioned as part of bug #12944 *)
+
+Inductive test : Set := cons : forall (IHv : nat) (v : test), test.
+
+Goal test -> test.
+induction 1 as [? IHv].
+Undo.
+destruct 1 as [? IHv].
+exact IHv. (* Check that the name is granted *)
+Qed.
diff --git a/theories/Bool/Bool.v b/theories/Bool/Bool.v
index 9e10786fcd..0f62db42cf 100644
--- a/theories/Bool/Bool.v
+++ b/theories/Bool/Bool.v
@@ -258,7 +258,7 @@ Qed.
Lemma orb_true_elim :
forall b1 b2:bool, b1 || b2 = true -> {b1 = true} + {b2 = true}.
Proof.
- destruct b1; simpl; auto.
+ intro b1; destruct b1; simpl; auto.
Defined.
Lemma orb_prop : forall a b:bool, a || b = true -> a = true \/ b = true.
@@ -424,7 +424,7 @@ Notation andb_true_b := andb_true_l (only parsing).
Lemma andb_false_elim :
forall b1 b2:bool, b1 && b2 = false -> {b1 = false} + {b2 = false}.
Proof.
- destruct b1; simpl; auto.
+ intro b1; destruct b1; simpl; auto.
Defined.
Hint Resolve andb_false_elim: bool.
@@ -681,17 +681,17 @@ Qed.
Lemma negb_xorb_l : forall b b', negb (xorb b b') = xorb (negb b) b'.
Proof.
- destruct b,b'; trivial.
+ intros b b'; destruct b,b'; trivial.
Qed.
Lemma negb_xorb_r : forall b b', negb (xorb b b') = xorb b (negb b').
Proof.
- destruct b,b'; trivial.
+ intros b b'; destruct b,b'; trivial.
Qed.
Lemma xorb_negb_negb : forall b b', xorb (negb b) (negb b') = xorb b b'.
Proof.
- destruct b,b'; trivial.
+ intros b b'; destruct b,b'; trivial.
Qed.
(** Lemmas about the [b = true] embedding of [bool] to [Prop] *)
diff --git a/theories/Classes/CMorphisms.v b/theories/Classes/CMorphisms.v
index 598bd8b9c5..9a3a1d3709 100644
--- a/theories/Classes/CMorphisms.v
+++ b/theories/Classes/CMorphisms.v
@@ -20,7 +20,7 @@ Require Import Coq.Program.Tactics.
Require Export Coq.Classes.CRelationClasses.
Generalizable Variables A eqA B C D R RA RB RC m f x y.
-Local Obligation Tactic := simpl_crelation.
+Local Obligation Tactic := try solve [ simpl_crelation ].
Set Universe Polymorphism.
@@ -268,6 +268,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H B R' H0 x y z X X0 x0 y0 X1.
assert(R x0 x0).
- transitivity y0... symmetry...
- transitivity (y x0)...
@@ -284,6 +285,7 @@ Section GenericInstances.
Next Obligation.
Proof.
+ intros A B C RA RB RC f mor x y X x0 y0 X0.
apply mor ; auto.
Qed.
@@ -297,6 +299,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x y X x0 y0 X0 X1.
transitivity x...
transitivity x0...
Qed.
@@ -309,6 +312,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x x0 y X X0.
transitivity y...
Qed.
@@ -318,6 +322,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x x0 y X X0.
transitivity x0...
Qed.
@@ -327,6 +332,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x x0 y X X0.
transitivity y... symmetry...
Qed.
@@ -335,6 +341,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x x0 y X X0.
transitivity x0... symmetry...
Qed.
@@ -343,6 +350,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x x0 y X.
split.
- intros ; transitivity x0...
- intros.
@@ -358,6 +366,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x y X y0 y1 e X0; destruct e.
transitivity y...
Qed.
@@ -368,6 +377,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros A R H x y X x0 y0 X0.
split ; intros.
- transitivity x0... transitivity x... symmetry...
diff --git a/theories/Classes/CRelationClasses.v b/theories/Classes/CRelationClasses.v
index a27919dd43..72a196ca7a 100644
--- a/theories/Classes/CRelationClasses.v
+++ b/theories/Classes/CRelationClasses.v
@@ -319,7 +319,7 @@ Section Binary.
split; red; unfold relation_equivalence, iffT.
- firstorder.
- firstorder.
- - intros. specialize (X x0 y0). specialize (X0 x0 y0). firstorder.
+ - intros x y z X X0 x0 y0. specialize (X x0 y0). specialize (X0 x0 y0). firstorder.
Qed.
Global Instance relation_implication_preorder : PreOrder (@subrelation A).
@@ -346,7 +346,7 @@ Section Binary.
Lemma PartialOrder_inverse `(PartialOrder eqA R) : PartialOrder eqA (flip R).
Proof.
unfold flip; constructor; unfold flip.
- - intros. apply H. apply symmetry. apply X.
+ - intros X. apply H. apply symmetry. apply X.
- unfold relation_conjunction. intros [H1 H2]. apply H. constructor; assumption.
Qed.
End Binary.
diff --git a/theories/Classes/Morphisms.v b/theories/Classes/Morphisms.v
index 43adb0b69f..c70e3fe478 100644
--- a/theories/Classes/Morphisms.v
+++ b/theories/Classes/Morphisms.v
@@ -21,7 +21,7 @@ Require Import Coq.Relations.Relation_Definitions.
Require Export Coq.Classes.RelationClasses.
Generalizable Variables A eqA B C D R RA RB RC m f x y.
-Local Obligation Tactic := simpl_relation.
+Local Obligation Tactic := try solve [ simpl_relation ].
(** * Morphisms.
@@ -201,12 +201,12 @@ Section Relations.
Global Instance pointwise_subrelation `(sub : subrelation B R R') :
subrelation (pointwise_relation R) (pointwise_relation R') | 4.
- Proof. reduce. unfold pointwise_relation in *. apply sub. apply H. Qed.
+ Proof. intros x y H a. unfold pointwise_relation in *. apply sub. apply H. Qed.
(** For dependent function types. *)
Lemma forall_subrelation (R S : forall x : A, relation (P x)) :
(forall a, subrelation (R a) (S a)) -> subrelation (forall_relation R) (forall_relation S).
- Proof. reduce. apply H. apply H0. Qed.
+ Proof. intros H x y H0 a. apply H. apply H0. Qed.
End Relations.
Typeclasses Opaque respectful pointwise_relation forall_relation.
@@ -259,6 +259,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H R' H0 x y z H1 H2 x0 y0 H3.
assert(R x0 x0).
- transitivity y0... symmetry...
- transitivity (y x0)...
@@ -272,6 +273,7 @@ Section GenericInstances.
Next Obligation.
Proof.
+ intros RA R mR x y H x0 y0 H0.
unfold complement.
pose (mR x y H x0 y0 H0).
intuition.
@@ -285,7 +287,7 @@ Section GenericInstances.
Next Obligation.
Proof.
- apply mor ; auto.
+ intros RA RB RC f mor x y H x0 y0 H0; apply mor ; auto.
Qed.
@@ -298,6 +300,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x y H0 x0 y0 H1 H2.
transitivity x...
transitivity x0...
Qed.
@@ -310,6 +313,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x x0 y H0 H1.
transitivity y...
Qed.
@@ -319,6 +323,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x x0 y H0 H1.
transitivity x0...
Qed.
@@ -328,6 +333,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x x0 y H0 H1.
transitivity y... symmetry...
Qed.
@@ -336,6 +342,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x x0 y H0 H1.
transitivity x0... symmetry...
Qed.
@@ -344,6 +351,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x x0 y H0.
split.
- intros ; transitivity x0...
- intros.
@@ -359,6 +367,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x y H0 y0 y1 e H2; destruct e.
transitivity y...
Qed.
@@ -369,6 +378,7 @@ Section GenericInstances.
Next Obligation.
Proof with auto.
+ intros R H x y H0 x0 y0 H1.
split ; intros.
- transitivity x0... transitivity x... symmetry...
@@ -383,7 +393,7 @@ Section GenericInstances.
Next Obligation.
Proof.
- simpl_relation.
+ intros RA RB RC x y H x0 y0 H0 x1 y1 H1.
unfold compose. apply H. apply H0. apply H1.
Qed.
@@ -400,9 +410,9 @@ Section GenericInstances.
Proper (relation_equivalence ++> relation_equivalence ++> relation_equivalence)
(@respectful A B).
Proof.
- reduce.
+ intros x y H x0 y0 H0 x1 x2.
unfold respectful, relation_equivalence, predicate_equivalence in * ; simpl in *.
- split ; intros.
+ split ; intros H1 x3 y1 H2.
- rewrite <- H0.
apply H1.
@@ -512,9 +522,9 @@ Ltac partial_application_tactic :=
Instance proper_proper : Proper (relation_equivalence ==> eq ==> iff) (@Proper A).
Proof.
- simpl_relation.
+ intros A x y H y0 y1 e; destruct e.
reduce in H.
- split ; red ; intros.
+ split ; red ; intros H0.
- setoid_rewrite <- H.
apply H0.
- setoid_rewrite H.
@@ -555,8 +565,7 @@ Section Normalize.
Lemma proper_normalizes_proper `(Normalizes R0 R1, Proper A R1 m) : Proper R0 m.
Proof.
- red in H, H0.
- rewrite H.
+ rewrite normalizes.
assumption.
Qed.
@@ -571,10 +580,11 @@ Lemma flip_arrow {A : Type} {B : Type}
`(NA : Normalizes A R (flip R'''), NB : Normalizes B R' (flip R'')) :
Normalizes (A -> B) (R ==> R') (flip (R''' ==> R'')%signature).
Proof.
- unfold Normalizes in *. intros.
+ unfold Normalizes in *.
unfold relation_equivalence in *.
unfold predicate_equivalence in *. simpl in *.
- unfold respectful. unfold flip in *. firstorder.
+ unfold respectful. unfold flip in *.
+ intros x x0; split; intros H x1 y H0.
- apply NB. apply H. apply NA. apply H0.
- apply NB. apply H. apply NA. apply H0.
Qed.
diff --git a/theories/Classes/RelationClasses.v b/theories/Classes/RelationClasses.v
index 9b92ade096..5381e91997 100644
--- a/theories/Classes/RelationClasses.v
+++ b/theories/Classes/RelationClasses.v
@@ -107,7 +107,7 @@ Section Defs.
(** Any symmetric relation is equal to its inverse. *)
Lemma subrelation_symmetric R `(Symmetric R) : subrelation (flip R) R.
- Proof. hnf. intros. red in H0. apply symmetry. assumption. Qed.
+ Proof. hnf. intros x y H0. red in H0. apply symmetry. assumption. Qed.
Section flip.
@@ -212,7 +212,7 @@ Hint Extern 3 (PreOrder (flip _)) => class_apply flip_PreOrder : typeclass_insta
Hint Extern 4 (subrelation (flip _) _) =>
class_apply @subrelation_symmetric : typeclass_instances.
-Arguments irreflexivity {A R Irreflexive} [x] _.
+Arguments irreflexivity {A R Irreflexive} [x] _ : rename.
Arguments symmetry {A} {R} {_} [x] [y] _.
Arguments asymmetry {A} {R} {_} [x] [y] _ _.
Arguments transitivity {A} {R} {_} [x] [y] [z] _ _.
@@ -260,7 +260,7 @@ Ltac simpl_relation :=
unfold flip, impl, arrow ; try reduce ; program_simpl ;
try ( solve [ dintuition ]).
-Local Obligation Tactic := simpl_relation.
+Local Obligation Tactic := try solve [ simpl_relation ].
(** Logical implication. *)
@@ -399,29 +399,30 @@ Program Instance predicate_equivalence_equivalence :
Equivalence (@predicate_equivalence l).
Next Obligation.
- induction l ; firstorder.
+ intro l; induction l ; firstorder.
Qed.
Next Obligation.
- induction l ; firstorder.
+ intro l; induction l ; firstorder.
Qed.
Next Obligation.
+ intro l.
fold pointwise_lifting.
- induction l.
+ induction l as [|T l IHl].
- firstorder.
- - intros. simpl in *. pose (IHl (x x0) (y x0) (z x0)).
+ - intros x y z H H0 x0. pose (IHl (x x0) (y x0) (z x0)).
firstorder.
Qed.
Program Instance predicate_implication_preorder :
PreOrder (@predicate_implication l).
Next Obligation.
- induction l ; firstorder.
+ intro l; induction l ; firstorder.
Qed.
Next Obligation.
- induction l.
+ intro l.
+ induction l as [|T l IHl].
- firstorder.
- - unfold predicate_implication in *. simpl in *.
- intro. pose (IHl (x x0) (y x0) (z x0)). firstorder.
+ - intros x y z H H0 x0. pose (IHl (x x0) (y x0) (z x0)). firstorder.
Qed.
(** We define the various operations which define the algebra on binary relations,
diff --git a/theories/Init/Decimal.v b/theories/Init/Decimal.v
index 5eae5567d7..025264ab01 100644
--- a/theories/Init/Decimal.v
+++ b/theories/Init/Decimal.v
@@ -12,7 +12,7 @@
(** These numbers coded in base 10 will be used for parsing and printing
other Coq numeral datatypes in an human-readable way.
- See the [Numeral Notation] command.
+ See the [Number Notation] command.
We represent numbers in base 10 as lists of decimal digits,
in big-endian order (most significant digit comes first). *)
@@ -245,7 +245,7 @@ with succ_double d :=
End Little.
(** Pseudo-conversion functions used when declaring
- Numeral Notations on [uint] and [int]. *)
+ Number Notations on [uint] and [int]. *)
Definition uint_of_uint (i:uint) := i.
Definition int_of_int (i:int) := i.
diff --git a/theories/Init/Hexadecimal.v b/theories/Init/Hexadecimal.v
index a4ddad2875..36f5e5ad1f 100644
--- a/theories/Init/Hexadecimal.v
+++ b/theories/Init/Hexadecimal.v
@@ -12,7 +12,7 @@
(** These numbers coded in base 16 will be used for parsing and printing
other Coq numeral datatypes in an human-readable way.
- See the [Numeral Notation] command.
+ See the [Number Notation] command.
We represent numbers in base 16 as lists of hexadecimal digits,
in big-endian order (most significant digit comes first). *)
diff --git a/theories/Init/Numeral.v b/theories/Init/Numeral.v
index 8a0531e004..179547d0b3 100644
--- a/theories/Init/Numeral.v
+++ b/theories/Init/Numeral.v
@@ -27,7 +27,7 @@ Register int as num.num_int.type.
Register numeral as num.numeral.type.
(** Pseudo-conversion functions used when declaring
- Numeral Notations on [uint] and [int]. *)
+ Number Notations on [uint] and [int]. *)
Definition uint_of_uint (i:uint) := i.
Definition int_of_int (i:int) := i.
diff --git a/theories/Init/Peano.v b/theories/Init/Peano.v
index 02903643d4..98fd52f351 100644
--- a/theories/Init/Peano.v
+++ b/theories/Init/Peano.v
@@ -77,7 +77,7 @@ Hint Resolve O_S: core.
Theorem n_Sn : forall n:nat, n <> S n.
Proof.
- induction n; auto.
+ intro n; induction n; auto.
Qed.
Hint Resolve n_Sn: core.
@@ -92,7 +92,7 @@ Hint Resolve f_equal2_nat: core.
Lemma plus_n_O : forall n:nat, n = n + 0.
Proof.
- induction n; simpl; auto.
+ intro n; induction n; simpl; auto.
Qed.
Remove Hints eq_refl : core.
@@ -129,13 +129,13 @@ Hint Resolve f_equal2_mult: core.
Lemma mult_n_O : forall n:nat, 0 = n * 0.
Proof.
- induction n; simpl; auto.
+ intro n; induction n; simpl; auto.
Qed.
Hint Resolve mult_n_O: core.
Lemma mult_n_Sm : forall n m:nat, n * m + n = n * S m.
Proof.
- intros; induction n as [| p H]; simpl; auto.
+ intros n m; induction n as [| p H]; simpl; auto.
destruct H; rewrite <- plus_n_Sm; apply eq_S.
pattern m at 1 3; elim m; simpl; auto.
Qed.
@@ -192,7 +192,7 @@ Register gt as num.nat.gt.
Theorem le_pred : forall n m, n <= m -> pred n <= pred m.
Proof.
-induction 1; auto. destruct m; simpl; auto.
+induction 1 as [|m _]; auto. destruct m; simpl; auto.
Qed.
Theorem le_S_n : forall n m, S n <= S m -> n <= m.
@@ -202,7 +202,7 @@ Qed.
Theorem le_0_n : forall n, 0 <= n.
Proof.
- induction n; constructor; trivial.
+ intro n; induction n; constructor; trivial.
Qed.
Theorem le_n_S : forall n m, n <= m -> S n <= S m.
@@ -215,7 +215,7 @@ Qed.
Theorem nat_case :
forall (n:nat) (P:nat -> Prop), P 0 -> (forall m:nat, P (S m)) -> P n.
Proof.
- induction n; auto.
+ intros n P IH0 IHS; case n; auto.
Qed.
(** Principle of double induction *)
@@ -226,8 +226,9 @@ Theorem nat_double_ind :
(forall n:nat, R (S n) 0) ->
(forall n m:nat, R n m -> R (S n) (S m)) -> forall n m:nat, R n m.
Proof.
+ intros R ? ? ? n.
induction n; auto.
- destruct m; auto.
+ intro m; destruct m; auto.
Qed.
(** Maximum and minimum : definitions and specifications *)
@@ -237,28 +238,28 @@ Notation min := Nat.min (only parsing).
Lemma max_l n m : m <= n -> Nat.max n m = n.
Proof.
- revert m; induction n; destruct m; simpl; trivial.
+ revert m; induction n as [|n IHn]; intro m; destruct m; simpl; trivial.
- inversion 1.
- intros. apply f_equal, IHn, le_S_n; trivial.
Qed.
Lemma max_r n m : n <= m -> Nat.max n m = m.
Proof.
- revert m; induction n; destruct m; simpl; trivial.
+ revert m; induction n as [|n IHn]; intro m; destruct m; simpl; trivial.
- inversion 1.
- intros. apply f_equal, IHn, le_S_n; trivial.
Qed.
Lemma min_l n m : n <= m -> Nat.min n m = n.
Proof.
- revert m; induction n; destruct m; simpl; trivial.
+ revert m; induction n as [|n IHn]; intro m; destruct m; simpl; trivial.
- inversion 1.
- intros. apply f_equal, IHn, le_S_n; trivial.
Qed.
Lemma min_r n m : m <= n -> Nat.min n m = m.
Proof.
- revert m; induction n; destruct m; simpl; trivial.
+ revert m; induction n as [|n IHn]; intro m; destruct m; simpl; trivial.
- inversion 1.
- intros. apply f_equal, IHn, le_S_n; trivial.
Qed.
@@ -267,7 +268,7 @@ Qed.
Lemma nat_rect_succ_r {A} (f: A -> A) (x:A) n :
nat_rect (fun _ => A) x (fun _ => f) (S n) = nat_rect (fun _ => A) (f x) (fun _ => f) n.
Proof.
- induction n; intros; simpl; rewrite <- ?IHn; trivial.
+ induction n as [|n IHn]; intros; simpl; rewrite <- ?IHn; trivial.
Qed.
Theorem nat_rect_plus :
@@ -275,5 +276,5 @@ Theorem nat_rect_plus :
nat_rect (fun _ => A) x (fun _ => f) (n + m) =
nat_rect (fun _ => A) (nat_rect (fun _ => A) x (fun _ => f) m) (fun _ => f) n.
Proof.
- induction n; intros; simpl; rewrite ?IHn; trivial.
+ intro n; induction n as [|n IHn]; intros; simpl; rewrite ?IHn; trivial.
Qed.
diff --git a/theories/Init/Prelude.v b/theories/Init/Prelude.v
index 8f862e8cec..0fe3d5491e 100644
--- a/theories/Init/Prelude.v
+++ b/theories/Init/Prelude.v
@@ -35,22 +35,22 @@ Declare ML Module "string_notation_plugin".
(* Parsing / printing of hexadecimal numbers *)
Arguments Nat.of_hex_uint d%hex_uint_scope.
Arguments Nat.of_hex_int d%hex_int_scope.
-Numeral Notation Numeral.uint Numeral.uint_of_uint Numeral.uint_of_uint
+Number Notation Numeral.uint Numeral.uint_of_uint Numeral.uint_of_uint
: hex_uint_scope.
-Numeral Notation Numeral.int Numeral.int_of_int Numeral.int_of_int
+Number Notation Numeral.int Numeral.int_of_int Numeral.int_of_int
: hex_int_scope.
(* Parsing / printing of decimal numbers *)
Arguments Nat.of_uint d%dec_uint_scope.
Arguments Nat.of_int d%dec_int_scope.
-Numeral Notation Numeral.uint Numeral.uint_of_uint Numeral.uint_of_uint
+Number Notation Numeral.uint Numeral.uint_of_uint Numeral.uint_of_uint
: dec_uint_scope.
-Numeral Notation Numeral.int Numeral.int_of_int Numeral.int_of_int
+Number Notation Numeral.int Numeral.int_of_int Numeral.int_of_int
: dec_int_scope.
(* Parsing / printing of [nat] numbers *)
-Numeral Notation nat Nat.of_num_uint Nat.to_num_hex_uint : hex_nat_scope (abstract after 5001).
-Numeral Notation nat Nat.of_num_uint Nat.to_num_uint : nat_scope (abstract after 5001).
+Number Notation nat Nat.of_num_uint Nat.to_num_hex_uint : hex_nat_scope (abstract after 5001).
+Number Notation nat Nat.of_num_uint Nat.to_num_uint : nat_scope (abstract after 5001).
(* Printing/Parsing of bytes *)
Export Byte.ByteSyntaxNotations.
diff --git a/theories/Init/Tactics.v b/theories/Init/Tactics.v
index b13206db94..e1db68aea9 100644
--- a/theories/Init/Tactics.v
+++ b/theories/Init/Tactics.v
@@ -135,8 +135,8 @@ lazymatch T with
rename H2 into H; find_equiv H |
clear H]
| forall x : ?t, _ =>
- let a := fresh "a" with
- H1 := fresh "H" in
+ let a := fresh "a" in
+ let H1 := fresh "H" in
evar (a : t); pose proof (H a) as H1; unfold a in H1;
clear a; clear H; rename H1 into H; find_equiv H
| ?A <-> ?B => idtac
@@ -203,7 +203,7 @@ Set Implicit Arguments.
Lemma decide_left : forall (C:Prop) (decide:{C}+{~C}),
C -> forall P:{C}+{~C}->Prop, (forall H:C, P (left _ H)) -> P decide.
Proof.
- intros; destruct decide.
+ intros C decide H P H0; destruct decide.
- apply H0.
- contradiction.
Qed.
@@ -211,7 +211,7 @@ Qed.
Lemma decide_right : forall (C:Prop) (decide:{C}+{~C}),
~C -> forall P:{C}+{~C}->Prop, (forall H:~C, P (right _ H)) -> P decide.
Proof.
- intros; destruct decide.
+ intros C decide H P H0; destruct decide.
- contradiction.
- apply H0.
Qed.
diff --git a/theories/Init/Wf.v b/theories/Init/Wf.v
index a305626eb3..60200ae0f6 100644
--- a/theories/Init/Wf.v
+++ b/theories/Init/Wf.v
@@ -85,8 +85,7 @@ Section Well_founded.
Scheme Acc_inv_dep := Induction for Acc Sort Prop.
- Lemma Fix_F_eq :
- forall (x:A) (r:Acc x),
+ Lemma Fix_F_eq (x:A) (r:Acc x) :
F (fun (y:A) (p:R y x) => Fix_F (x:=y) (Acc_inv r p)) = Fix_F (x:=x) r.
Proof.
destruct r using Acc_inv_dep; auto.
@@ -104,7 +103,7 @@ Section Well_founded.
Lemma Fix_F_inv : forall (x:A) (r s:Acc x), Fix_F r = Fix_F s.
Proof.
- intro x; induction (Rwf x); intros.
+ intro x; induction (Rwf x); intros r s.
rewrite <- (Fix_F_eq r); rewrite <- (Fix_F_eq s); intros.
apply F_ext; auto.
Qed.
diff --git a/theories/Lists/List.v b/theories/Lists/List.v
index e0eae7c287..76633ab201 100644
--- a/theories/Lists/List.v
+++ b/theories/Lists/List.v
@@ -207,24 +207,31 @@ Section Facts.
now destruct Heq as [[Heq1 Heq2]|[Heq1 Heq2]]; inversion_clear Heq2.
Qed.
- Lemma app_inj_tail :
- forall (x y:list A) (a b:A), x ++ [a] = y ++ [b] -> x = y /\ a = b.
+ Lemma app_inj_tail_iff :
+ forall (x y:list A) (a b:A), x ++ [a] = y ++ [b] <-> x = y /\ a = b.
Proof.
induction x as [| x l IHl];
[ destruct y as [| a l] | destruct y as [| a l0] ];
simpl; auto.
- - intros a b [= ].
- auto.
- - intros a0 b [= H1 H0].
- apply app_cons_not_nil in H0 as [].
- - intros a b [= H1 H0].
- assert ([] = l ++ [a]) by auto.
- apply app_cons_not_nil in H as [].
- - intros a0 b [= <- H0].
- destruct (IHl l0 a0 b H0) as (<-,<-).
- split; auto.
+ - intros a b. split.
+ + intros [= ]. auto.
+ + intros [H0 H1]. subst. auto.
+ - intros a0 b. split.
+ + intros [= H1 H0]. apply app_cons_not_nil in H0 as [].
+ + intros [H0 H1]. inversion H0.
+ - intros a b. split.
+ + intros [= H1 H0]. assert ([] = l ++ [a]) by auto. apply app_cons_not_nil in H as [].
+ + intros [H0 H1]. inversion H0.
+ - intros a0 b. split.
+ + intros [= <- H0]. specialize (IHl l0 a0 b). apply IHl in H0. destruct H0. subst. split; auto.
+ + intros [H0 H1]. inversion H0. subst. auto.
Qed.
+ Lemma app_inj_tail :
+ forall (x y:list A) (a b:A), x ++ [a] = y ++ [b] -> x = y /\ a = b.
+ Proof.
+ apply app_inj_tail_iff.
+ Qed.
(** Compatibility with other operations *)
@@ -239,10 +246,18 @@ Section Facts.
rewrite <- plus_n_Sm, plus_n_O; reflexivity.
Qed.
+ Lemma app_inv_head_iff:
+ forall l l1 l2 : list A, l ++ l1 = l ++ l2 <-> l1 = l2.
+ Proof.
+ induction l; split; intros; simpl; auto.
+ - apply IHl. inversion H. auto.
+ - subst. auto.
+ Qed.
+
Lemma app_inv_head:
forall l l1 l2 : list A, l ++ l1 = l ++ l2 -> l1 = l2.
Proof.
- induction l; simpl; auto; injection 1; auto.
+ apply app_inv_head_iff.
Qed.
Lemma app_inv_tail:
@@ -260,6 +275,12 @@ Section Facts.
injection H as [= H H0]; f_equal; eauto.
Qed.
+ Lemma app_inv_tail_iff:
+ forall l l1 l2 : list A, l1 ++ l = l2 ++ l <-> l1 = l2.
+ Proof.
+ split; [apply app_inv_tail | now intros ->].
+ Qed.
+
(************************)
(** *** Facts about [In] *)
(************************)
diff --git a/theories/NArith/BinNat.v b/theories/NArith/BinNat.v
index 1881e387a2..28ba9daed0 100644
--- a/theories/NArith/BinNat.v
+++ b/theories/NArith/BinNat.v
@@ -1007,7 +1007,7 @@ Bind Scope N_scope with N.t N.
(** Exportation of notations *)
-Numeral Notation N N.of_num_uint N.to_num_uint : N_scope.
+Number Notation N N.of_num_uint N.to_num_uint : N_scope.
Infix "+" := N.add : N_scope.
Infix "-" := N.sub : N_scope.
diff --git a/theories/NArith/BinNatDef.v b/theories/NArith/BinNatDef.v
index 8a0aee9cf4..222e76c3e7 100644
--- a/theories/NArith/BinNatDef.v
+++ b/theories/NArith/BinNatDef.v
@@ -434,9 +434,9 @@ Definition to_hex_int n := Hexadecimal.Pos (to_hex_uint n).
Definition to_num_int n := Numeral.IntDec (to_int n).
-Numeral Notation N of_num_uint to_num_uint : N_scope.
+Number Notation N of_num_uint to_num_uint : N_scope.
End N.
(** Re-export the notation for those who just [Import NatIntDef] *)
-Numeral Notation N N.of_num_uint N.to_num_uint : N_scope.
+Number Notation N N.of_num_uint N.to_num_uint : N_scope.
diff --git a/theories/Numbers/AltBinNotations.v b/theories/Numbers/AltBinNotations.v
index 5585f478b3..7c846571a7 100644
--- a/theories/Numbers/AltBinNotations.v
+++ b/theories/Numbers/AltBinNotations.v
@@ -8,12 +8,12 @@
(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
-(** * Alternative Binary Numeral Notations *)
+(** * Alternative Binary Number Notations *)
(** Faster but less safe parsers and printers of [positive], [N], [Z]. *)
(** By default, literals in types [positive], [N], [Z] are parsed and
- printed via the [Numeral Notation] command, by conversion from/to
+ printed via the [Number Notation] command, by conversion from/to
the [Decimal.int] representation. When working with numbers with
thousands of digits and more, conversion from/to [Decimal.int] can
become significantly slow. If that becomes a problem for your
@@ -43,7 +43,7 @@ Definition pos_of_z z :=
Definition pos_to_z p := Zpos p.
-Numeral Notation positive pos_of_z pos_to_z : positive_scope.
+Number Notation positive pos_of_z pos_to_z : positive_scope.
(** [N] *)
@@ -60,10 +60,10 @@ Definition n_to_z n :=
| Npos p => Zpos p
end.
-Numeral Notation N n_of_z n_to_z : N_scope.
+Number Notation N n_of_z n_to_z : N_scope.
(** [Z] *)
Definition z_of_z (z:Z) := z.
-Numeral Notation Z z_of_z z_of_z : Z_scope.
+Number Notation Z z_of_z z_of_z : Z_scope.
diff --git a/theories/Numbers/Cyclic/Int31/Int31.v b/theories/Numbers/Cyclic/Int31/Int31.v
index cd814091a1..d3528ce87c 100644
--- a/theories/Numbers/Cyclic/Int31/Int31.v
+++ b/theories/Numbers/Cyclic/Int31/Int31.v
@@ -477,4 +477,4 @@ Definition tail031 (i:int31) :=
end)
i On.
-Numeral Notation int31 phi_inv_nonneg phi : int31_scope.
+Number Notation int31 phi_inv_nonneg phi : int31_scope.
diff --git a/theories/Numbers/NatInt/NZAdd.v b/theories/Numbers/NatInt/NZAdd.v
index 7982411bdd..66cbba9e08 100644
--- a/theories/Numbers/NatInt/NZAdd.v
+++ b/theories/Numbers/NatInt/NZAdd.v
@@ -22,7 +22,7 @@ Ltac nzsimpl' := autorewrite with nz nz'.
Theorem add_0_r : forall n, n + 0 == n.
Proof.
- nzinduct n.
+ intro n; nzinduct n.
- now nzsimpl.
- intro. nzsimpl. now rewrite succ_inj_wd.
Qed.
diff --git a/theories/Numbers/NatInt/NZBase.v b/theories/Numbers/NatInt/NZBase.v
index 8bc393bbad..d4f70adbc5 100644
--- a/theories/Numbers/NatInt/NZBase.v
+++ b/theories/Numbers/NatInt/NZBase.v
@@ -74,7 +74,7 @@ Proof.
intros z Base Step; revert Base; pattern z; apply bi_induction.
- solve_proper.
- intro; now apply bi_induction.
-- intro; pose proof (Step n); tauto.
+- intro n; pose proof (Step n); tauto.
Qed.
End CentralInduction.
@@ -83,7 +83,7 @@ Tactic Notation "nzinduct" ident(n) :=
induction_maker n ltac:(apply bi_induction).
Tactic Notation "nzinduct" ident(n) constr(u) :=
- induction_maker n ltac:(apply central_induction with (z := u)).
+ induction_maker n ltac:(apply (fun A A_wd => central_induction A A_wd u)).
End NZBaseProp.
diff --git a/theories/Numbers/NatInt/NZDiv.v b/theories/Numbers/NatInt/NZDiv.v
index 1c45aa440f..e6249be8df 100644
--- a/theories/Numbers/NatInt/NZDiv.v
+++ b/theories/Numbers/NatInt/NZDiv.v
@@ -116,7 +116,7 @@ Qed.
Theorem div_small: forall a b, 0<=a<b -> a/b == 0.
Proof.
-intros. symmetry.
+intros a b ?. symmetry.
apply div_unique with a; intuition; try order.
now nzsimpl.
Qed.
@@ -149,7 +149,7 @@ Qed.
Lemma mod_1_r: forall a, 0<=a -> a mod 1 == 0.
Proof.
-intros. symmetry.
+intros a ?. symmetry.
apply mod_unique with a; try split; try order; try apply lt_0_1.
now nzsimpl.
Qed.
@@ -173,7 +173,7 @@ Qed.
Lemma mod_mul : forall a b, 0<=a -> 0<b -> (a*b) mod b == 0.
Proof.
-intros; symmetry.
+intros a b ? ?; symmetry.
apply mod_unique with a; try split; try order.
- apply mul_nonneg_nonneg; order.
- nzsimpl; apply mul_comm.
@@ -186,7 +186,7 @@ Qed.
Theorem mod_le: forall a b, 0<=a -> 0<b -> a mod b <= a.
Proof.
-intros. destruct (le_gt_cases b a).
+intros a b ? ?. destruct (le_gt_cases b a).
- apply le_trans with b; auto.
apply lt_le_incl. destruct (mod_bound_pos a b); auto.
- rewrite lt_eq_cases; right.
@@ -198,7 +198,7 @@ Qed.
Lemma div_pos: forall a b, 0<=a -> 0<b -> 0 <= a/b.
Proof.
-intros.
+intros a b ? ?.
rewrite (mul_le_mono_pos_l _ _ b); auto; nzsimpl.
rewrite (add_le_mono_r _ _ (a mod b)).
rewrite <- div_mod by order.
@@ -247,7 +247,7 @@ Qed.
Lemma div_lt : forall a b, 0<a -> 1<b -> a/b < a.
Proof.
-intros.
+intros a b ? ?.
assert (0 < b) by (apply lt_trans with 1; auto using lt_0_1).
destruct (lt_ge_cases a b).
- rewrite div_small; try split; order.
@@ -284,7 +284,7 @@ Qed.
Lemma mul_div_le : forall a b, 0<=a -> 0<b -> b*(a/b) <= a.
Proof.
-intros.
+intros a b ? ?.
rewrite (add_le_mono_r _ _ (a mod b)), <- div_mod by order.
rewrite <- (add_0_r a) at 1.
rewrite <- add_le_mono_l. destruct (mod_bound_pos a b); order.
@@ -292,7 +292,7 @@ Qed.
Lemma mul_succ_div_gt : forall a b, 0<=a -> 0<b -> a < b*(S (a/b)).
Proof.
-intros.
+intros a b ? ?.
rewrite (div_mod a b) at 1 by order.
rewrite (mul_succ_r).
rewrite <- add_lt_mono_l.
@@ -304,7 +304,7 @@ Qed.
Lemma div_exact : forall a b, 0<=a -> 0<b -> (a == b*(a/b) <-> a mod b == 0).
Proof.
-intros. rewrite (div_mod a b) at 1 by order.
+intros a b ? ?. rewrite (div_mod a b) at 1 by order.
rewrite <- (add_0_r (b*(a/b))) at 2.
apply add_cancel_l.
Qed.
@@ -314,7 +314,7 @@ Qed.
Theorem div_lt_upper_bound:
forall a b q, 0<=a -> 0<b -> a < b*q -> a/b < q.
Proof.
-intros.
+intros a b q ? ? ?.
rewrite (mul_lt_mono_pos_l b) by order.
apply le_lt_trans with a; auto.
apply mul_div_le; auto.
@@ -323,7 +323,7 @@ Qed.
Theorem div_le_upper_bound:
forall a b q, 0<=a -> 0<b -> a <= b*q -> a/b <= q.
Proof.
-intros.
+intros a b q ? ? ?.
rewrite (mul_le_mono_pos_l _ _ b) by order.
apply le_trans with a; auto.
apply mul_div_le; auto.
@@ -362,7 +362,7 @@ Qed.
Lemma mod_add : forall a b c, 0<=a -> 0<=a+b*c -> 0<c ->
(a + b * c) mod c == a mod c.
Proof.
- intros.
+ intros a b c ? ? ?.
symmetry.
apply mod_unique with (a/c+b); auto.
- apply mod_bound_pos; auto.
@@ -373,7 +373,7 @@ Qed.
Lemma div_add : forall a b c, 0<=a -> 0<=a+b*c -> 0<c ->
(a + b * c) / c == a / c + b.
Proof.
- intros.
+ intros a b c ? ? ?.
apply (mul_cancel_l _ _ c); try order.
apply (add_cancel_r _ _ ((a+b*c) mod c)).
rewrite <- div_mod, mod_add by order.
@@ -393,7 +393,7 @@ Qed.
Lemma div_mul_cancel_r : forall a b c, 0<=a -> 0<b -> 0<c ->
(a*c)/(b*c) == a/b.
Proof.
- intros.
+ intros a b c ? ? ?.
symmetry.
apply div_unique with ((a mod b)*c).
- apply mul_nonneg_nonneg; order.
@@ -409,13 +409,13 @@ Qed.
Lemma div_mul_cancel_l : forall a b c, 0<=a -> 0<b -> 0<c ->
(c*a)/(c*b) == a/b.
Proof.
- intros. rewrite !(mul_comm c); apply div_mul_cancel_r; auto.
+ intros a b c ? ? ?. rewrite !(mul_comm c); apply div_mul_cancel_r; auto.
Qed.
Lemma mul_mod_distr_l: forall a b c, 0<=a -> 0<b -> 0<c ->
(c*a) mod (c*b) == c * (a mod b).
Proof.
- intros.
+ intros a b c ? ? ?.
rewrite <- (add_cancel_l _ _ ((c*b)* ((c*a)/(c*b)))).
rewrite <- div_mod.
- rewrite div_mul_cancel_l; auto.
@@ -427,7 +427,7 @@ Qed.
Lemma mul_mod_distr_r: forall a b c, 0<=a -> 0<b -> 0<c ->
(a*c) mod (b*c) == (a mod b) * c.
Proof.
- intros. rewrite !(mul_comm _ c); now rewrite mul_mod_distr_l.
+ intros a b c ? ? ?. rewrite !(mul_comm _ c); now rewrite mul_mod_distr_l.
Qed.
(** Operations modulo. *)
@@ -435,7 +435,7 @@ Qed.
Theorem mod_mod: forall a n, 0<=a -> 0<n ->
(a mod n) mod n == a mod n.
Proof.
- intros. destruct (mod_bound_pos a n); auto. now rewrite mod_small_iff.
+ intros a n ? ?. destruct (mod_bound_pos a n); auto. now rewrite mod_small_iff.
Qed.
Lemma mul_mod_idemp_l : forall a b n, 0<=a -> 0<=b -> 0<n ->
@@ -454,13 +454,14 @@ Qed.
Lemma mul_mod_idemp_r : forall a b n, 0<=a -> 0<=b -> 0<n ->
(a*(b mod n)) mod n == (a*b) mod n.
Proof.
- intros. rewrite !(mul_comm a). apply mul_mod_idemp_l; auto.
+ intros a b n ? ? ?. rewrite !(mul_comm a). apply mul_mod_idemp_l; auto.
Qed.
Theorem mul_mod: forall a b n, 0<=a -> 0<=b -> 0<n ->
(a * b) mod n == ((a mod n) * (b mod n)) mod n.
Proof.
- intros. rewrite mul_mod_idemp_l, mul_mod_idemp_r; trivial. - reflexivity.
+ intros a b n ? ? ?. rewrite mul_mod_idemp_l, mul_mod_idemp_r; trivial.
+ - reflexivity.
- now destruct (mod_bound_pos b n).
Qed.
@@ -478,13 +479,14 @@ Qed.
Lemma add_mod_idemp_r : forall a b n, 0<=a -> 0<=b -> 0<n ->
(a+(b mod n)) mod n == (a+b) mod n.
Proof.
- intros. rewrite !(add_comm a). apply add_mod_idemp_l; auto.
+ intros a b n ? ? ?. rewrite !(add_comm a). apply add_mod_idemp_l; auto.
Qed.
Theorem add_mod: forall a b n, 0<=a -> 0<=b -> 0<n ->
(a+b) mod n == (a mod n + b mod n) mod n.
Proof.
- intros. rewrite add_mod_idemp_l, add_mod_idemp_r; trivial. - reflexivity.
+ intros a b n ? ? ?. rewrite add_mod_idemp_l, add_mod_idemp_r; trivial.
+ - reflexivity.
- now destruct (mod_bound_pos b n).
Qed.
@@ -525,7 +527,7 @@ Qed.
Theorem div_mul_le:
forall a b c, 0<=a -> 0<b -> 0<=c -> c*(a/b) <= (c*a)/b.
Proof.
- intros.
+ intros a b c ? ? ?.
apply div_le_lower_bound; auto.
- apply mul_nonneg_nonneg; auto.
- rewrite mul_assoc, (mul_comm b c), <- mul_assoc.
@@ -538,7 +540,7 @@ Qed.
Lemma mod_divides : forall a b, 0<=a -> 0<b ->
(a mod b == 0 <-> exists c, a == b*c).
Proof.
- split.
+ intros a b ? ?; split.
- intros. exists (a/b). rewrite div_exact; auto.
- intros (c,Hc). rewrite Hc, mul_comm. apply mod_mul; auto.
rewrite (mul_le_mono_pos_l _ _ b); auto. nzsimpl. order.
diff --git a/theories/Numbers/NatInt/NZGcd.v b/theories/Numbers/NatInt/NZGcd.v
index 63cc725aec..c542c3fc2c 100644
--- a/theories/Numbers/NatInt/NZGcd.v
+++ b/theories/Numbers/NatInt/NZGcd.v
@@ -147,7 +147,7 @@ Qed.
Lemma mul_divide_cancel_r : forall n m p, p ~= 0 ->
((n * p | m * p) <-> (n | m)).
Proof.
- intros. rewrite 2 (mul_comm _ p). now apply mul_divide_cancel_l.
+ intros n m p ?. rewrite 2 (mul_comm _ p). now apply mul_divide_cancel_l.
Qed.
Lemma divide_add_r : forall n m p, (n | m) -> (n | p) -> (n | m + p).
@@ -215,7 +215,7 @@ Qed.
Lemma gcd_divide_iff : forall n m p,
(p | gcd n m) <-> (p | n) /\ (p | m).
Proof.
- intros. split. - split.
+ intros n m p. split. - split.
+ transitivity (gcd n m); trivial using gcd_divide_l.
+ transitivity (gcd n m); trivial using gcd_divide_r.
- intros (H,H'). now apply gcd_greatest.
@@ -273,18 +273,18 @@ Qed.
Lemma gcd_eq_0_l : forall n m, gcd n m == 0 -> n == 0.
Proof.
- intros.
+ intros n m H.
generalize (gcd_divide_l n m). rewrite H. apply divide_0_l.
Qed.
Lemma gcd_eq_0_r : forall n m, gcd n m == 0 -> m == 0.
Proof.
- intros. apply gcd_eq_0_l with n. now rewrite gcd_comm.
+ intros n m ?. apply gcd_eq_0_l with n. now rewrite gcd_comm.
Qed.
Lemma gcd_eq_0 : forall n m, gcd n m == 0 <-> n == 0 /\ m == 0.
Proof.
- intros. split.
+ intros n m. split.
- split.
+ now apply gcd_eq_0_l with m.
+ now apply gcd_eq_0_r with n.
diff --git a/theories/Numbers/NatInt/NZLog.v b/theories/Numbers/NatInt/NZLog.v
index 5491d7ab04..526af2f9df 100644
--- a/theories/Numbers/NatInt/NZLog.v
+++ b/theories/Numbers/NatInt/NZLog.v
@@ -335,7 +335,7 @@ Qed.
Lemma log2_succ_or : forall a,
log2 (S a) == S (log2 a) \/ log2 (S a) == log2 a.
Proof.
- intros.
+ intros a.
destruct (le_gt_cases (log2 (S a)) (log2 a)) as [H|H].
- right. generalize (log2_le_mono _ _ (le_succ_diag_r a)); order.
- left. apply le_succ_l in H. generalize (log2_succ_le a); order.
@@ -601,7 +601,7 @@ Lemma log2_log2_up_exact :
Proof.
intros a Ha.
split.
- - intros. exists (log2 a).
+ - intros H. exists (log2 a).
generalize (log2_log2_up_spec a Ha). rewrite <-H.
destruct 1; order.
- intros (b,Hb). rewrite Hb.
@@ -806,8 +806,8 @@ Qed.
Lemma log2_up_succ_or : forall a,
log2_up (S a) == S (log2_up a) \/ log2_up (S a) == log2_up a.
Proof.
- intros.
- destruct (le_gt_cases (log2_up (S a)) (log2_up a)).
+ intros a.
+ destruct (le_gt_cases (log2_up (S a)) (log2_up a)) as [H|H].
- right. generalize (log2_up_le_mono _ _ (le_succ_diag_r a)); order.
- left. apply le_succ_l in H. generalize (log2_up_succ_le a); order.
Qed.
diff --git a/theories/Numbers/NatInt/NZMul.v b/theories/Numbers/NatInt/NZMul.v
index 9ddf7cb0eb..3d6465191d 100644
--- a/theories/Numbers/NatInt/NZMul.v
+++ b/theories/Numbers/NatInt/NZMul.v
@@ -17,7 +17,7 @@ Include NZAddProp NZ NZBase.
Theorem mul_0_r : forall n, n * 0 == 0.
Proof.
-nzinduct n; intros; now nzsimpl.
+intro n; nzinduct n; intros; now nzsimpl.
Qed.
Theorem mul_succ_r : forall n m, n * (S m) == n * m + n.
diff --git a/theories/Numbers/NatInt/NZMulOrder.v b/theories/Numbers/NatInt/NZMulOrder.v
index 46749504a9..c67bbe38d8 100644
--- a/theories/Numbers/NatInt/NZMulOrder.v
+++ b/theories/Numbers/NatInt/NZMulOrder.v
@@ -46,7 +46,7 @@ Qed.
Theorem mul_lt_mono_neg_l : forall p n m, p < 0 -> (n < m <-> p * m < p * n).
Proof.
-nzord_induct p.
+intro p; nzord_induct p.
- order.
- intros p Hp _ n m Hp'. apply lt_succ_l in Hp'. order.
- intros p Hp IH n m _. apply le_succ_l in Hp.
@@ -196,7 +196,7 @@ Qed.
Theorem mul_nonneg_nonneg : forall n m, 0 <= n -> 0 <= m -> 0 <= n*m.
Proof.
-intros. rewrite <- (mul_0_l m). apply mul_le_mono_nonneg; order.
+intros n m Hn Hm. rewrite <- (mul_0_l m). apply mul_le_mono_nonneg; order.
Qed.
Theorem mul_pos_cancel_l : forall n m, 0 < n -> (0 < n*m <-> 0 < m).
@@ -343,7 +343,7 @@ Qed.
Lemma square_nonneg : forall a, 0 <= a * a.
Proof.
- intros. rewrite <- (mul_0_r a). destruct (le_gt_cases a 0).
+ intro a. rewrite <- (mul_0_r a). destruct (le_gt_cases a 0).
- now apply mul_le_mono_nonpos_l.
- apply mul_le_mono_nonneg_l; order.
Qed.
@@ -391,7 +391,7 @@ Qed.
Lemma quadmul_le_squareadd : forall a b, 0<=a -> 0<=b ->
2*2*a*b <= (a+b)*(a+b).
Proof.
- intros.
+ intros a b Ha Hb.
nzsimpl'.
rewrite !mul_add_distr_l, !mul_add_distr_r.
rewrite (add_comm _ (b*b)), add_assoc.
diff --git a/theories/Numbers/NatInt/NZOrder.v b/theories/Numbers/NatInt/NZOrder.v
index d576902c5c..68bb974c5d 100644
--- a/theories/Numbers/NatInt/NZOrder.v
+++ b/theories/Numbers/NatInt/NZOrder.v
@@ -65,7 +65,7 @@ Qed.
Theorem le_succ_l : forall n m, S n <= m <-> n < m.
Proof.
-intro n; nzinduct m n.
+intros n m; nzinduct m n.
- split; intro H. + false_hyp H nle_succ_diag_l. + false_hyp H lt_irrefl.
- intro m.
rewrite (lt_eq_cases (S n) (S m)), !lt_succ_r, (lt_eq_cases n m), succ_inj_wd.
@@ -362,7 +362,7 @@ induction does not go through, so we need to use strong
Lemma lt_exists_pred_strong :
forall z n m, z < m -> m <= n -> exists k, m == S k /\ z <= k.
Proof.
-intro z; nzinduct n z.
+intros z n; nzinduct n z.
- order.
- intro n; split; intros IH m H1 H2.
+ apply le_succ_r in H2. destruct H2 as [H2 | H2].
@@ -373,7 +373,7 @@ Qed.
Theorem lt_exists_pred :
forall z n, z < n -> exists k, n == S k /\ z <= k.
Proof.
-intros z n H; apply lt_exists_pred_strong with (z := z) (n := n).
+intros z n H; apply (lt_exists_pred_strong z n).
- assumption. - apply le_refl.
Qed.
@@ -428,12 +428,12 @@ Qed.
Lemma A'A_right : (forall n, A' n) -> forall n, z <= n -> A n.
Proof.
-intros H1 n H2. apply H1 with (n := S n); [assumption | apply lt_succ_diag_r].
+intros H1 n H2. apply (H1 (S n)); [assumption | apply lt_succ_diag_r].
Qed.
Theorem strong_right_induction: right_step' -> forall n, z <= n -> A n.
Proof.
-intro RS'; apply A'A_right; unfold A'; nzinduct n z;
+intro RS'; apply A'A_right; unfold A'; intro n; nzinduct n z;
[apply rbase | apply rs'_rs''; apply RS'].
Qed.
@@ -504,7 +504,7 @@ Qed.
Theorem strong_left_induction: left_step' -> forall n, n <= z -> A n.
Proof.
-intro LS'; apply A'A_left; unfold A'; nzinduct n (S z);
+intro LS'; apply A'A_left; unfold A'; intro n; nzinduct n (S z);
[apply lbase | apply ls'_ls''; apply LS'].
Qed.
@@ -629,8 +629,7 @@ Qed.
Theorem lt_wf : well_founded Rlt.
Proof.
unfold well_founded.
-apply strong_right_induction' with (z := z).
-- auto with typeclass_instances.
+apply (strong_right_induction' _ _ z).
- intros n H; constructor; intros y [H1 H2].
apply nle_gt in H2. elim H2. now apply le_trans with z.
- intros n H1 H2; constructor; intros m [H3 H4]. now apply H2.
@@ -639,8 +638,7 @@ Qed.
Theorem gt_wf : well_founded Rgt.
Proof.
unfold well_founded.
-apply strong_left_induction' with (z := z).
-- auto with typeclass_instances.
+apply (strong_left_induction' _ _ z).
- intros n H; constructor; intros y [H1 H2].
apply nle_gt in H2.
+ elim H2.
diff --git a/theories/Numbers/NatInt/NZParity.v b/theories/Numbers/NatInt/NZParity.v
index ee6f4014f0..07a33e3f67 100644
--- a/theories/Numbers/NatInt/NZParity.v
+++ b/theories/Numbers/NatInt/NZParity.v
@@ -47,7 +47,7 @@ Qed.
Lemma Even_or_Odd : forall x, Even x \/ Odd x.
Proof.
- nzinduct x.
+ intro x; nzinduct x.
- left. exists 0. now nzsimpl.
- intros x.
split; intros [(y,H)|(y,H)].
@@ -86,7 +86,7 @@ Qed.
Lemma orb_even_odd : forall n, orb (even n) (odd n) = true.
Proof.
- intros.
+ intros n.
destruct (Even_or_Odd n) as [H|H].
- rewrite <- even_spec in H. now rewrite H.
- rewrite <- odd_spec in H. now rewrite H, orb_true_r.
@@ -94,7 +94,7 @@ Qed.
Lemma negb_odd : forall n, negb (odd n) = even n.
Proof.
- intros.
+ intros n.
generalize (Even_or_Odd n) (Even_Odd_False n).
rewrite <- even_spec, <- odd_spec.
destruct (odd n), (even n) ; simpl; intuition.
@@ -188,7 +188,7 @@ Qed.
Lemma even_add : forall n m, even (n+m) = Bool.eqb (even n) (even m).
Proof.
- intros.
+ intros n m.
case_eq (even n); case_eq (even m);
rewrite <- ?negb_true_iff, ?negb_even, ?odd_spec, ?even_spec;
intros (m',Hm) (n',Hn).
@@ -200,7 +200,7 @@ Qed.
Lemma odd_add : forall n m, odd (n+m) = xorb (odd n) (odd m).
Proof.
- intros. rewrite <- !negb_even. rewrite even_add.
+ intros n m. rewrite <- !negb_even. rewrite even_add.
now destruct (even n), (even m).
Qed.
@@ -208,7 +208,7 @@ Qed.
Lemma even_mul : forall n m, even (mul n m) = even n || even m.
Proof.
- intros.
+ intros n m.
case_eq (even n); simpl; rewrite ?even_spec.
- intros (n',Hn). exists (n'*m). now rewrite Hn, mul_assoc.
- case_eq (even m); simpl; rewrite ?even_spec.
@@ -222,7 +222,7 @@ Qed.
Lemma odd_mul : forall n m, odd (mul n m) = odd n && odd m.
Proof.
- intros. rewrite <- !negb_even. rewrite even_mul.
+ intros n m. rewrite <- !negb_even. rewrite even_mul.
now destruct (even n), (even m).
Qed.
diff --git a/theories/Numbers/NatInt/NZPow.v b/theories/Numbers/NatInt/NZPow.v
index 01a15686e0..3b2a496229 100644
--- a/theories/Numbers/NatInt/NZPow.v
+++ b/theories/Numbers/NatInt/NZPow.v
@@ -238,7 +238,7 @@ Qed.
Lemma pow_le_mono : forall a b c d, 0<a<=c -> b<=d ->
a^b <= c^d.
Proof.
- intros. transitivity (a^d).
+ intros a b c d ? ?. transitivity (a^d).
- apply pow_le_mono_r; intuition order.
- apply pow_le_mono_l; intuition order.
Qed.
diff --git a/theories/Numbers/NatInt/NZSqrt.v b/theories/Numbers/NatInt/NZSqrt.v
index 446ed07b53..4122632603 100644
--- a/theories/Numbers/NatInt/NZSqrt.v
+++ b/theories/Numbers/NatInt/NZSqrt.v
@@ -58,7 +58,7 @@ Qed.
Lemma sqrt_nonneg : forall a, 0<=√a.
Proof.
- intros. destruct (lt_ge_cases a 0) as [Ha|Ha].
+ intros a. destruct (lt_ge_cases a 0) as [Ha|Ha].
- now rewrite (sqrt_neg _ Ha).
- apply sqrt_spec_nonneg. destruct (sqrt_spec a Ha). order.
Qed.
@@ -429,7 +429,7 @@ Qed.
Lemma sqrt_up_nonneg : forall a, 0<=√°a.
Proof.
- intros. destruct (le_gt_cases a 0) as [Ha|Ha].
+ intros a. destruct (le_gt_cases a 0) as [Ha|Ha].
- now rewrite sqrt_up_eqn0.
- rewrite sqrt_up_eqn; trivial. apply le_le_succ_r, sqrt_nonneg.
Qed.
@@ -527,7 +527,7 @@ Lemma sqrt_sqrt_up_exact :
forall a, 0<=a -> (√a == √°a <-> exists b, 0<=b /\ a == b²).
Proof.
intros a Ha.
- split. - intros. exists √a.
+ split. - intros H. exists √a.
split. + apply sqrt_nonneg.
+ generalize (sqrt_sqrt_up_spec a Ha). rewrite <-H. destruct 1; order.
- intros (b & Hb & Hb'). rewrite Hb'.
diff --git a/theories/PArith/BinPos.v b/theories/PArith/BinPos.v
index c8414c241d..e73060af0b 100644
--- a/theories/PArith/BinPos.v
+++ b/theories/PArith/BinPos.v
@@ -1886,7 +1886,7 @@ Bind Scope positive_scope with Pos.t positive.
(** Exportation of notations *)
-Numeral Notation positive Pos.of_num_int Pos.to_num_uint : positive_scope.
+Number Notation positive Pos.of_num_int Pos.to_num_uint : positive_scope.
Infix "+" := Pos.add : positive_scope.
Infix "-" := Pos.sub : positive_scope.
diff --git a/theories/PArith/BinPosDef.v b/theories/PArith/BinPosDef.v
index cdb9af542c..b41cd571dc 100644
--- a/theories/PArith/BinPosDef.v
+++ b/theories/PArith/BinPosDef.v
@@ -697,9 +697,9 @@ Definition to_hex_int p := Hexadecimal.Pos (to_hex_uint p).
Definition to_num_int n := Numeral.IntDec (to_int n).
-Numeral Notation positive of_num_int to_num_uint : positive_scope.
+Number Notation positive of_num_int to_num_uint : positive_scope.
End Pos.
(** Re-export the notation for those who just [Import BinPosDef] *)
-Numeral Notation positive Pos.of_num_int Pos.to_num_uint : positive_scope.
+Number Notation positive Pos.of_num_int Pos.to_num_uint : positive_scope.
diff --git a/theories/QArith/QArith_base.v b/theories/QArith/QArith_base.v
index 84d70e56de..192dcd885b 100644
--- a/theories/QArith/QArith_base.v
+++ b/theories/QArith/QArith_base.v
@@ -129,7 +129,7 @@ Definition to_numeral (q:Q) : option Numeral.numeral :=
| Some q => Some (Numeral.Dec q)
end.
-Numeral Notation Q of_numeral to_numeral : Q_scope.
+Number Notation Q of_numeral to_numeral : Q_scope.
Definition inject_Z (x : Z) := Qmake x 1.
Arguments inject_Z x%Z.
diff --git a/theories/Reals/Rseries.v b/theories/Reals/Rseries.v
index 015eb8e2ac..7238ec0068 100644
--- a/theories/Reals/Rseries.v
+++ b/theories/Reals/Rseries.v
@@ -78,25 +78,12 @@ Section sequence.
Lemma growing_prop :
forall n m:nat, Un_growing -> (n >= m)%nat -> Un n >= Un m.
Proof.
- double induction n m; intros.
- unfold Rge; right; trivial.
- exfalso; unfold ge in H1; generalize (le_Sn_O n0); intro; auto.
- cut (n0 >= 0)%nat.
- generalize H0; intros; unfold Un_growing in H0;
- apply
- (Rge_trans (Un (S n0)) (Un n0) (Un 0) (Rle_ge (Un n0) (Un (S n0)) (H0 n0))
- (H 0%nat H2 H3)).
- elim n0; auto.
- elim (lt_eq_lt_dec n1 n0); intro y.
- elim y; clear y; intro y.
- unfold ge in H2; generalize (le_not_lt n0 n1 (le_S_n n0 n1 H2)); intro;
- exfalso; auto.
- rewrite y; unfold Rge; right; trivial.
- unfold ge in H0; generalize (H0 (S n0) H1 (lt_le_S n0 n1 y)); intro;
- unfold Un_growing in H1;
- apply
- (Rge_trans (Un (S n1)) (Un n1) (Un (S n0))
- (Rle_ge (Un n1) (Un (S n1)) (H1 n1)) H3).
+ intros * Hgrowing Hle.
+ induction Hle as [|p].
+ - apply Rge_refl.
+ - apply Rge_trans with (Un p).
+ + apply Rle_ge, Hgrowing.
+ + apply IHHle.
Qed.
(*********)
diff --git a/theories/Relations/Operators_Properties.v b/theories/Relations/Operators_Properties.v
index 72183f76e6..51be2bd956 100644
--- a/theories/Relations/Operators_Properties.v
+++ b/theories/Relations/Operators_Properties.v
@@ -54,8 +54,7 @@ Section Properties.
Lemma clos_rt_idempotent : inclusion (R*)* R*.
Proof.
red.
- induction 1; auto with sets.
- intros.
+ induction 1 as [x y H|x|x y z H IH H0 IH0]; auto with sets.
apply rt_trans with y; auto with sets.
Qed.
@@ -70,7 +69,7 @@ Section Properties.
inclusion (clos_refl_trans R) (clos_refl_sym_trans R).
Proof.
red.
- induction 1; auto with sets.
+ induction 1 as [x y H|x|x y z H IH H0 IH0]; auto with sets.
apply rst_trans with y; auto with sets.
Qed.
@@ -90,7 +89,7 @@ Section Properties.
clos_trans R x z.
Proof.
induction 1 as [b d H1|b|a b d H1 H2 IH1 IH2]; auto.
- intro H. apply t_trans with (y:=d); auto.
+ intro H. apply (t_trans _ _ _ d); auto.
constructor. auto.
Qed.
@@ -111,7 +110,7 @@ Section Properties.
(clos_refl_sym_trans R).
Proof.
red.
- induction 1; auto with sets.
+ induction 1 as [x y H|x|x y H IH|x y z H IH H0 IH0]; auto with sets.
apply rst_trans with y; auto with sets.
Qed.
@@ -128,7 +127,7 @@ Section Properties.
Lemma clos_t1n_trans : forall x y, clos_trans_1n R x y -> clos_trans R x y.
Proof.
- induction 1.
+ induction 1 as [x y H|x y z H H0 IH0].
- left; assumption.
- right with y; auto.
left; auto.
@@ -136,9 +135,10 @@ Section Properties.
Lemma clos_trans_t1n : forall x y, clos_trans R x y -> clos_trans_1n R x y.
Proof.
- induction 1.
+ induction 1 as [x y H|x y z H IHclos_trans1 H0 IHclos_trans2].
- left; assumption.
- - generalize IHclos_trans2; clear IHclos_trans2; induction IHclos_trans1.
+ - generalize IHclos_trans2; clear IHclos_trans2.
+ induction IHclos_trans1 as [x y H1|x y z0 H1 ? IHIHclos_trans1].
+ right with y; auto.
+ right with y; auto.
eapply IHIHclos_trans1; auto.
@@ -157,7 +157,7 @@ Section Properties.
Lemma clos_tn1_trans : forall x y, clos_trans_n1 R x y -> clos_trans R x y.
Proof.
- induction 1.
+ induction 1 as [y H|y z H H0 ?].
- left; assumption.
- right with y; auto.
left; assumption.
@@ -165,13 +165,13 @@ Section Properties.
Lemma clos_trans_tn1 : forall x y, clos_trans R x y -> clos_trans_n1 R x y.
Proof.
- induction 1.
+ induction 1 as [x y H|x y z H IHclos_trans1 H0 IHclos_trans2].
- left; assumption.
- elim IHclos_trans2.
+ intro y0; right with y.
* auto.
* auto.
- + intros.
+ + intro y0; intros.
right with y0; auto.
Qed.
@@ -201,7 +201,7 @@ Section Properties.
Lemma clos_rt1n_rt : forall x y,
clos_refl_trans_1n R x y -> clos_refl_trans R x y.
Proof.
- induction 1.
+ induction 1 as [|x y z].
- constructor 2.
- constructor 3 with y; auto.
constructor 1; auto.
@@ -210,14 +210,14 @@ Section Properties.
Lemma clos_rt_rt1n : forall x y,
clos_refl_trans R x y -> clos_refl_trans_1n R x y.
Proof.
- induction 1.
+ induction 1 as [| |x y z H IHclos_refl_trans1 H0 IHclos_refl_trans2].
- apply clos_rt1n_step; assumption.
- left.
- generalize IHclos_refl_trans2; clear IHclos_refl_trans2;
- induction IHclos_refl_trans1; auto.
+ induction IHclos_refl_trans1 as [|x y z0 H1 ? IH]; auto.
right with y; auto.
- eapply IHIHclos_refl_trans1; auto.
+ eapply IH; auto.
apply clos_rt1n_rt; auto.
Qed.
@@ -235,7 +235,7 @@ Section Properties.
Lemma clos_rtn1_rt : forall x y,
clos_refl_trans_n1 R x y -> clos_refl_trans R x y.
Proof.
- induction 1.
+ induction 1 as [|y z].
- constructor 2.
- constructor 3 with y; auto.
constructor 1; assumption.
@@ -244,11 +244,11 @@ Section Properties.
Lemma clos_rt_rtn1 : forall x y,
clos_refl_trans R x y -> clos_refl_trans_n1 R x y.
Proof.
- induction 1.
+ induction 1 as [| |x y z H1 IH1 H2 IH2].
- apply clos_rtn1_step; auto.
- left.
- - elim IHclos_refl_trans2; auto.
- intros.
+ - elim IH2; auto.
+ intro y0; intros.
right with y0; auto.
Qed.
@@ -267,16 +267,16 @@ Section Properties.
(forall y z:A, clos_refl_trans R x y -> P y -> R y z -> P z) ->
forall z:A, clos_refl_trans R x z -> P z.
Proof.
- intros.
+ intros x P H H0 z H1.
revert H H0.
- induction H1; intros; auto with sets.
- - apply H1 with x; auto with sets.
+ induction H1 as [x| |x y z H1 IH1 H2 IH2]; intros HP HIS; auto with sets.
+ - apply HIS with x; auto with sets.
- - apply IHclos_refl_trans2.
- + apply IHclos_refl_trans1; auto with sets.
+ - apply IH2.
+ + apply IH1; auto with sets.
- + intros.
- apply H0 with y0; auto with sets.
+ + intro y0; intros;
+ apply HIS with y0; auto with sets.
apply rt_trans with y; auto with sets.
Qed.
@@ -286,7 +286,7 @@ Section Properties.
P z ->
(forall x y, R x y -> clos_refl_trans_1n R y z -> P y -> P x) ->
forall x, clos_refl_trans_1n R x z -> P x.
- induction 3; auto.
+ intros P z H H0 x; induction 1 as [|x y z]; auto.
apply H0 with y; auto.
Qed.
@@ -309,7 +309,7 @@ Section Properties.
Lemma clos_rst1n_rst : forall x y,
clos_refl_sym_trans_1n R x y -> clos_refl_sym_trans R x y.
Proof.
- induction 1.
+ induction 1 as [|x y z H].
- constructor 2.
- constructor 4 with y; auto.
case H;[constructor 1|constructor 3; constructor 1]; auto.
@@ -317,7 +317,7 @@ Section Properties.
Lemma clos_rst1n_trans : forall x y z, clos_refl_sym_trans_1n R x y ->
clos_refl_sym_trans_1n R y z -> clos_refl_sym_trans_1n R x z.
- induction 1.
+ induction 1 as [|x y z0].
- auto.
- intros; right with y; eauto.
Qed.
@@ -335,7 +335,7 @@ Section Properties.
Lemma clos_rst_rst1n : forall x y,
clos_refl_sym_trans R x y -> clos_refl_sym_trans_1n R x y.
- induction 1.
+ induction 1 as [x y| | |].
- constructor 2 with y; auto.
constructor 1.
- constructor 1.
@@ -357,7 +357,7 @@ Section Properties.
Lemma clos_rstn1_rst : forall x y,
clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans R x y.
Proof.
- induction 1.
+ induction 1 as [|y z H].
- constructor 2.
- constructor 4 with y; auto.
case H;[constructor 1|constructor 3; constructor 1]; auto.
@@ -367,10 +367,9 @@ Section Properties.
clos_refl_sym_trans_n1 R y z -> clos_refl_sym_trans_n1 R x z.
Proof.
intros x y z H1 H2.
- induction H2.
+ induction H2 as [|y0 z].
- auto.
- - intros.
- right with y0; eauto.
+ - right with y0; eauto.
Qed.
Lemma clos_rstn1_sym : forall x y, clos_refl_sym_trans_n1 R x y ->
@@ -387,7 +386,7 @@ Section Properties.
Lemma clos_rst_rstn1 : forall x y,
clos_refl_sym_trans R x y -> clos_refl_sym_trans_n1 R x y.
Proof.
- induction 1.
+ induction 1 as [x| | |].
- constructor 2 with x; auto.
constructor 1.
- constructor 1.
diff --git a/theories/Relations/Relations.v b/theories/Relations/Relations.v
index 0a5128f093..dea76694f3 100644
--- a/theories/Relations/Relations.v
+++ b/theories/Relations/Relations.v
@@ -16,16 +16,16 @@ Lemma inverse_image_of_equivalence :
forall (A B:Type) (f:A -> B) (r:relation B),
equivalence B r -> equivalence A (fun x y:A => r (f x) (f y)).
Proof.
- intros; split; elim H; red; auto.
+ intros A B f r H; split; elim H; red; auto.
intros _ equiv_trans _ x y z H0 H1; apply equiv_trans with (f y); assumption.
Qed.
Lemma inverse_image_of_eq :
forall (A B:Type) (f:A -> B), equivalence A (fun x y:A => f x = f y).
Proof.
- split; red;
+ intros A B f; split; red;
[ (* reflexivity *) reflexivity
- | (* transitivity *) intros; transitivity (f y); assumption
+ | (* transitivity *) intros x y z; transitivity (f y); assumption
| (* symmetry *) intros; symmetry ; assumption ].
Qed.
diff --git a/theories/Setoids/Setoid.v b/theories/Setoids/Setoid.v
index b10c4f3768..cec1033fdf 100644
--- a/theories/Setoids/Setoid.v
+++ b/theories/Setoids/Setoid.v
@@ -33,7 +33,7 @@ Defined.
Definition Seq_trans A Aeq (s : Setoid_Theory A Aeq) : forall x y z:A, Aeq x y -> Aeq y z -> Aeq x z.
Proof.
- unfold Setoid_Theory in s. intros ; transitivity y ; assumption.
+ unfold Setoid_Theory in s. intros x y z H0 H1 ; transitivity y ; assumption.
Defined.
(** Some tactics for manipulating Setoid Theory not officially
diff --git a/theories/Structures/GenericMinMax.v b/theories/Structures/GenericMinMax.v
index 8d20ce77f9..1af6aebec6 100644
--- a/theories/Structures/GenericMinMax.v
+++ b/theories/Structures/GenericMinMax.v
@@ -629,9 +629,9 @@ Module TOMaxEqDec_to_Compare
if eq_dec x y then Eq
else if eq_dec (M.max x y) y then Lt else Gt.
- Lemma compare_spec : forall x y, CompSpec eq lt x y (compare x y).
+ Lemma compare_spec x y : CompSpec eq lt x y (compare x y).
Proof.
- intros; unfold compare; repeat destruct eq_dec; auto; constructor.
+ unfold compare; repeat destruct eq_dec; auto; constructor.
- destruct (lt_total x y); auto.
absurd (x==y); auto. transitivity (max x y); auto.
symmetry. apply max_l. rewrite le_lteq; intuition.
diff --git a/theories/Structures/Orders.v b/theories/Structures/Orders.v
index 94938c1d4d..b3e3b6e853 100644
--- a/theories/Structures/Orders.v
+++ b/theories/Structures/Orders.v
@@ -165,7 +165,7 @@ End OT_to_Full.
Module OTF_LtIsTotal (Import O:OrderedTypeFull') <: LtIsTotal O.
Lemma lt_total : forall x y, x<y \/ x==y \/ y<x.
- Proof. intros; destruct (compare_spec x y); auto. Qed.
+ Proof. intros x y; destruct (compare_spec x y); auto. Qed.
End OTF_LtIsTotal.
Module OTF_to_TotalOrder (O:OrderedTypeFull) <: TotalOrder
@@ -250,7 +250,7 @@ Module OTF_to_TTLB (Import O : OrderedTypeFull') <: TotalTransitiveLeBool.
Lemma leb_le : forall x y, leb x y <-> x <= y.
Proof.
- intros. unfold leb. rewrite le_lteq.
+ intros x y. unfold leb. rewrite le_lteq.
destruct (compare_spec x y) as [EQ|LT|GT]; split; auto.
- discriminate.
- intros LE. elim (StrictOrder_Irreflexive x).
@@ -261,7 +261,7 @@ Module OTF_to_TTLB (Import O : OrderedTypeFull') <: TotalTransitiveLeBool.
Lemma leb_total : forall x y, leb x y \/ leb y x.
Proof.
- intros. rewrite 2 leb_le. rewrite 2 le_lteq.
+ intros x y. rewrite 2 leb_le. rewrite 2 le_lteq.
destruct (compare_spec x y); intuition.
Qed.
@@ -302,7 +302,7 @@ Module TTLB_to_OTF (Import O : TotalTransitiveLeBool') <: OrderedTypeFull.
Lemma compare_spec : forall x y, CompSpec eq lt x y (compare x y).
Proof.
- intros. unfold compare.
+ intros x y. unfold compare.
case_eq (x <=? y).
- case_eq (y <=? x).
+ constructor. split; auto.
@@ -352,7 +352,7 @@ Module TTLB_to_OTF (Import O : TotalTransitiveLeBool') <: OrderedTypeFull.
Definition le_lteq : forall x y, le x y <-> lt x y \/ eq x y.
Proof.
- intros.
+ intros x y.
unfold lt, eq, le.
split; [ | intuition ].
intros LE.
diff --git a/theories/Structures/OrdersFacts.v b/theories/Structures/OrdersFacts.v
index d5a76ee69f..4ac54d280a 100644
--- a/theories/Structures/OrdersFacts.v
+++ b/theories/Structures/OrdersFacts.v
@@ -102,10 +102,10 @@ Module OrderedTypeFullFacts (Import O:OrderedTypeFull').
Proof. iorder. Qed.
Lemma le_or_gt : forall x y, x<=y \/ y<x.
- Proof. intros. rewrite le_lteq; destruct (O.compare_spec x y); auto. Qed.
+ Proof. intros x y. rewrite le_lteq; destruct (O.compare_spec x y); auto. Qed.
Lemma lt_or_ge : forall x y, x<y \/ y<=x.
- Proof. intros. rewrite le_lteq; destruct (O.compare_spec x y); iorder. Qed.
+ Proof. intros x y. rewrite le_lteq; destruct (O.compare_spec x y); iorder. Qed.
Lemma eq_is_le_ge : forall x y, x==y <-> x<=y /\ y<=x.
Proof. iorder. Qed.
@@ -175,11 +175,11 @@ Module OrderedTypeFacts (Import O: OrderedType').
Definition eqb x y : bool := if eq_dec x y then true else false.
- Lemma if_eq_dec : forall x y (B:Type)(b b':B),
+ Lemma if_eq_dec x y (B:Type)(b b':B) :
(if eq_dec x y then b else b') =
(match compare x y with Eq => b | _ => b' end).
Proof.
- intros; destruct eq_dec; elim_compare x y; auto; order.
+ destruct eq_dec; elim_compare x y; auto; order.
Qed.
Lemma eqb_alt :
@@ -257,7 +257,7 @@ Definition compare := flip O.compare.
Lemma compare_spec : forall x y, CompSpec eq lt x y (compare x y).
Proof.
-intros; unfold compare, eq, lt, flip.
+intros x y; unfold compare, eq, lt, flip.
destruct (O.compare_spec y x); auto with relations.
Qed.
diff --git a/theories/Structures/OrdersTac.v b/theories/Structures/OrdersTac.v
index 408348139d..1c8073972d 100644
--- a/theories/Structures/OrdersTac.v
+++ b/theories/Structures/OrdersTac.v
@@ -100,9 +100,9 @@ Definition interp_ord o :=
match o with OEQ => O.eq | OLT => O.lt | OLE => O.le end.
Local Notation "#" := interp_ord.
-Lemma trans : forall o o' x y z, #o x y -> #o' y z -> #(o+o') x z.
+Lemma trans o o' x y z : #o x y -> #o' y z -> #(o+o') x z.
Proof.
-destruct o, o'; simpl; intros x y z;
+destruct o, o'; simpl;
rewrite ?P.le_lteq; intuition auto;
subst_eqns; eauto using (StrictOrder_Transitive x y z) with *.
Qed.
diff --git a/theories/ZArith/BinInt.v b/theories/ZArith/BinInt.v
index a566348dd5..9a30e011af 100644
--- a/theories/ZArith/BinInt.v
+++ b/theories/ZArith/BinInt.v
@@ -1297,7 +1297,7 @@ Bind Scope Z_scope with Z.t Z.
(** Re-export Notations *)
-Numeral Notation Z Z.of_num_int Z.to_num_int : Z_scope.
+Number Notation Z Z.of_num_int Z.to_num_int : Z_scope.
Infix "+" := Z.add : Z_scope.
Notation "- x" := (Z.opp x) : Z_scope.
diff --git a/theories/ZArith/BinIntDef.v b/theories/ZArith/BinIntDef.v
index 8464ad1012..69ed101f24 100644
--- a/theories/ZArith/BinIntDef.v
+++ b/theories/ZArith/BinIntDef.v
@@ -668,9 +668,9 @@ Definition lxor a b :=
| neg a, neg b => of_N (N.lxor (Pos.pred_N a) (Pos.pred_N b))
end.
-Numeral Notation Z of_num_int to_num_int : Z_scope.
+Number Notation Z of_num_int to_num_int : Z_scope.
End Z.
(** Re-export the notation for those who just [Import BinIntDef] *)
-Numeral Notation Z Z.of_num_int Z.to_num_int : Z_scope.
+Number Notation Z Z.of_num_int Z.to_num_int : Z_scope.
diff --git a/tools/CoqMakefile.in b/tools/CoqMakefile.in
index 02ababd928..0ebb97d0bf 100644
--- a/tools/CoqMakefile.in
+++ b/tools/CoqMakefile.in
@@ -104,7 +104,7 @@ BEFORE ?=
AFTER ?=
# FIXME this should be generated by Coq (modules already linked by Coq)
-CAMLDONTLINK=str,unix,dynlink,threads,num,zarith
+CAMLDONTLINK=str,unix,dynlink,threads,zarith
# OCaml binaries
CAMLC ?= "$(OCAMLFIND)" ocamlc -c
diff --git a/tools/TimeFileMaker.py b/tools/TimeFileMaker.py
index 12462726e5..72c7465b13 100644
--- a/tools/TimeFileMaker.py
+++ b/tools/TimeFileMaker.py
@@ -101,7 +101,12 @@ def add_output_file_name(parser): return add_file_name_gen(parser, 'OUTPUT_', 'f
def reformat_time_string(time):
- seconds, milliseconds = time.split('.')
+ try:
+ seconds, milliseconds = time.split('.')
+ except ValueError:
+ print('WARNING: Invalid time string: not the right number of dots (.); expected one: %s' % repr(time), file=sys.stderr)
+ seconds, milliseconds = (time + '.').split('.')[:2]
+ if seconds == '': seconds = 0
seconds = int(seconds)
minutes, seconds = divmod(seconds, 60)
return '%dm%02d.%ss' % (minutes, seconds, milliseconds)
diff --git a/toplevel/dune b/toplevel/dune
index 5f10346ac4..98f4ba2edf 100644
--- a/toplevel/dune
+++ b/toplevel/dune
@@ -3,8 +3,7 @@
(public_name coq.toplevel)
(synopsis "Coq's Interactive Shell [terminal-based]")
(wrapped false)
- ; num still here due to some plugins using it
- (libraries num coq.stm))
+ (libraries coq.stm))
; Interp provides the `zarith` library to plugins, we could also use
; -linkall in the plugins file, to be discussed.
diff --git a/user-contrib/Ltac2/g_ltac2.mlg b/user-contrib/Ltac2/g_ltac2.mlg
index bec9632e84..d42a935104 100644
--- a/user-contrib/Ltac2/g_ltac2.mlg
+++ b/user-contrib/Ltac2/g_ltac2.mlg
@@ -371,7 +371,7 @@ GRAMMAR EXTEND Gram
;
syn_level:
[ [ -> { None }
- | ":"; n = Prim.integer -> { Some n }
+ | ":"; n = Prim.natural -> { Some n }
] ]
;
tac2def_syn:
diff --git a/vernac/comFixpoint.ml b/vernac/comFixpoint.ml
index 0f34adf1c7..564d24c1ea 100644
--- a/vernac/comFixpoint.ml
+++ b/vernac/comFixpoint.ml
@@ -247,6 +247,7 @@ let interp_fixpoint ?(check_recursivity=true) ~cofix l :
(EConstr.rel_context * Impargs.manual_implicits * int option) list) =
let (env,_,pl,evd),fix,info = interp_recursive ~program_mode:false ~cofix l in
if check_recursivity then check_recursive true env evd fix;
+ let evd = Pretyping.(solve_remaining_evars all_no_fail_flags env evd) in
let uctx,fix = ground_fixpoint env evd fix in
(fix,pl,uctx,info)
diff --git a/vernac/comInductive.ml b/vernac/comInductive.ml
index 673124296d..452de69b1d 100644
--- a/vernac/comInductive.ml
+++ b/vernac/comInductive.ml
@@ -451,7 +451,7 @@ let interp_params env udecl uparamsl paramsl =
do the unification.
[env_ar_par] is [uparams; inds; params]
*)
-let maybe_unify_params_in env_ar_par sigma ~ninds ~nparams c =
+let maybe_unify_params_in env_ar_par sigma ~ninds ~nparams ~binders:k c =
let is_ind sigma k c = match EConstr.kind sigma c with
| Constr.Rel n ->
(* env is [uparams; inds; params; k other things] *)
@@ -462,14 +462,18 @@ let maybe_unify_params_in env_ar_par sigma ~ninds ~nparams c =
| Constr.App (h,args) when is_ind sigma k h ->
Array.fold_left_i (fun i sigma arg ->
if i >= nparams || not (EConstr.isEvar sigma arg) then sigma
- else Evarconv.unify_delay env sigma arg (EConstr.mkRel (k+nparams-i)))
+ else begin try Evarconv.unify_delay env sigma arg (EConstr.mkRel (k+nparams-i))
+ with Evarconv.UnableToUnify _ ->
+ (* ignore errors, we will get a "Cannot infer ..." error instead *)
+ sigma
+ end)
sigma args
| _ -> Termops.fold_constr_with_full_binders
sigma
(fun d (env,k) -> EConstr.push_rel d env, k+1)
aux envk sigma c
in
- aux (env_ar_par,0) sigma c
+ aux (env_ar_par,k) sigma c
let interp_mutual_inductive_gen env0 ~template udecl (uparamsl,paramsl,indl) notations ~cumulative ~poly ~private_ind finite =
check_all_names_different indl;
@@ -527,7 +531,7 @@ let interp_mutual_inductive_gen env0 ~template udecl (uparamsl,paramsl,indl) not
let sigma =
List.fold_left (fun sigma (_,ctyps,_) ->
List.fold_left (fun sigma ctyp ->
- maybe_unify_params_in env_ar_params sigma ~ninds ~nparams ctyp)
+ maybe_unify_params_in env_ar_params sigma ~ninds ~nparams ~binders:0 ctyp)
sigma ctyps)
sigma constructors
in
diff --git a/vernac/comInductive.mli b/vernac/comInductive.mli
index 9c876787a3..91e8f609d5 100644
--- a/vernac/comInductive.mli
+++ b/vernac/comInductive.mli
@@ -81,8 +81,8 @@ val template_polymorphism_candidate
monomorphic universe context that can be made parametric in its
conclusion sort, if one is given. *)
-val maybe_unify_params_in : Environ.env -> Evd.evar_map -> ninds:int -> nparams:int
+val maybe_unify_params_in : Environ.env -> Evd.evar_map -> ninds:int -> nparams:int -> binders:int
-> EConstr.t -> Evd.evar_map
(** [nparams] is the number of parameters which aren't treated as
uniform, ie the length of params (including letins) where the env
- is [uniform params, inductives, params]. *)
+ is [uniform params, inductives, params, binders]. *)
diff --git a/vernac/proof_using.ml b/vernac/proof_using.ml
index 2130a398e9..95680c2a4e 100644
--- a/vernac/proof_using.ml
+++ b/vernac/proof_using.ml
@@ -41,28 +41,27 @@ let set_of_type env ty =
let full_set env =
List.fold_right Id.Set.add (List.map NamedDecl.get_id (named_context env)) Id.Set.empty
-let rec process_expr env e ty =
+let process_expr env e v_ty =
let rec aux = function
| SsEmpty -> Id.Set.empty
- | SsType -> set_of_type env ty
- | SsSingl { CAst.v = id } -> set_of_id env id
+ | SsType -> v_ty
+ | SsSingl { CAst.v = id } -> set_of_id id
| SsUnion(e1,e2) -> Id.Set.union (aux e1) (aux e2)
| SsSubstr(e1,e2) -> Id.Set.diff (aux e1) (aux e2)
| SsCompl e -> Id.Set.diff (full_set env) (aux e)
| SsFwdClose e -> close_fwd env (aux e)
+ and set_of_id id =
+ if Id.to_string id = "All" then
+ full_set env
+ else if CList.mem_assoc_f Id.equal id !known_names then
+ aux (CList.assoc_f Id.equal id !known_names)
+ else Id.Set.singleton id
in
- aux e
-
-and set_of_id env id =
- if Id.to_string id = "All" then
- List.fold_right Id.Set.add (List.map NamedDecl.get_id (named_context env)) Id.Set.empty
- else if CList.mem_assoc_f Id.equal id !known_names then
- process_expr env (CList.assoc_f Id.equal id !known_names) []
- else Id.Set.singleton id
+ aux e
let process_expr env e ty =
let v_ty = set_of_type env ty in
- let s = Id.Set.union v_ty (process_expr env e ty) in
+ let s = Id.Set.union v_ty (process_expr env e v_ty) in
Id.Set.elements s
let name_set id expr = known_names := (id,expr) :: !known_names
diff --git a/vernac/record.ml b/vernac/record.ml
index d0036e40f9..bd5b71cd6b 100644
--- a/vernac/record.ml
+++ b/vernac/record.ml
@@ -81,12 +81,12 @@ let interp_fields_evars env sigma ~ninds ~nparams impls_env nots l =
(EConstr.push_rel d env, sigma, impl :: uimpls, d::params, impls))
(env, sigma, [], [], impls_env) nots l
in
- let _, sigma = Context.Rel.fold_outside ~init:(env,sigma) (fun f (env,sigma) ->
+ let _, _, sigma = Context.Rel.fold_outside ~init:(env,0,sigma) (fun f (env,k,sigma) ->
let sigma = RelDecl.fold_constr (fun c sigma ->
- ComInductive.maybe_unify_params_in env sigma ~ninds ~nparams c)
+ ComInductive.maybe_unify_params_in env sigma ~ninds ~nparams ~binders:k c)
f sigma
in
- EConstr.push_rel f env, sigma)
+ EConstr.push_rel f env, k+1, sigma)
newfs
in
sigma, (impls, newfs)
diff --git a/vernac/vernacentries.ml b/vernac/vernacentries.ml
index 6a4c2a626d..fba6800729 100644
--- a/vernac/vernacentries.ml
+++ b/vernac/vernacentries.ml
@@ -1646,7 +1646,7 @@ let query_command_selector ?loc = function
| _ -> user_err ?loc ~hdr:"query_command_selector"
(str "Query commands only support the single numbered goal selector.")
-let vernac_check_may_eval ~pstate ~atts redexp glopt rc =
+let vernac_check_may_eval ~pstate redexp glopt rc =
let glopt = query_command_selector glopt in
let sigma, env = get_current_context_of_args ~pstate glopt in
let sigma, c = Constrintern.interp_open_constr ~expected_type:Pretyping.UnknownIfTermOrType env sigma rc in
@@ -1746,7 +1746,7 @@ let print_about_hyp_globs ~pstate ?loc ref_or_by_not udecl glopt =
let sigma, env = get_current_or_global_context ~pstate in
Prettyp.print_about env sigma ref_or_by_not udecl
-let vernac_print ~pstate ~atts =
+let vernac_print ~pstate =
let sigma, env = get_current_or_global_context ~pstate in
function
| PrintTypingFlags -> pr_typing_flags (Environ.typing_flags (Global.env ()))
@@ -2207,8 +2207,9 @@ let translate_vernac ~atts v = let open Vernacextend in match v with
vernac_print_option key)
| VernacCheckMayEval (r,g,c) ->
VtReadProofOpt(fun ~pstate ->
+ unsupported_attributes atts;
Feedback.msg_notice @@
- vernac_check_may_eval ~pstate ~atts r g c)
+ vernac_check_may_eval ~pstate r g c)
| VernacDeclareReduction (s,r) ->
VtDefault(fun () ->
with_locality ~atts vernac_declare_reduction s r)
@@ -2218,13 +2219,15 @@ let translate_vernac ~atts v = let open Vernacextend in match v with
Feedback.msg_notice @@ vernac_global_check c)
| VernacPrint p ->
VtReadProofOpt(fun ~pstate ->
- Feedback.msg_notice @@ vernac_print ~pstate ~atts p)
+ unsupported_attributes atts;
+ Feedback.msg_notice @@ vernac_print ~pstate p)
| VernacSearch (s,g,r) ->
VtReadProofOpt(
unsupported_attributes atts;
vernac_search ~atts s g r)
- | VernacLocate l -> unsupported_attributes atts;
+ | VernacLocate l ->
VtReadProofOpt(fun ~pstate ->
+ unsupported_attributes atts;
Feedback.msg_notice @@ vernac_locate ~pstate l)
| VernacRegister (qid, r) ->
VtNoProof(fun () ->