如果我们尝试提取见证人,但是从存在类型的术语中实际上不存在,那会发生什么?


12

给定一个长期t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))的马丁-洛夫的类型理论,什么是价值w(t(0)),这里w是操作者提取存在类型的术语的见证?


我认为您的意思是¬(x=0)
Mark Reitblatt,2010年

是的,马克,谢谢指出,已修复。
一天

Answers:


12

ty.(¬(0=0)0=S(y))y¬(0=0)0=S(y)¬(0=0)0=00=S(0)0=S(1)y


10

为了证明Mark的答案,请考虑以下t用Coq编写的陈述证明。在证明中,我们假定给出k了类型的参数nat。我们使用case k的值:yx = 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 yprojT1扔掉了证明。

所提取的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,这是一个严格假定的参数。


感谢Coq和Andrej中的示例,它阐明了更多内容。
一天
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.