Zulip Chat Archive

Stream: Is there code for X?

Topic: Two ways of counting a Multiset are equal


Martin Dvořák (Mar 07 2024 at 13:34):

Any idea how to prove the following technicality? Unfolding definitions doesn't get me there.

import Mathlib

example (s : Multiset Char) (f : Char  ) :
    Finset.univ.sum (fun a : s => f a.fst) = (s.map f).sum := by
  sorry

Note that docs#Multiset.ToType is implicitly used in the first expression.

Eric Wieser (Mar 07 2024 at 13:47):

import Mathlib

example (s : Multiset Char) (f : Char  ) :
    Finset.univ.sum (fun a : s => f a.fst) = (s.map f).sum := by
  rw [Finset.sum]
  erw [Multiset.map_map f Sigma.fst,  Multiset.map_univ_coe]

Eric Wieser (Mar 07 2024 at 13:47):

I think there's a lemma missing about Finset.univ (Multiset.toType s)

Damiano Testa (Mar 07 2024 at 13:59):

This also seems to work.

import Mathlib

example (s : Multiset Char) (f : Char  ) :
    Finset.univ.sum (fun a : s => f a.fst) = (s.map f).sum := by
  rw [Finset.sum, Multiset.map_univ]

Martin Dvořák (Mar 07 2024 at 13:59):

Should the missing lemma be in terms of Finset.univ.sigma (fun _ => Finset.univ) ?

Eric Wieser (Mar 07 2024 at 14:04):

Yes, but you need to launder it through the equiv to Multiset.ToType

Martin Dvořák (Mar 07 2024 at 14:06):

Damiano Testa said:

This also seems to work.

import Mathlib

example (s : Multiset Char) (f : Char  ) :
    Finset.univ.sum (fun a : s => f a.fst) = (s.map f).sum := by
  rw [Finset.sum, Multiset.map_univ]

Thanks a lot!!
https://github.com/madvorak/vcsp/blob/74b18912b65b174fb059264c6c7e126186de4218/VCSP/LinearRelaxationAndSFP.lean#L232


Last updated: May 02 2025 at 03:31 UTC