如何在Isabelle/HOL中获得引理之外的证人实例

如何在Isabelle/HOL中获得引理之外的证人实例,isabelle,Isabelle,我正在使用Isabelle/HOL,试图证明一个语句Q。在证明Q的过程中,我已经证明了满足P::“nat=>bool”的自然数的存在性。如何创建满足P的实例x::nat,以便在后续引理中引用它 在任何给定引理中,我都可以使用gets命令来实现。但是,我想在许多不同的引理中引用同一个见证实例,所以我需要一种在任何引理之外的方法。我尝试在一个新的区域设置中使用fix/aspect,如下所示: locale outerlocale fixes a b c ... begin definition

我正在使用Isabelle/HOL,试图证明一个语句
Q
。在证明
Q
的过程中,我已经证明了满足
P::“nat=>bool”
的自然数的存在性。如何创建满足
P
的实例
x::nat
,以便在后续引理中引用它

在任何给定引理中,我都可以使用gets命令来实现。但是,我想在许多不同的引理中引用同一个见证实例,所以我需要一种在任何引理之外的方法。我尝试在一个新的区域设置中使用fix/aspect,如下所示:

locale outerlocale
  fixes a b c ...
begin

definition Q::bool where ...

lemma existence: "EX x. P x"
proof -
  ...
qed

locale innerlocale = outerlocale +
  fixes x::nat
  assumes "P x"
begin


(*lots of lemmas that reference x*)
lemma innerlemma0
  ...
lemma innerlemma7
proof -
  ...
qed

lemma finalinnerlemma: "Q"
proof -
  ...
  ...
qed


end (*innerlocale*)

lemma outerlemma: "Q"
proof -
  (*I don't know what goes here*)
qed

end (*outerlocale)
不幸的是,这只会让事情变得更糟。我需要一种方法来使用存在引理将最终的内部引理提取到外部区域。如果我试图解释内部环境,我将再次面临提供证人的问题。我不能在引理内解释locale(除非我误解了我得到的错误),也不能在引理外使用get,所以我被卡住了

看来我也需要弄清楚

  • 如何在引理或引理之外指定见证实例
  • 如何通过证明区域设置的假设从该区域设置中提取引理

还是有更好的方法来做我想做的事?谢谢

你可以使用
一些x。P x
,例如,在定义中:

definition my_witness :: nat where
   "my_witness = (SOME x. P x)"
然后使用
thm someI_ex
显示
p my_witness