如何在假设中分析if-expressions?

时间:2017-03-13 10:24:46

标签: 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-expression的结果等于2 iff a等于1.所以,我想我可以用某种方式推断出这个事实。

如何证明这个引理?

1 个答案:

答案 0 :(得分:2)

你的陈述是不正确的。 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 _ then _ else _分成两个子目标。