Zulip Chat Archive

Stream: new members

Topic: Proof transfer from antidiagonal to divisors_antidiagonal


Sigma (Jan 02 2022 at 06:20):

In the library we have docs#finset.nat.sum_antidiagonal_eq_sum_range_succ and I need to use the analogous statement

variables {M : Type*} [ring M]
lemma div_antidiagonal_eq_sum_divisors (X : ) (func :  ×   M) :
  X.divisors_antidiagonal.sum func =
  finset.sum X.divisors (λ x, func x, X / x⟩)

I was hoping I could basically copy the proof over, swapping n-k for X / x, but the proof just looks like black magic. I tried printing it and looked to find the important bits, but it refused to typecheck even after I cleaned it up. I tried rewriting it in terms of a product instead of a sum like for the one we have, but it didn't do anything.
I was wondering what I should try next.

Eric Rodriguez (Jan 02 2022 at 06:42):

import algebra.big_operators.nat_antidiagonal
import number_theory.divisors

open_locale big_operators

variables {M : Type*} [ring M]
lemma div_antidiagonal_eq_sum_divisors (X : ) (func :  ×   M) :
  X.divisors_antidiagonal.sum func =
   x in X.divisors, func (x, X / x) :=
begin
    convert finset.sum_map _ λ x, (x, X / x) , λ x y h, (prod.mk.inj h).1 _,
    ext,
    simp,
end

seems to lead to a pretty sensible proof state, and the proof is basically copy-paste; what are you confused about? glad to try and explain if i get it myself ^^


Last updated: Dec 20 2023 at 11:08 UTC