Tôi đang ở Coq cố gắng để chứng minh rằngÁp dụng một hàm cho cả hai mặt của sự bình đẳng trong Coq?
Theorem evenb_n__oddb_Sn : ∀n : nat,
evenb n = negb (evenb (S n)).
Tôi đang sử dụng cảm ứng trên n
. Trường hợp cơ sở là tầm thường, vì vậy tôi đang ở trường hợp quy nạp và mục tiêu của tôi trông giống như:
k : nat
IHk : evenb k = negb (evenb (S k))
============================
evenb (S k) = negb (evenb (S (S k)))
Bây giờ tất nhiên có một tiên đề cơ bản của các chức năng đó khẳng định
a = b -> f a = f b
Đối với tất cả các chức năng f : A -> B
. Vì vậy, tôi có thể áp dụng negb
cho cả hai bên, trong đó sẽ cho tôi
k : nat
IHk : evenb k = negb (evenb (S k))
============================
negb (evenb (S k)) = negb (negb (evenb (S (S k))))
nào sẽ cho phép tôi sử dụng giả thuyết quy nạp của tôi từ phải sang trái, các phủ nhận về quyền sẽ triệt tiêu lẫn nhau, và các defintion của evenb
sẽ hoàn thành bằng chứng.
Bây giờ, có thể có cách tốt hơn để chứng minh định lý cụ thể này (chỉnh sửa: có, tôi đã làm theo cách khác), nhưng như vậy nói chung có vẻ giống như một điều hữu ích để làm, cách để sửa đổi một sự bình đẳng là gì mục tiêu trong Coq bằng cách áp dụng một chức năng cho cả hai bên?
Lưu ý: Tôi nhận thấy rằng điều này sẽ không hoạt động đối với bất kỳ chức năng tùy ý nào: ví dụ: bạn có thể sử dụng nó để chứng minh rằng -1 = 1
bằng cách áp dụng abs
cho cả hai bên. Tuy nhiên, nó giữ cho bất kỳ chức năng tiêm (một trong đó f a = f b -> a = b
), mà negb
là. Có lẽ một câu hỏi tốt hơn để hỏi, sau đó, được đưa ra một chức năng mà hoạt động trên một đề xuất (ví dụ, negb x = negb y -> x = y
), làm thế nào tôi có thể sử dụng chức năng đó để sửa đổi mục tiêu hiện tại?