[英]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.