Consider the following example for two dependent set example.
int numNodes = 4;
List<(int, int)> edges = new()
{
(0, 1),
(0, 2),
(1, 2),
(1, 3),
(2, 3),
};
IEnumerable<int> getHeads(int i)
=> edges.Where(e => e.Item1 == i).Select(x => x.Item2);
Set i = Set("i").Represents("nodes").HasElementsUntil(numNodes);
Set j = Set("j").Represents("nodes having an arc from node i").DependsOn(i).HasElements(getHeads);
Here, set i has indices { 0, 1, 2, 3 }.
Set j, on the other hand, depends on set i. In other words, it will generate different elements for different values of i:
public SetBuilderDepends<Dimension3> DependsOn(
Set i,
Set j,
Set k
)