在 Isabelle 中证明拓扑语句
Proving topology statement in Isabelle
我一直在研究极限和拓扑,我想证明以下引理:
lemma fixes f g :: "real ⇒ real"
assumes
"open S"
"∀a b. a < b <--> f a < f b"
"∀a. (f a)>0"
"continuous_on UNIV (f)"
"∀w∈S. ∀h. (w+h)∈S --> h * (f w) ≤ g (w+h) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + h) - g w)/h) (at 0)"
using assms unfolding eventually_at
apply (auto simp: divide_simps mult_ac)
我已经成功地证明了两种不同的场景:
此处,不等式中所有 h 的实例都替换为 |h|。几乎可以立即找到解决方案。
lemma
fixes f g :: "real ⇒ real"
assumes "open S" "∀w∈S. ∀h. (w+h)∈S --> abs(h) * (f w) ≤ g (w+abs(h)) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + abs(h)) - g w)/abs(h)) (at 0)"
using assms unfolding eventually_at
apply (simp add: divide_simps mult_ac)
by (metis (no_types, hide_lams) add.commute diff_0 diff_add_cancel
diff_minus_eq_add dist_norm open_real_def)
在另一个场景中,我没有使用集合 S,而是使用实数集 (UNIV),在 (simp add: ) 之后,我只剩下一个案例来证明哪个大锤找到了解决方案.
lemma compuniv:
fixes f g :: "real ⇒ real"
assumes "S=UNIV" "open S"
"∀w∈S. ∀h. (w+h)∈S --> h * (f w) ≤ g (w+h) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + h) - g w)/h) (at 0)"
using assms unfolding eventually_at
apply (simp add: divide_simps mult_ac)
具体来说,我很难理解为什么当 S=UNIV 时,可以找到解决方案。即使是将问题简化为证明一个子案例(如 S=UNIV 时)的方法也会有很大帮助。如何扩展上述两个案例的证明来证明主要问题?
大局
这个结果构成了使用 real_tendsto_sandwich
定理证明结果的基础。
lemma
fixes f g :: "real ⇒ real"
assumes
"open S"
"∀a b. a < b <-> f a < f b"
"∀a. f a > 0"
"continuous_on S (f)"
"∀w∈S. (λh. f (w+h)) -- 0 --> f w"
"∀w∈S. (λh. f w) -- 0 --> f w"
"∀w∈S. eventually (λh. (h ≥ 0 --> f (w+h) ≥ (g (w + h) - g w)/h) ∧
(h ≤ 0 --> f (w+h) ≤ (g (w + h) - g w)/h)) (at 0)"
"∀w∈S. eventually (λh. (h ≥ 0 --> f w ≤ (g (w + h) - g w)/h) ∧
(h ≤ 0 --> f w ≥ (g (w + h) - g w)/h)) (at 0)"
shows "∀w∈S. ((λh. (g (w+h) - g w)/h) ---> f w) (at 0)"
using assms real_tendsto_sandwich`
从假设中可以看出,当 h ≥ 0
和 h ≤ 0
时,(g (w + h) - g w)/h)
受 f (w+h)
和 f w
的限制,因此取极限有 h --> 0
在这两种情况下都会产生结果 (g (w + h) - g w)/h) --> f w
。因此,从数学上讲,最终结果将是相同的。难点在于如何结合h ≥ 0
和h ≤ 0
的结果来证明最后的结果?
(更新: 我的非正式解释是错误的,但我想我修正了它。我添加了一些我的意见,但我把它们放在最后,因为你没有要求它们。)
(我假设您使用 <-->
是错误的,应该是 <->
。)
在所有这一切中,我一直在用直觉思考我认为 Topological_Spaces.thy
中数学的含义。你正在研究一些微积分是件好事;这给了我一点希望。
(普遍抱怨:THY 中的形式主义水平相当高,它与基于 ZFC 的理论不直接同步,这与 [=22= 的所有开发人员一样] 和法新社,作者没有以教科书的方式解释任何内容,甚至没有以专着的方式,也没有以任何方式进行解释。风格要求没有空白。)
如果我在这里给你的不是你想要的,你可以告诉我删除它,让它不被回答,这样也许其他人会带来更好的东西。
概览
下面我先讨论一些关于UNIV
的事情,并提到你最后引理中的一些其他问题,以及你在最后两段中所说的。
然后我关注一个事实,即所有这一切的关键是弄清楚 h > 0
和 h < 0
如何影响不平等,当将 h
从一侧移动到另一侧时其他.
你可能不明白UNIV是什么
您在倒数第二段中使用的关键短语是 “我没有使用集合 S,而是使用实数集 (UNIV)”。
如果你的意思是 S::real set
作为实数的任何子集,而不是 UNIV::real set
,这是所有实数,那么这是有道理的,但是 S
在你所有的引理是类型 real set
,类型推断,如果显示类型,可以在输出面板中看到。
此外,UNIV
是一种多态类型,'a set
,如 src/HOL/Set.thy#l60 中的来源所示。
subsubsection {* The universal set -- UNIV *}
abbreviation UNIV :: "'a set" where
"UNIV ≡ top"
lemma UNIV_def:
"UNIV = {x. True}"
by (simp add: top_set_def top_fun_def)
我不明白你在谈论什么解决方案 “我很难理解为什么当 S=UNIV 时,可以找到解决方案”,或者哪两个你说的情况。我在所有引理中只看到一个证明目标。不过,在下面,我最终使用了 2 个案例作为连词的一部分。
从你的引理中消除 UNIV
我不认为 UNIV
在这里很重要。此外,您的引理中可能有一些不需要的条件,但我会尽量少更改。
我确实摆脱了 UNIV
,因为如果我可以证明任何 real set
的定理,那么 UNIV::real set
也是如此。考虑一下:
lemma "(∀S. continuous_on S f) ==> continuous_on UNIV f"
by(simp)
还有这个:
lemma "open (UNIV::real set)"
by(simp)
你最后定理的第一部分是这样的:
lemma
fixes f g :: "real => real"
assumes "S = UNIV"
and "open S"
...
因为你假设S = UNIV
,那么你不需要open S
。正因为如此,并且因为不理解你所说的一些事情,我现在离开你的最后 lemma
和最后两段。
我在你的第一个引理中使用了两次 abs,并去掉了 UNIV
我的目标和你的目标一样,是在不使用 abs h
的情况下证明定理。一个中级点是在你的第一个 lemma
中插入两个 abs h
的用途,基于你所做的:
lemma
fixes f g :: "real => real"
assumes "open S"
and "∀a b. a < b <-> f a < f b"
and "∀a. f a > 0"
and "continuous_on S f"
and "∀w∈S. ∀h. (w + h)∈S --> abs h * f w ≤ g (w + h) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + h) - g w)/abs h) (at 0)"
using assms unfolding eventually_at
apply (auto simp: divide_simps mult_ac)
by(metis (no_types, hide_lams) add.commute add_diff_cancel add_left_cancel
assms(2) assms(3) diff_0 diff_0_right diff_minus_eq_add dist_norm
monoid_add_class.add.left_neutral mult.commute open_real_def)
在那里,我取消了 UNIV
的使用,并使用了 S
,任何一组实数。
不等式的正负是关键
与此相关的是以下基本不等式:
lemma "∀h > 0::real. h * x ≤ y <-> x ≤ y/h"
by(auto simp add: mult_imp_le_div_pos less_eq_real_def mult.commute
pos_less_divide_eq)
在等式中,当乘数h
为正时,就很容易了,因为不等式的方向不会改变,不管x
和[=47的符号如何=].
至少对于 Sledgehammer,这就是为什么在使用 abs h
时很容易证明定理。我们不用担心公式f w ≤ g (w + h) - g w
,任何一边是正数还是负数。
这是我最终修改你的第一个引理的方法
是这样的:
lemma
fixes f g :: "real => real"
assumes "open S"
and "∀a b. a < b <-> f a < f b"
and "∀a. f a > 0"
and "continuous_on S f"
and "∀w∈S. ∀h. (w + h)∈S --> h * f w ≤ g (w + h) - g w"
shows "∀w∈S. eventually (λh.
(h > 0 --> f w ≤ (g (w + h) - g w)/h) ∧
(h < 0 --> f w ≥ (g (w + h) - g w)/h)) (at 0)"
using assms unfolding eventually_at
apply (auto simp: divide_simps mult_ac)
by(metis add.commute add_diff_cancel assms(3) assms(4) assms(5) diff_0_right
dist_norm not_less open_real_def)
这是我的解释(案例:h > 0 和 h < 0)
引理中的两个条件是 ∀a b. a < b <-> f a < f b
和 ∀a. f a > 0
,因此 f
是正的单调递增函数。我没有看到其中任何一个被使用。
案例:h > 0 和 (w + h) S 的一个元素
因为∀w ∈ S. ∀h. (w + h) ∈ S --> h * f w ≤ g (w + h) - g w
,那么当h > 0
和(w + h) ∈ S
,那么
h * f w ≤ g (w + h) - g w.
我们可以乘以1/h
,如果h
不等于0,不等式的方向不变。在 eventually
中,我假设虚拟变量永远不会等于 0,因此当 h
变为 0 时,连词的前半部分 eventually
为真。
案例:h < 0 和 (w + h) S 的一个元素
同样,当h < 0
和(w + h) ∈ S
时,则
h * f w ≤ g (w + h) - g w.
但是因为h < 0
,如果我们乘以1/h
,就得把不等式的方向倒过来
因此,lambda 函数中连词的后半部分 eventually
为真,因为 h
变为 0。
令人讨厌的更新:你没有征求我对 Whosebug 礼仪的意见,我自己也可以成为礼仪的滥用者,例如这个答案,但我认为每个 "tag community"
都应该努力监管自己。不幸的是,这里没有明确规定礼仪规则,例如在 reddit Rust 站点 reddit.com/r/rust。我最终这样做了,这也不好,但也许它可以帮助影响真正有影响力的人。
我不在乎你是否接受我在这里的回答,你可能有理由不接受一些已经给你的答案,但作为一个例子,我认为你应该接受.
的 R. Thiemann
不接受答案,基本上就是在说,“我还没有收到给我想要的信息的答案”。此外,未接受的答案显示在 Isabelle tag unanswered category.
下
我想每个人都应该明白,在 Isabelle/HOL 中实现时,世界上能够回答有关非平凡数学问题的人是多么少。我猜全世界大约有 200 人在积极使用 Isabelle,他们可以被认为是知识渊博、熟练的用户。在这些人中,甚至很少有人将微积分、实分析和拓扑学牢记在心,并且在 Isabelle/HOL
中得到了实施
Isabelle 的使用是一门混合学科,结合了形式数学、逻辑学和计算机科学,其形式主义水平通常为 post-4 年制学位水平,部分因为没有教科书解释 Isabelle/HOL 本科水平的逻辑和数学,部分原因是研究生水平的逻辑和数学很难。
所需人员的数量,即具有研究生水平的拓扑知识,以及有时间并愿意回答有关拓扑问题的人,更有可能在 mathoverflow.net (this links to a question), and math.stackexchange.com 上进行操作。 (注意:我选择这个问题和答案是为了表明该站点上的许多答案很长或有点长,因为它们试图解释证明的基础数学。对于伊莎贝尔,如果一个人喜欢那种的事情,像我一样,然后还有更多的东西要解释很多次。可以解释数学,然后是 Isabelle/HOL 语法在数学上意味着什么的细节,比如我在下面对 UNIV
的评论.)
我之所以这样说,是因为就我个人而言,当我问一个问题时,我一开始就假设我不会得到答案,如果一个人必须思考超过 15 分钟的话.不,让那 5 分钟。
如果我得到有用的信息让我有所了解,那么我会接受这个答案。如果我得到正确的信息非常重要,我不会接受答案。对于数学问题,总是有更多的问题要问,而不是人们可以解释的,所以充其量,一般来说,你只能期望被指出正确的方向。
你没有征求我的 8 段意见,但我有点不只是在和你说话。在我看来,Isabelle/HOL 中尝试学习数学的人的问题是一个大问题。我们不能说,“哦,你需要看看 AFP 上的 Topology in Isabelle/HOL, by James Munkres. There are things like Topology,但这与写得体面的教科书或专着相去甚远。
我可以删除这个答案,或者这部分答案,如果这是我应该做的。
我一直在研究极限和拓扑,我想证明以下引理:
lemma fixes f g :: "real ⇒ real"
assumes
"open S"
"∀a b. a < b <--> f a < f b"
"∀a. (f a)>0"
"continuous_on UNIV (f)"
"∀w∈S. ∀h. (w+h)∈S --> h * (f w) ≤ g (w+h) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + h) - g w)/h) (at 0)"
using assms unfolding eventually_at
apply (auto simp: divide_simps mult_ac)
我已经成功地证明了两种不同的场景:
此处,不等式中所有 h 的实例都替换为 |h|。几乎可以立即找到解决方案。
lemma
fixes f g :: "real ⇒ real"
assumes "open S" "∀w∈S. ∀h. (w+h)∈S --> abs(h) * (f w) ≤ g (w+abs(h)) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + abs(h)) - g w)/abs(h)) (at 0)"
using assms unfolding eventually_at
apply (simp add: divide_simps mult_ac)
by (metis (no_types, hide_lams) add.commute diff_0 diff_add_cancel
diff_minus_eq_add dist_norm open_real_def)
在另一个场景中,我没有使用集合 S,而是使用实数集 (UNIV),在 (simp add: ) 之后,我只剩下一个案例来证明哪个大锤找到了解决方案.
lemma compuniv:
fixes f g :: "real ⇒ real"
assumes "S=UNIV" "open S"
"∀w∈S. ∀h. (w+h)∈S --> h * (f w) ≤ g (w+h) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + h) - g w)/h) (at 0)"
using assms unfolding eventually_at
apply (simp add: divide_simps mult_ac)
具体来说,我很难理解为什么当 S=UNIV 时,可以找到解决方案。即使是将问题简化为证明一个子案例(如 S=UNIV 时)的方法也会有很大帮助。如何扩展上述两个案例的证明来证明主要问题?
大局
这个结果构成了使用 real_tendsto_sandwich
定理证明结果的基础。
lemma
fixes f g :: "real ⇒ real"
assumes
"open S"
"∀a b. a < b <-> f a < f b"
"∀a. f a > 0"
"continuous_on S (f)"
"∀w∈S. (λh. f (w+h)) -- 0 --> f w"
"∀w∈S. (λh. f w) -- 0 --> f w"
"∀w∈S. eventually (λh. (h ≥ 0 --> f (w+h) ≥ (g (w + h) - g w)/h) ∧
(h ≤ 0 --> f (w+h) ≤ (g (w + h) - g w)/h)) (at 0)"
"∀w∈S. eventually (λh. (h ≥ 0 --> f w ≤ (g (w + h) - g w)/h) ∧
(h ≤ 0 --> f w ≥ (g (w + h) - g w)/h)) (at 0)"
shows "∀w∈S. ((λh. (g (w+h) - g w)/h) ---> f w) (at 0)"
using assms real_tendsto_sandwich`
从假设中可以看出,当 h ≥ 0
和 h ≤ 0
时,(g (w + h) - g w)/h)
受 f (w+h)
和 f w
的限制,因此取极限有 h --> 0
在这两种情况下都会产生结果 (g (w + h) - g w)/h) --> f w
。因此,从数学上讲,最终结果将是相同的。难点在于如何结合h ≥ 0
和h ≤ 0
的结果来证明最后的结果?
(更新: 我的非正式解释是错误的,但我想我修正了它。我添加了一些我的意见,但我把它们放在最后,因为你没有要求它们。)
(我假设您使用 <-->
是错误的,应该是 <->
。)
在所有这一切中,我一直在用直觉思考我认为 Topological_Spaces.thy
中数学的含义。你正在研究一些微积分是件好事;这给了我一点希望。
(普遍抱怨:THY 中的形式主义水平相当高,它与基于 ZFC 的理论不直接同步,这与 [=22= 的所有开发人员一样] 和法新社,作者没有以教科书的方式解释任何内容,甚至没有以专着的方式,也没有以任何方式进行解释。风格要求没有空白。)
如果我在这里给你的不是你想要的,你可以告诉我删除它,让它不被回答,这样也许其他人会带来更好的东西。
概览
下面我先讨论一些关于UNIV
的事情,并提到你最后引理中的一些其他问题,以及你在最后两段中所说的。
然后我关注一个事实,即所有这一切的关键是弄清楚 h > 0
和 h < 0
如何影响不平等,当将 h
从一侧移动到另一侧时其他.
你可能不明白UNIV是什么
您在倒数第二段中使用的关键短语是 “我没有使用集合 S,而是使用实数集 (UNIV)”。
如果你的意思是 S::real set
作为实数的任何子集,而不是 UNIV::real set
,这是所有实数,那么这是有道理的,但是 S
在你所有的引理是类型 real set
,类型推断,如果显示类型,可以在输出面板中看到。
此外,UNIV
是一种多态类型,'a set
,如 src/HOL/Set.thy#l60 中的来源所示。
subsubsection {* The universal set -- UNIV *}
abbreviation UNIV :: "'a set" where
"UNIV ≡ top"
lemma UNIV_def:
"UNIV = {x. True}"
by (simp add: top_set_def top_fun_def)
我不明白你在谈论什么解决方案 “我很难理解为什么当 S=UNIV 时,可以找到解决方案”,或者哪两个你说的情况。我在所有引理中只看到一个证明目标。不过,在下面,我最终使用了 2 个案例作为连词的一部分。
从你的引理中消除 UNIV
我不认为 UNIV
在这里很重要。此外,您的引理中可能有一些不需要的条件,但我会尽量少更改。
我确实摆脱了 UNIV
,因为如果我可以证明任何 real set
的定理,那么 UNIV::real set
也是如此。考虑一下:
lemma "(∀S. continuous_on S f) ==> continuous_on UNIV f"
by(simp)
还有这个:
lemma "open (UNIV::real set)"
by(simp)
你最后定理的第一部分是这样的:
lemma
fixes f g :: "real => real"
assumes "S = UNIV"
and "open S"
...
因为你假设S = UNIV
,那么你不需要open S
。正因为如此,并且因为不理解你所说的一些事情,我现在离开你的最后 lemma
和最后两段。
我在你的第一个引理中使用了两次 abs,并去掉了 UNIV
我的目标和你的目标一样,是在不使用 abs h
的情况下证明定理。一个中级点是在你的第一个 lemma
中插入两个 abs h
的用途,基于你所做的:
lemma
fixes f g :: "real => real"
assumes "open S"
and "∀a b. a < b <-> f a < f b"
and "∀a. f a > 0"
and "continuous_on S f"
and "∀w∈S. ∀h. (w + h)∈S --> abs h * f w ≤ g (w + h) - g w"
shows "∀w∈S. eventually (λh. f w ≤ (g (w + h) - g w)/abs h) (at 0)"
using assms unfolding eventually_at
apply (auto simp: divide_simps mult_ac)
by(metis (no_types, hide_lams) add.commute add_diff_cancel add_left_cancel
assms(2) assms(3) diff_0 diff_0_right diff_minus_eq_add dist_norm
monoid_add_class.add.left_neutral mult.commute open_real_def)
在那里,我取消了 UNIV
的使用,并使用了 S
,任何一组实数。
不等式的正负是关键
与此相关的是以下基本不等式:
lemma "∀h > 0::real. h * x ≤ y <-> x ≤ y/h"
by(auto simp add: mult_imp_le_div_pos less_eq_real_def mult.commute
pos_less_divide_eq)
在等式中,当乘数h
为正时,就很容易了,因为不等式的方向不会改变,不管x
和[=47的符号如何=].
至少对于 Sledgehammer,这就是为什么在使用 abs h
时很容易证明定理。我们不用担心公式f w ≤ g (w + h) - g w
,任何一边是正数还是负数。
这是我最终修改你的第一个引理的方法
是这样的:
lemma
fixes f g :: "real => real"
assumes "open S"
and "∀a b. a < b <-> f a < f b"
and "∀a. f a > 0"
and "continuous_on S f"
and "∀w∈S. ∀h. (w + h)∈S --> h * f w ≤ g (w + h) - g w"
shows "∀w∈S. eventually (λh.
(h > 0 --> f w ≤ (g (w + h) - g w)/h) ∧
(h < 0 --> f w ≥ (g (w + h) - g w)/h)) (at 0)"
using assms unfolding eventually_at
apply (auto simp: divide_simps mult_ac)
by(metis add.commute add_diff_cancel assms(3) assms(4) assms(5) diff_0_right
dist_norm not_less open_real_def)
这是我的解释(案例:h > 0 和 h < 0)
引理中的两个条件是 ∀a b. a < b <-> f a < f b
和 ∀a. f a > 0
,因此 f
是正的单调递增函数。我没有看到其中任何一个被使用。
案例:h > 0 和 (w + h) S 的一个元素
因为∀w ∈ S. ∀h. (w + h) ∈ S --> h * f w ≤ g (w + h) - g w
,那么当h > 0
和(w + h) ∈ S
,那么
h * f w ≤ g (w + h) - g w.
我们可以乘以1/h
,如果h
不等于0,不等式的方向不变。在 eventually
中,我假设虚拟变量永远不会等于 0,因此当 h
变为 0 时,连词的前半部分 eventually
为真。
案例:h < 0 和 (w + h) S 的一个元素
同样,当h < 0
和(w + h) ∈ S
时,则
h * f w ≤ g (w + h) - g w.
但是因为h < 0
,如果我们乘以1/h
,就得把不等式的方向倒过来
因此,lambda 函数中连词的后半部分 eventually
为真,因为 h
变为 0。
令人讨厌的更新:你没有征求我对 Whosebug 礼仪的意见,我自己也可以成为礼仪的滥用者,例如这个答案,但我认为每个 "tag community"
都应该努力监管自己。不幸的是,这里没有明确规定礼仪规则,例如在 reddit Rust 站点 reddit.com/r/rust。我最终这样做了,这也不好,但也许它可以帮助影响真正有影响力的人。
我不在乎你是否接受我在这里的回答,你可能有理由不接受一些已经给你的答案,但作为一个例子,我认为你应该接受
不接受答案,基本上就是在说,“我还没有收到给我想要的信息的答案”。此外,未接受的答案显示在 Isabelle tag unanswered category.
下我想每个人都应该明白,在 Isabelle/HOL 中实现时,世界上能够回答有关非平凡数学问题的人是多么少。我猜全世界大约有 200 人在积极使用 Isabelle,他们可以被认为是知识渊博、熟练的用户。在这些人中,甚至很少有人将微积分、实分析和拓扑学牢记在心,并且在 Isabelle/HOL
中得到了实施Isabelle 的使用是一门混合学科,结合了形式数学、逻辑学和计算机科学,其形式主义水平通常为 post-4 年制学位水平,部分因为没有教科书解释 Isabelle/HOL 本科水平的逻辑和数学,部分原因是研究生水平的逻辑和数学很难。
所需人员的数量,即具有研究生水平的拓扑知识,以及有时间并愿意回答有关拓扑问题的人,更有可能在 mathoverflow.net (this links to a question), and math.stackexchange.com 上进行操作。 (注意:我选择这个问题和答案是为了表明该站点上的许多答案很长或有点长,因为它们试图解释证明的基础数学。对于伊莎贝尔,如果一个人喜欢那种的事情,像我一样,然后还有更多的东西要解释很多次。可以解释数学,然后是 Isabelle/HOL 语法在数学上意味着什么的细节,比如我在下面对 UNIV
的评论.)
我之所以这样说,是因为就我个人而言,当我问一个问题时,我一开始就假设我不会得到答案,如果一个人必须思考超过 15 分钟的话.不,让那 5 分钟。
如果我得到有用的信息让我有所了解,那么我会接受这个答案。如果我得到正确的信息非常重要,我不会接受答案。对于数学问题,总是有更多的问题要问,而不是人们可以解释的,所以充其量,一般来说,你只能期望被指出正确的方向。
你没有征求我的 8 段意见,但我有点不只是在和你说话。在我看来,Isabelle/HOL 中尝试学习数学的人的问题是一个大问题。我们不能说,“哦,你需要看看 AFP 上的 Topology in Isabelle/HOL, by James Munkres. There are things like Topology,但这与写得体面的教科书或专着相去甚远。
我可以删除这个答案,或者这部分答案,如果这是我应该做的。