Zulip Chat Archive

Stream: maths

Topic: Lifting a finite set to a finset


Ryan Lahfa (Apr 01 2020 at 19:32):

I'm trying to lift a finite set to a finset using some hypothesis of finiteness.

import data.set
import data.set.finite
import data.finset

variable {X: Type}

open set
open classical
local attribute [instance] prop_decidable

set_option trace.app_builder true

lemma finite_set_has_greatest_element [preorder X] (S: set X):
  S.finite   x  S, is_greatest S x := begin
  intro Hf,
  lift S to finset using Hf,
  end

But this is failing with:

[app_builder] failed to create an 'can_lift'-application, failed to solve unification constraint for #2 argument (Type ? =?= Type ? → Type ?)
app_builder_exception, more information can be obtained using command `set_option trace.app_builder true`

But, I'm not sure I understand why https://leanprover-community.github.io/mathlib_docs/data/set/finite.html#set.can_lift does not get picked up by Lean.

Kevin Buzzard (Apr 01 2020 at 19:37):

finset X not finset

Ryan Lahfa (Apr 01 2020 at 19:38):

… Thanks, sorry for the stupid question!

Kevin Buzzard (Apr 01 2020 at 19:38):

Thanks for that question! I had no idea about that whole machinery. I remember noticing that some trick to go from int to nat landed in Lean but I'd not realised it was so powerful.

Kevin Buzzard (Apr 01 2020 at 19:39):

I just learnt about how far it all went from your question.

Ryan Lahfa (Apr 01 2020 at 19:39):

Happy to make this very cool API more attention then, because it sounds really useful for heavy coercions :)

Ryan Lahfa (Apr 01 2020 at 19:40):

I guessed that lift S to finset using Hf could guess that finset has some holes and fill them itself by reusing the fact that S: set α and then trying to make some finset α too, but it's not obvious I guess

Ryan Lahfa (Apr 01 2020 at 19:41):

Putting a hole, i.e. lift S to (finset _) using Hf makes the error a lot more user friendly.


Last updated: Dec 20 2023 at 11:08 UTC