2進数の自然数(ビットのリスト)の先行関数を定義しようとしています。関数の入力を、トリミングされた(先行ゼロがない)数値と正の数値(つまり、ゼロの前身について心配する必要がない)に制限したいと思います。
演算子の定義は次のpred
とおりです。
Program Fixpoint pred (nat1: Nat) (H1: is_trim nat1 = True) (H2: is_pos nat1 H1 = True): Nat :=
match nat1 with
| Empt => _
| Fill Zer nat2 => Fill One (pred nat2 H1 H2)
| Fill One nat2 => Fill Zer nat2
end.
私の最初の義務は次のとおりです。
nat1: Nat
H1: is_trim nat1 = True
H2: is_pos nat1 H1 = True
H3: Empt = nat1
______________________________________(1/1)
Nat
しかし、私はそれを解決する方法がわかりません。
矛盾は明らかににありH2
ます。しかし、それはに依存するのでH1
、私はただrewrite nat1
でEmpt
、そして次に(is_pos Empt H1)
ですることはできませんFalse
。
これをどのように証明すればよいですか?