我只是想知道是否有可能在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
,但我不确定如何证明它。
答案 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)
答案 2 :(得分:3)
我认为没有正式的证据证明这是不可能的,但一般都认为它无法完成。参见例如this paper by Aaron Stump的介绍。