我想以某种方式限制允许构造函数在归纳定义中采用的输入类型。假设我想说定义二进制数如下:
Inductive bin : Type :=
| O : bin
| D : bin -> bin
| S : bin -> bin.
这里的想法是 D 通过在末尾添加一个零来将非零数字加倍,而 S 将一个零作为最后一位数字并将最后一位数字变为 1。这意味着以下是合法数字:
S 0
D (S 0)
D (D (S 0))
而以下不是:
S (S 0)
D 0
有没有办法以干净的方式在归纳定义中强制执行此类限制?