Hi Sukruti,
Yes you're right, ConstructDDIs needs at least 2(d+1) indices. But they can be freely chosen between the indices of the input expression and the free indices. You can for instance do the following in four dimensions:
```
ConstructDDIs[CD[-a]@CD[-b]@RiemannCD[-c, -d, -e, -f], {-a, -b, -c, -d}]
```
ConstructDDIs will give you all DDIs that come from over-antisymmetrization. I think there are no other kinds of DDIs, but I'm a little rusty on the topic so I'm happy to be proven wrong.
Note that the DDIs returned by ConstructDDIs are not necessarily irreducible. Some are linear combinations of each other or identically zero when multi-term symmetries are taken into account. In case you're interested in how to systematically construct and eliminate DDIs, have a look at the notebook I've had uploaded along with
https://arxiv.org/abs/1404.7452. While that paper is about a very specific subject, the methods in the notebook might be generic enough to suit your use case.
Best,
Teake