Isabelle/HOL中的逻辑条件非真非真如何通过案例分析证明?
How to prove by case analysis on a logical condition being either true or false in Isabelle/HOL?
我知道 Isabelle 可以通过构造函数(例如列表)进行案例分析,但是
有没有办法根据条件是真还是假来拆分案例?
例如,在证明以下引理时,我的逻辑(如以下无效语法中的无效证明所示)是,如果条件“x ∈ A”为真,则证明简化为微不足道的事情;当条件为假(即“x∉A”)时,它也会简化:
lemma "(x ∈ A ∨ x ∈ B) ∧ (x ∈ A ∨ x ∈ C) ⟹ x ∈ A ∨ (x ∈ B ∧ x ∈ C)"
proof (case "x ∈ A")
(* ... case true *)
show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI1)
next (* ... case false *)
have "x ∈ B ∧ x ∈ C" by simp
show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI2)
但我不知道如何将英文的“案例分析”翻译成伊莎贝尔。
在Isabelle/HOL中有没有办法通过条件的真假来表达这种案例分析?(截至伊莎贝尔2021)
(还是需要排中律等附加公理?)
您几乎已经猜对了语法,您可以使用语法 proof (cases "<pred>")
.
为任何谓词编写案例证明
对于您提供的示例:
lemma "(x ∈ A ∨ x ∈ B) ∧ (x ∈ A ∨ x ∈ C) ⟹ x ∈ A ∨ (x ∈ B ∧ x ∈ C)"
proof (cases "x ∈ A")
(* ... case true *)
case True
then show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI1)
next (* ... case false *)
case False
then have "x ∈ B ∧ x ∈ C" sorry (* by simp*)
then show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI2)
我知道 Isabelle 可以通过构造函数(例如列表)进行案例分析,但是
有没有办法根据条件是真还是假来拆分案例?
例如,在证明以下引理时,我的逻辑(如以下无效语法中的无效证明所示)是,如果条件“x ∈ A”为真,则证明简化为微不足道的事情;当条件为假(即“x∉A”)时,它也会简化:
lemma "(x ∈ A ∨ x ∈ B) ∧ (x ∈ A ∨ x ∈ C) ⟹ x ∈ A ∨ (x ∈ B ∧ x ∈ C)"
proof (case "x ∈ A")
(* ... case true *)
show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI1)
next (* ... case false *)
have "x ∈ B ∧ x ∈ C" by simp
show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI2)
但我不知道如何将英文的“案例分析”翻译成伊莎贝尔。
在Isabelle/HOL中有没有办法通过条件的真假来表达这种案例分析?(截至伊莎贝尔2021)
(还是需要排中律等附加公理?)
您几乎已经猜对了语法,您可以使用语法 proof (cases "<pred>")
.
对于您提供的示例:
lemma "(x ∈ A ∨ x ∈ B) ∧ (x ∈ A ∨ x ∈ C) ⟹ x ∈ A ∨ (x ∈ B ∧ x ∈ C)"
proof (cases "x ∈ A")
(* ... case true *)
case True
then show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI1)
next (* ... case false *)
case False
then have "x ∈ B ∧ x ∈ C" sorry (* by simp*)
then show "x ∈ A ∨ (x ∈ B ∧ x ∈ C)" by (rule disjI2)