aboutsummaryrefslogtreecommitdiff
path: root/doc/sphinx/addendum/program.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/sphinx/addendum/program.rst')
-rw-r--r--doc/sphinx/addendum/program.rst36
1 files changed, 15 insertions, 21 deletions
diff --git a/doc/sphinx/addendum/program.rst b/doc/sphinx/addendum/program.rst
index 28fe68d78d..fad45995d2 100644
--- a/doc/sphinx/addendum/program.rst
+++ b/doc/sphinx/addendum/program.rst
@@ -1,6 +1,3 @@
-.. include:: ../preamble.rst
-.. include:: ../replaces.rst
-
.. this should be just "_program", but refs to it don't work
.. _programs:
@@ -18,7 +15,7 @@ program as in a regular functional programming language whilst using
as rich a specification as desired and proving that the code meets the
specification using the whole |Coq| proof apparatus. This is done using
a technique originating from the “Predicate subtyping” mechanism of
-PVS :cite:`Rushby98`, which generates type-checking conditions while typing a
+PVS :cite:`Rushby98`, which generates type checking conditions while typing a
term constrained to a particular type. Here we insert existential
variables in the term, which must be filled with proofs to get a
complete |Coq| term. |Program| replaces the |Program| tactic by Catherine
@@ -45,7 +42,7 @@ be considered as an object of type :g:`{x : T | P}` for any well-formed
will generate an obligation for every such coercion. In the other direction,
Russell will automatically insert a projection.
-Another distinction is the treatment of pattern-matching. Apart from
+Another distinction is the treatment of pattern matching. Apart from
the following differences, it is equivalent to the standard match
operation (see :ref:`extendedpatternmatching`).
@@ -72,8 +69,8 @@ operation (see :ref:`extendedpatternmatching`).
This permits to get the proper equalities in the context of proof
obligations inside clauses, without which reasoning is very limited.
-+ Generation of inequalities. If a pattern intersects with a previous
- one, an inequality is added in the context of the second branch. See
++ Generation of disequalities. If a pattern intersects with a previous
+ one, a disequality is added in the context of the second branch. See
for example the definition of div2 below, where the second branch is
typed in a context where :g:`∀ p, _ <> S (S p)`.
+ Coercion. If the object being matched is coercible to an inductive
@@ -84,15 +81,15 @@ operation (see :ref:`extendedpatternmatching`).
There are options to control the generation of equalities and
coercions.
-.. opt:: Program Cases
+.. flag:: Program Cases
- This controls the special treatment of pattern-matching generating equalities
- and inequalities when using |Program| (it is on by default). All
+ This controls the special treatment of pattern matching generating equalities
+ and disequalities when using |Program| (it is on by default). All
pattern-matches and let-patterns are handled using the standard algorithm
of |Coq| (see :ref:`extendedpatternmatching`) when this option is
deactivated.
-.. opt:: Program Generalized Coercion
+.. flag:: Program Generalized Coercion
This controls the coercion of general inductive types when using |Program|
(the option is on by default). Coercion of subset types and pairs is still
@@ -104,8 +101,8 @@ Syntactic control over equalities
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To give more control over the generation of equalities, the
-typechecker will fall back directly to |Coq|’s usual typing of dependent
-pattern-matching if a return or in clause is specified. Likewise, the
+type checker will fall back directly to |Coq|’s usual typing of dependent
+pattern matching if a return or in clause is specified. Likewise, the
if construct is not treated specially by |Program| so boolean tests in
the code are not automatically reflected in the obligations. One can
use the :g:`dec` combinator to get the correct hypotheses as in:
@@ -175,7 +172,7 @@ Program Definition
.. TODO refer to production in alias
-See also: Sections :ref:`vernac-controlling-the-reduction-strategies`, :tacn:`unfold`
+.. seealso:: Sections :ref:`vernac-controlling-the-reduction-strategies`, :tacn:`unfold`
.. _program_fixpoint:
@@ -213,7 +210,7 @@ with mutually recursive definitions too.
end.
Here we have one obligation for each branch (branches for :g:`0` and
-``(S 0)`` are automatically generated by the pattern-matching
+``(S 0)`` are automatically generated by the pattern matching
compilation algorithm).
.. coqtop:: all
@@ -320,19 +317,19 @@ optional tactic is replaced by the default one if not specified.
Shows the term that will be fed to the kernel once the obligations
are solved. Useful for debugging.
-.. opt:: Transparent Obligations
+.. flag:: Transparent Obligations
Controls whether all obligations should be declared as transparent
(the default), or if the system should infer which obligations can be
declared opaque.
-.. opt:: Hide Obligations
+.. flag:: Hide Obligations
Controls whether obligations appearing in the
term should be hidden as implicit arguments of the special
constantProgram.Tactics.obligation.
-.. opt:: Shrink Obligations
+.. flag:: Shrink Obligations
*Deprecated since 8.7*
@@ -378,6 +375,3 @@ Frequently Asked Questions
using lazy evaluation;
#. Mutual recursion on the underlying inductive type isn’t possible
anymore, but nested mutual recursion is always possible.
-
-.. bibliography:: ../biblio.bib
- :keyprefix: p-