2014-11-21 15 views
6

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?

Trả lời

2

Dường như bạn chỉ muốn chiến thuật apply. Nếu bạn có bổ đề negb_inj : forall b c, negb b = negb c -> b = c, hãy thực hiện apply negb_inj trên mục tiêu của bạn sẽ cung cấp cho bạn chính xác điều đó.

Các vấn đề liên quan