Bối cảnh: Tôi đang thực hiện các bài tập trong Software Foundations.Không thể tìm thấy một phiên bản cho biến
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.
Trước khi dòng cuối cùng, subgoal của tôi là thế này:
evenb (S n') = negb (evenb (S (S n')))
Và tôi muốn biến nó thành này:
negb (evenb (S n')) = evenb (S (S n'))
Khi tôi cố gắng bước qua rewrite -> neg_move
, tuy nhiên, nó tạo ra lỗi này:
Error: Unable to find an instance for the variable y.
Tôi chắc chắn điều này thực sự đơn giản, nhưng tôi đang làm gì sai? (Xin vui lòng không cung cấp bất cứ điều gì để giải quyết evenb_n__oddb_Sn
, trừ khi tôi đang làm nó hoàn toàn sai).
Cụm từ "không thể tìm thấy cá thể cho biến * y *" có nghĩa là Coq không thể tìm thấy giá trị để thay thế cho biến * y * trong loại * neg_move *. Bạn có thể giải quyết vấn đề này bằng cách khởi tạo một cách rõ ràng các tham số của * neg_move *, bao gồm tiền tố của điều kiện (sẽ được tạo dưới dạng subgoal nếu không được uninstantiated). Tuy nhiên, các câu lệnh có điều kiện thường có nghĩa là * được áp dụng *; trên thực tế, * neg_move * có thể được áp dụng cho giả thuyết cảm ứng của bạn để có được giả thuyết hữu ích hơn. – danportin