コンテキスト:私はSoftware Foundationsの演習で取り組んでいます。しかし、変数のインスタンスを見つけることができません
negb (evenb (S n')) = evenb (S (S n'))
私はrewrite -> neg_move
をステップ実行してみてください:
Theorem neg_move : forall x y : bool,
x = negb y -> negb x = y.
Proof. Admitted.
Theorem evenb_n__oddb_Sn : forall n : nat,
evenb n = negb (evenb (S n)).
Proof.
intros n. induction n as [| n'].
Case "n = 0".
simpl. reflexivity.
Case "n = S n'".
rewrite -> neg_move.
は、最後の行の前に、私のサブゴールはこれです:
evenb (S n') = negb (evenb (S (S n')))
そして私はこれにそれを変換したいですこのエラーが発生します。
Error: Unable to find an instance for the variable y.
これは本当にシンプルだと確信していますが、何が間違っていますか? (私が完全に間違っていない限り、evenb_n__oddb_Sn
を解決するために何かを放棄しないでください)。
「変数* y *のインスタンスを見つけることができません」というフレーズは、Coqが* neg_move *型の変数* y *を代入する値を見つけることができないことを意味します。条件の前件を含む* neg_move *のパラメータを明示的にインスタンス化することでこの問題を解決できます(インスタンス化されていない場合はサブゴールとして生成されます)。しかし、条件文は一般に*適用されることを意図しています*。実際、* neg_move *はあなたの帰納仮説に適用してより有用な仮説を得ることができます。 – danportin