我如何使用语言环境解释的已证明目标来证明其余目标

How can I use proved goals of locale interpretation to prove the remaining ones

我定义了一个严格的命令区域设置如下:

locale strict_order =
fixes ls::"'a set ⇒ 'a set ⇒ bool"
assumes 
  irrefl:"¬ ls a a" and
  trans:"ls a c ∧ ls c g ⟹ ls a g" and 
  asym:"ls a c ⟹ ¬ ls c a" 

然后,我声明一个类型作为 strict_order

的解释
interpretation nest:strict_order "op ≪"
proof
 fix a
 show "¬ a ≪ a"
 proof (rule contra, auto) 
  ....
 qed
 next
 fix a c g
 assume a:"a ≪ c ∧ c ≪ g"
 show " a ≪ g" 
 proof -
  (* uses the fact that ¬ a<<a *)

类型嵌套的证明 "trans" 属性 需要在某个点 "irrefl" 属性 已在解释块内成功证明。我如何标记和使用它?或者除了把它移到解释块之外别无他法?

谢谢。

如果你用 show 陈述一个事实,你可以像用 have 一样命名它,例如 show irrefl: "¬ a ≪ a"。但是,next 会丢弃您目前已证明的所有内容,因此您必须避免 next。从概念上讲,next 对应于关闭一个块并打开一个新块,即 next 本质上意味着 } {。 因此,您可以编写如下内容:

proof
  { fix a
    show "¬ a ≪ a"
    proof (rule contra, auto) .... qed }
  note irrefl = this
  { fix a c g
    assume a: "a ≪ c ∧ c ≪ g"
    show "a ≪ g" 
    proof - ... (* can reference irrefl *) qed }
qed

请注意,您只能在关闭块后命名反反律,因为您希望固定的 a 被泛化,这仅在从块导出时发生。如果您使用的是 Isabelle2016 或更高版本,则可以使用 forif 子句更简洁地编写案例。这为您节省了 }{.

的所有样板文件
proof
  show irrefl: "¬ a ≪ a" for a
  proof (rule contra, auto) .... qed

  show "a ≪ g" if a: "a ≪ c ∧ c ≪ g" for a c g
  proof - ... (* can reference irrefl *) qed
qed