Coq:通过模式匹配在其参数的arity上定义函数

时间:2017-04-22 19:03:10

标签: function match definition coq

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

new_i = csv.DictWriter(file_obj, fieldnames)
new_i.writeheader()
for item in new_list:
  new_i.writerow(item)

如您所见,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。为什么?如果我在匹配子句w / False

中替换y,结果将保持不变

1 个答案:

答案 0 :(得分:3)

你想要的功能不能以你期望的类型存在于Gallina中。

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

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

Gallina无法match进入Type。有一些方法可以处理n-ary函数,这样你就可以检查它们的arity,但是它涉及静态捕获arity的依赖类型。例如,对于统一的n元函数:

https://coq.inria.fr/library/Coq.Numbers.NaryFunctions.html