1

假设我想证明∃ n m k . [n, m, k] = [2, 3, 5]Isabelle/Isar 中的引理。如果我按照第 45 页的 Isabelle/HOL 教程中的建议继续,我的证明如下所示:

lemma "∃ n m k . [n, m, k] = [2, 3, 5]"
proof
  show "∃ m k . [2, m, k] = [2, 3, 5]"
  proof
    show "∃ k . [2, 3, k] = [2, 3, 5]"
    proof
      show "[2, 3, 5] = [2, 3, 5]" by simp
    qed
  qed
qed

当然,这太冗长了。我如何证明上述命题,以使证明简洁易读?

4

1 回答 1

3

通过多次应用单量词引入规则,可以在一个步骤中引入多个存在量词。例如,证明方法(rule exI)+引入了所有最外层的存在量词。

lemma "∃n m k. [n, m, k] = [2, 3, 5]"
proof(rule exI)+
  show "[2, 3, 5] = [2, 3, 5]" by simp
qed

或者,您可以先声明实例化的属性,然后使用自动证明方法进行实例化。通常blast在这里工作得很好,因为它不会调用简化器。在您的示例中,您将不得不添加类型注释,因为数字已重载。

lemma "∃n m k :: nat. [n, m, k] = [2, 3, 5]"
proof -
  have "[2, 3, 5 :: nat] = [2, 3, 5]" by simp
  then show ?thesis by blast
qed
于 2017-11-24T06:48:18.417 回答