Zulip Chat Archive

Stream: Is there code for X?

Topic: Intersection of a Finset and a Set as a Finset?


Michael Stoll (Dec 22 2023 at 19:23):

Is there a simple way to obtain the intersection of s : Finset α and t : Set α as a Finset α? Loogling for Finset, Set, "inter" does not produce anything close.

Yaël Dillies (Dec 22 2023 at 19:25):

s.filter (· ∈ t)

Michael Stoll (Dec 22 2023 at 19:27):

... not so easily discoverable if you think of intersections ...

Yaël Dillies (Dec 22 2023 at 19:30):

Feel free to add this use case to the docstring of docs#Finset.filter !

Kyle Miller (Dec 22 2023 at 19:31):

I think might also be able to do Set.toFinset (s \cap t)

Michael Stoll (Dec 22 2023 at 19:32):

I'll try to remember that. BTW, s.filter t also works (given [DecidablePred t]), but I guess this is defeq abuse...

Kyle Miller (Dec 22 2023 at 19:32):

(Yeah, that's defeq abuse)

Michael Stoll (Dec 22 2023 at 19:32):

Kyle Miller said:

I think might also be able to do Set.toFinset (s \cap t)

failed to synthesize instance Fintype ↑(↑s ∩ t)

Kyle Miller (Dec 22 2023 at 19:33):

The correct phrasing of DecidablePred t is DecidablePred (· ∈ t) by the way

Michael Stoll (Dec 22 2023 at 19:34):

I know, but to get s.filter t to work, DecidablePred (· ∈ t)does not cut it.

Yaël Dillies (Dec 22 2023 at 19:35):

Yes, because that's defeq abuse, as you pointed out.

Kyle Miller (Dec 22 2023 at 19:38):

Michael Stoll said:

failed to synthesize instance Fintype ↑(↑s ∩ t)

Set.toFinset doesn't let you avoid decidability unfortunately. This works:

import Mathlib.Data.Set.Finite

variable {α : Type*} (s : Finset α) (t : Set α) [DecidablePred (·  t)]

#check Set.toFinset (s  t)

Michael Stoll (Dec 22 2023 at 19:39):

I'll go with the filter version for now and see how I get along with that.

Kyle Miller (Dec 22 2023 at 19:39):

One way you can find out what you're missing is to do

import Mathlib.Data.Set.Finite

variable {α : Type*} (s : Finset α) (t : Set α)

open scoped Classical

#check Set.toFinset (s  t)

and poke around the term until you find a Classical instance.

Michael Stoll (Dec 22 2023 at 19:40):

[DecidablePred (· ∈ t)] is needed for the s.filter version as well, so it is perhaps easy to guess in this case.

Eric Wieser (Dec 23 2023 at 13:06):

Yaël Dillies said:

Feel free to add this use case to the docstring of docs#Finset.filter !

#9239


Last updated: May 02 2025 at 03:31 UTC