Zulip Chat Archive

Stream: new members

Topic: Sets and Types


ooovi (Dec 03 2024 at 08:50):

Hi all!
I have A : Finset V and S : Finset { x // x ∈ A }, and I would like to obtain an S' : Finset V such that S' ⊆ A, and for x ∈ S' I have x ∈ S and vice versa. I'm having trouble even writing that down as a type, because of course the things in S' and S have different types:

def hmm {V : Type} {A : Finset V} (S : Finset { x // x  A }) :
     S' : Finset V, S'  A  ( x, x  S'  x  S) := by sorry

Because it does not actually make sense to say x ∈ S, lean tells me failed to synthesize Membership V (Finset { x // x ∈ A }). So x ∈ S not quite what I want, but I'm not sure what is. A Bijection between S and S'? Will I need to write it myself or does it exist somewhere already and I'm just not seeing it?

So far, i have managed to prove a statement about a S' : Set V (not Finset) and the coercion of x, but that's not sufficient for my needs:

def hmm {V : Type} {A : Finset V} (S : Finset { x // x  A }) :
     S' : Set V, S'  A  ( x, x  S'  x  S) := by
  use { x | x  S }
  simp_all only [Subtype.exists, exists_and_right, exists_eq_right]
  constructor
  . intro _ xins
    exact xins.out.1
  · intro x
    simp

Any hints? Am I even making sense?

Jihoon Hyun (Dec 03 2024 at 08:56):

What you're trying to do is in the queue #19514 . If you're in a hurry, please check the implementation of it.

Kevin Buzzard (Dec 03 2024 at 08:59):

How did you end up with S in the first place? Usually my advice to students who get into this kind of situation is to look at which point they changed a term into a type (which for you is { x // x ∈ A }) and to see if there is a way of avoiding this (e.g. by not making S at all and instead directly making S' at the point where they made S). But sometimes it's unavoidable.

ooovi (Dec 03 2024 at 09:37):

It's the vertex set of a subgraph induced by A.


Last updated: May 02 2025 at 03:31 UTC