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

How to analyze if-expressions in assumptions?

我试图证明以下引理:

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 当且仅当 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 _ then _ else _ 分成两个子目标。