I have some reasonably small finite posets (on less than 20 points) and would like to iterate over all "downsets" in the poset, where a downset is a set closed under ≤ (so if x in X, and y ≤ x, then y in X). A downset can be specified (and for my purposes, is specified) by an antichain (a set of incomparable elements, the maximum elements of the downset).
I would therefore like to iterate over all antichains in the poset. The poset is small enough to iterate over all subsets, but I think one can do much better than this.
What are some efficient algorithms to iterate over the antichains of a finite poset?
The poset can be given (at your choice) by its transitive reduction (“Hasse diagram” or “covering relation”) or by the list of principle downsets.