static Set philosophyBot_allPartsOfLHS(PhilosophyBot1.LogicRule rule) { new Set out; philosophyBot_allPartsOfLHS_collect(rule.lhs, out); O rhs = rule.rhs; print("RHS type: " + className(rhs)); if (rhs cast PhilosophyBot1.LogicRule) philosophyBot_allPartsOfLHS_collect(rhs, out); ret out; } svoid philosophyBot_allPartsOfLHS_collect(O o, Set out) { if (!out.add(o)) ret; if (o cast PhilosophyBot1.And) { philosophyBot_allPartsOfLHS_collect(o.a, out); philosophyBot_allPartsOfLHS_collect(o.b, out); } }