Zulip Chat Archive
Stream: lean4
Topic: set coercion
Nir Paz (Dec 04 2024 at 16:37):
Can I define a coercion or something so that this works?
import Mathlib
structure Foo (α : Type*) where
carrier : Set α
prop : True
variable (α : Type*) (foo : Foo α)
#check foo ⊆ Set.univ -- fails
I want foo ⊆ S
to be interpreted as foo.carrier ⊆ S
whenever S : Set α
.
Nir Paz (Dec 04 2024 at 16:50):
Actually I would like #foo
and similar things to also work, so lean should always tries to interpret foo
as foo.carrier
. I assume things like this exist in mathlib but I can't think of an example to check.
Vasilii Nesterov (Dec 04 2024 at 16:50):
The problem here is that a ⊆ b
is just a notation for Subset a b
which expects instance of HasSubset
for the type of a
and b
, and this isn't connected to Set
.
Nir Paz (Dec 04 2024 at 16:55):
Looks like #S
typechecks when S : UpperSet α
(which is a carrier and a property), so I'll see what's done there.
Nir Paz (Dec 04 2024 at 16:56):
Although subsets don't work, so I will add a HasSubset
instance manually.
Nir Paz (Dec 04 2024 at 16:58):
It must be SetLike
, I'll take a look at it later.
Jireh Loreaux (Dec 04 2024 at 16:59):
Yes, you want to write a docs#SetLike instance for Foo
.
Last updated: May 02 2025 at 03:31 UTC