Isabelle 与伊莎贝尔重温高斯和
我对论证的一个变化感兴趣,它确立了:Isabelle 与伊莎贝尔重温高斯和,isabelle,Isabelle,我对论证的一个变化感兴趣,它确立了: "(∑ i=1..k . i) = k*(k+1) div 2" 我们从一个简单的归纳中知道这一点,但插管有点不同。看这个公式的一个方法是,如果你对数字序列1..k的极值求和,你得到 1+k=2+(k-1)=…… 然后你只需要乘以正确的次数就可以得到完整的和 我想重复这一论点,以表明以下不平等: "(∑n = 1..k - 1. cmod (f (int n))) ≤ 2 * (∑n ≤ k div 2. cmod (f (int n)))" 这里我知道
"(∑ i=1..k . i) = k*(k+1) div 2"
我们从一个简单的归纳中知道这一点,但插管有点不同。看这个公式的一个方法是,如果你对数字序列1..k的极值求和,你得到
1+k=2+(k-1)=……
然后你只需要乘以正确的次数就可以得到完整的和
我想重复这一论点,以表明以下不平等:
"(∑n = 1..k - 1. cmod (f (int n))) ≤ 2 * (∑n ≤ k div 2. cmod (f (int n)))"
这里我知道对于每个n
,cmod(f(intk-n))=cmod(cnj(fn))
你在Isabelle身上看到证明这一点的优雅方式了吗?以优雅方式证明这一点的诀窍是认识到
∑i=1..k。i
与∑i=1..k。k+1-i
然后将其添加到原始总和中,以便i
取消。这是一个简单的重新索引参数:
lemma "(∑i=1..k. i :: nat) = k * (k + 1) div 2"
proof -
have "(∑i=1..k. i) = (∑i=1..k. k + 1 - i)"
by (rule sum.reindex_bij_witness[of _ "λi. k + 1 - i" "λi. k + 1 - i"]) auto
hence "2 * (∑i=1..k. i) = (∑i=1..k. i) + (∑i=1..k. k + 1 - i)"
by simp
also have "… = k * (k + 1)"
by (simp add: sum.distrib [symmetric])
finally show ?thesis by simp
qed
对于您提到的另一件事,我认为最好的方法是首先将总和拆分为小于kdiv2
的元素和其余元素。然后,您可以将第二个和重新编制索引,类似于上面的一个。然后,不平等部分进来,因为你可能有一个额外的剩馀元素“在中间”,如果<代码> k>代码>是奇怪的,你必须扔掉它。
证明的重要部分的简图:
lemma
assumes "⋀i. f i ≥ 0"
shows "(∑i=1..<k. f (i::nat) :: real) = T"
proof -
(* Separate summation domain into two disjoint parts *)
have "(∑i=1..<k. f i) = (∑i∈{1..k div 2}∪{k div 2<..<k}. f i)"
by (intro sum.cong) auto
(* Pull sum apart *)
also have "… = (∑i∈{1..k div 2}. f i) + (∑i∈{k div 2<..<k}. f i)"
by (subst sum.union_disjoint) auto
(* Reindex the second sum *)
also have "(∑i∈{k div 2<..<k}. f i) = (∑i∈{1..<k - k div 2}. f (k - i))"
by (rule sum.reindex_bij_witness[of _ "λi. k - i" "λi. k - i"]) auto
(* Throw away the element in the middle if k is odd *)
also have "… ≤ (∑i∈{1..k div 2}. f (k - i))"
using assms by (intro sum_mono2) auto
finally have "(∑i=1..<k. f i) ≤ (∑i=1..k div 2. f i + f (k - i))"
by (simp add: sum.distrib)
引理
假定”⋀i、 f i≥ 0"
显示“(∑i=1。。