Isabelle 如何分析假设中的if表达式?

Isabelle 如何分析假设中的if表达式?,isabelle,Isabelle,我试图证明以下引理: lemma if_assumption: "(if a = 1 then 2 else 3) = 2 ⟹ a = 1" apply (cases "a = 1") apply simp_all 经过简化,我得到以下公式: 3 = 2 ⟹ a ≠ 1 ⟹ False if表达式的结果等于2 iffa等于1。所以,我想我可以推断出这个事实 如何证明这个引理?你写下的陈述是不正确的。默认情况下,Isabelle中的数字是多态的(您可以在按住Ctrl键的同时将鼠标悬停在

我试图证明以下引理:

lemma if_assumption: "(if a = 1 then 2 else 3) = 2 ⟹ a = 1"
  apply (cases "a = 1")
  apply simp_all
经过简化,我得到以下公式:

3 = 2 ⟹ a ≠ 1 ⟹ False
if表达式的结果等于2 iff
a
等于1。所以,我想我可以推断出这个事实


如何证明这个引理?

你写下的陈述是不正确的。默认情况下,Isabelle中的数字是多态的(您可以在按住Ctrl键的同时将鼠标悬停在这些数字上进行检查)。可能存在一个
3=2
适用的数字类型(例如有限字段
{0,1,2}
)。在这种情况下,
a
可能不等于
1

如果改为修复数字类型:

lemma if_assumption: "(if a = 1 then 2 else 3) = (2::nat) ⟹ a = 1"
你写的校对稿已经通过了。或更短:

apply (auto split: if_splits)

。。。它告诉系统将
if uu uu uu u u
分为两个子目标。

您写下的语句不正确。默认情况下,Isabelle中的数字是多态的(您可以在按住Ctrl键的同时将鼠标悬停在这些数字上进行检查)。可能存在一个
3=2
适用的数字类型(例如有限字段
{0,1,2}
)。在这种情况下,
a
可能不等于
1

如果改为修复数字类型:

lemma if_assumption: "(if a = 1 then 2 else 3) = (2::nat) ⟹ a = 1"
你写的校对稿已经通过了。或更短:

apply (auto split: if_splits)

。。。它告诉系统将
if uu uu u u u
分为两个子目标。

也许这会对某人有所帮助<代码>如果“Isabelle/HOL的具体语义”一书第2.5.6节“simp的案例拆分”中描述了_splits,可能会对某人有所帮助<“Isabelle/HOL的具体语义”一书第2.5.6节“simp的案例拆分”中描述了代码>如果_拆分。