Answers:
为了证明Mark的答案,请考虑以下t
用Coq编写的陈述证明。在证明中,我们假定给出k
了类型的参数nat
。我们使用case 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
,这是一个严格假定的参数。