-- Lean 4 proof step from Mathlib.LinearAlgebra.TensorProduct.Tower (goal)
Goal:
R : Type uR
A : Type uA
M : Type uM
N : Type uN
P : Type uP
Q : Type uQ
inst : CommSemiring R
inst_1 : Semiring A
inst_2 : Algebra R A
inst_3 : AddCommMonoid M
inst_4 : Module R M
inst_5 : Module A M
inst_6 : IsScalarTower R A M
inst_7 : AddCommMonoid N
inst_8 : Module R N
inst_9 : AddCommMonoid P
inst_10 : Module R P
inst_11 : Module A P
inst_12 : IsScalarTower R A P
inst_13 : AddCommMonoid Q
inst_14 : Module R Q
f : M →ₗ[A] P
g₁ g₂ : N →ₗ[R] Q
x : M
x_1 : N
⊢ Eq (α := P ⊗[R] Q)
    (((((curry (map f (g₁ + g₂)) : M →ₗ[A] N →ₗ[R] P ⊗[R] Q) : (a : M) → N →ₗ[R] P ⊗[R] Q) x : N →ₗ[R] P ⊗[R] Q) :
          (a : N) → P ⊗[R] Q)
        x_1 :
      P ⊗[R] Q)
    (((((curry
                    (HAdd.hAdd (α := M ⊗[R] N →ₗ[A] P ⊗[R] Q) (β := M ⊗[R] N →ₗ[A] P ⊗[R] Q)
                      (map f g₁ : M ⊗[R] N →ₗ[A] P ⊗[R] Q) (map f g₂ : M ⊗[R] N →ₗ[A] P ⊗[R] Q)) :
                  M →ₗ[A] N →ₗ[R] P ⊗[R] Q) :
                (a : M) → N →ₗ[R] P ⊗[R] Q)
              x :
            N →ₗ[R] P ⊗[R] Q) :
          (a : N) → P ⊗[R] Q)
        x_1 :
      P ⊗[R] Q)
have a : Eq (α := P ⊗[R] Q)
  ((((TensorProduct.curry
                ((↑R :
                    {S : Type uA} →
                      {M : Type (max uM uN)} →
                        {M₂ : Type (max uP uQ)} →
                          [inst : Semiring R] →
                            [inst_15 : Semiring S] →
                              [inst_16 : AddCommMonoid M] →
                                [inst_17 : AddCommMonoid M₂] →
                                  [inst_18 : Module R M] →
                                    [inst_19 : Module R M₂] →
                                      [inst_20 : Module S M] →
                                        [inst_21 : Module S M₂] →
                                          [LinearMap.CompatibleSMul M M₂ R S] → (fₗ : M →ₗ[S] M₂) → M →ₗ[R] M₂)
                  (map f (g₁ + g₂) : M ⊗[R] N →ₗ[A] P ⊗[R] Q)) :
              (a : M) → N →ₗ[R] P ⊗[R] Q)
            x :
          N →ₗ[R] P ⊗[R] Q) :
        (a : N) → P ⊗[R] Q)
      x_1 :
    P ⊗[R] Q)
  ((((TensorProduct.curry
                ((↑R :
                    {S : Type uA} →
                      {M : Type (max uM uN)} →
                        {M₂ : Type (max uP uQ)} →
                          [inst : Semiring R] →
                            [inst_15 : Semiring S] →
                              [inst_16 : AddCommMonoid M] →
                                [inst_17 : AddCommMonoid M₂] →
                                  [inst_18 : Module R M] →
                                    [inst_19 : Module R M₂] →
                                      [inst_20 : Module S M] →
                                        [inst_21 : Module S M₂] →
                                          [LinearMap.CompatibleSMul M M₂ R S] → (fₗ : M →ₗ[S] M₂) → M →ₗ[R] M₂)
                  (HAdd.hAdd (α := M ⊗[R] N →ₗ[A] P ⊗[R] Q) (β := M ⊗[R] N →ₗ[A] P ⊗[R] Q)
                    (map f g₁ : M ⊗[R] N →ₗ[A] P ⊗[R] Q) (map f g₂ : M ⊗[R] N →ₗ[A] P ⊗[R] Q))) :
              (a : M) → N →ₗ[R] P ⊗[R] Q)
            x :
          N →ₗ[R] P ⊗[R] Q) :
        (a : N) → P ⊗[R] Q)
      x_1 :
    P ⊗[R] Q)
Tactic: simp_rw [curry_apply, TensorProduct.curry_apply, restrictScalars_apply, add_apply, map_tmul,
    add_apply, tmul_add]