Zulip Chat Archive
Stream: general
Topic: functor map equiv
Johan Commelin (Jun 08 2020 at 20:44):
Is there some control.functor
fu that will give me
e : σ ≃ τ
⊢ finset σ ≃ finset τ
for free?
Kevin Buzzard (Jun 08 2020 at 20:46):
Kevin Buzzard (Jun 08 2020 at 20:47):
Does this actually work? From the man page: have e' : option α ≃ option β := by equiv_rw_type e
Scott Morrison (Jun 09 2020 at 01:27):
I should have made the docs clearer; generally equiv_rw_type
is "for internal use only", and I'd typically imagined users to just useequiv_rw
.
Scott Morrison (Jun 09 2020 at 01:27):
If it were option
here, either of these would work:
Scott Morrison (Jun 09 2020 at 01:28):
import tactic.equiv_rw
example (σ τ : Type) (e : σ ≃ τ) : option σ ≃ option τ :=
by { equiv_rw e, refl, }
example (σ τ : Type) (e : σ ≃ τ) : option σ ≃ option τ :=
by { equiv_rw_type e, }
Scott Morrison (Jun 09 2020 at 01:28):
However it doesn't work out of the box with finset
. Let me look into that.
Scott Morrison (Jun 09 2020 at 01:32):
Nope, I'm not going to have a quick answer for you. :-) I haven't thought about using equiv_rw
for quotient types yet.
Scott Morrison (Jun 09 2020 at 02:46):
(deleted)
Scott Morrison (Jun 09 2020 at 02:48):
(deleted)
Scott Morrison (Jun 09 2020 at 02:51):
(deleted)
Scott Morrison (Jun 09 2020 at 02:52):
(deleted)
Scott Morrison (Jun 09 2020 at 02:52):
(deleted)
Scott Morrison (Jun 09 2020 at 02:52):
(deleted)
Scott Morrison (Jun 09 2020 at 03:01):
Sorry, my solution above was completely dumb. (It was me attempting to "be a robot", but I neither managed to avoid using any human knowledge of finset
and multiset
, or write something sensible.)
Scott Morrison (Jun 09 2020 at 03:01):
What you want is just this:
import data.finset
import tactic.equiv_rw
instance : equiv_functor multiset :=
{ map := λ α β e s, s.map e, }
@[simp]
lemma equiv.refl_to_embedding {α : Type*} :
(equiv.refl α).to_embedding = function.embedding.refl α := rfl
attribute [simp] finset.map_refl
instance : equiv_functor finset :=
{ map := λ α β e s, s.map e.to_embedding, }
example (σ τ : Type) (e : σ ≃ τ) : finset σ ≃ finset τ :=
by { equiv_rw e, refl, }
Scott Morrison (Jun 09 2020 at 03:30):
Last updated: Dec 20 2023 at 11:08 UTC