expand method
(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;
}