我可以申报';多态性';Coq中的公理?

我可以申报';多态性';Coq中的公理?,coq,Coq,我想要一个axiom,它接受nat或bool并返回nat。差不多 Axiom poly_axiom {A : Set}: A -> nat. 但Coq拒绝接受这样一个“多态性”公理。有办法吗 无关注释:定义这样一个奇怪的公理的目的是使用poly_公理来计算术语t中使用的公理的数量,其中t是类型a,t被“包装”在poly_公理中。在公理poly_公理中还有另一个公理定义了如何减少t。我们也欢迎看到更好的解决方案。与定义s(和定理s等)不同,在声明Axioms时,不能在冒号的左侧写变量名。您

我想要一个axiom,它接受
nat
bool
并返回
nat
。差不多

Axiom poly_axiom {A : Set}: A -> nat.
但Coq拒绝接受这样一个“多态性”公理。有办法吗


无关注释:定义这样一个奇怪的公理的目的是使用poly_公理来计算术语t中使用的公理的数量,其中t是类型a,t被“包装”在poly_公理中。在公理poly_公理中还有另一个公理定义了如何减少t。我们也欢迎看到更好的解决方案。

定义
s(和
定理
s等)不同,在声明
Axiom
s时,不能在冒号的左侧写变量名。您必须对所有使用
,如下所示:

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

我可以问一下,为什么要将一个函数声明为Coq公理来实现这一点吗?@ArthurAzevedoDeAmorim我想象它可能是一个递归函数。然而,我不知道如何展开/模式匹配一系列函数调用,因为它们不是归纳式定义的。例如,在函数f中有“f1 p1>>f2”。假设f1被声明为一个公理,并且有另一个公理指定它的语义,我想计算这个序列中有多少抽象函数。然后,公理poly_公理可以匹配f1 p1并返回1+poly_公理f2(结果f1 p1)。