in meta/src/main/java/org/arend/lib/meta/cong/CongVisitor.java [102:134]
private boolean visitArgs(List<? extends CoreExpression> args1, List<? extends CoreExpression> args2, List<CoreParameter> parameters, boolean paramExplicitness, List<ConcreteArgument> resultArgs) {
boolean abstracted = false;
int currentIndex = 0;
CoreParameter current = null;
for (int i = 0; i < args1.size(); i++) {
while (current == null || !current.hasNext()) {
current = parameters.get(currentIndex++);
}
Result arg = args1.get(i).accept(this, new ParamType(() -> new Result(null), args2.get(i)));
if (arg != null) {
boolean ok = true;
if (arg.expression != null) {
abstracted = true;
if (findFreeVar(current.getNext(), current.getBinding())) {
ok = false;
}
for (int j = currentIndex; j < parameters.size(); j++) {
if (findFreeVar(parameters.get(j), current.getBinding())) {
ok = false;
break;
}
}
}
if (ok) {
resultArgs.add(factory.arg(arg.getExpression(args1.get(i), factory), paramExplicitness && current.isExplicit()));
}
}
current = current.getNext();
}
return abstracted;
}