Chứng minh tautology với coq


12

Hiện tại tôi phải học Coq và không biết làm thế nào để đối phó với or:

Ví dụ, đơn giản như vậy, tôi không thấy cách chứng minh:

Theorem T0: x \/ ~x.

Tôi thực sự sẽ đánh giá cao nó, nếu ai đó có thể giúp tôi.

Để tham khảo tôi sử dụng bảng cheat này .

Cũng là một ví dụ về một bằng chứng tôi có trong đầu: Ở đây để phủ định kép:

Require Import Classical_Prop.

Parameters x: Prop.

Theorem T7: (~~x) -> x. 
intro H. 
apply NNPP. 
exact H. 
Qed.

NNPPKiểu của nó là forall p:Prop, ~ ~ p -> p.vậy, thật gian lận khi sử dụng nó để chứng minh T7. Khi bạn nhập Classical_Propbạn nhận đượcAxiom classic : forall P:Prop, P \/ ~ P.
Anton Trunov

Vì vậy, apply classic.giải quyết mục tiêu của bạn cho T0.
Anton Trunov

Câu trả lời:


14

Bạn không thể chứng minh điều đó trong Coq "vanilla", vì nó dựa trên logic trực giác :

Từ góc độ lý thuyết bằng chứng, logic trực giác là một hạn chế của logic cổ điển trong đó quy luật loại trừ phủ định giữaloại trừ kép không phải là quy tắc logic hợp lệ.

Có một số cách bạn có thể đối phó với một tình huống như thế này.

  • Giới thiệu luật loại trừ giữa như một tiên đề:

    Axiom excluded_middle : forall P:Prop, P \/ ~ P.
    

    Không cần phải chứng minh bất cứ điều gì sau thời điểm này.

  • Giới thiệu một số tiên đề tương đương với luật loại trừ giữa và chứng minh tính tương đương của chúng. Đây chỉ là một vài ví dụ.


Cảm ơn bạn rất nhiều cho đến nay. Tôi không quen thuộc với tất cả mọi thứ bạn đã viết, nhưng sẽ kiểm tra mặc dù. Tôi sử dụng coqIde và trên thực tế cũng có một bằng chứng cho phủ định kép, tôi đã thêm nó vào mô tả vấn đề để rõ ràng hơn sau này. Tôi dự kiến ​​sẽ có một cách tương tự cho vấn đề được đưa ra ở trên. Có lẽ tôi nên bao gồm một ví dụ.
Imago

1
@AntonTrunov bạn cần thêm một số dấu ngoặc đơn vào Axiom peirce: vì nó không phải là luật của Peirce (và thực tế là trivialđể chứng minh).
gallais

@gallais Cảm ơn vì đã phát hiện ra điều đó! Đã sửa.
Anton Trunov

6

Như những người khác đã thông báo cho bạn, tautology của bạn không phải là một tautology trừ khi bạn giả định logic cổ điển. Nhưng vì bạn đang thực hiện các tautology về các giá trị thật có thể quyết định, bạn có thể sử dụng boolthay vì Prop. Sau đó tautology của bạn giữ:

Require Import Bool.

Lemma how_about_bool: forall (p : bool), Is_true (p || negb p).
Proof.
  now intros [|].
Qed.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.