如何使用已证实的区域解释目标来证明其余的目标

时间:2016-03-03 00:42:21

标签: isabelle

我定义了严格的订单区域设置,如下所示:

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 *)

证据&#34; trans&#34;类型巢的属性需要在某个时刻&#34; irrefl&#34;在解释区内成功证明的财产。我该如何标记和使用它?或者除了解释块之外没有其他办法?

感谢。

1 个答案:

答案 0 :(得分:1)

如果您使用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