我想以某种方式限制构造函数在归纳定义中允许接受的输入类型。假设我想这样定义二进制数: | O : bin | S : bin -> bin.这里的思想是,D通过在末尾添加一个零来加倍一个非零数,S采用一个以零为最后一位的数字,并将最后一位转换为一。这意味着以下是合法的数字:D (S 0)而以下内容则不是:D 0
我想定义一个归纳类型Foo,构造函数接受一些属性作为参数。我希望这些属性依赖于我当前定义的类型的归纳参数。我希望能够使用一些接受Foo类型对象的递归函数bar从这些属性中收集一些数据。但是,我不知道有什么方法可以声明这两个,这样Coq就会接受它们的定义。我希望能够写出这样的代码: Inductive Foo : Set (* or Type *)
据我所知,Coq策略是在幕后编译成一些函数式程序的,但我真的不确定这是怎么回事。我非常确定这不是我想要做的。 我想要做的是类似下面的Idris程序。prf_add_assoc' in Refl 更具体地说,我需要prf1、prf2和prf3,它们是我通过递归调用在Coq中,两个证明卡在一个lambda中,我不确定这是怎么发生的。我看到Coq<e