如何有效地证明Isabelle/Isar中具有多个变量的存在命题?
How can I efficiently prove existential propositions with multiple variables in Isabelle/Isar?
假设我想证明 Isabelle/Isar 中的引理 ∃ n m k . [n, m, k] = [2, 3, 5]
。如果我按照第 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
当然,这太冗长了。我怎样才能证明像上面这样的命题,使证明简洁易读?
通过多次应用单量词引入规则,可以一步引入多个存在量词。例如证明方法(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
假设我想证明 Isabelle/Isar 中的引理 ∃ n m k . [n, m, k] = [2, 3, 5]
。如果我按照第 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
当然,这太冗长了。我怎样才能证明像上面这样的命题,使证明简洁易读?
通过多次应用单量词引入规则,可以一步引入多个存在量词。例如证明方法(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