# Finding the sum of all subsets of a given set

Clear["Global*"]

Format[a[n_]] := Subscript[a, n];
Format[b[n_]] := Subscript[b, n];

list[1] = {{1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {-1, 1, 0}, {1, -1, 0}, {-1, -1,
0}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, {0, -1, 1}, {0,
1, -1}, {0, -1, -1}};

list[2] = {{2, 0, 0}, {0, 2, 0}, {0, 0, 2}, {-2, 0, 0}, {0, -2, 0}, {0,
0, -2}};


Create a replacement Rule for each list element

(repl[#] =
Array[{a, b}[[#]], Length[list[#]]]]) & /@ {1, 2}


The above code which @Bob Hanlon gave, turns list[1] in a form that list[1]={a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12}; where a1={1, 1, 0}, a2={1, 0, 1}, a3={0, 1, 1}, a4={-1, 1, 0}, a5={1, -1, 0}, a6={-1, -1, 0},a7= {-1,0,1}, a8= {1,0,-1}, a9= {-1,0,-1}, a10={0,-1,1}, a11={0,1,-1}, a12={0,-1,-1}, and turns list[2] in a form that list2={b1, b2, b3, b4, b5, b6} where b1={2, 0, 0}, b2={0, 2, 0}, b3={0, 0, 2}, b4={-2, 0, 0}, b5={0, -2, 0}, b6={0, 0, -2}.

Let me explain my problem with an example. Given a set of indexed variables, let say list[3]={[a[1],a[2],[b4]}. First ı want to find all subsets of list[3], that is list[3]={ {}, {a[1]}, {a[2]}, {[b4]}, {[a[1],a[2]},{[a[1],b[4]}, {a[2],b[4]}, {[a[1],a[2],[b4]} }. Then, ı want to sum up the elements of each subsets and represent each summation in the tuple form, and finally ı want to list all results with corresponding indexed variables.

So the final results may have the form {},0, {a[1]},{1, 1, 0}, {a[2]},{1, 0, 1}, {b[4]},{-2, 0, 0}, {[a[1],a[2]},{2, 1, 1}, {[a[1],b[4]},{-1,1,0}, {a[2],b[4]},{-1,0,1}, {[a[1],a[2],[b4]}, {0, 1, 1}. To make it more clear. Here, for example, {[a[1],a[2]},{2, 1, 1} should be read as: when we do [a[1]+[2], it gives {2, 1, 1} Similarly, {[a[1],a[2],[b4]}, {0, 1, 1} should be read as: when we do[a[1]+a[2]+[b4], it gives {0, 1, 1}.

I did the following algorithm which gives desired result, but it is not efficient. Because, I need to enter indexed elements into list[3] , and also need to enter corresponding tuples into list[4]. The code is given as follows:

FFF = list[3] = {a[1], a[2], b[4]};
list[4] = {{1, 1, 0}, {1, 0, 1}, {-2, 0, 0}};
K = Subsets[list[3]]
F = Subsets[list[4]]   For[i = 1, i <= Length[F], i++,
Print["(case No. " , i, ")", K[[i]], Total[F[[i]]]
]];


I would like to ask how can we update this code such as I need only to enter elements of list[3] ,and I got desired results. If it is not possible, then entering only elements of list[4] and getting desired result will be fine as well. I think Bob Hanlon's code which I explained in the beginning can be used, but I could not manage it.

Edit 2:

list1 = {{1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {-1, 1, 0}, {1, -1,
0}, {-1, -1, 0}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, {0, -1,
1}, {0, 1, -1}, {0, -1, -1}};

list2 = {{2, 0, 0}, {0, 2, 0}, {0, 0, 2}, {-2, 0, 0}, {0, -2, 0}, {0,
0, -2}};
a[n_] := {"a" <> "[" <> ToString@n <> "]", list1[[n]]}
b[n_] := {"b" <> "[" <> ToString@n <> "]", list2[[n]]}
f[newList_] := Total /@ Subsets[newList, {Length@newList}] // First
f[{a[1], a[2], b[4]}]


Edit:

list1 = {{1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {-1, 1, 0}, {1, -1,
0}, {-1, -1, 0}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, {0, -1,
1}, {0, 1, -1}, {0, -1, -1}};

list2 = {{2, 0, 0}, {0, 2, 0}, {0, 0, 2}, {-2, 0, 0}, {0, -2, 0}, {0,
0, -2}};
a[n_] := {"a" <> "[" <> ToString@n <> "]", list1[[n]]}
b[n_] := {"b" <> "[" <> ToString@n <> "]", list2[[n]]}
f[newList_] := Total /@ Subsets@newList // Column
f[{a[1], a[2], b[4]}]


Here is starting point. This can be improved.

list1 = {{1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {-1, 1, 0}, {1, -1,
0}, {-1, -1, 0}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, {0, -1,
1}, {0, 1, -1}, {0, -1, -1}};

list2 = {{2, 0, 0}, {0, 2, 0}, {0, 0, 2}, {-2, 0, 0}, {0, -2, 0}, {0,
0, -2}};
a[n_] := list1[[n]]
b[n_] := list2[[n]]
f[listName_, newList_] :=
Column@Transpose@{Total /@ Subsets@listName, Total /@ Subsets@newList}

f[{"a[1]", "a[2]", "b[4]"}, {a[1], a[2], b[4]}]
`