有人可以帮助解释什么是正确的假设方法,然后在这里抽象出任意变量 y 吗?
我不会说只有一种“正确的方法”可以做到这一点。“正确的方法”将取决于您要解决的问题的上下文。
一般来说,您试图证明的定理可以通过以下方式证明simp
:
theorem 0: "∀x. A x ⟹ ∀x. B x ⟹ ∀x. A x ∧ B x"
by simp
在大多数情况下,当试图证明这样的结果时,simp
是最好的方法。
但是,例如,如果您正在撰写说明性文章/教程并希望展示如何执行证明的各个步骤,那么当然,显式规则应用程序就成为必需品。但是,在这种情况下,仍然有很多可能性。
首先,您可以使用显式块,如下面的示例所示:
(*naive variant*)
theorem 1: "∀x. A x ⟹ ∀x. B x ⟹ ∀x. A x ∧ B x"
proof-
assume 1: "∀x. A(x)" and 2: "∀x. B(x)"
{
fix y
from 1 have Ay: "A y" by (elim allE)
from 2 have By: "B y" by (elim allE)
from Ay By have "A y ∧ B y" by (rule conjI)
}
then have "∀y. A y ∧ B y" by (rule allI)
then have "∀x. B x ⟹ ∀y. A y ∧ B y" by (rule asm_rl)
then show "∀x. A(x) ⟹ ∀x. B(x) ⟹ ∀x. A(x) ∧ B(x)" by (rule asm_rl)
qed
(*more natural variant*)
theorem 2: "∀x. A x ⟹ ∀x. B x ⟹ ∀x. A x ∧ B x"
proof-
assume 1: "∀x. A(x)" and 2: "∀x. B(x)"
{
fix y
from 1 have Ay: "A y" by (elim allE)
from 2 have By: "B y" by (elim allE)
from Ay By have "A y ∧ B y" by (rule conjI)
}
then show "∀y. A y ∧ B y" by (rule allI)
qed
(*HOL-style*)
theorem 3: "(∀x. A x) ⟶ (∀x. B x) ⟶ (∀x. A x ∧ B x)"
proof(intro impI)
assume 1: "∀x. A(x)" and 2: "∀x. B(x)"
{
fix y
from 1 have Ay: "A y" by (elim allE)
from 2 have By: "B y" by (elim allE)
from Ay By have "A y ∧ B y" by (rule conjI)
}
then show "∀y. A y ∧ B y" by (rule allI)
qed
然而,proof- ... qed
通常是一个更好的选择,更符合伊莎贝尔的传统风格,例如
theorem alt_1: "∀x. A x ⟹ ∀x. B x ⟹ ∀x. A x ∧ B x"
proof-
assume 1: "∀x. A(x)" and 2: "∀x. B(x)"
have "∀y. A y ∧ B y"
proof(rule allI)
fix y
from 1 have Ay: "A y" by (elim allE)
from 2 have By: "B y" by (elim allE)
from Ay By show "A y ∧ B y" by (rule conjI)
qed
then have "∀x. B x ⟹ ∀y. A y ∧ B y" by (rule asm_rl)
then show "∀x. A(x) ⟹ ∀x. B(x) ⟹ ∀x. A(x) ∧ B(x)" by (rule asm_rl)
qed
作为一般参考,我建议在The Isabelle/Isar Reference Manual中的第 2.2 节。