从具体对象实例化一个类?

时间:2018-07-06 13:44:41

标签: isabelle isar

我正试图从伊莎贝尔(Isabelle)的一本书[1]形式化一系列有关拓扑的证明。

我想对一个拓扑空间(X,T)由一组“点”(某些“ a”型元素)和一组称为T的X子集组成的想法进行编码:

  • A1。如果元素p在X中,则T中至少存在一组N,其中N也包含p。
  • A2。如果集合U和V在T中,并且如果p∈(U∩V),则在集合N中必须存在N where(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实例的各种引理和定理。

但是我实际上该如何创建一个呢?除非我对事情有误解,否则到目前为止,我所看到的instanceinstantiate关键字的示例似乎都是在声明一个特定的抽象类(或类型或语言环境)是一个实例。另一个。

我如何告诉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,作者丹尼斯·森提耶斯

2 个答案:

答案 0 :(得分:0)

我在这里取得了一些进展:classlocale的一种特殊类型,但是这种用法不是必需的,可以直接使用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相等»=«或它的语法变体»⟷«。