Відповіді:
Щоб продемонструвати відповідь Марка, розгляньте наступне підтвердження t
вашої заяви, написане Coq. У доказі ми припускаємо, що наведено параметр k
типу nat
. Ми використовуємо k
як значення y
у випадку x = 0
:
Parameter k : nat.
Theorem t : forall x : nat, { y : nat | x <> 0 -> x = S y}.
Proof.
induction x.
exists k; tauto.
induction x.
exists 0; auto.
destruct IHx as [z G].
exists (S z).
intro H.
elim G; auto.
Defined.
Ми можемо довести, що t 0
дорівнює k
:
Theorem A: projT1 (t 0) = k.
Proof.
auto.
Qed.
protT1
Є , тому що t 0
це не тільки натуральне число, але на самому справі натуральне число з доказом того, що 0 <> 0 -> 0 = S y
і projT1
викидає доказ.
Витягнутий код Ocaml для t
, отриманий за допомогою команди, Extraction k
є
(** val t : nat -> nat **)
let rec t = function
| O -> k
| S n0 -> (match n0 with
| O -> O
| S n1 -> S (t n0))
Знову ми можемо побачити t 0
, що дорівнює рівню k
, який був атрибутивно припущеним параметром.