我如何使用语言环境解释的已证明目标来证明其余目标
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 或更高版本,则可以使用 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
我定义了一个严格的命令区域设置如下:
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 或更高版本,则可以使用 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