我正试图从伊莎贝尔(Isabelle)的一本书[1]形式化一系列有关拓扑的证明。
我想对一个拓扑空间(X,T)由一组“点”(某些“ a”型元素)和一组称为T的X子集组成的想法进行编码:
目前,我有以下定义:
class topspace =
fixes X :: "'a set"
fixes T :: "('a set) set"
assumes A1: "p∈X ≡ ∃N∈T. p∈N"
assumes A2: "U∈T ∧ V∈T ∧ x∈(U∩V) ⟹ ∃N∈T. x∈N ∧ N⊆(U∩V)"
begin
(* ... *)
end
到目前为止,太好了。我能够添加各种定义,并证明关于假设topspace
实例的各种引理和定理。
但是我实际上该如何创建一个呢?除非我对事情有误解,否则到目前为止,我所看到的instance
和instantiate
关键字的示例似乎都是在声明一个特定的抽象类(或类型或语言环境)是一个实例。另一个。
我如何告诉Isabelle,一组特定的对(例如X={1::int, 2, 3}
,T={X,{}}
)形成一个topspace
?
同样,如何使用我的定义来证明X={1::int, 2, 3}, T={}
不符合要求?
最后,一旦我证明特定的具体对象X符合topspace
的定义,我如何告诉Isabelle现在使用我已经证明的关于topspace
的所有定义和定理证明有关X的东西?
顺便说一句,我正在使用class
,因为我没有更好的了解。如果这不是适合该工作的工具,我很乐意做其他事情。
[1]:A Bridge to Advanced Mathematics,作者丹尼斯·森提耶斯
答案 0 :(得分:0)
我在这里取得了一些进展:class
是locale
的一种特殊类型,但是这种用法不是必需的,可以直接使用locale
关键字简化了情况。每个语言环境都有一个关联的定理,可用于实例化它:
locale topspace =
fixes X :: "'a set"
fixes T :: "('a set) set"
assumes A1 [simp]: "x∈X ≡ ∃N∈T. x∈N"
assumes A2 [simp]: "U∈T ∧ V∈T ∧ x∈(U∩V) ⟹ ∃N∈T. x∈N ∧ N⊆(U∩V)"
theorem
assumes "X⇩A={1,2,3::int}" and "T⇩A={{}, {1,2,3::int}}"
shows "topspace X⇩A T⇩A"
proof
show "⋀U V x. U∈T⇩A ∧ V∈T⇩A ∧ x∈U∩V ⟹ ∃N∈T⇩A. x∈N ∧ N⊆U∩V"
and "⋀x. x∈X⇩A ≡ ∃N∈T⇩A. x∈N" using assms by auto
qed
如果我们要使用definition
进行声明,则证明目标变得更加复杂,我们需要使用unfolding
关键字。 (isabelle随附的locales.pdf涵盖了这一点,但我不确定我还无法用自己的话来解释它)。无论如何,这可行:
experiment
begin
definition X⇩B where "X⇩B={1,2,3::int}"
definition T⇩B where "T⇩B={{}, {1,2,3::int}}"
lemma istop0: "topspace X⇩B T⇩B" proof
show "⋀U V x. U∈T⇩B ∧ V∈T⇩B ∧ x∈U∩V ⟹ ∃N∈T⇩B. x∈N ∧ N⊆U∩V"
and "⋀x. x∈X⇩B ≡ ∃N∈T⇩B. x∈N" unfolding X⇩B_def T⇩B_def by auto
qed
end
我相信在子语言环境中完成所有这些工作也是可能的,并且可能是更好的选择,但是我还没有完全弄清楚它的语法。
答案 1 :(得分:0)
尽管语言环境本身是在演算本身中实现的,因此它们的谓词可用于任何常规命题,但通常不建议这样做。相反,您应该使用实例化语言环境。解释,如以下示例所示。
locale topspace =
fixes X :: "'a set"
fixes T :: "('a set) set"
assumes A1 [simp]: "x∈X ⟷ (∃N∈T. x∈N)"
assumes A2 [simp]: "U∈T ∧ V∈T ∧ x∈(U∩V) ⟹ ∃N∈T. x∈N ∧ N⊆(U∩V)"
context
fixes X⇩A T⇩A
assumes X⇩A_eq: "X⇩A = {1, 2, 3 :: int}"
and T⇩A_eq: "T⇩A = {{}, {1, 2, 3 :: int}}"
begin
interpretation example: topspace X⇩A T⇩A
by standard (auto simp add: X⇩A_eq T⇩A_eq)
lemmas facts = example.A1 example.A2
end
thm facts
此模式是否真正适合您的需求取决于您的应用程序;如果您只想拥有一个谓词,则最好直接定义它而不使用任何语言环境。
注意:真正需要纯平等»≡«;更喜欢HOL相等»=«或它的语法变体»⟷«。