Zulip Chat Archive
Stream: new members
Topic: subtype map
Calle Sönne (Oct 31 2019 at 14:24):
Is there some theorem/lemma that can give me a map from a subtype into the corresponding type?
Rob Lewis (Oct 31 2019 at 14:25):
subtype.val
?
Calle Sönne (Oct 31 2019 at 14:26):
Thanks! I must have been searching for the wrong thing then.. thought its name would be something like 'lift' or 'map'
Calle Sönne (Oct 31 2019 at 14:40):
Despite its simplicity I am having problems using subtype.val
I have the following code (the only important thing is the last line in tactic mode):
open_locale classical lemma finite_prod_of_binary_prod [has_binary_products.{v} C] : ∀ (J : Type v) [fintype J], limits.has_limits_of_shape (discrete J) C | J fin := if h : nonempty J then begin let x := classical.choice h, let J' := {a // a ≠ x}, resetI, have card_lt : fintype.card J' < fintype.card J, refine fintype.card_subtype_lt J _, exact x, simp, have lim_J' : limits.has_limits_of_shape (discrete J') C, refine finite_prod_of_binary_prod J', refine ⟨_⟩, intro, let F' := discrete.lift (subtype.val J'), end else _ using_well_founded {rel_tac := λ _ _, `[exact ⟨_, measure_wf (λ x, @fintype.card x.1 x.2)⟩]}
I get the following error:
type mismatch at application J'.val term J' has type Type v : Type (max 1 (v+1)) but is expected to have type subtype ?m_3 : Type (max ? ?) state: C : Type u, 𝒞 : category C, _inst_1 : limits.has_binary_products C, finite_prod_of_binary_prod : Π (J : Type v) [_inst_2 : fintype J], limits.has_limits_of_shape (discrete J) C, J : Type v, fin : fintype J, h : nonempty J, x : J := classical.choice h, J' : Type v := {a // a ≠ x}, card_lt : fintype.card J' < fintype.card J, lim_J' : limits.has_limits_of_shape (discrete J') C, F : discrete J ⥤ C ⊢ limits.has_limit F
How do I supply the fact that J' is a subtype of J to subtype.val? Shouldnt this be inferred?
Chris Hughes (Oct 31 2019 at 14:43):
You can't apply subtype.val
to J'
only to an element of J'
Rob Lewis (Oct 31 2019 at 14:44):
I'm not sure what the type of discrete.lift
is, but note that subtype.val
is a function from J'
to J
, not a function that can be applied to J'
itself.
Chris Hughes (Oct 31 2019 at 14:45):
You just want discrete.lift subtype.val
Chris Hughes (Oct 31 2019 at 14:46):
Or probably discrete.lift (subtype.val : J' -> J)
Rob Lewis (Oct 31 2019 at 14:46):
You just want
discrete.lift subtype.val
Maybe with some type annotations.
Calle Sönne (Oct 31 2019 at 14:48):
Great! Thank you :)
Last updated: Dec 20 2023 at 11:08 UTC