@@ -33,22 +33,14 @@ declaration:
34.. code-block:: idris
34.. code-block:: idris
37 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
36 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
39−The ``total`` annotation means that we aim to write a function which
40−passes the totality checker; i.e. it will terminate on all possible
41−well-typed inputs. This is important for proofs, since it provides a
42−guarantee that the proof is valid in *all* cases, not just those for
43−which it happens to be well-defined.
45−To create a template definition for the proof, press ``\d`` the
38+To create a template definition for the proof, press ``\d`` (or the
46equivalent in your editor of choice) on the line with the type
39equivalent in your editor of choice) on the line with the type
47declaration. You should see:
40declaration. You should see:
49.. code-block:: idris
42.. code-block:: idris
52 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
44 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
53 plus_commutes n m = ?plus_commutes_rhs
45 plus_commutes n m = ?plus_commutes_rhs
@@ -59,7 +51,6 @@ should see:
60.. code-block:: idris
52.. code-block:: idris
63 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
54 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
64 plus_commutes Z m = ?plus_commutes_rhs_1
55 plus_commutes Z m = ?plus_commutes_rhs_1
65 plus_commutes (S k) m = ?plus_commutes_rhs_2
56 plus_commutes (S k) m = ?plus_commutes_rhs_2
@@ -91,7 +82,6 @@ It is a good idea to give these slightly more meaningful names:
92.. code-block:: idris
83.. code-block:: idris
95 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
85 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
96 plus_commutes Z m = ?plus_commutes_Z
86 plus_commutes Z m = ?plus_commutes_Z
97 plus_commutes (S k) m = ?plus_commutes_S
87 plus_commutes (S k) m = ?plus_commutes_S
@@ -107,7 +97,6 @@ yields:
108 plus_commutes_Z : m = plus m 0
98 plus_commutes_Z : m = plus m 0
111 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
100 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
112 plus_commutes Z m = plus_commutes_Z
101 plus_commutes Z m = plus_commutes_Z
113 plus_commutes (S k) m = ?plus_commutes_S
102 plus_commutes (S k) m = ?plus_commutes_S
@@ -280,7 +269,6 @@ state:
281.. code-block:: idris
270.. code-block:: idris
284 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
272 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
285 plus_commutes Z m = plus_commutes_Z
273 plus_commutes Z m = plus_commutes_Z
286 plus_commutes (S k) m = ?plus_commutes_S
274 plus_commutes (S k) m = ?plus_commutes_S
@@ -301,7 +289,6 @@ follows:
302.. code-block:: idris
290.. code-block:: idris
305 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
292 plus_commutes : (n : Nat) -> (m : Nat) -> n + m = m + n
306 plus_commutes Z m = plus_commutes_Z
293 plus_commutes Z m = plus_commutes_Z
307 plus_commutes (S k) m = rewrite plus_commutes k m in ?plus_commutes_S
294 plus_commutes (S k) m = rewrite plus_commutes k m in ?plus_commutes_S
@@ -340,13 +327,21 @@ defined by matching on its first argument. The complete definition is:
341.. code-block:: idris
328.. code-block:: idris
343 plus_commutes_S : (k : Nat) -> (m : Nat) -> S (plus m k) = plus m (S k)
331 plus_commutes_S : (k : Nat) -> (m : Nat) -> S (plus m k) = plus m (S k)
344 plus_commutes_S k Z = Refl
332 plus_commutes_S k Z = Refl
345 plus_commutes_S k (S j) = rewrite plus_commutes_S k j in Refl
333 plus_commutes_S k (S j) = rewrite plus_commutes_S k j in Refl
347−All metavariables have now been solved, and ``plus_commutes`` has a
335+All metavariables have now been solved,
337+The ``total`` annotation means that we require the final function to
338+pass the totality checker; i.e. it will terminate on all possible
339+well-typed inputs. This is important for proofs, since it provides a
340+guarantee that the proof is valid in *all* cases, not just those for
341+which it happens to be well-defined.
348−``total`` annotation, so we have completed the proof of commutativity of
343+Now that ``plus_commutes`` has a ``total`` annotation, we have completed the
349−addition on natural numbers.
344+proof of commutativity of addition on natural numbers.
352 Note that the left and right hand sides of the equality have been
347 Note that the left and right hand sides of the equality have been