簡體   English   中英

刪除Coq中的所有雙重否定

[英]Remove All Double Negations in Coq

我想系統地刪除所有可能出現在我的假設和目標中的雙重否定。 我知道~~A -> A不是直覺主義邏輯的一部分,但我所采取的課程是經典的,所以我不介意。

我知道所提到的公理可以通過Coq.Logic.Classical_Prop.NNPP訪問,但是這個公理無助於從更復雜的句子中刪除雙重否定,比如說

H : ~ ~ A \\/ (B /\\ ~ C)

我希望能夠將Htac戰術應用於H以便它可以轉化為

H1 : A \\/ (B /\\ ~C)

任何寫這樣的策略或任何其他建議的幫助都非常感謝。

您可以使用rewrite策略,因為它可以在邏輯上下文中重寫邏輯等效,即它可以進行setoid重寫。 首先,您需要以下簡單的引理:

From Coq Require Import Classical_Prop.

Lemma NNP_iff_P (P : Prop) : ~~ P <-> P.
Proof. split; [apply NNPP | intuition]. Qed.

現在,您可以使用NNP_iff_P來實現您的目標:

Section Example.

Context (A B C D : Prop).
Context (H : ~ ~ A \/ (B /\ ~ C)).

Goal ~~ A.
rewrite !NNP_iff_P in *.
Abort.

End Example.

! 意味着“重寫零次或多次,直到不可能重寫”,並且in *表示“在上下文和目標中應用策略”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM