Zulip Chat Archive
Stream: general
Topic: Monoidal closed structure induced by equivalence
Antoine Labelle (Oct 11 2022 at 15:52):
Hi,
I'm trying to provide basic simp lemmas for the monoidal closed structure induced by a monoidal equivalence and would appreciate some help with the use of haveI
in lemma statements. Here is my attempt so far; the first lemma works fine but in the second one I can't figure out how to tell Lean that the morphisms on both sides of the equal sign have the same source and the same target.
import category_theory.closed.monoidal
universes u₁ v₁ u₂ v₂
open category_theory category_theory.monoidal_closed
variables {C : Type u₂} [category.{v₂} C] [monoidal_category.{v₂} C]
variables {D : Type u₂} [category.{v₂} D] [monoidal_category.{v₂} D]
lemma of_equiv_ihom_obj (F : monoidal_functor C D) [is_equivalence F.to_functor] [h : monoidal_closed D]
(X Y : C) :
(by haveI := of_equiv F; exact (ihom X).obj Y) =
F.inv.obj ((ihom (F.obj X)).obj (F.obj Y)) := rfl
example (F : monoidal_functor C D) [is_equivalence F.to_functor] [h : monoidal_closed D]
(X : C) {Y Z : C} (f : Y ⟶ Z) :
(by haveI := of_equiv F; exact (ihom X).map f) =
F.inv.map ((ihom (F.obj X)).map (F.map f)) := rfl
Adam Topaz (Oct 11 2022 at 15:59):
just change the haveI
to a letI
.
Adam Topaz (Oct 11 2022 at 15:59):
These instances involve data (some adjoints)
Adam Topaz (Oct 11 2022 at 15:59):
the first haveI
should also be a letI
btw
Antoine Labelle (Oct 11 2022 at 17:44):
Thanks for the answer, that works. Now I'm having trouble applying these lemmas. In the following code, how can I get Lean to simplify using of_equiv_ihom_obj
?
import category_theory.closed.functor_category
import representation_theory.Action
universes u u₁ u₂ v₁ v₂
section
open category_theory category_theory.monoidal_closed
variables {C : Type u₂} [category.{v₂} C] [monoidal_category.{v₂} C]
variables {D : Type u₂} [category.{v₂} D] [monoidal_category.{v₂} D]
@[simp] lemma of_equiv_ihom_obj (F : monoidal_functor C D) [is_equivalence F.to_functor] [h : monoidal_closed D]
(X Y : C) :
(by letI := of_equiv F; exact (ihom X).obj Y) =
F.inv.obj ((ihom (F.obj X)).obj (F.obj Y)) := rfl
end
section
open category_theory Action
variables (V : Type (u+1)) [large_category V] [monoidal_category V]
variables (H : Group.{u})
noncomputable theory
instance [monoidal_closed V] : monoidal_closed (single_obj (H : Mon.{u}) ⥤ V) :=
by { change monoidal_closed (single_obj H ⥤ V), apply_instance }
instance [monoidal_closed V] : monoidal_closed (Action V H) :=
monoidal_closed.of_equiv (functor_category_monoidal_equivalence V H)
lemma ihom_obj_ρ [monoidal_closed V] (X Y : Action V H) (g : H) :
((ihom X).obj Y).ρ g =
(monoidal_closed.pre (X.ρ (g⁻¹ : H))).app Y.V ≫ (ihom X.V).map (Y.ρ g) :=
begin
rw [of_equiv_ihom_obj (functor_category_monoidal_equivalence V H) X Y], --fails
sorry
end
end
Adam Topaz (Oct 11 2022 at 18:00):
i think it would be better to obtain isomorphisms between internal homs when you have a monoidal equivalence between monoidal closed categories, and work with those isomorhpisms instead.
Eric Wieser (Oct 11 2022 at 18:04):
I think haveI
is fine here
Eric Wieser (Oct 11 2022 at 18:04):
have
vs let
only makes a difference within a tactic block, not between different tactic blocks
Adam Topaz (Oct 11 2022 at 18:06):
Well there is obviously some difference in this case, beucase haveI
doesn't work, but letI
does.
Antoine Labelle (Oct 11 2022 at 18:33):
Adam Topaz said:
i think it would be better to obtain isomorphisms between internal homs when you have a monoidal equivalence between monoidal closed categories, and work with those isomorhpisms instead.
So
lemma ihom_obj_V [monoidal_closed V] (X Y : Action V H) :
((ihom X).obj Y).V = ((ihom X.V).obj Y.V) := rfl
should be an isomorphism and ihom_obj_ρ
should be stated in terms of conjugation by this isomorphism? I guess that makes sense, though it quickly makes very messy statements.
Last updated: Dec 20 2023 at 11:08 UTC