* @param module
   * @param environment
   * @return PlIterator
   */
  public static PlIterator conceive(Stella_Object sentence, Module module, Environment environment) {
    if (sentence == null) {
      return (null);
    }
    else {
      { Module mdl000 = module;
        Context cxt000 = mdl000;

        if (mdl000 == null) {
          mdl000 = ((Module)(Stella.$MODULE$.get()));
          cxt000 = ((Context)(Stella.$CONTEXT$.get()));
        }
        { Object old$Module$000 = Stella.$MODULE$.get();
          Object old$Context$000 = Stella.$CONTEXT$.get();

          try {
            Native.setSpecial(Stella.$MODULE$, mdl000);
            Native.setSpecial(Stella.$CONTEXT$, cxt000);
            environment = environment;
            synchronized (Logic.$POWERLOOM_LOCK$) {
              { Stella_Object propositions = Logic.conceiveFormula(sentence);

                if (propositions == null) {
                  { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

                    { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

                      try {
                        Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
                        stream000.nativeStream.println("ERROR: Failed to conceive `" + sentence + "'.");
                        Logic.helpSignalPropositionError(stream000, Logic.KWD_ERROR);

                      } finally {
                        Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
                      }
                    }
                    throw ((PropositionError)(PropositionError.newPropositionError(stream000.theStringReader()).fillInStackTrace()));
                  }
                }
                { Surrogate testValue000 = Stella_Object.safePrimaryType(propositions);

                  if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PROPOSITION)) {
                    { Proposition propositions000 = ((Proposition)(propositions));

                      return (PLI.consToPlIterator(Cons.cons(propositions000, Stella.NIL)));
                    }
                  }
                  else if (testValue000 == Logic.SGT_STELLA_CONS) {
                    { Cons propositions000 = ((Cons)(propositions));

                      return (PLI.consToPlIterator(propositions000));
                    }
                  }
                  else {
                    { OutputStringStream stream001 = OutputStringStream.newOutputStringStream();

                      { Object old$PrintreadablyP$001 = Stella.$PRINTREADABLYp$.get();

                        try {
                          Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
                          stream001.nativeStream.println("ERROR: Formula is not a sentence: `" + sentence + "'.");
                          Logic.helpSignalPropositionError(stream001, Logic.KWD_ERROR);

                        } finally {
                          Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$001);
                        }
                      }
                      throw ((PropositionError)(PropositionError.newPropositionError(stream001.theStringReader()).fillInStackTrace()));
                    }
                  }
                }
              }
            }

          } finally {
            Stella.$CONTEXT$.set(old$Context$000);
            Stella.$MODULE$.set(old$Module$000);
          }
        }
      }
    }
  }