public CycAssertion readAssertion()
          throws IOException {
    CycList formula = null;
    Object formulaObject = null;
    CycAssertion cycAssertion = null;
    formulaObject = readObject();
    if (formulaObject.toString().equals("NIL")) {
      // bypass invalid assertion mt
      readObject();
      cycAssertion = CycObjectFactory.INVALID_ASSERTION;
      isInvalidObject = true;
    } else {
      try {
        formula = (CycList) formulaObject;
        CycObject mt = (CycObject) readObject();
        cycAssertion = new CycAssertion(formula, mt);
      } catch (ClassCastException e) {
        System.err.println("formulaObject " + formulaObject.toString() + "(" + formulaObject.getClass().getName() + ")");
      }
    }
    if (trace == API_TRACE_DETAILED) {
      debugNote("readAssertion: " + cycAssertion.toString());
    }

    return cycAssertion;
  }