我想定义一个函数,其行为取决于它的参数是否(至少)是一个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
,结果将保持不变
答案 0 :(得分:3)
你想要的功能不能以你期望的类型存在于Gallina中。
您的功能已被接受,但如果您打印它,您可以看到它的正文是:
rT = fun (y : Type) (_ : y) => False
Gallina无法match
进入Type
。有一些方法可以处理n-ary函数,这样你就可以检查它们的arity,但是它涉及静态捕获arity的依赖类型。例如,对于统一的n元函数: