是否有可能为教会编码的纳特导出归纳?

时间:2018-01-12 20:41:36

标签: haskell functional-programming coq agda idris

我只是想知道是否有可能在Idris,Agda,Coq和类似的教堂编码的Nat类型上获得归纳。请注意,这与在CoC上做这个问题是一个不同的问题(已知这是不可能的),因为我们对这些问题有更多的表达能力(例如,我们能够提取Sigma的第二个元素)。

这是关于Idris的一个糟糕的证明草图(有很多语法问题):

CN : Type
CN = (t : Type) -> t -> (t -> t) -> t

CS : CN -> CN
CS n t z s = s (n t z s)

CZ : CN
CZ t z s = z

ind :
  (p : CN -> Type) ->
  (z : p CZ) ->
  (s : (n : CN) -> p n -> p (CS n)) ->
  (n : CN) ->
  p n

ind p z s n =
  let base_case  = the (x : CN ** p x) (CZ ** z) 
      step_case  = the ((x : CN ** p x) -> (y : CN ** p y)) (\ (n ** pf) => (CS n ** s n pf))
      result     = the (x : CN ** p x) (n (x : CN ** p x) base_case step_case)
      fst_result = fst result
      snd_result = snd result
      fst_is_n   = the (fst_result = n) ?fst_is_n
  in  ?wat

我通过构建从CZ ** z一直到CS (CS ... CZ) ** s (s ... z)的Sigma类型来实现这一目标。问题是,虽然我知道它的第一个元素将等于n,但我不确定如何证明它。

3 个答案:

答案 0 :(得分:9)

这是一个related question我问过同伦类型理论。我在这里也有点深入,所以这一切都带着一点点盐。

我已证明CN is isomorphic to Nat iff the free theorm for CN holds。此外,众所周知there are no free theorems under the law of excluded middle(在HoTT中)。即使用LEM,您可以定义foo : CN foo T z s = if T is Bool then not z else z ,例如

ind

这不是一个适当的教会,并且不会被归纳原则所涵盖。因为排除的中间和HoTT与你所询问的类型理论是一致的(据我所知),因此不会有char str[128] char str[512] char str[2048] 的证明。

答案 1 :(得分:8)

已知不可证明,因为存在结构演算的模型,其中自然数的不可预测编码不是初始的(即不满足归纳)。 它确实遵循Phil Wadler很久以前所展示的关系参数。因此,将Wadler与内部关系参数相结合,ala Moulin和Bernardy可以做到这一点。

答案 2 :(得分:3)

我认为没有正式的证据证明这是不可能的,但一般都认为它无法完成。参见例如this paper by Aaron Stump的介绍。