簡體   English   中英

Coq 中的析取三段論策略?

[英]Disjunctive Syllogism tactic in Coq?

我正在學習命題邏輯和推理規則。 析取三段論規則指出,如果我們的前提中有(P 或 Q),並且也有(非 P); 然后我們可以到達Q。

我一生都無法弄清楚如何在 Coq 中做到這一點。 假設我有:

H : A \/ B
H0 : ~ A
______________________________________(1/1)

我應該使用什么策略來達到

H1 : B.

另外,如果有人能與我分享基本推理規則的 Coq 策略等價物,例如 modus tollens 或分離式介紹等,我會很高興。是否有我可以使用的插件?

Coq內置了這種戰術,但幸運的是你可以定義自己的戰術。 請注意

destruct H as [H1 | H1]; [contradiction |].

H1 : B放在上下文中,就像你問的那樣。 因此,您可以為此組合策略創建別名:

Ltac disj_syllogism AorB notA B :=
  destruct AorB as [? | B]; [contradiction |].

現在我們可以像這樣輕松模仿析取三段論規則:

Section Foo.
Context (A B : Prop) (H : A \/ B) (H0 : ~ A).
Goal True.
  disj_syllogism H H0 H1.
End Foo.

讓我展示一些不那么自動化的方法:

Ltac disj_syllogism AorB notA B :=
  let A := fresh "A" in
  destruct AorB as [A | B]; [contradiction (notA A) |].

這種方法並沒有要求Coq找到矛盾,它直接提供了contradiction策略( notA A術語)。 或者我們可以使用具有pose proof策略的明確術語:

Ltac disj_syllogism AorB notA B :=
  pose proof (match AorB with
              | or_introl a => False_ind _ (notA a)
              | or_intror b => b
              end) as B.

我希望這有幫助。 我不確定是否需要一些額外的解釋 - 隨意請求澄清,我會更新我的答案。

根據Anton Trunov的回答,Disjunctive Syllogism的更簡單版本如下:

(* Helper tactics. *) Ltac oe1 P_or_Q not_P := destruct P_or_Q ; [ contradiction | ]. Ltac oe2 P_or_Q not_Q := destruct P_or_Q ; [ | contradiction ].

(* Main tactic *) Ltac oE AorB H := oe1 AorB H || oe2 AorB H.

根據False disjunct是在右邊還是在左邊,幫助策略每個都在一個案例上工作,主要策略嘗試兩者並返回任何一個成功。

我想你可能對Coq如何運作有錯誤的期望? 證明這一點的一般方法基本上是關於不同可能性的真值表:

Lemma it: forall a b, (a \/ b) /\ ~a -> b.
Proof.
  intuition.
  Show Proof.
Qed.

(fun (a b : Prop) (H : (a \/ b) /\ ~ a) =>
 and_ind
   (fun (H0 : a \/ b) (H1 : ~ a) =>
    or_ind (fun H2 : a => let H3 : False := H1 H2 in False_ind b H3)
      (fun H2 : b => H2) H0) H)

如果查看生成的證明項,您會發現Coq實際上是將構造函數拆分為boolean。 我們可以手動執行此操作並獲得相同的證明條件:

Lemma it: forall a b, (a \/ b) /\ ~a -> b.
Proof.
  intros a b H.
  induction H.
  induction H.
  contradict H. exact H0.
  exact H.
Qed.

雖然例如modus ponens對應於Coq中的一個apply ,但我不認為這是“內置”的任何直接方式。

之后,您可以使用此引理(並且我確定標准庫中的某個地方有相應的版本)通過apply來推導您的其他假設。

暫無
暫無

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

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