Zulip Chat Archive
Stream: general
Topic: Using derived type classes
Robert Maxton (Oct 31 2020 at 00:06):
I think I'm misunderstanding something about derived/extended type classes. I'd like to work with finite groups, so I thought I'd define
class fin_group (G: Type*) extends group G, fintype G
but functions that, for example, rely on [fintype G] don't seem to be satisfied by providing a [fin_group G].
Adam Topaz (Oct 31 2020 at 00:26):
Can you give a #mwe with something that doesn't work?
Robert Maxton (Oct 31 2020 at 00:30):
#check λ (G: Type*) [fin_group G], fintype.card G
throws
failed to synthesize type class instance for
G : Type ?,
_inst_1 : fin_group G
⊢ fintype G
Adam Topaz (Oct 31 2020 at 00:32):
import algebra
import data.fintype.basic
class fin_group (G: Type*) extends group G, fintype G
variables (G : Type*) [fin_group G]
#check fintype.card G
Adam Topaz (Oct 31 2020 at 00:33):
What you wrote doesn't work because lean can't put the fin_group
instance in the typeclass system when its under a lambda.
Adam Topaz (Oct 31 2020 at 00:34):
This is a hack that gets around this issue:
import algebra
import data.fintype.basic
class fin_group (G: Type*) extends group G, fintype G
#check λ (G : Type*) (I : fin_group G), by exactI fintype.card G
Robert Maxton (Oct 31 2020 at 00:35):
Hm. That's interesting. I'll play around with that, thanks.
Last updated: Dec 20 2023 at 11:08 UTC