帰納的な定義でコンストラクターが使用できる入力の種類を何らかの形で制限したいと思います。次のように 2 進数を定義するとします。
Inductive bin : Type :=
| O : bin
| D : bin -> bin
| S : bin -> bin.
ここでの考え方は、D は末尾にゼロを追加することでゼロ以外の数値を 2 倍にし、S は最後の桁としてゼロを含む数値を取り、最後の桁を 1 に変換するというものです。これは、以下が有効な数値であることを意味します。
S 0
D (S 0)
D (D (S 0))
次はそうではありません:
S (S 0)
D 0
帰納的な定義でそのような制限をクリーンな方法で強制する方法はありますか?