-- Lean 4 proof step from Mathlib.CategoryTheory.Monoidal.Functor (goal)
Goal:
C : Type u₁
inst : Category.{v₁, u₁} C
inst_1 : MonoidalCategory.{v₁, u₁} C
D : Type u₂
inst_2 : Category.{v₂, u₂} D
inst_3 : MonoidalCategory.{v₂, u₂} D
E : Type u₃
inst_4 : Category.{v₃, u₃} E
inst_5 : MonoidalCategory.{v₃, u₃} E
C' : Type u₁'
inst_6 : Category.{v₁', u₁'} C'
F : Functor.{v₁, v₂, u₁, u₂} C D
G : Functor.{v₂, v₁, u₂, u₁} D C
adj : F ⊣ G
inst_7 : G.LaxMonoidal
x : C
⊢ Eq.{v₁ + 1} (α := x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))
    (((adj.homEquiv x (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
            Equiv.{v₂ + 1, v₁ + 1}
              (F.obj x ⟶ tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2)))
              (x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))) :
          (a : F.obj x ⟶ F.obj x ⊗ 𝟙_ D) → x ⟶ G.obj (F.obj x ⊗ 𝟙_ D))
        (Iso.inv (ρ_ (F.obj x))) :
      x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))
    (((adj.homEquiv x (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
            Equiv.{v₂ + 1, v₁ + 1}
              (F.obj x ⟶ tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2)))
              (x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))) :
          (a : F.obj x ⟶ F.obj x ⊗ 𝟙_ D) → x ⟶ G.obj (F.obj x ⊗ 𝟙_ D))
        (CategoryStruct.comp (Y := F.obj (tensorObj.{v₁, u₁} (𝒞 := inst) x (tensorUnit.{v₁, u₁} C (𝒞 := inst))))
          (F.map (Iso.inv (ρ_ x)))
          (CategoryStruct.comp (Y :=
            tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst))))
            (((Equiv.symm
                    (adj.homEquiv (tensorObj.{v₁, u₁} (𝒞 := inst) x (tensorUnit.{v₁, u₁} C (𝒞 := inst)))
                      (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst))))) :
                  Equiv.{v₁ + 1, v₂ + 1}
                    (tensorObj.{v₁, u₁} (𝒞 := inst) x (tensorUnit.{v₁, u₁} C (𝒞 := inst)) ⟶
                      G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst)))))
                    (F.obj (tensorObj.{v₁, u₁} (𝒞 := inst) x (tensorUnit.{v₁, u₁} C (𝒞 := inst))) ⟶
                      tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst))))) :
                (a : x ⊗ 𝟙_ C ⟶ G.obj (F.obj x ⊗ F.obj (𝟙_ C))) → F.obj (x ⊗ 𝟙_ C) ⟶ F.obj x ⊗ F.obj (𝟙_ C))
              ((adj.unit.app x ⊗ₘ adj.unit.app (tensorUnit.{v₁, u₁} C (𝒞 := inst))) ≫
                μ G (F.obj x) (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst)))))
            (F.obj x ◁
              ((Equiv.symm (adj.homEquiv (tensorUnit.{v₁, u₁} C (𝒞 := inst)) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
                    Equiv.{v₁ + 1, v₂ + 1}
                      (tensorUnit.{v₁, u₁} C (𝒞 := inst) ⟶ G.obj (tensorUnit.{v₂, u₂} D (𝒞 := inst_2)))
                      (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst)) ⟶ tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
                  (a : 𝟙_ C ⟶ G.obj (𝟙_ D)) → F.obj (𝟙_ C) ⟶ 𝟙_ D)
                (ε G)))) :
      x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))
have rw : Eq.{v₁ + 1} (α := x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))
  (((adj.homEquiv x (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
          Equiv.{v₂ + 1, v₁ + 1}
            (F.obj x ⟶ tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2)))
            (x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))) :
        (a : F.obj x ⟶ F.obj x ⊗ 𝟙_ D) → x ⟶ G.obj (F.obj x ⊗ 𝟙_ D))
      (Iso.inv (ρ_ (F.obj x))) :
    x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))
  (CategoryStruct.comp (Y := tensorObj.{v₁, u₁} (𝒞 := inst) x (tensorUnit.{v₁, u₁} C (𝒞 := inst))) (Iso.inv (ρ_ x))
      ((adj.unit.app x ≫ 𝟙 (G.obj (F.obj x)) ⊗ₘ
          adj.unit.app (tensorUnit.{v₁, u₁} C (𝒞 := inst)) ≫
            G.map
              (((Equiv.symm (adj.homEquiv (tensorUnit.{v₁, u₁} C (𝒞 := inst)) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
                    Equiv.{v₁ + 1, v₂ + 1}
                      (tensorUnit.{v₁, u₁} C (𝒞 := inst) ⟶ G.obj (tensorUnit.{v₂, u₂} D (𝒞 := inst_2)))
                      (F.obj (tensorUnit.{v₁, u₁} C (𝒞 := inst)) ⟶ tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
                  (a : 𝟙_ C ⟶ G.obj (𝟙_ D)) → F.obj (𝟙_ C) ⟶ 𝟙_ D)
                (ε G))) ≫
        μ G (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))) :
    x ⟶ G.obj (tensorObj.{v₂, u₂} (𝒞 := inst_2) (F.obj x) (tensorUnit.{v₂, u₂} D (𝒞 := inst_2))))
Tactic: rw [Adjunction.homEquiv_naturality_left, Adjunction.homEquiv_naturality_right,
      Equiv.apply_symm_apply, assoc, ← μ_natural_right, ← id_tensorHom,
      tensorHom_comp_tensorHom_assoc]