public Sequence and(Sequence s) { Sequence ret = dup(); ret.needs.add(s); s.needed.add(ret); return ret; }
public Sequence not(Sequence s) { Sequence ret = dup(); ret.hates.add(s); s.hated.add(ret); return ret; }
+ public Iterable<Sequence> needs() { return needs; }
+ public Iterable<Sequence> hates() { return hates; }
+
protected final Element[] elements;
final HashSet<Sequence> needed = new HashSet<Sequence>();