public static boolean unify()

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);
  }