できるだけ早く悪い入力を防ぐことに基づいたプログラミング スタイルを開発しようとしています。たとえば、自然数の先行関数の次のもっともらしい定義の代わりに:
Definition pred1 n :=
match n with
| O => None
| S n => Some n
end.
以下のように書きたいと思います。
Theorem nope n (p : n = O) (q : n <> O) : False.
contradict q.
exact p.
Qed.
Definition pred2 n (q : n <> O) :=
match n with
| S n => n
| O =>
let p := _ in
match nope n p q with end
end.
でも何と交換すればいいのかわからない_
。私の直観は、ブランチassumption : n = O
に利用可能なものがいくつかあるに違いないことを示唆しています。| O =>
Coqは本当にそのような仮定を導入していますか? もしそうなら、その名前は何ですか?