旧 Isabelle 项目使用 'uses' 导入 ml 文件 我应该如何替换它?

Old Isabelle project imports ml file using 'uses' How should I replace this?

我继承了一个旧的 Isabelle 项目,并希望将其更新以与 Isabelle 2016 一起使用。当项目启动一个文件时,它通常会启动:

theory my_theory
imports Main uses "my_theory.ML"
begin
lemma my_lemma: ...
by ...
end

uses 关键字似乎不再存在,所以我尝试将其更改为:

theory my_theory
imports Main
begin
ML_file "my_theory.ML"

lemma my_lemma: ...
by ...

end

这确实正确地包含了文件,但我最终在 ML 文件中遇到了错误,这些错误可能相关也可能不相关,例如:Undefined fact: "my_lemma" 在带有@{thm my_lemma 的代码行中}.

我使用 ML_file 命令包含 ML 文件的更改是否正确?这对我收到的 ML 错误有影响吗?

我不熟悉 uses 关键字;在我开始使用 Isabelle 之前一定已经放弃了。

ML_file 应该是要走的路;但是,您必须在 beginend 之间编写 ML_file 命令,start/conclude 理论。此外,ML_file 调用必须在 之后 您在 ML 文件中使用的任何内容的定义(常量、事实、定理集合、simprocs,……)

在您的示例中,它应该如下所示:

theory my_theory
imports Main
begin

lemma my_lemma: ...
  by ...

ML_file "my_theory.ML"

end

请注意,伊莎贝尔变化很大。您拥有的任何 ML 代码——尤其是那些旧代码——可能需要进行大量更改才能与现代 Isabelle 版本一起使用。从头开始重写它可能更容易。这就是为什么 Isabelle 项目应该放在 Archive of Formal Proofs 中,在那里它们会根据开发人员对 Isabelle 系统的任何更改进行更新。 AFP 之外的任何 Isabelle 项目都可能在几年内死于比特腐烂。