如何证明Isabelle中归纳定义关系的反自反性?

时间:2017-12-06 00:03:38

标签: isabelle induction

以伊莎贝尔自然数不等式的以下定义为例:

inductive unequal :: "nat ⇒ nat ⇒ bool" where
  zero_suc: "unequal 0 (Suc _)" |
  suc_zero: "unequal (Suc _) 0" |
  suc_suc:  "unequal n m ⟹ unequal (Suc n) (Suc m)"

我想证明unequal的反身性,即¬ unequal n n。为了便于说明,让我首先证明人为的引理¬ unequal (n + m) (n + m)

lemma "¬ unequal (n + m) (n + m)"
proof
  assume "unequal (n + m) (n + m)"
  then show False
  proof (induction "n + m" "n + m" arbitrary: n m)
    case zero_suc
    then show False by simp
  next
    case suc_zero
    then show False by simp
  next
    case suc_suc
    then show False by presburger
  qed
qed

在前两种情况下,False必须从假设0 = n + mSuc _ = n + m中推断出来,这是微不足道的。

我希望¬ unequal n n的证明可以用类似的方式完成,也就是说,按照以下模式:

lemma "¬ unequal n n"
proof
  assume "unequal n n"
  then show False
  proof (induction n n arbitrary: n)
    case zero_suc
    then show False sorry
  next
    case suc_zero
    then show False sorry
  next
    case suc_suc
    then show False sorry
  qed
qed

特别是,我希望在前两种情况下,我得到假设0 = nSuc _ = n。但是,我根本没有任何假设,这意味着我被要求从零开始证明False。为什么会这样,我怎样才能进行不平等的证明?

2 个答案:

答案 0 :(得分:1)

你引导unequal。相反,你应该导入n,如下所示:

lemma "¬ (unequal n n)"
proof (induct n)
  case 0
  then show ?case sorry
next
  case (Suc n)
  then show ?case sorry
qed

然后我们可以在标有sorry的每个子目标上使用Sledgehammer。 Sledgehammer(CVC4)建议我们完成以下证明:

lemma "¬ (unequal n n)"
proof (induct n)
  case 0
  then show ?case using unequal.cases by blast
next
  case (Suc n)
  then show ?case using unequal.cases by blast
qed 

答案 1 :(得分:1)

induction方法以不同方式处理变量实例化和非变量实例化。非变量实例化tx ≡ t的简写,其中x是一个新变量。因此,归纳在x上完成,上下文还包含定义x ≡ t

因此,第一次证明中的(induction "n + m" "n + m" arbitrary: n m)相当于具有上述效果的(induction k ≡ "n + m" l ≡ "n + m" arbitrary: n m)。要为第二个证明获得此效果,您必须将(induction n n arbitrary: n)替换为(induction k ≡ n l ≡ n arbitrary: n)。这些假设实际上变得如此简单,以至于由induction方法运行的预简化器可以从它们派生False。因此,没有任何案例需要证明,您可以用proof替换整个内部qed - by (induction k ≡ n l ≡ n arbitrary: n)块。