static Set philosophyBot_allPartsOfLHS(PhilosophyBot1.LogicRule rule) { new Set out; philosophyBot_allPartsOfLHS_collect(rule.lhs, out); ret out; } svoid philosophyBot_allPartsOfLHS_collect(O o, Set out) { if (!set.add(out)) ret; if (o cast PhilosophyBot1.And) { philosophyBot_allPartsOfLHS_collect(o.a, out); philosophyBot_allPartsOfLHS_collect(o.b, out); } }