Zulip Chat Archive

Stream: new members

Topic: showing that internalizeHom ≫ evaluation map = original hom


Matt Diamond (Jun 06 2025 at 16:58):

I'm learning about category theory and I'm having trouble proving the following basic fact:

import Mathlib

open CategoryTheory MonoidalCategory CartesianMonoidalCategory

variable {C : Type*} [Category C]
  [CartesianMonoidalCategory C]
  [CartesianClosed C]
  {A B : C}

example {x : 𝟙_ C  A} {f : A  B}
  : lift x (internalizeHom f)  (exp.ev A).app B = x  f := sorry

I'm guessing there's a very elegant one-liner that can solve this (something involving adjunctions?) but I'm not sure what it is.

Aaron Liu (Jun 06 2025 at 18:58):

I'm not very familiar with this part of the library. This is what I came up with:

import Mathlib

theorem CategoryTheory.MonoidalCategory.tensorLeft_map
    {C : Type u} [CategoryTheory.Category.{v, u} C]
    [CategoryTheory.MonoidalCategory C] (X : C) {Y Z : C}
    (f : Y  Z) :
    (tensorLeft X).map f = whiskerLeft X f := rfl

open CategoryTheory MonoidalCategory CartesianMonoidalCategory

variable {C : Type*} [Category C]
  [CartesianMonoidalCategory C]
  [CartesianClosed C]
  {A B : C}

example {x : 𝟙_ C  A} {f : A  B} : lift x (internalizeHom f)  (exp.ev A).app B = x  f := by
  rw [ CartesianClosed.uncurry_id_eq_ev, internalizeHom,
    CartesianClosed.curry, CartesianClosed.uncurry,
    (exp.adjunction A).homEquiv_naturality_right,
    (exp.adjunction A).homEquiv_symm_id,
    (exp.adjunction A).homEquiv_apply,
     Category.comp_id x, Category.assoc,
     (exp A).map_comp,  lift_map, id_tensorHom,
     tensorLeft_map, Category.assoc,
    (exp.adjunction A).counit_naturality,
     Category.comp_id x,
     Category.id_comp ((exp.adjunction A).unit.app (𝟙_ C)),
     lift_map, id_tensorHom,  tensorLeft_map, Category.assoc,
    (exp.adjunction A).left_triangle_components_assoc (𝟙_ C),
    Category.comp_id, Category.comp_id,  lift_fst_assoc x (𝟙 (𝟙_ C)) f]
  rfl

Matt Diamond (Jun 06 2025 at 19:01):

Man, that was... more complicated than I thought it would be. Could be a good golfing exercise. Thanks a lot!

Bhavik Mehta (Jun 07 2025 at 03:02):

import Mathlib

open CategoryTheory MonoidalCategory CartesianMonoidalCategory CartesianClosed

variable {C : Type*} [Category C] [CartesianMonoidalCategory C] [CartesianClosed C] {A B : C}

example {x : 𝟙_ C  A} {f : A  B} : lift x (internalizeHom f)  (exp.ev A).app B = x  f := calc
  _ = lift x (𝟙 _)  uncurry (internalizeHom f) := by simp [uncurry_eq]
  _ = x  f := by simp [internalizeHom]

Last updated: Dec 20 2025 at 21:32 UTC