!7 cmodule TrailsTree { switchable S solverModule; transient O root; transient JTree tree; transient SingleComponentPanel scp; visual scp = singleComponentPanel(makeTree()); JTree makeTree() { ret tree = jDynamicTree(root, lambda1 getChildren); } L getChildren(O trail) { if (isShortNamed LogicRule(trail)) trail = getOpt trail(trail); if (trail instanceof Pair) trail = pairB((Pair) trail); if (trail cast Map) ret mapToPairs(trail); if (trail cast L) ret trail; null; } start { if (empty(solverModule)) setField(solverModule := (S) vmBus_query winogradSolver()); virtual PhilosophyBot1 engine = dm_rget engine(solverModule); L logicRules = cloneList((Cl) rget logicRules(engine)); Map logicRuleIndex = indexByField n(logicRules); L> trails = shallowImportAll((Iterable) rcall deducedFactsWithTrails(engine)); setField(root := concatLists( logicRules, map withTrailToPair(trails))); } }