static BasicLogicRule ai_sharedPhrasesIntoDollarVars(BasicLogicRule r) { LS phrases = antiFilter isDollarVar(sharedPhrases(r.lhs, r.rhs)); SS map = ciMapWithUnusedCountingDollarVars(phrases, linesLL(r.lhs, r.rhs)); ret mapBasicLogicRule(r, s -> replaceCodeTokensUsingMap(s, map)); }