public static double estimateGoalFanout(Proposition goal) {
    { Keyword testValue000 = goal.kind;

      if (testValue000 == Logic.KWD_ISA) {
        return (NamedDescription.estimateCardinalityOfExtension(Logic.getDescription(((Surrogate)(goal.operator)))));
      }
      else if ((testValue000 == Logic.KWD_FUNCTION) ||
          (testValue000 == Logic.KWD_PREDICATE)) {
        return (Proposition.estimatePredicateGoalFanout(goal));
      }
      else if (testValue000 == Logic.KWD_IMPLIES) {
        return (Logic.ESTIMATED_CARDINALITY_OF_SUBSET_OF);
      }
      else if (testValue000 == Logic.KWD_EQUIVALENT) {
        if (Logic.argumentBoundP((goal.arguments.theArray)[0]) ||
            Logic.argumentBoundP((goal.arguments.theArray)[1])) {
          return (1.0);
        }
        else {
          return (Stella.NULL_FLOAT);
        }
      }
      else if ((testValue000 == Logic.KWD_NOT) ||
          (testValue000 == Logic.KWD_FAIL)) {
        return (Stella.NULL_FLOAT);
      }
      else {
        { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

          stream000.nativeStream.print("`" + testValue000 + "' is not a valid case option");
          throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
        }
      }
    }
  }