expand method

  1. @override
Logic expand()
override

(a|b|...) & c == (a&c) | (b&c) | ...

Implementation

@override
Logic expand() {
  // first locate r
  for (int i = 0; i < args.length; i++) {
    final arg = args[i];
    if (arg is Or) {
      final aRest = args.sublist(0, i) + args.sublist(i + 1);
      final orTerms = [
        for (final a in arg.args) And.fromList([...aRest, a]),
      ];
      for (int j = 0; j < orTerms.length; j++) {
        if (orTerms[j] is And) {
          orTerms[j] = (orTerms[j] as And).expand();
        }
      }
      return Or.fromList(orTerms);
    }
  }

  return this;
}