/** Concatenates terms of sort Set to this builder */ public void concatenate(Term... terms) { for (Term term : terms) { if (!term.sort().equals(Sort.SET)) { throw KEMException.criticalError( "unexpected sort " + term.sort() + " of concatenated term " + term + "; expected " + Sort.SET); } if (term instanceof BuiltinSet) { BuiltinSet set = (BuiltinSet) term; elements.addAll(set.elements); patternsBuilder.addAll(set.collectionPatterns); functionsBuilder.addAll(set.collectionFunctions); variablesBuilder.addAll(set.collectionVariables); } else if (term instanceof KItem && ((KLabel) ((KItem) term).kLabel()).isPattern()) { patternsBuilder.add((KItem) term); } else if (term instanceof KItem && ((KLabel) ((KItem) term).kLabel()).isFunction()) { functionsBuilder.add(term); } else if (term instanceof Variable) { variablesBuilder.add((Variable) term); } else { throw KEMException.criticalError("unexpected concatenated term" + term); } } }