public static boolean functionInducedExistsP(Proposition proposition) {
    if (proposition.kind == Logic.KWD_EXISTS) {
      { Stella_Object firstargument = (proposition.arguments.theArray)[0];

        if (Stella_Object.isaP(firstargument, Logic.SGT_LOGIC_PROPOSITION) &&
            (((Proposition)(firstargument)).kind == Logic.KWD_AND)) {
          { Vector existsvariables = ((Vector)(KeyValueList.dynamicSlotValue(proposition.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, null)));
            Proposition andprop = ((Proposition)(firstargument));
            Vector andarguments = andprop.arguments;
            int nonfunctionscount = 0;

            { boolean alwaysP000 = true;

              { PatternVariable variable = null;
                Vector vector000 = existsvariables;
                int index000 = 0;
                int length000 = vector000.length();

                loop000 : for (;index000 < length000; index000 = index000 + 1) {
                  variable = ((PatternVariable)((vector000.theArray)[index000]));
                  { boolean testValue000 = false;

                    { boolean foundP000 = false;

                      { Proposition arg = null;
                        Vector vector001 = andarguments;
                        int index001 = 0;
                        int length001 = vector001.length();

                        loop001 : for (;index001 < length001; index001 = index001 + 1) {
                          arg = ((Proposition)((vector001.theArray)[index001]));
                          if ((arg.kind == Logic.KWD_FUNCTION) &&
                              (arg.arguments.last() == variable)) {
                            foundP000 = true;
                            break loop001;
                          }
                        }
                      }
                      testValue000 = foundP000;
                    }
                    testValue000 = !testValue000;
                    if (testValue000) {
                      alwaysP000 = false;
                      break loop000;
                    }
                  }
                }
              }
              if (alwaysP000) {
                { Proposition arg = null;
                  Vector vector002 = andarguments;
                  int index002 = 0;
                  int length002 = vector002.length();

                  for (;index002 < length002; index002 = index002 + 1) {
                    arg = ((Proposition)((vector002.theArray)[index002]));
                    if ((!(arg.kind == Logic.KWD_FUNCTION)) &&
                        (!BooleanWrapper.coerceWrappedBooleanToBoolean(arg.variableTypeP()))) {
                      nonfunctionscount = nonfunctionscount + 1;
                    }
                  }
                }
                return (nonfunctionscount == 1);
              }
            }
          }
        }
      }
    }
    return (false);
  }