# A Combinatorics Problem - Product Rule Indices

I have a particular combinatorics problem where I would like to generate lists that look like this:

• (n=1): [,[]], [[],]
• (n=2): [[1,2],[]], [,], [,], [[],[1,2]]
• (n=3): [[1,2,3],[]], [[1,2],], [[1,3],], [[2,3],], [,[2,3]], [,[1,3]], [,[1,2]], [[],[1,2,3]]

These sorts of combinations come from taking derivatives with respect to different variables of a product of two functions. Using subscripts $1,2,3$ to denote differentiation with respect to the variables $z_1,z_2,z_3$, respectively, I'm looking at computations of the form:

• $\partial_{z_1} (fg) = f_1g + f g_1$
• $\partial_{z_1} \partial_{z_2} (fg) = f_{12}g + f_1 g_2 + f_2 g_1 + f g_{12}$
• $\partial_{z_1} \partial_{z_2} \partial_{z_3} (fg) = f_{123}g + f_{12}g_3 + f_{13}g_2 + f_{23}g_1 + f_1g_{23} + f_2g_{13} + f_3g_{12} + f g_{123}$

Is there a quick way to generate such a list in Sage? I'm not actually looking to perform these symbolic derivatives. I just used the differentiation to demonstrate where these combinations come from. (And check with you whether or not I'm computing them correctly.)

edit retag close merge delete

Sort by » oldest newest most voted

I solved my own problem. The solution uses the function partitions_set. However, it only generates half of the derivatives I want. The other half is obtained by transposing / reversing the outputs:

sage: derivs = [1,2]
sage: for s in partitions_set(derivs,2):
print s
s.reverse()
print s
[, ]
[, ]
sage: s = [derivs, []]; print s
[[1, 2], []]
sage: s.reverse(); print s
[[], [1, 2]]


For the case when $n=3$ I get what I want as well:

sage: derivs = [1,2,3]
sage: for s in partitions_set(derivs,2):
print s
s.reverse()
print s
[, [2, 3]]
[[2, 3], ]
[[1, 2], ]
[, [1, 2]]
[[1, 3], ]
[, [1, 3]]
sage: s = [derivs, []]; print s
[[1, 2, 3], []]
sage: s.reverse(); print s
[[], [1, 2, 3]]


At the risk of sounding full of myself I'm going to answer my own question. Thanks to everyone who thought about it, though.

more

I'm not sure if that's necessary. I just didn't want to appear that I was spamming ask.sage or trying to increase my karma. I was also, in part, trying to make a joke but I'm terrible at those. :)

that's the thing I'm not sure why people should worry about these issues, it's kind of silly IMO.