* @param d2
   * @return boolean
   */
  public static boolean disjointTermsP(Description d1, Description d2) {
    if (Logic.SGT_PL_KERNEL_KB_PARTITION_MEMBERSHIP.surrogateValue == null) {
      return (false);
    }
    if (Logic.$CYC_KLUDGES_ENABLEDp$) {
      if (Stella_Object.isaP(d1, Logic.SGT_LOGIC_NAMED_DESCRIPTION) &&
          Stella_Object.isaP(d2, Logic.SGT_LOGIC_NAMED_DESCRIPTION)) {
        return (TruthValue.trueTruthValueP(Logic.evaluateSelectionPattern(Logic.makeRelationPattern2(Logic.SGT_PL_KERNEL_KB_DISJOINT, d1, d2))));
      }
    }
    { List tracedkeywords = Stella.$TRACED_KEYWORDS$;
      boolean disjointP = false;

      if (!(Logic.$TRACE_DISJOINTNESS_SUBGOALSp$)) {
        Stella.$TRACED_KEYWORDS$ = null;
      }
      { Object old$Evaluationmode$000 = Logic.$EVALUATIONMODE$.get();

        try {
          Native.setSpecial(Logic.$EVALUATIONMODE$, Logic.KWD_EXTENSIONAL_ASSERTION);
          { MemoizationTable memoTable000 = null;
            Cons memoizedEntry000 = null;
            Stella_Object memoizedValue000 = null;

            if (Stella.$MEMOIZATION_ENABLEDp$) {
              memoTable000 = ((MemoizationTable)(Logic.SGT_LOGIC_F_DISJOINT_TERMSp_MEMO_TABLE_000.surrogateValue));
              if (memoTable000 == null) {
                Surrogate.initializeMemoizationTable(Logic.SGT_LOGIC_F_DISJOINT_TERMSp_MEMO_TABLE_000, "(:MAX-VALUES 10000 :TIMESTAMPS (:META-KB-UPDATE))");
                memoTable000 = ((MemoizationTable)(Logic.SGT_LOGIC_F_DISJOINT_TERMSp_MEMO_TABLE_000.surrogateValue));
              }
              memoizedEntry000 = MruMemoizationTable.lookupMruMemoizedValue(((MruMemoizationTable)(memoTable000)), d1, d2, ((Context)(Stella.$CONTEXT$.get())), Stella.MEMOIZED_NULL_VALUE, -1);
              memoizedValue000 = memoizedEntry000.value;
            }
            if (memoizedValue000 != null) {
              if (memoizedValue000 == Stella.MEMOIZED_NULL_VALUE) {
                memoizedValue000 = null;
              }
            }
            else {
              memoizedValue000 = (Logic.applyCachedAsk(Cons.list$(Cons.cons(Logic.SYM_LOGIC_pD1, Cons.cons(Logic.SYM_LOGIC_pD2, Cons.cons(Stella.NIL, Stella.NIL)))), Cons.list$(Cons.cons(Logic.SYM_LOGIC_DISJOINT, Cons.cons(Logic.SYM_LOGIC_pD1, Cons.cons(Logic.SYM_LOGIC_pD2, Cons.cons(Stella.NIL, Stella.NIL))))), Cons.consList(Cons.cons(d1, Cons.cons(d2, Stella.NIL))), Cons.consList(Stella.NIL), Logic.SYM_LOGIC_F_DISJOINT_TERMSp_QUERY_001, new Object[1]) ? Stella.TRUE_WRAPPER : Stella.FALSE_WRAPPER);
              if (Stella.$MEMOIZATION_ENABLEDp$) {
                memoizedEntry000.value = ((memoizedValue000 == null) ? Stella.MEMOIZED_NULL_VALUE : memoizedValue000);
              }
            }
            disjointP = BooleanWrapper.coerceWrappedBooleanToBoolean(((BooleanWrapper)(memoizedValue000)));
          }

        } finally {
          Logic.$EVALUATIONMODE$.set(old$Evaluationmode$000);
        }
      }
      Stella.$TRACED_KEYWORDS$ = tracedkeywords;
      return (disjointP);
    }
  }