Use //. to apply a list of rules exhaustively (doc).
SimplifyKronecker[expr_]SimplifyKroneckerSum[expr_] = expr //. { Sum[y_ KroneckerDelta[r_, s_], {s_, 1, p_}, z__] :> Sum[(y /. s -> r), z], Sum[y_ KroneckerDelta[r_, s_], {s_, 1, p_}] :> (y /. s -> r)}; expr = Sum[Log[Sum[A[j, k, l]*B[j, k, l], {l, 1, L}]], {j, 1, J}, {k, 1, K}] expr = Simplify[D[expr, A[a, b, c]]] SimplifyKronecker[expr]SimplifyKroneckerSum[expr]