我正在尝试从 Isabelle 的一本书 [1] 中形式化一系列关于拓扑的证明。
我想编码拓扑空间(X,T)由一组“点”(某种任意类型'a的元素)和一组X的子集(称为T)组成的想法,使得:
- A1。如果元素 p 在 X 中,则在 T 中至少存在一个集合 N 也包含 p。
- A2。如果集合 U 和 V 在 T 中,并且如果 p∈(U∩V),则在 T 中一定存在集合 N,其中 N⊆(U∩V) 和 x∈N。(如果两个集合相交,则必须有一个邻域覆盖该相交。)。
目前我有以下定义:
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
andinstantiate
关键字的示例似乎都是关于声明一个特定的抽象类(或类型或语言环境)是另一个抽象类的实例。
我如何告诉 Isabelle 一对特定的集合(例如X={1::int, 2, 3}
, T={X,{}}
)形成一个topspace
?
同样,我如何使用我的定义来证明X={1::int, 2, 3}, T={}
不符合要求?
最后,一旦我证明一个特定的具体对象 X 符合 a 的定义,topspace
我如何告诉 Isabelle 现在topspace
在证明关于 X 的事情时使用我已经证明的所有定义和定理?
顺便说一句,我正在使用,class
因为我不知道更好。如果它不是适合这项工作的工具,我很乐意做其他事情。
[1]:Dennis Sentilles通往高等数学的桥梁