我可以申报';多态性';Coq中的公理?
我想要一个axiom,它接受我可以申报';多态性';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时,不能在冒号的左侧写变量名。您
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)。