static IterableIterator gSat(S statement) { final new L vars; S pat = upperCaseVarsToStars(statement, vars); ret mapI(func(Matches m) { new SS map; for (int i = 0; i < l(m.m); i++) map.put(vars.get(i), m.unq(i)); ret map; }, gJMatch(pat)); }