我可以在 Coq 中声明 'polymorphic' 公理吗?

Can I declare a 'polymorphic' axiom in Coq?

我想要一个接受 natbool 和 returns 或 nat 的公理。像

Axiom poly_axiom {A : Set}: A -> nat.

但是 Coq 拒绝接受这样的 'polymorphic' 公理。有什么办法吗?

无关紧要的说明:定义这么奇葩的公理的目的是为了用poly_axiom计算term t中使用的公理个数,其中t的类型为A,t在'wrapped'里面poly_axiom。还有另一个公理定义如何在公理 poly_axiom 内减少 t。也欢迎看到这个问题有更好的解决方法

Definitions(和 Theorems 等)不同,在声明 Axioms 时不能在冒号的左侧写变量名。你必须像这样使用 forall

Axiom poly_axiom : forall {A : Set}, A -> nat.