【发布时间】:2019-11-14 11:15:54
【问题描述】:
正如数百人在我之前尝试过的那样,我试图通过证明极其基本的数学定理来学习 Isabelle。这项任务很艰巨,因为出于某种原因,大多数 Isabelle 教程和书籍都侧重于程序分析(列表、树、递归函数)或基本命题/一阶逻辑,其中的练习在很大程度上可以由 (induct_tac "xs") 和一对夫妇解决应用语句。
但是,通过挖掘现有伊莎贝尔理论的一页又一页,我已经弄清楚了如何定义一些东西。在这种情况下,我定义了一个序列的极限:
theory Exercises
imports Main "Isabelle2019.app/Contents/Resources/Isabelle2019/src/HOL/Rat"
begin
definition limit :: "(nat ⇒ rat) ⇒ rat ⇒ bool"
where limit_def: "limit sequence l = (∃(d::nat). ∀(e::nat)≥d. ∀(ε::rat). abs((sequence d) - l) ≤ ε)"
end
然后我试图证明lim 1/n --> 0。 (抱歉,Latex 不适用于 Stack Overflow)。
我想到的证明很简单:给我一个epsilon,我会给你一个d,然后是1/d < epsilon。但是,在几个最基本的步骤之后,我被困住了。我能得到关于如何完成这个证明的提示吗?
lemma limit_simple: "limit (λ (x::nat). (Fract 1 (int x))) (rat 0)"
unfolding limit_def
proof
fix ε::rat
obtain d_rat::rat where d_rat: "(1 / ε) < d_rat" using linordered_field_no_ub by auto
then obtain d_int::int where d_int: "d_int = (⌊d_rat⌋ + 1)" by auto
then obtain d::nat where "d = max(d_int, 0)"
end
从这个证明的第一行可以看出,我已经被困在试图说服 Isabelle 有一个自然数 d 大于 1/epsilon 对于每个理性 epsilon ...
【问题讨论】:
-
初学者的教程倾向于关注更多函数式编程风格的东西的原因是因为这样更容易而且你不会很快感到沮丧。
-
另外,您是否知道 Isabelle 的库已经提供了一个大型分析库,当然包括限制的概念? (此外,写
1 / of_nat x而不是Fract 1 (int x)要容易得多。此外,我会直接使用real类型,而不是rat。出于某种原因,rat在 Isabelle 中不经常使用) -
嗨,感谢 cmets。我确实意识到 Isabelle 已经包含了一个大型分析库,但如果我想基于 Isabelle 中尚不存在的内容构建证明,我必须同时使用实际上很难的数学概念来处理 Isabelle。相反,我试图证明一些超级基础的东西,这让我可以专注于伊莎贝尔,但当然,非常基础的定理已经内置了。
标签: isabelle proof theorem-proving