in meta/src/main/java/org/arend/lib/pattern/PatternUtils.java [190:210]
public static boolean unify(CorePattern pattern1, CorePattern pattern2, Map<CoreBinding, CorePattern> subst1, Map<CoreBinding, CorePattern> subst2) {
if (pattern1 == null || pattern2 == null || pattern1.isAbsurd() && pattern2.isAbsurd()) {
return true;
}
if (pattern1.getBinding() != null || pattern2.getBinding() != null) {
if (subst1 != null && pattern1.getBinding() != null) {
subst1.put(pattern1.getBinding(), pattern2);
}
if (subst2 != null && pattern2.getBinding() != null) {
subst2.put(pattern2.getBinding(), pattern1);
}
return true;
}
if (pattern1.getConstructor() != pattern2.getConstructor() || pattern1.isAbsurd() || pattern2.isAbsurd()) {
return false;
}
return unify(pattern1.getSubPatterns(), pattern2.getSubPatterns(), subst1, subst2);
}