我试图证明以下问题:
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.所以,我想我可以用某种方式推断出这个事实。
如何证明这个引理?
答案 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 _
分成两个子目标。