3

我从 Isabelle 的维基百科页面获得了以下代码:

theorem sqrt2_not_rational:
  "sqrt (real 2) ∉ ℚ"
proof
  assume "sqrt (real 2) ∈ ℚ"
  then obtain m n :: nat where
    n_nonzero: "n ≠ 0" and sqrt_rat: "¦sqrt (real 2)¦ = real m / real n"
    and lowest_terms: "gcd m n = 1" ..
  from n_nonzero and sqrt_rat have "real m = ¦sqrt (real 2)¦ * real n" by simp
  then have "real (m²) = (sqrt (real 2))² * real (n²)" by (auto simp add: power2_eq_square)
  also have "(sqrt (real 2))² = real 2" by simp
  also have "... * real (m²) = real (2 * n²)" by simp
  finally have eq: "m² = 2 * n²" ..
  hence "2 dvd m²" ..
  with two_is_prime have dvd_m: "2 dvd m" by (rule prime_dvd_power_two)
  then obtain k where "m = 2 * k" ..
  with eq have "2 * n² = 2² * k²" by (auto simp add: power2_eq_square mult_ac)
  hence "n² = 2 * k²" by simp
  hence "2 dvd n²" ..
  with two_is_prime have "2 dvd n" by (rule prime_dvd_power_two)
  with dvd_m have "2 dvd gcd m n" by (rule gcd_greatest)
  with lowest_terms have "2 dvd 1" by simp
  thus False by arith
qed

但是,当我将此文本复制到 Isabelle 实例中时,每行左侧有多个“请勿输入”符号。有人说“在顶层非法应用命令“定理””,所以我假设你不能简单地在顶层定义一个定理,并且维基百科页面没有提供完整的初始示例。我将定理包装在一个理论中,如下所示:

theory Scratch
imports Main
begin

(* Theorem *)

end

伊莎贝尔不再抱怨这个定理,但是,在定理的第二行,它现在说:

Inner lexical error at: ℚ
Failed to parse proposition

它还抱怨证明线:

Illegal application of command "proof" in theory mode

对于定理中的其余行,它也有错误。包装维基百科提供的这个定理以便可以在 Isabelle 中检查的正确方法是什么?

4

3 回答 3

2

我完全同意 Manuel 的观点,仅仅导入Main是不够的。如果您对证明不感兴趣,而只是对测试不合理性感兴趣,那么很有可能$AFP/Real_Impl/Real_Impl从形式证明档案中包含:然后测试不合理性变得非常容易:

theory Test
imports "$AFP/Real_Impl/Real_Impl"
begin

lemma "sqrt 2 ∉ ℚ" by eval
lemma "sqrt 1.21 ∈ ℚ" by eval
lemma "sqrt 3.45 ∉ ℚ" by eval

end 
于 2014-07-31T07:54:32.620 回答
2

您猜测您必须以您所做的方式将“定理”命令包装在理论中是正确的。但是,您需要更多的导入,imports Main甚至不加载包含 sqrt、有理数和素数的理论。

此外,维基百科上的证明有些过时了。Isabelle 是一个非常动态的系统。它的维护者在每次发布时都会移植库和正式证明存档中的所有证明,但是位于某个地方(例如维基百科)的代码片段往往会在一段时间后变得过时,我认为这个特定的片段确实很古老。

对于几乎相同的东西的最新证明,正确地嵌入到具有正确导入的理论中,请看这里:http: //isabelle.in.tum.de/repos/isabelle/file/4546c9fdd8a7/src/ HOL/ex/Sqrt.thy

请注意,这是针对 Isabelle 的开发版本;它可能不适用于您的版本。在任何情况下,您应该在下载的 Isabelle 发行版中拥有与 src/HOL/ex/Sqrt.thy 相同版本的文件。

于 2014-07-30T21:43:58.463 回答
1

可能您遇到了一些编码困难 - 这就是我的问题(我遇到了同样的错误)。

Isabelle 使用所谓的“Isabelle 符号”来表示 unicode 字符(参见第 307 页的三个(参考手册)[ http://isabelle.in.tum.de/doc/isar-ref.pdf])。

如果您使用jEdit分发的 IDE,Isabelle 2014-->看起来与\<longrightarrow>(Isabelle 符号)相同。第一个无法解析,第二个是正确的。如果您复制并粘贴 wiki 代码,这就是它损坏的原因。

您还可以查看示例<yourIsabelleInstallFolder/src/HOL/Isar_Examples.thy以进一步使用伊莎贝尔符号和用 Isar 语言编写的证明的一般结构。

于 2014-11-26T12:40:15.730 回答