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。。