我定义了严格的订单区域设置,如下所示:
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;在解释区内成功证明的财产。我该如何标记和使用它?或者除了解释块之外没有其他办法?
感谢。
答案 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或更高版本,则可以使用for
和if
条款更简洁地编写案例。这样可以为您保留所有样板}
和{
。
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