【发布时间】:2017-01-27 18:41:35
【问题描述】:
这是一个有点理论的问题。我们可以定义fx,但貌似不能定义fx':
Function fx {A} (x:A) (f:A->Type) (g:Type->f x): f x := g (f x).
Definition fx' {A} (x:A) (f:A->Type): f x.
在某种程度上,这是有道理的,因为无法从f 和x 证明f 已经(或将)应用于x。但是我们可以将f 应用到x 以获得Type 类型的东西:
assert (h := f x).
这似乎令人费解:一个人可以将f 应用于x,但仍然无法让y: f x 证明他已经这样做了。
我能想到的唯一解释是:作为一个类型,f x 是一个应用程序,作为一个术语,它只是一个类型。我们不能从类型推断过去的应用程序;同样,我们不能从函数及其潜在参数推断未来的应用程序。至于应用本身(实例),它不是证明中的一个阶段,所以我们不能有它的见证。但我只是猜测。问题:
是否可以定义fx'?如果是,如何;如果不是,为什么(请给出理论上的解释)
【问题讨论】:
-
Function fx在这里不是必需的,Definition fx也可以。 -
是的(我用两者来证明两者都有效)
标签: function definition coq proof