COQ:通过模式匹配的函数在其参数的arity上匹配



我想定义一个函数,其行为取决于它的参数是否(至少(是n个位置函数。基本(失败(的尝试是

Definition rT {y:Type}(x:y) := ltac: (match y with
 | _ -> _ -> _ => exact True
 | _ => exact False end).
Check prod: Type -> Type -> Type.
Compute rT prod. (*= False: Prop*)
Print rT. (*rT = fun (y : Type) (_ : y) => False: forall y : Type, y -> Prop*)

如您所见,rT将所有内容都映射到False。为什么?如果我在匹配条款W/type of x

中替换y,则结果保持不变。

您想要的函数在您期望的类型上不能存在。

您的功能已被接受,但是如果您打印它,则可以看到它的身体是:

rT = fun (y : Type) (_ : y) => False

Gallina在Type上无法使用match -ing。有一些方法可以以一种可以检查其敏锐度的方式来处理N- ARY功能,但是它涉及静态捕获ARITY的依赖类型。例如,对于统一的n-ary函数:

https://coq.inria.fr/library/coq.numbers.naryfunctions.html

最新更新