簡體   English   中英

向 Coq 添加一個斷言及其否定

[英]Add an assertion and its negation to Coq

我想證明以下定理:

Theorem T1 : forall s x,
  Ps s x -> PPs s x /\ ~IPs s x \/ ~PPs s x /\ IPs s x.

其中 Ps 是原語,PPs 和 IPs 定義如下(F 也是原語):

Definition PPs x y := Ps x y /\ ~ F y x.
Definition IPs x y := Ps x y /\ F y x.

所以我想要一個定理,說明如果 Ps sx 那么我們有 PPs sx x 或 IPs sx(我不會如何在 Coq 中編寫 XOR 運算符,所以我分解了它)。

現在,我想在關於命題 F x s 的證明中引入一個假設。 我想要它和它的否定(不是同時),這樣我就可以很容易地證明我的定理。 但是,我不知道如何做到這一點。 所以我的問題是如何證明假設一個新命題,然后它的否定?

(如有必要,請隨時更改標題。我不知道。)

如果我理解正確,您正在尋找排中律。 因此,您想假設F xs \/ ~ F xs並在每種情況下進行不同的推理。

如果您知道F xs是可判定的,例如如果F xs : bool ,則析取是可證明的,您可以將其放入上下文的一種方法如下。

Lemma name : ... .
Proof.
  ...
  destruct (F x s) eqn:eF.
  - (* assume F x s = true *)  admit.
  - (* assume F x s = false *) admit.

如果您不知道F xs是可判定的,這是F xs : Prop的標准,並且您沒有其他假設,那么您可以通過假設排中律來解決。 這不是 Coq 基本理論的一部分,但它是可以接受的:

Require Import Classical.
Check classic.
(* classic : forall P : Prop, P \/ ~ P *)

因此,您的開發可能如下所示:

Require Import Classical.

Lemma name : ... .
Proof.
  ...
  destruct (classic (F x s)) as [yesF|notF].
  - (* assume F x s *) admit.
  - (* assume ~ F x s *) admit.

暫無
暫無

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

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