private NewSubstitutionPair traverseConstructionNode(
ImmutableSubstitution<? extends ImmutableTerm> tau,
ImmutableSubstitution<? extends ImmutableTerm> formerTheta,
ImmutableSet<Variable> formerV, ImmutableSet<Variable> newV) throws QueryNodeSubstitutionException {
ImmutableSubstitution<ImmutableTerm> eta = ImmutableUnificationTools.computeMGUS(formerTheta, tau)
.orElseThrow(() -> new QueryNodeSubstitutionException("The descending substitution " + tau
+ " is incompatible with " + this));
ImmutableSubstitution<? extends ImmutableTerm> normalizedEta = normalizeEta(eta, newV);
ImmutableSubstitution<ImmutableTerm> newTheta = extractNewTheta(normalizedEta, newV);
ImmutableSubstitution<? extends ImmutableTerm> delta = computeDelta(formerTheta, newTheta, normalizedEta, formerV);
return new NewSubstitutionPair(newTheta, delta);
}